diff options
author | fieldOfView <aldo@fieldofview.com> | 2019-01-18 14:12:36 +0300 |
---|---|---|
committer | fieldOfView <aldo@fieldofview.com> | 2019-01-18 14:12:36 +0300 |
commit | 056655e58424998d2227be5bc22aa0b51bbacd55 (patch) | |
tree | 862d206c1016761a84ae47540031640d3a33c57e | |
parent | e66875865ff81ee9f32b92e4d1ece33ff13bb8fd (diff) | |
parent | a51289d7ceed23a996468d8c7d397c17015a8238 (diff) |
Merge branch 'master' into feature_curaversion_appname
# Conflicts:
# cura/CuraApplication.py
1147 files changed, 61996 insertions, 12408 deletions
diff --git a/.gitignore b/.gitignore index 0a66b6eb33..60b59e6829 100644 --- a/.gitignore +++ b/.gitignore @@ -42,7 +42,6 @@ plugins/cura-siemensnx-plugin plugins/CuraBlenderPlugin plugins/CuraCloudPlugin plugins/CuraDrivePlugin -plugins/CuraDrive plugins/CuraLiveScriptingPlugin plugins/CuraOpenSCADPlugin plugins/CuraPrintProfileCreator diff --git a/Jenkinsfile b/Jenkinsfile index f9a3a9864a..a345ebbd05 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -38,20 +38,9 @@ parallel_nodes(['linux && cura', 'windows && cura']) { if (isUnix()) { - // For Linux to show everything - def branch = env.BRANCH_NAME - if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) - { - branch = "master" - } - def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}") - + // For Linux try { - sh """ - cd .. - export PYTHONPATH=.:"${uranium_dir}" - ${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/pytest -x --verbose --full-trace --capture=no ./tests - """ + sh 'make CTEST_OUTPUT_ON_FAILURE=TRUE test' } catch(e) { currentBuild.result = "UNSTABLE" @@ -70,34 +59,6 @@ parallel_nodes(['linux && cura', 'windows && cura']) } } } - - stage('Code Style') - { - if (isUnix()) - { - // For Linux to show everything. - // CMake also runs this test, but if it fails then the test just shows "failed" without details of what exactly failed. - def branch = env.BRANCH_NAME - if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) - { - branch = "master" - } - def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}") - - try - { - sh """ - cd .. - export PYTHONPATH=.:"${uranium_dir}" - ${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/python3 run_mypy.py - """ - } - catch(e) - { - currentBuild.result = "UNSTABLE" - } - } - } } } @@ -20,8 +20,9 @@ Dependencies ------------ * [Uranium](https://github.com/Ultimaker/Uranium) Cura is built on top of the Uranium framework. * [CuraEngine](https://github.com/Ultimaker/CuraEngine) This will be needed at runtime to perform the actual slicing. +* [fdm_materials](https://github.com/Ultimaker/fdm_materials) Required to load a printer that has swappable material profiles. * [PySerial](https://github.com/pyserial/pyserial) Only required for USB printing support. -* [python-zeroconf](https://github.com/jstasiak/python-zeroconf) Only required to detect mDNS-enabled printers +* [python-zeroconf](https://github.com/jstasiak/python-zeroconf) Only required to detect mDNS-enabled printers. Build scripts ------------- diff --git a/cmake/CuraTests.cmake b/cmake/CuraTests.cmake index f2ee92d65b..b6d04de036 100644 --- a/cmake/CuraTests.cmake +++ b/cmake/CuraTests.cmake @@ -6,6 +6,8 @@ include(CMakeParseArguments) find_package(PythonInterp 3.5.0 REQUIRED) +add_custom_target(test-verbose COMMAND ${CMAKE_CTEST_COMMAND} --verbose) + function(cura_add_test) set(_single_args NAME DIRECTORY PYTHONPATH) cmake_parse_arguments("" "" "${_single_args}" "" ${ARGN}) diff --git a/cura.desktop.in b/cura.desktop.in index fbe8b30fed..b0195015a5 100644 --- a/cura.desktop.in +++ b/cura.desktop.in @@ -13,6 +13,6 @@ TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura Icon=cura-icon Terminal=false Type=Application -MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml; +MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml;text/x-gcode; Categories=Graphics; Keywords=3D;Printing;Slicer; diff --git a/cura.sharedmimeinfo b/cura.sharedmimeinfo index 23d38795eb..ed9099d425 100644 --- a/cura.sharedmimeinfo +++ b/cura.sharedmimeinfo @@ -19,4 +19,12 @@ <glob-deleteall/> <glob pattern="*.obj"/> </mime-type> + <mime-type type="text/x-gcode"> + <sub-class-of type="text/plain"/> + <comment>Gcode file</comment> + <icon name="unknown"/> + <glob-deleteall/> + <glob pattern="*.gcode"/> + <glob pattern="*.g"/> + </mime-type> </mime-info>
\ No newline at end of file diff --git a/cura/API/Account.py b/cura/API/Account.py index 397e220478..a04f97ef1c 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -6,6 +6,7 @@ from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty from UM.i18n import i18nCatalog from UM.Message import Message +from cura import UltimakerCloudAuthentication from cura.OAuth2.AuthorizationService import AuthorizationService from cura.OAuth2.Models import OAuth2Settings @@ -37,15 +38,16 @@ class Account(QObject): self._logged_in = False self._callback_port = 32118 - self._oauth_root = "https://account.ultimaker.com" - self._cloud_api_root = "https://api.ultimaker.com" + self._oauth_root = UltimakerCloudAuthentication.CuraCloudAccountAPIRoot self._oauth_settings = OAuth2Settings( OAUTH_SERVER_URL= self._oauth_root, CALLBACK_PORT=self._callback_port, CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port), - CLIENT_ID="um---------------ultimaker_cura_drive_plugin", - CLIENT_SCOPES="account.user.read drive.backup.read drive.backup.write packages.download packages.rating.read packages.rating.write", + CLIENT_ID="um----------------------------ultimaker_cura", + CLIENT_SCOPES="account.user.read drive.backup.read drive.backup.write packages.download " + "packages.rating.read packages.rating.write connect.cluster.read connect.cluster.write " + "cura.printjob.read cura.printjob.write cura.mesh.read cura.mesh.write", AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data", AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(self._oauth_root), AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root) @@ -60,6 +62,11 @@ class Account(QObject): self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged) self._authorization_service.loadAuthDataFromPreferences() + ## Returns a boolean indicating whether the given authentication is applied against staging or not. + @property + def is_staging(self) -> bool: + return "staging" in self._oauth_root + @pyqtProperty(bool, notify=loginStateChanged) def isLoggedIn(self) -> bool: return self._logged_in diff --git a/cura/API/Backups.py b/cura/API/Backups.py index 8e5cd7b83a..ef74e74be0 100644 --- a/cura/API/Backups.py +++ b/cura/API/Backups.py @@ -1,6 +1,6 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Tuple, Optional, TYPE_CHECKING +from typing import Tuple, Optional, TYPE_CHECKING, Dict, Any from cura.Backups.BackupsManager import BackupsManager @@ -24,12 +24,12 @@ class Backups: ## Create a new back-up using the BackupsManager. # \return Tuple containing a ZIP file with the back-up data and a dict # with metadata about the back-up. - def createBackup(self) -> Tuple[Optional[bytes], Optional[dict]]: + def createBackup(self) -> Tuple[Optional[bytes], Optional[Dict[str, Any]]]: return self.manager.createBackup() ## Restore a back-up using the BackupsManager. # \param zip_file A ZIP file containing the actual back-up data. # \param meta_data Some metadata needed for restoring a back-up, like the # Cura version number. - def restoreBackup(self, zip_file: bytes, meta_data: dict) -> None: + def restoreBackup(self, zip_file: bytes, meta_data: Dict[str, Any]) -> None: return self.manager.restoreBackup(zip_file, meta_data) diff --git a/cura/ApplicationMetadata.py b/cura/ApplicationMetadata.py new file mode 100644 index 0000000000..a38466a715 --- /dev/null +++ b/cura/ApplicationMetadata.py @@ -0,0 +1,50 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +# --------- +# Genearl constants used in Cura +# --------- +DEFAUKT_CURA_APP_NAME = "cura" +DEFAULT_CURA_DISPLAY_NAME = "Ultimaker Cura" +DEFAULT_CURA_VERSION = "master" +DEFAULT_CURA_BUILD_TYPE = "" +DEFAULT_CURA_DEBUG_MODE = False +DEFAULT_CURA_SDK_VERSION = "6.0.0" + +try: + from cura.CuraVersion import CuraAppName # type: ignore + if CuraAppName == "": + CuraAppName = DEFAULT_CURA_APP_NAME +except ImportError: + CuraAppName = DEFAULT_CURA_APP_NAME + +try: + from cura.CuraVersion import CuraAppDisplayName # type: ignore + if CuraAppDisplayName == "": + CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME +except ImportError: + CuraAppDisplayName = DEFAULT_CURA_DISPLAY_NAME + +try: + from cura.CuraVersion import CuraVersion # type: ignore + if CuraVersion == "": + CuraVersion = DEFAULT_CURA_VERSION +except ImportError: + CuraVersion = DEFAULT_CURA_VERSION # [CodeStyle: Reflecting imported value] + +try: + from cura.CuraVersion import CuraBuildType # type: ignore +except ImportError: + CuraBuildType = DEFAULT_CURA_BUILD_TYPE + +try: + from cura.CuraVersion import CuraDebugMode # type: ignore +except ImportError: + CuraDebugMode = DEFAULT_CURA_DEBUG_MODE + +try: + from cura.CuraVersion import CuraSDKVersion # type: ignore + if CuraSDKVersion == "": + CuraSDKVersion = DEFAULT_CURA_SDK_VERSION +except ImportError: + CuraSDKVersion = DEFAULT_CURA_SDK_VERSION diff --git a/cura/Arranging/Arrange.py b/cura/Arranging/Arrange.py index 5657ee991a..32796005c8 100644 --- a/cura/Arranging/Arrange.py +++ b/cura/Arranging/Arrange.py @@ -66,6 +66,11 @@ class Arrange: continue vertices = vertices.getMinkowskiHull(Polygon.approximatedCircle(min_offset)) points = copy.deepcopy(vertices._points) + + # After scaling (like up to 0.1 mm) the node might not have points + if len(points) == 0: + continue + shape_arr = ShapeArray.fromPolygon(points, scale = scale) arranger.place(0, 0, shape_arr) diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py index 897d5fa979..714d6527fe 100644 --- a/cura/Backups/Backup.py +++ b/cura/Backups/Backup.py @@ -46,12 +46,13 @@ class Backup: # We copy the preferences file to the user data directory in Linux as it's in a different location there. # When restoring a backup on Linux, we move it back. - if Platform.isLinux(): + if Platform.isLinux(): #TODO: This should check for the config directory not being the same as the data directory, rather than hard-coding that to Linux systems. preferences_file_name = self._application.getApplicationName() preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name)) backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name)) - Logger.log("d", "Copying preferences file from %s to %s", preferences_file, backup_preferences_file) - shutil.copyfile(preferences_file, backup_preferences_file) + if os.path.exists(preferences_file) and (not os.path.exists(backup_preferences_file) or not os.path.samefile(preferences_file, backup_preferences_file)): + Logger.log("d", "Copying preferences file from %s to %s", preferences_file, backup_preferences_file) + shutil.copyfile(preferences_file, backup_preferences_file) # Create an empty buffer and write the archive to it. buffer = io.BytesIO() diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 547c3dae71..aa1f170707 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -83,7 +83,14 @@ class BuildVolume(SceneNode): " with printed models."), title = catalog.i18nc("@info:title", "Build Volume")) self._global_container_stack = None + + self._stack_change_timer = QTimer() + self._stack_change_timer.setInterval(100) + self._stack_change_timer.setSingleShot(True) + self._stack_change_timer.timeout.connect(self._onStackChangeTimerFinished) + self._application.globalContainerStackChanged.connect(self._onStackChanged) + self._onStackChanged() self._engine_ready = False @@ -105,6 +112,8 @@ class BuildVolume(SceneNode): self._setting_change_timer.setSingleShot(True) self._setting_change_timer.timeout.connect(self._onSettingChangeTimerFinished) + + # Must be after setting _build_volume_message, apparently that is used in getMachineManager. # activeQualityChanged is always emitted after setActiveVariant, setActiveMaterial and setActiveQuality. # Therefore this works. @@ -479,6 +488,8 @@ class BuildVolume(SceneNode): maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness - self._extra_z_clearance, max_d - disallowed_area_size + bed_adhesion_size - 1) ) + self._application.getController().getScene()._maximum_bounds = scale_to_max_bounds + self.updateNodeBoundaryCheck() def getBoundingBox(self) -> AxisAlignedBox: @@ -489,7 +500,9 @@ class BuildVolume(SceneNode): def _updateRaftThickness(self): old_raft_thickness = self._raft_thickness - self._adhesion_type = self._global_container_stack.getProperty("adhesion_type", "value") + if self._global_container_stack.extruders: + # This might be called before the extruder stacks have initialised, in which case getting the adhesion_type fails + self._adhesion_type = self._global_container_stack.getProperty("adhesion_type", "value") self._raft_thickness = 0.0 if self._adhesion_type == "raft": self._raft_thickness = ( @@ -522,8 +535,11 @@ class BuildVolume(SceneNode): if extra_z != self._extra_z_clearance: self._extra_z_clearance = extra_z - ## Update the build volume visualization def _onStackChanged(self): + self._stack_change_timer.start() + + ## Update the build volume visualization + def _onStackChangeTimerFinished(self): if self._global_container_stack: self._global_container_stack.propertyChanged.disconnect(self._onSettingPropertyChanged) extruders = ExtruderManager.getInstance().getActiveExtruderStacks() diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py index 46544ca0ef..d43743bc37 100644 --- a/cura/CrashHandler.py +++ b/cura/CrashHandler.py @@ -36,18 +36,14 @@ else: except ImportError: CuraDebugMode = False # [CodeStyle: Reflecting imported value] -# List of exceptions that should be considered "fatal" and abort the program. -# These are primarily some exception types that we simply cannot really recover from -# (MemoryError and SystemError) and exceptions that indicate grave errors in the -# code that cause the Python interpreter to fail (SyntaxError, ImportError). -fatal_exception_types = [ - MemoryError, - SyntaxError, - ImportError, - SystemError, +# List of exceptions that should not be considered "fatal" and abort the program. +# These are primarily some exception types that we simply skip +skip_exception_types = [ + SystemExit, + KeyboardInterrupt, + GeneratorExit ] - class CrashHandler: crash_url = "https://stats.ultimaker.com/api/cura" @@ -70,7 +66,7 @@ class CrashHandler: # If Cura has fully started, we only show fatal errors. # If Cura has not fully started yet, we always show the early crash dialog. Otherwise, Cura will just crash # without any information. - if has_started and exception_type not in fatal_exception_types: + if has_started and exception_type in skip_exception_types: return if not has_started: @@ -387,7 +383,7 @@ class CrashHandler: Application.getInstance().callLater(self._show) def _show(self): - # When the exception is not in the fatal_exception_types list, the dialog is not created, so we don't need to show it + # When the exception is in the skip_exception_types list, the dialog is not created, so we don't need to show it if self.dialog: self.dialog.exec_() os._exit(1) diff --git a/cura/CuraActions.py b/cura/CuraActions.py index 93a18318df..91e0966fed 100644 --- a/cura/CuraActions.py +++ b/cura/CuraActions.py @@ -3,7 +3,7 @@ from PyQt5.QtCore import QObject, QUrl from PyQt5.QtGui import QDesktopServices -from typing import List, TYPE_CHECKING +from typing import List, TYPE_CHECKING, cast from UM.Event import CallFunctionEvent from UM.FlameProfiler import pyqtSlot @@ -36,12 +36,12 @@ class CuraActions(QObject): # Starting a web browser from a signal handler connected to a menu will crash on windows. # So instead, defer the call to the next run of the event loop, since that does work. # Note that weirdly enough, only signal handlers that open a web browser fail like that. - event = CallFunctionEvent(self._openUrl, [QUrl("http://ultimaker.com/en/support/software")], {}) + event = CallFunctionEvent(self._openUrl, [QUrl("https://ultimaker.com/en/resources/manuals/software")], {}) cura.CuraApplication.CuraApplication.getInstance().functionEvent(event) @pyqtSlot() def openBugReportPage(self) -> None: - event = CallFunctionEvent(self._openUrl, [QUrl("http://github.com/Ultimaker/Cura/issues")], {}) + event = CallFunctionEvent(self._openUrl, [QUrl("https://github.com/Ultimaker/Cura/issues")], {}) cura.CuraApplication.CuraApplication.getInstance().functionEvent(event) ## Reset camera position and direction to default @@ -61,8 +61,10 @@ class CuraActions(QObject): operation = GroupedOperation() for node in Selection.getAllSelectedObjects(): current_node = node - while current_node.getParent() and current_node.getParent().callDecoration("isGroup"): - current_node = current_node.getParent() + parent_node = current_node.getParent() + while parent_node and parent_node.callDecoration("isGroup"): + current_node = parent_node + parent_node = current_node.getParent() # This was formerly done with SetTransformOperation but because of # unpredictable matrix deconstruction it was possible that mirrors @@ -150,13 +152,13 @@ class CuraActions(QObject): root = cura.CuraApplication.CuraApplication.getInstance().getController().getScene().getRoot() - nodes_to_change = [] + nodes_to_change = [] # type: List[SceneNode] for node in Selection.getAllSelectedObjects(): parent_node = node # Find the parent node to change instead while parent_node.getParent() != root: - parent_node = parent_node.getParent() + parent_node = cast(SceneNode, parent_node.getParent()) - for single_node in BreadthFirstIterator(parent_node): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. + for single_node in BreadthFirstIterator(parent_node): # type: ignore #Ignore type error because iter() should get called automatically by Python syntax. nodes_to_change.append(single_node) if not nodes_to_change: diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index bfc2c8bddc..aeb26e9713 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -4,7 +4,7 @@ import os import sys import time -from typing import cast, TYPE_CHECKING, Optional, Callable +from typing import cast, TYPE_CHECKING, Optional, Callable, List import numpy @@ -51,6 +51,7 @@ from cura.Arranging.ArrangeObjectsJob import ArrangeObjectsJob from cura.Arranging.ArrangeObjectsAllBuildPlatesJob import ArrangeObjectsAllBuildPlatesJob from cura.Arranging.ShapeArray import ShapeArray from cura.MultiplyObjectsJob import MultiplyObjectsJob +from cura.GlobalStacksModel import GlobalStacksModel from cura.Scene.ConvexHullDecorator import ConvexHullDecorator from cura.Operations.SetParentOperation import SetParentOperation from cura.Scene.SliceableObjectDecorator import SliceableObjectDecorator @@ -113,8 +114,11 @@ from cura.Settings.CuraFormulaFunctions import CuraFormulaFunctions from cura.ObjectsModel import ObjectsModel +from cura.PrinterOutputDevice import PrinterOutputDevice from cura.PrinterOutput.NetworkMJPGImage import NetworkMJPGImage +from cura import ApplicationMetadata, UltimakerCloudAuthentication + from UM.FlameProfiler import pyqtSlot from UM.Decorators import override @@ -127,22 +131,12 @@ if TYPE_CHECKING: numpy.seterr(all = "ignore") -try: - from cura.CuraVersion import CuraAppName, CuraAppDisplayName, CuraVersion, CuraBuildType, CuraDebugMode, CuraSDKVersion # type: ignore -except ImportError: - CuraAppName = "cura" - CuraAppDisplayName = "Ultimaker Cura" - CuraVersion = "master" # [CodeStyle: Reflecting imported value] - CuraBuildType = "" - CuraDebugMode = False - CuraSDKVersion = "5.0.0" - class CuraApplication(QtApplication): # SettingVersion represents the set of settings available in the machine/extruder definitions. # You need to make sure that this version number needs to be increased if there is any non-backwards-compatible # changes of the settings. - SettingVersion = 5 + SettingVersion = 7 Created = False @@ -162,12 +156,12 @@ class CuraApplication(QtApplication): Q_ENUMS(ResourceTypes) def __init__(self, *args, **kwargs): - super().__init__(name = CuraAppName, - app_display_name = CuraAppDisplayName, - version = CuraVersion, - api_version = CuraSDKVersion, - buildtype = CuraBuildType, - is_debug_mode = CuraDebugMode, + super().__init__(name = ApplicationMetadata.CuraAppName, + app_display_name = ApplicationMetadata.CuraAppDisplayName, + version = ApplicationMetadata.CuraVersion, + api_version = ApplicationMetadata.CuraSDKVersion, + buildtype = ApplicationMetadata.CuraBuildType, + is_debug_mode = ApplicationMetadata.CuraDebugMode, tray_icon_name = "cura-icon-32.png", **kwargs) @@ -182,7 +176,6 @@ class CuraApplication(QtApplication): # Variables set from CLI self._files_to_open = [] self._use_single_instance = False - self._trigger_early_crash = False # For debug only self._single_instance = None @@ -207,6 +200,8 @@ class CuraApplication(QtApplication): self._container_manager = None self._object_manager = None + self._extruders_model = None + self._extruders_model_with_optional = None self._build_plate_model = None self._multi_build_plate_model = None self._setting_visibility_presets_model = None @@ -261,6 +256,14 @@ class CuraApplication(QtApplication): from cura.CuraPackageManager import CuraPackageManager self._package_manager_class = CuraPackageManager + @pyqtProperty(str, constant=True) + def ultimakerCloudApiRootUrl(self) -> str: + return UltimakerCloudAuthentication.CuraCloudAPIRoot + + @pyqtProperty(str, constant = True) + def ultimakerCloudAccountRootUrl(self) -> str: + return UltimakerCloudAuthentication.CuraCloudAccountAPIRoot + # Adds command line options to the command line parser. This should be called after the application is created and # before the pre-start. def addCommandLineOptions(self): @@ -293,7 +296,10 @@ class CuraApplication(QtApplication): sys.exit(0) self._use_single_instance = self._cli_args.single_instance - self._trigger_early_crash = self._cli_args.trigger_early_crash + # FOR TESTING ONLY + if self._cli_args.trigger_early_crash: + assert not "This crash is triggered by the trigger_early_crash command line argument." + for filename in self._cli_args.file: self._files_to_open.append(os.path.abspath(filename)) @@ -429,7 +435,8 @@ class CuraApplication(QtApplication): def startSplashWindowPhase(self) -> None: super().startSplashWindowPhase() - self.setWindowIcon(QIcon(Resources.getPath(Resources.Images, "cura-icon.png"))) + if not self.getIsHeadLess(): + self.setWindowIcon(QIcon(Resources.getPath(Resources.Images, "cura-icon.png"))) self.setRequiredPlugins([ # Misc.: @@ -440,6 +447,7 @@ class CuraApplication(QtApplication): "XmlMaterialProfile", #Cura crashes without this one. "Toolbox", #This contains the interface to enable/disable plug-ins, so if you disable it you can't enable it back. "PrepareStage", #Cura is useless without this one since you can't load models. + "PreviewStage", #This shows the list of the plugin views that are installed in Cura. "MonitorStage", #Major part of Cura's functionality. "LocalFileOutputDevice", #Major part of Cura's functionality. "LocalContainerProvider", #Cura is useless without any profiles or setting definitions. @@ -493,7 +501,8 @@ class CuraApplication(QtApplication): preferences.addPreference("cura/choice_on_profile_override", "always_ask") preferences.addPreference("cura/choice_on_open_project", "always_ask") preferences.addPreference("cura/use_multi_build_plate", False) - + preferences.addPreference("view/settings_list_height", 400) + preferences.addPreference("view/settings_visible", False) preferences.addPreference("cura/currency", "€") preferences.addPreference("cura/material_settings", "{}") @@ -632,9 +641,7 @@ class CuraApplication(QtApplication): self._message_box_callback(button, *self._message_box_callback_arguments) self._message_box_callback = None self._message_box_callback_arguments = [] - - showPrintMonitor = pyqtSignal(bool, arguments = ["show"]) - + def setSaveDataEnabled(self, enabled: bool) -> None: self._save_data_enabled = enabled @@ -660,12 +667,12 @@ class CuraApplication(QtApplication): ## Handle loading of all plugin types (and the backend explicitly) # \sa PluginRegistry - def _loadPlugins(self): + def _loadPlugins(self) -> None: self._plugin_registry.addType("profile_reader", self._addProfileReader) self._plugin_registry.addType("profile_writer", self._addProfileWriter) if Platform.isLinux(): - lib_suffixes = {"", "64", "32", "x32"} #A few common ones on different distributions. + lib_suffixes = {"", "64", "32", "x32"} # A few common ones on different distributions. else: lib_suffixes = {""} for suffix in lib_suffixes: @@ -863,6 +870,19 @@ class CuraApplication(QtApplication): return self._object_manager @pyqtSlot(result = QObject) + def getExtrudersModel(self, *args) -> "ExtrudersModel": + if self._extruders_model is None: + self._extruders_model = ExtrudersModel(self) + return self._extruders_model + + @pyqtSlot(result = QObject) + def getExtrudersModelWithOptional(self, *args) -> "ExtrudersModel": + if self._extruders_model_with_optional is None: + self._extruders_model_with_optional = ExtrudersModel(self) + self._extruders_model_with_optional.setAddOptionalExtruder(True) + return self._extruders_model_with_optional + + @pyqtSlot(result = QObject) def getMultiBuildPlateModel(self, *args) -> MultiBuildPlateModel: if self._multi_build_plate_model is None: self._multi_build_plate_model = MultiBuildPlateModel(self) @@ -936,7 +956,7 @@ class CuraApplication(QtApplication): engine.rootContext().setContextProperty("CuraApplication", self) engine.rootContext().setContextProperty("PrintInformation", self._print_information) engine.rootContext().setContextProperty("CuraActions", self._cura_actions) - engine.rootContext().setContextProperty("CuraSDKVersion", CuraSDKVersion) + engine.rootContext().setContextProperty("CuraSDKVersion", ApplicationMetadata.CuraSDKVersion) qmlRegisterUncreatableType(CuraApplication, "Cura", 1, 0, "ResourceTypes", "Just an Enum type") @@ -954,6 +974,7 @@ class CuraApplication(QtApplication): qmlRegisterType(MultiBuildPlateModel, "Cura", 1, 0, "MultiBuildPlateModel") qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer") qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") + qmlRegisterType(GlobalStacksModel, "Cura", 1, 0, "GlobalStacksModel") qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel") qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel") @@ -975,6 +996,8 @@ class CuraApplication(QtApplication): qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.getInstance) qmlRegisterType(SidebarCustomMenuItemsModel, "Cura", 1, 0, "SidebarCustomMenuItemsModel") + qmlRegisterType(PrinterOutputDevice, "Cura", 1, 0, "PrinterOutputDevice") + from cura.API import CuraAPI qmlRegisterSingletonType(CuraAPI, "Cura", 1, 1, "API", self.getCuraAPI) @@ -1085,88 +1108,6 @@ class CuraApplication(QtApplication): self._platform_activity = True if count > 0 else False self.activityChanged.emit() - # Remove all selected objects from the scene. - @pyqtSlot() - @deprecated("Moved to CuraActions", "2.6") - def deleteSelection(self): - if not self.getController().getToolsEnabled(): - return - removed_group_nodes = [] - op = GroupedOperation() - nodes = Selection.getAllSelectedObjects() - for node in nodes: - op.addOperation(RemoveSceneNodeOperation(node)) - group_node = node.getParent() - if group_node and group_node.callDecoration("isGroup") and group_node not in removed_group_nodes: - remaining_nodes_in_group = list(set(group_node.getChildren()) - set(nodes)) - if len(remaining_nodes_in_group) == 1: - removed_group_nodes.append(group_node) - op.addOperation(SetParentOperation(remaining_nodes_in_group[0], group_node.getParent())) - op.addOperation(RemoveSceneNodeOperation(group_node)) - op.push() - - ## Remove an object from the scene. - # Note that this only removes an object if it is selected. - @pyqtSlot("quint64") - @deprecated("Use deleteSelection instead", "2.6") - def deleteObject(self, object_id): - if not self.getController().getToolsEnabled(): - return - - node = self.getController().getScene().findObject(object_id) - - if not node and object_id != 0: # Workaround for tool handles overlapping the selected object - node = Selection.getSelectedObject(0) - - if node: - op = GroupedOperation() - op.addOperation(RemoveSceneNodeOperation(node)) - - group_node = node.getParent() - if group_node: - # Note that at this point the node has not yet been deleted - if len(group_node.getChildren()) <= 2 and group_node.callDecoration("isGroup"): - op.addOperation(SetParentOperation(group_node.getChildren()[0], group_node.getParent())) - op.addOperation(RemoveSceneNodeOperation(group_node)) - - op.push() - - ## Create a number of copies of existing object. - # \param object_id - # \param count number of copies - # \param min_offset minimum offset to other objects. - @pyqtSlot("quint64", int) - @deprecated("Use CuraActions::multiplySelection", "2.6") - def multiplyObject(self, object_id, count, min_offset = 8): - node = self.getController().getScene().findObject(object_id) - if not node: - node = Selection.getSelectedObject(0) - - while node.getParent() and node.getParent().callDecoration("isGroup"): - node = node.getParent() - - job = MultiplyObjectsJob([node], count, min_offset) - job.start() - return - - ## Center object on platform. - @pyqtSlot("quint64") - @deprecated("Use CuraActions::centerSelection", "2.6") - def centerObject(self, object_id): - node = self.getController().getScene().findObject(object_id) - if not node and object_id != 0: # Workaround for tool handles overlapping the selected object - node = Selection.getSelectedObject(0) - - if not node: - return - - if node.getParent() and node.getParent().callDecoration("isGroup"): - node = node.getParent() - - if node: - op = SetTransformOperation(node, Vector()) - op.push() - ## Select all nodes containing mesh data in the scene. @pyqtSlot() def selectAll(self): @@ -1246,62 +1187,75 @@ class CuraApplication(QtApplication): ## Arrange all objects. @pyqtSlot() - def arrangeObjectsToAllBuildPlates(self): - nodes = [] - for node in DepthFirstIterator(self.getController().getScene().getRoot()): + def arrangeObjectsToAllBuildPlates(self) -> None: + nodes_to_arrange = [] + for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore if not isinstance(node, SceneNode): continue + if not node.getMeshData() and not node.callDecoration("isGroup"): continue # Node that doesnt have a mesh and is not a group. - if node.getParent() and node.getParent().callDecoration("isGroup"): - continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + + parent_node = node.getParent() + if parent_node and parent_node.callDecoration("isGroup"): + continue # Grouped nodes don't need resetting as their parent (the group) is reset) + if not node.callDecoration("isSliceable") and not node.callDecoration("isGroup"): continue # i.e. node with layer data + + bounding_box = node.getBoundingBox() # Skip nodes that are too big - if node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth: - nodes.append(node) - job = ArrangeObjectsAllBuildPlatesJob(nodes) + if bounding_box is None or bounding_box.width < self._volume.getBoundingBox().width or bounding_box.depth < self._volume.getBoundingBox().depth: + nodes_to_arrange.append(node) + job = ArrangeObjectsAllBuildPlatesJob(nodes_to_arrange) job.start() self.getCuraSceneController().setActiveBuildPlate(0) # Select first build plate # Single build plate @pyqtSlot() - def arrangeAll(self): - nodes = [] + def arrangeAll(self) -> None: + nodes_to_arrange = [] active_build_plate = self.getMultiBuildPlateModel().activeBuildPlate - for node in DepthFirstIterator(self.getController().getScene().getRoot()): + for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore if not isinstance(node, SceneNode): continue + if not node.getMeshData() and not node.callDecoration("isGroup"): continue # Node that doesnt have a mesh and is not a group. - if node.getParent() and node.getParent().callDecoration("isGroup"): + + parent_node = node.getParent() + if parent_node and parent_node.callDecoration("isGroup"): continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + if not node.isSelectable(): continue # i.e. node with layer data + if not node.callDecoration("isSliceable") and not node.callDecoration("isGroup"): continue # i.e. node with layer data + if node.callDecoration("getBuildPlateNumber") == active_build_plate: # Skip nodes that are too big - if node.getBoundingBox().width < self._volume.getBoundingBox().width or node.getBoundingBox().depth < self._volume.getBoundingBox().depth: - nodes.append(node) - self.arrange(nodes, fixed_nodes = []) + bounding_box = node.getBoundingBox() + if bounding_box is None or bounding_box.width < self._volume.getBoundingBox().width or bounding_box.depth < self._volume.getBoundingBox().depth: + nodes_to_arrange.append(node) + self.arrange(nodes_to_arrange, fixed_nodes = []) ## Arrange a set of nodes given a set of fixed nodes # \param nodes nodes that we have to place # \param fixed_nodes nodes that are placed in the arranger before finding spots for nodes - def arrange(self, nodes, fixed_nodes): + def arrange(self, nodes: List[SceneNode], fixed_nodes: List[SceneNode]) -> None: min_offset = self.getBuildVolume().getEdgeDisallowedSize() + 2 # Allow for some rounding errors job = ArrangeObjectsJob(nodes, fixed_nodes, min_offset = max(min_offset, 8)) job.start() ## Reload all mesh data on the screen from file. @pyqtSlot() - def reloadAll(self): + def reloadAll(self) -> None: Logger.log("i", "Reloading all loaded mesh data.") nodes = [] has_merged_nodes = False - for node in DepthFirstIterator(self.getController().getScene().getRoot()): - if not isinstance(node, CuraSceneNode) or not node.getMeshData() : + for node in DepthFirstIterator(self.getController().getScene().getRoot()): # type: ignore + if not isinstance(node, CuraSceneNode) or not node.getMeshData(): if node.getName() == "MergedMesh": has_merged_nodes = True continue @@ -1315,7 +1269,7 @@ class CuraApplication(QtApplication): file_name = node.getMeshData().getFileName() if file_name: job = ReadMeshJob(file_name) - job._node = node + job._node = node # type: ignore job.finished.connect(self._reloadMeshFinished) if has_merged_nodes: job.finished.connect(self.updateOriginOfMergedMeshes) @@ -1324,20 +1278,8 @@ class CuraApplication(QtApplication): else: Logger.log("w", "Unable to reload data because we don't have a filename.") - - ## Get logging data of the backend engine - # \returns \type{string} Logging data - @pyqtSlot(result = str) - def getEngineLog(self): - log = "" - - for entry in self.getBackend().getLog(): - log += entry.decode() - - return log - @pyqtSlot("QStringList") - def setExpandedCategories(self, categories): + def setExpandedCategories(self, categories: List[str]) -> None: categories = list(set(categories)) categories.sort() joined = ";".join(categories) @@ -1348,7 +1290,7 @@ class CuraApplication(QtApplication): expandedCategoriesChanged = pyqtSignal() @pyqtProperty("QStringList", notify = expandedCategoriesChanged) - def expandedCategories(self): + def expandedCategories(self) -> List[str]: return self.getPreferences().getValue("cura/categories_expanded").split(";") @pyqtSlot() @@ -1398,13 +1340,12 @@ class CuraApplication(QtApplication): ## Updates origin position of all merged meshes - # \param jobNode \type{Job} empty object which passed which is required by JobQueue - def updateOriginOfMergedMeshes(self, jobNode): + def updateOriginOfMergedMeshes(self, _): group_nodes = [] for node in DepthFirstIterator(self.getController().getScene().getRoot()): if isinstance(node, CuraSceneNode) and node.getName() == "MergedMesh": - #checking by name might be not enough, the merged mesh should has "GroupDecorator" decorator + # Checking by name might be not enough, the merged mesh should has "GroupDecorator" decorator for decorator in node.getDecorators(): if isinstance(decorator, GroupDecorator): group_nodes.append(node) @@ -1448,7 +1389,7 @@ class CuraApplication(QtApplication): @pyqtSlot() - def groupSelected(self): + def groupSelected(self) -> None: # Create a group-node group_node = CuraSceneNode() group_decorator = GroupDecorator() @@ -1464,7 +1405,8 @@ class CuraApplication(QtApplication): # Remove nodes that are directly parented to another selected node from the selection so they remain parented selected_nodes = Selection.getAllSelectedObjects().copy() for node in selected_nodes: - if node.getParent() in selected_nodes and not node.getParent().callDecoration("isGroup"): + parent = node.getParent() + if parent is not None and parent in selected_nodes and not parent.callDecoration("isGroup"): Selection.remove(node) # Move selected nodes into the group-node @@ -1476,7 +1418,7 @@ class CuraApplication(QtApplication): Selection.add(group_node) @pyqtSlot() - def ungroupSelected(self): + def ungroupSelected(self) -> None: selected_objects = Selection.getAllSelectedObjects().copy() for node in selected_objects: if node.callDecoration("isGroup"): @@ -1499,7 +1441,7 @@ class CuraApplication(QtApplication): # Note: The group removes itself from the scene once all its children have left it, # see GroupDecorator._onChildrenChanged - def _createSplashScreen(self): + def _createSplashScreen(self) -> Optional[CuraSplashScreen.CuraSplashScreen]: if self._is_headless: return None return CuraSplashScreen.CuraSplashScreen() @@ -1665,7 +1607,9 @@ class CuraApplication(QtApplication): is_non_sliceable = "." + file_extension in self._non_sliceable_extensions if is_non_sliceable: - self.callLater(lambda: self.getController().setActiveView("SimulationView")) + # Need to switch first to the preview stage and then to layer view + self.callLater(lambda: (self.getController().setActiveStage("PreviewStage"), + self.getController().setActiveView("SimulationView"))) block_slicing_decorator = BlockSlicingDecorator() node.addDecorator(block_slicing_decorator) diff --git a/cura/CuraVersion.py.in b/cura/CuraVersion.py.in index f4c02ee396..1a500df248 100644 --- a/cura/CuraVersion.py.in +++ b/cura/CuraVersion.py.in @@ -9,3 +9,4 @@ CuraDebugMode = True if "@_cura_debugmode@" == "ON" else False CuraSDKVersion = "@CURA_SDK_VERSION@" CuraCloudAPIRoot = "@CURA_CLOUD_API_ROOT@" CuraCloudAPIVersion = "@CURA_CLOUD_API_VERSION@" +CuraCloudAccountAPIRoot = "@CURA_CLOUD_ACCOUNT_API_ROOT@" diff --git a/cura/CuraView.py b/cura/CuraView.py new file mode 100644 index 0000000000..978c651b43 --- /dev/null +++ b/cura/CuraView.py @@ -0,0 +1,24 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from PyQt5.QtCore import pyqtProperty, QUrl + +from UM.View.View import View + + +# Since Cura has a few pre-defined "space claims" for the locations of certain components, we've provided some structure +# to indicate this. +# MainComponent works in the same way the MainComponent of a stage. +# the stageMenuComponent returns an item that should be used somehwere in the stage menu. It's up to the active stage +# to actually do something with this. +class CuraView(View): + def __init__(self, parent = None) -> None: + super().__init__(parent) + + @pyqtProperty(QUrl, constant = True) + def mainComponent(self) -> QUrl: + return self.getDisplayComponent("main") + + @pyqtProperty(QUrl, constant = True) + def stageMenuComponent(self) -> QUrl: + return self.getDisplayComponent("menu")
\ No newline at end of file diff --git a/cura/GlobalStacksModel.py b/cura/GlobalStacksModel.py new file mode 100644 index 0000000000..289a03d1c4 --- /dev/null +++ b/cura/GlobalStacksModel.py @@ -0,0 +1,63 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from UM.Qt.ListModel import ListModel + +from PyQt5.QtCore import pyqtProperty, Qt, pyqtSignal + +from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Settings.ContainerStack import ContainerStack + +from cura.PrinterOutputDevice import ConnectionType + +from cura.Settings.GlobalStack import GlobalStack + + +class GlobalStacksModel(ListModel): + NameRole = Qt.UserRole + 1 + IdRole = Qt.UserRole + 2 + HasRemoteConnectionRole = Qt.UserRole + 3 + ConnectionTypeRole = Qt.UserRole + 4 + MetaDataRole = Qt.UserRole + 5 + + def __init__(self, parent = None): + super().__init__(parent) + self.addRoleName(self.NameRole, "name") + self.addRoleName(self.IdRole, "id") + self.addRoleName(self.HasRemoteConnectionRole, "hasRemoteConnection") + self.addRoleName(self.ConnectionTypeRole, "connectionType") + self.addRoleName(self.MetaDataRole, "metadata") + self._container_stacks = [] + + # Listen to changes + ContainerRegistry.getInstance().containerAdded.connect(self._onContainerChanged) + ContainerRegistry.getInstance().containerMetaDataChanged.connect(self._onContainerChanged) + ContainerRegistry.getInstance().containerRemoved.connect(self._onContainerChanged) + self._filter_dict = {} + self._update() + + ## Handler for container added/removed events from registry + def _onContainerChanged(self, container): + # We only need to update when the added / removed container GlobalStack + if isinstance(container, GlobalStack): + self._update() + + def _update(self) -> None: + items = [] + + container_stacks = ContainerRegistry.getInstance().findContainerStacks(type = "machine") + + for container_stack in container_stacks: + connection_type = int(container_stack.getMetaDataEntry("connection_type", ConnectionType.NotConnected.value)) + has_remote_connection = connection_type in [ConnectionType.NetworkConnection.value, ConnectionType.CloudConnection.value] + if container_stack.getMetaDataEntry("hidden", False) in ["True", True]: + continue + + # TODO: Remove reference to connect group name. + items.append({"name": container_stack.getMetaDataEntry("connect_group_name", container_stack.getName()), + "id": container_stack.getId(), + "hasRemoteConnection": has_remote_connection, + "connectionType": connection_type, + "metadata": container_stack.getMetaData().copy()}) + items.sort(key=lambda i: not i["hasRemoteConnection"]) + self.setItems(items) diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index f33934de0c..1941a558ba 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.py @@ -5,6 +5,8 @@ from UM.Application import Application from typing import Any import numpy +from UM.Logger import Logger + class LayerPolygon: NoneType = 0 @@ -18,7 +20,8 @@ class LayerPolygon: MoveCombingType = 8 MoveRetractionType = 9 SupportInterfaceType = 10 - __number_of_types = 11 + PrimeTower = 11 + __number_of_types = 12 __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, numpy.arange(__number_of_types) == MoveCombingType), numpy.arange(__number_of_types) == MoveRetractionType) @@ -33,7 +36,8 @@ class LayerPolygon: self._extruder = extruder self._types = line_types for i in range(len(self._types)): - if self._types[i] >= self.__number_of_types: #Got faulty line data from the engine. + if self._types[i] >= self.__number_of_types: # Got faulty line data from the engine. + Logger.log("w", "Found an unknown line type: %s", i) self._types[i] = self.NoneType self._data = data self._line_widths = line_widths @@ -236,7 +240,8 @@ class LayerPolygon: theme.getColor("layerview_support_infill").getRgbF(), # SupportInfillType theme.getColor("layerview_move_combing").getRgbF(), # MoveCombingType theme.getColor("layerview_move_retraction").getRgbF(), # MoveRetractionType - theme.getColor("layerview_support_interface").getRgbF() # SupportInterfaceType + theme.getColor("layerview_support_interface").getRgbF(), # SupportInterfaceType + theme.getColor("layerview_prime_tower").getRgbF() ]) return cls.__color_map diff --git a/cura/Machines/MachineErrorChecker.py b/cura/Machines/MachineErrorChecker.py index 06f064315b..fb11123af6 100644 --- a/cura/Machines/MachineErrorChecker.py +++ b/cura/Machines/MachineErrorChecker.py @@ -64,21 +64,21 @@ class MachineErrorChecker(QObject): def _onMachineChanged(self) -> None: if self._global_stack: - self._global_stack.propertyChanged.disconnect(self.startErrorCheck) + self._global_stack.propertyChanged.disconnect(self.startErrorCheckPropertyChanged) self._global_stack.containersChanged.disconnect(self.startErrorCheck) for extruder in self._global_stack.extruders.values(): - extruder.propertyChanged.disconnect(self.startErrorCheck) + extruder.propertyChanged.disconnect(self.startErrorCheckPropertyChanged) extruder.containersChanged.disconnect(self.startErrorCheck) self._global_stack = self._machine_manager.activeMachine if self._global_stack: - self._global_stack.propertyChanged.connect(self.startErrorCheck) + self._global_stack.propertyChanged.connect(self.startErrorCheckPropertyChanged) self._global_stack.containersChanged.connect(self.startErrorCheck) for extruder in self._global_stack.extruders.values(): - extruder.propertyChanged.connect(self.startErrorCheck) + extruder.propertyChanged.connect(self.startErrorCheckPropertyChanged) extruder.containersChanged.connect(self.startErrorCheck) hasErrorUpdated = pyqtSignal() @@ -93,6 +93,13 @@ class MachineErrorChecker(QObject): def needToWaitForResult(self) -> bool: return self._need_to_check or self._check_in_progress + # Start the error check for property changed + # this is seperate from the startErrorCheck because it ignores a number property types + def startErrorCheckPropertyChanged(self, key, property_name): + if property_name != "value": + return + self.startErrorCheck() + # Starts the error check timer to schedule a new error check. def startErrorCheck(self, *args) -> None: if not self._check_in_progress: diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index aee96f3153..160508e7a6 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -302,6 +302,10 @@ class MaterialManager(QObject): def getMaterialGroupListByGUID(self, guid: str) -> Optional[List[MaterialGroup]]: return self._guid_material_groups_map.get(guid) + # Returns a dict of all material groups organized by root_material_id. + def getAllMaterialGroups(self) -> Dict[str, "MaterialGroup"]: + return self._material_group_map + # # Return a dict with all root material IDs (k) and ContainerNodes (v) that's suitable for the given setup. # @@ -679,7 +683,11 @@ class MaterialManager(QObject): @pyqtSlot(str) def removeFavorite(self, root_material_id: str) -> None: - self._favorites.remove(root_material_id) + try: + self._favorites.remove(root_material_id) + except KeyError: + Logger.log("w", "Could not delete material %s from favorites as it was already deleted", root_material_id) + return self.materialsUpdated.emit() # Ensure all settings are saved. @@ -688,4 +696,4 @@ class MaterialManager(QObject): @pyqtSlot() def getFavorites(self): - return self._favorites
\ No newline at end of file + return self._favorites diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index ef2e760330..212e4fcf1e 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -1,5 +1,6 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional, Dict, Set from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty from UM.Qt.ListModel import ListModel @@ -9,6 +10,9 @@ from UM.Qt.ListModel import ListModel # Those 2 models are used by the material drop down menu to show generic materials and branded materials separately. # The extruder position defined here is being used to bound a menu to the correct extruder. This is used in the top # bar menu "Settings" -> "Extruder nr" -> "Material" -> this menu +from cura.Machines.MaterialNode import MaterialNode + + class BaseMaterialsModel(ListModel): extruderPositionChanged = pyqtSignal() @@ -54,8 +58,8 @@ class BaseMaterialsModel(ListModel): self._extruder_position = 0 self._extruder_stack = None - self._available_materials = None - self._favorite_ids = None + self._available_materials = None # type: Optional[Dict[str, MaterialNode]] + self._favorite_ids = set() # type: Set[str] def _updateExtruderStack(self): global_stack = self._machine_manager.activeMachine @@ -102,7 +106,6 @@ class BaseMaterialsModel(ListModel): return False extruder_stack = global_stack.extruders[extruder_position] - self._available_materials = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack) if self._available_materials is None: return False diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py index 18fe310c44..98a2a01597 100644 --- a/cura/Machines/Models/FavoriteMaterialsModel.py +++ b/cura/Machines/Models/FavoriteMaterialsModel.py @@ -1,20 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from UM.Logger import Logger from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel +## Model that shows the list of favorite materials. class FavoriteMaterialsModel(BaseMaterialsModel): - def __init__(self, parent = None): super().__init__(parent) self._update() def _update(self): - - # Perform standard check and reset if the check fails if not self._canUpdate(): - self.setItems([]) return # Get updated list of favorites diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index c276b865bf..8f41dd6a70 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -11,10 +11,7 @@ class GenericMaterialsModel(BaseMaterialsModel): self._update() def _update(self): - - # Perform standard check and reset if the check fails if not self._canUpdate(): - self.setItems([]) return # Get updated list of favorites diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py index 458e4d9b47..ac82cf6670 100644 --- a/cura/Machines/Models/MaterialBrandsModel.py +++ b/cura/Machines/Models/MaterialBrandsModel.py @@ -28,12 +28,8 @@ class MaterialBrandsModel(BaseMaterialsModel): self._update() def _update(self): - - # Perform standard check and reset if the check fails if not self._canUpdate(): - self.setItems([]) return - # Get updated list of favorites self._favorite_ids = self._material_manager.getFavorites() diff --git a/cura/Machines/Models/NozzleModel.py b/cura/Machines/Models/NozzleModel.py index 9d97106d6b..785ff5b9b9 100644 --- a/cura/Machines/Models/NozzleModel.py +++ b/cura/Machines/Models/NozzleModel.py @@ -33,8 +33,6 @@ class NozzleModel(ListModel): def _update(self): Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) - self.items.clear() - global_stack = self._machine_manager.activeMachine if global_stack is None: self.setItems([]) diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py index a01cc1194f..7ccc886bfe 100644 --- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py +++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QTimer from UM.Application import Application from UM.Logger import Logger @@ -21,6 +21,7 @@ class QualityProfilesDropDownMenuModel(ListModel): AvailableRole = Qt.UserRole + 5 QualityGroupRole = Qt.UserRole + 6 QualityChangesGroupRole = Qt.UserRole + 7 + IsExperimentalRole = Qt.UserRole + 8 def __init__(self, parent = None): super().__init__(parent) @@ -32,20 +33,29 @@ class QualityProfilesDropDownMenuModel(ListModel): self.addRoleName(self.AvailableRole, "available") #Whether the quality profile is available in our current nozzle + material. self.addRoleName(self.QualityGroupRole, "quality_group") self.addRoleName(self.QualityChangesGroupRole, "quality_changes_group") + self.addRoleName(self.IsExperimentalRole, "is_experimental") self._application = Application.getInstance() self._machine_manager = self._application.getMachineManager() self._quality_manager = Application.getInstance().getQualityManager() - self._application.globalContainerStackChanged.connect(self._update) - self._machine_manager.activeQualityGroupChanged.connect(self._update) - self._machine_manager.extruderChanged.connect(self._update) - self._quality_manager.qualitiesUpdated.connect(self._update) + self._application.globalContainerStackChanged.connect(self._onChange) + self._machine_manager.activeQualityGroupChanged.connect(self._onChange) + self._machine_manager.extruderChanged.connect(self._onChange) + self._quality_manager.qualitiesUpdated.connect(self._onChange) self._layer_height_unit = "" # This is cached + self._update_timer = QTimer() # type: QTimer + self._update_timer.setInterval(100) + self._update_timer.setSingleShot(True) + self._update_timer.timeout.connect(self._update) + self._update() + def _onChange(self) -> None: + self._update_timer.start() + def _update(self): Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) @@ -74,7 +84,8 @@ class QualityProfilesDropDownMenuModel(ListModel): "layer_height": layer_height, "layer_height_unit": self._layer_height_unit, "available": quality_group.is_available, - "quality_group": quality_group} + "quality_group": quality_group, + "is_experimental": quality_group.is_experimental} item_list.append(item) diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py index 79131521f2..baa8e3ed29 100644 --- a/cura/Machines/Models/SettingVisibilityPresetsModel.py +++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py @@ -6,6 +6,7 @@ from typing import Optional, List from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject from UM.Logger import Logger +from UM.Preferences import Preferences from UM.Resources import Resources from UM.i18n import i18nCatalog @@ -18,14 +19,20 @@ class SettingVisibilityPresetsModel(QObject): onItemsChanged = pyqtSignal() activePresetChanged = pyqtSignal() - def __init__(self, preferences, parent = None): + def __init__(self, preferences: Preferences, parent = None) -> None: super().__init__(parent) self._items = [] # type: List[SettingVisibilityPreset] + self._custom_preset = SettingVisibilityPreset(preset_id = "custom", name = "Custom selection", weight = -100) + self._populate() basic_item = self.getVisibilityPresetById("basic") - basic_visibile_settings = ";".join(basic_item.settings) + if basic_item is not None: + basic_visibile_settings = ";".join(basic_item.settings) + else: + Logger.log("w", "Unable to find the basic visiblity preset.") + basic_visibile_settings = "" self._preferences = preferences @@ -42,7 +49,8 @@ class SettingVisibilityPresetsModel(QObject): visible_settings = self._preferences.getValue("general/visible_settings") if not visible_settings: - self._preferences.setValue("general/visible_settings", ";".join(self._active_preset_item.settings)) + new_visible_settings = self._active_preset_item.settings if self._active_preset_item is not None else [] + self._preferences.setValue("general/visible_settings", ";".join(new_visible_settings)) else: self._onPreferencesChanged("general/visible_settings") @@ -59,9 +67,7 @@ class SettingVisibilityPresetsModel(QObject): def _populate(self) -> None: from cura.CuraApplication import CuraApplication items = [] # type: List[SettingVisibilityPreset] - - custom_preset = SettingVisibilityPreset(preset_id="custom", name ="Custom selection", weight = -100) - items.append(custom_preset) + items.append(self._custom_preset) for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.SettingVisibilityPreset): setting_visibility_preset = SettingVisibilityPreset() try: @@ -77,7 +83,7 @@ class SettingVisibilityPresetsModel(QObject): self.setItems(items) @pyqtProperty("QVariantList", notify = onItemsChanged) - def items(self): + def items(self) -> List[SettingVisibilityPreset]: return self._items def setItems(self, items: List[SettingVisibilityPreset]) -> None: @@ -87,7 +93,7 @@ class SettingVisibilityPresetsModel(QObject): @pyqtSlot(str) def setActivePreset(self, preset_id: str) -> None: - if preset_id == self._active_preset_item.presetId: + if self._active_preset_item is not None and preset_id == self._active_preset_item.presetId: Logger.log("d", "Same setting visibility preset [%s] selected, do nothing.", preset_id) return @@ -96,7 +102,7 @@ class SettingVisibilityPresetsModel(QObject): Logger.log("w", "Tried to set active preset to unknown id [%s]", preset_id) return - need_to_save_to_custom = self._active_preset_item.presetId == "custom" and preset_id != "custom" + need_to_save_to_custom = self._active_preset_item is None or (self._active_preset_item.presetId == "custom" and preset_id != "custom") if need_to_save_to_custom: # Save the current visibility settings to custom current_visibility_string = self._preferences.getValue("general/visible_settings") @@ -117,7 +123,9 @@ class SettingVisibilityPresetsModel(QObject): @pyqtProperty(str, notify = activePresetChanged) def activePreset(self) -> str: - return self._active_preset_item.presetId + if self._active_preset_item is not None: + return self._active_preset_item.presetId + return "" def _onPreferencesChanged(self, name: str) -> None: if name != "general/visible_settings": @@ -149,7 +157,12 @@ class SettingVisibilityPresetsModel(QObject): else: item_to_set = matching_preset_item + # If we didn't find a matching preset, fallback to custom. + if item_to_set is None: + item_to_set = self._custom_preset + if self._active_preset_item is None or self._active_preset_item.presetId != item_to_set.presetId: self._active_preset_item = item_to_set - self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item.presetId) + if self._active_preset_item is not None: + self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item.presetId) self.activePresetChanged.emit() diff --git a/cura/Machines/QualityGroup.py b/cura/Machines/QualityGroup.py index 535ba453f8..f5bcbb0de8 100644 --- a/cura/Machines/QualityGroup.py +++ b/cura/Machines/QualityGroup.py @@ -4,6 +4,9 @@ from typing import Dict, Optional, List, Set from PyQt5.QtCore import QObject, pyqtSlot + +from UM.Util import parseBool + from cura.Machines.ContainerNode import ContainerNode @@ -29,6 +32,7 @@ class QualityGroup(QObject): self.nodes_for_extruders = {} # type: Dict[int, ContainerNode] self.quality_type = quality_type self.is_available = False + self.is_experimental = False @pyqtSlot(result = str) def getName(self) -> str: @@ -51,3 +55,17 @@ class QualityGroup(QObject): for extruder_node in self.nodes_for_extruders.values(): result.append(extruder_node) return result + + def setGlobalNode(self, node: "ContainerNode") -> None: + self.node_for_global = node + + # Update is_experimental flag + is_experimental = parseBool(node.getMetaDataEntry("is_experimental", False)) + self.is_experimental |= is_experimental + + def setExtruderNode(self, position: int, node: "ContainerNode") -> None: + self.nodes_for_extruders[position] = node + + # Update is_experimental flag + is_experimental = parseBool(node.getMetaDataEntry("is_experimental", False)) + self.is_experimental |= is_experimental diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index fc8262de52..34cc9ce4b2 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -16,7 +16,7 @@ from .QualityGroup import QualityGroup from .QualityNode import QualityNode if TYPE_CHECKING: - from UM.Settings.DefinitionContainer import DefinitionContainer + from UM.Settings.Interfaces import DefinitionContainerInterface from cura.Settings.GlobalStack import GlobalStack from .QualityChangesGroup import QualityChangesGroup from cura.CuraApplication import CuraApplication @@ -235,7 +235,7 @@ class QualityManager(QObject): for quality_type, quality_node in node.quality_type_map.items(): quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) - quality_group.node_for_global = quality_node + quality_group.setGlobalNode(quality_node) quality_group_dict[quality_type] = quality_group break @@ -337,7 +337,7 @@ class QualityManager(QObject): quality_group = quality_group_dict[quality_type] if position not in quality_group.nodes_for_extruders: - quality_group.nodes_for_extruders[position] = quality_node + quality_group.setExtruderNode(position, quality_node) # If the machine has its own specific qualities, for extruders, it should skip the global qualities # and use the material/variant specific qualities. @@ -367,7 +367,7 @@ class QualityManager(QObject): if node and node.quality_type_map: for quality_type, quality_node in node.quality_type_map.items(): quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type) - quality_group.node_for_global = quality_node + quality_group.setGlobalNode(quality_node) quality_group_dict[quality_type] = quality_group break @@ -538,7 +538,7 @@ class QualityManager(QObject): # Example: for an Ultimaker 3 Extended, it has "quality_definition = ultimaker3". This means Ultimaker 3 Extended # shares the same set of qualities profiles as Ultimaker 3. # -def getMachineDefinitionIDForQualitySearch(machine_definition: "DefinitionContainer", +def getMachineDefinitionIDForQualitySearch(machine_definition: "DefinitionContainerInterface", default_definition_id: str = "fdmprinter") -> str: machine_definition_id = default_definition_id if parseBool(machine_definition.getMetaDataEntry("has_machine_quality", False)): diff --git a/cura/Machines/VariantManager.py b/cura/Machines/VariantManager.py index f6feb70e09..eaaa9fc5f0 100644 --- a/cura/Machines/VariantManager.py +++ b/cura/Machines/VariantManager.py @@ -107,7 +107,7 @@ class VariantManager: break return variant_node - return self._machine_to_variant_dict_map[machine_definition_id].get(variant_type, {}).get(variant_name) + return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {}).get(variant_name) def getVariantNodes(self, machine: "GlobalStack", variant_type: "VariantType") -> Dict[str, ContainerNode]: machine_definition_id = machine.definition.getId() diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py index 3cbf795952..e71bbf6668 100644 --- a/cura/MultiplyObjectsJob.py +++ b/cura/MultiplyObjectsJob.py @@ -25,7 +25,7 @@ class MultiplyObjectsJob(Job): def run(self): status_message = Message(i18n_catalog.i18nc("@info:status", "Multiplying and placing objects"), lifetime=0, - dismissable=False, progress=0, title = i18n_catalog.i18nc("@info:title", "Placing Object")) + dismissable=False, progress=0, title = i18n_catalog.i18nc("@info:title", "Placing Objects")) status_message.show() scene = Application.getInstance().getController().getScene() diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py index f75ad9c9f9..762d0db069 100644 --- a/cura/OAuth2/AuthorizationHelpers.py +++ b/cura/OAuth2/AuthorizationHelpers.py @@ -81,9 +81,14 @@ class AuthorizationHelpers: # \param access_token: The encoded JWT token. # \return: Dict containing some profile data. def parseJWT(self, access_token: str) -> Optional["UserProfile"]: - token_request = requests.get("{}/check-token".format(self._settings.OAUTH_SERVER_URL), headers = { - "Authorization": "Bearer {}".format(access_token) - }) + try: + token_request = requests.get("{}/check-token".format(self._settings.OAUTH_SERVER_URL), headers = { + "Authorization": "Bearer {}".format(access_token) + }) + except ConnectionError: + # Connection was suddenly dropped. Nothing we can do about that. + Logger.logException("e", "Something failed while attempting to parse the JWT token") + return None if token_request.status_code not in (200, 201): Logger.log("w", "Could not retrieve token data from auth server: %s", token_request.text) return None diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py index 4355891139..1e98dc9cee 100644 --- a/cura/OAuth2/AuthorizationService.py +++ b/cura/OAuth2/AuthorizationService.py @@ -52,8 +52,11 @@ class AuthorizationService: if not self._user_profile: # If no user profile was stored locally, we try to get it from JWT. self._user_profile = self._parseJWT() - if not self._user_profile: + + if not self._user_profile and self._auth_data: # If there is still no user profile from the JWT, we have to log in again. + Logger.log("w", "The user profile could not be loaded. The user must log in again!") + self.deleteAuthData() return None return self._user_profile @@ -83,9 +86,11 @@ class AuthorizationService: if not self.getUserProfile(): # We check if we can get the user profile. # If we can't get it, that means the access token (JWT) was invalid or expired. + Logger.log("w", "Unable to get the user profile.") return None if self._auth_data is None: + Logger.log("d", "No auth data to retrieve the access_token from") return None return self._auth_data.access_token diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py index 83fc22554f..0515e789e6 100644 --- a/cura/OAuth2/Models.py +++ b/cura/OAuth2/Models.py @@ -1,4 +1,6 @@ # Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + from typing import Optional diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index e11f70a54c..e863689e21 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -14,8 +14,7 @@ from UM.Logger import Logger from UM.Qt.Duration import Duration from UM.Scene.SceneNode import SceneNode from UM.i18n import i18nCatalog -from UM.MimeTypeDatabase import MimeTypeDatabase - +from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError from typing import TYPE_CHECKING @@ -361,7 +360,7 @@ class PrintInformation(QObject): try: mime_type = MimeTypeDatabase.getMimeTypeForFile(name) data = mime_type.stripExtension(name) - except: + except MimeTypeNotFoundError: Logger.log("w", "Unsupported Mime Type Database file extension %s", name) if data is not None and check_name is not None: @@ -395,28 +394,14 @@ class PrintInformation(QObject): return active_machine_type_name = global_container_stack.definition.getName() - abbr_machine = "" - for word in re.findall(r"[\w']+", active_machine_type_name): - if word.lower() == "ultimaker": - abbr_machine += "UM" - elif word.isdigit(): - abbr_machine += word - else: - stripped_word = self._stripAccents(word.upper()) - # - use only the first character if the word is too long (> 3 characters) - # - use the whole word if it's not too long (<= 3 characters) - if len(stripped_word) > 3: - stripped_word = stripped_word[0] - abbr_machine += stripped_word - - self._abbr_machine = abbr_machine + self._abbr_machine = self._application.getMachineManager().getAbbreviatedMachineName(active_machine_type_name) ## Utility method that strips accents from characters (eg: â -> a) def _stripAccents(self, to_strip: str) -> str: return ''.join(char for char in unicodedata.normalize('NFD', to_strip) if unicodedata.category(char) != 'Mn') @pyqtSlot(result = "QVariantMap") - def getFeaturePrintTimes(self): + def getFeaturePrintTimes(self) -> Dict[str, Duration]: result = {} if self._active_build_plate not in self._print_times_per_feature: self._initPrintTimesPerFeature(self._active_build_plate) diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py index 89e609c913..f9d0c7e36b 100644 --- a/cura/PrinterOutput/ConfigurationModel.py +++ b/cura/PrinterOutput/ConfigurationModel.py @@ -54,7 +54,7 @@ class ConfigurationModel(QObject): for configuration in self._extruder_configurations: if configuration is None: return False - return self._printer_type is not None + return self._printer_type != "" def __str__(self): message_chunks = [] diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index 35d2ce014a..47a6caf3e5 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -4,19 +4,21 @@ from UM.FileHandler.FileHandler import FileHandler #For typing. from UM.Logger import Logger from UM.Scene.SceneNode import SceneNode #For typing. +from cura.API import Account from cura.CuraApplication import CuraApplication -from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState +from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType from PyQt5.QtNetwork import QHttpMultiPart, QHttpPart, QNetworkRequest, QNetworkAccessManager, QNetworkReply, QAuthenticator from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl, QCoreApplication from time import time -from typing import Any, Callable, Dict, List, Optional +from typing import Callable, Dict, List, Optional, Union from enum import IntEnum import os # To get the username import gzip + class AuthState(IntEnum): NotAuthenticated = 1 AuthenticationRequested = 2 @@ -28,8 +30,8 @@ class AuthState(IntEnum): class NetworkedPrinterOutputDevice(PrinterOutputDevice): authenticationStateChanged = pyqtSignal() - def __init__(self, device_id, address: str, properties: Dict[bytes, bytes], parent: QObject = None) -> None: - super().__init__(device_id = device_id, parent = parent) + def __init__(self, device_id, address: str, properties: Dict[bytes, bytes], connection_type: ConnectionType = ConnectionType.NetworkConnection, parent: QObject = None) -> None: + super().__init__(device_id = device_id, connection_type = connection_type, parent = parent) self._manager = None # type: Optional[QNetworkAccessManager] self._last_manager_create_time = None # type: Optional[float] self._recreate_network_manager_time = 30 @@ -41,7 +43,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._api_prefix = "" self._address = address self._properties = properties - self._user_agent = "%s/%s " % (CuraApplication.getInstance().getApplicationName(), CuraApplication.getInstance().getVersion()) + self._user_agent = "%s/%s " % (CuraApplication.getInstance().getApplicationName(), + CuraApplication.getInstance().getVersion()) self._onFinishedCallbacks = {} # type: Dict[str, Callable[[QNetworkReply], None]] self._authentication_state = AuthState.NotAuthenticated @@ -55,7 +58,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._gcode = [] # type: List[str] self._connection_state_before_timeout = None # type: Optional[ConnectionState] - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: raise NotImplementedError("requestWrite needs to be implemented") def setAuthenticationState(self, authentication_state: AuthState) -> None: @@ -125,7 +129,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): if self._connection_state_before_timeout is None: self._connection_state_before_timeout = self._connection_state - self.setConnectionState(ConnectionState.closed) + self.setConnectionState(ConnectionState.Closed) # We need to check if the manager needs to be re-created. If we don't, we get some issues when OSX goes to # sleep. @@ -133,7 +137,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): if self._last_manager_create_time is None or time() - self._last_manager_create_time > self._recreate_network_manager_time: self._createNetworkManager() assert(self._manager is not None) - elif self._connection_state == ConnectionState.closed: + elif self._connection_state == ConnectionState.Closed: # Go out of timeout. if self._connection_state_before_timeout is not None: # sanity check, but it should never be None here self.setConnectionState(self._connection_state_before_timeout) @@ -143,10 +147,15 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): url = QUrl("http://" + self._address + self._api_prefix + target) request = QNetworkRequest(url) if content_type is not None: - request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json") + request.setHeader(QNetworkRequest.ContentTypeHeader, content_type) request.setHeader(QNetworkRequest.UserAgentHeader, self._user_agent) return request + ## This method was only available privately before, but it was actually called from SendMaterialJob.py. + # We now have a public equivalent as well. We did not remove the private one as plugins might be using that. + def createFormPart(self, content_header: str, data: bytes, content_type: Optional[str] = None) -> QHttpPart: + return self._createFormPart(content_header, data, content_type) + def _createFormPart(self, content_header: str, data: bytes, content_type: Optional[str] = None) -> QHttpPart: part = QHttpPart() @@ -160,9 +169,15 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): part.setBody(data) return part - ## Convenience function to get the username from the OS. - # The code was copied from the getpass module, as we try to use as little dependencies as possible. + ## Convenience function to get the username, either from the cloud or from the OS. def _getUserName(self) -> str: + # check first if we are logged in with the Ultimaker Account + account = CuraApplication.getInstance().getCuraAPI().account # type: Account + if account and account.isLoggedIn: + return account.userName + + # Otherwise get the username from the US + # The code below was copied from the getpass module, as we try to use as little dependencies as possible. for name in ("LOGNAME", "USER", "LNAME", "USERNAME"): user = os.environ.get(name) if user: @@ -178,49 +193,89 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._createNetworkManager() assert (self._manager is not None) - def put(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + ## Sends a put request to the given path. + # \param url: The path after the API prefix. + # \param data: The data to be sent in the body + # \param content_type: The content type of the body data. + # \param on_finished: The function to call when the response is received. + # \param on_progress: The function to call when the progress changes. Parameters are bytes_sent / bytes_total. + def put(self, url: str, data: Union[str, bytes], content_type: Optional[str] = None, + on_finished: Optional[Callable[[QNetworkReply], None]] = None, + on_progress: Optional[Callable[[int, int], None]] = None) -> None: self._validateManager() - request = self._createEmptyRequest(target) + + request = self._createEmptyRequest(url, content_type = content_type) self._last_request_time = time() - if self._manager is not None: - reply = self._manager.put(request, data.encode()) - self._registerOnFinishedCallback(reply, on_finished) - else: - Logger.log("e", "Could not find manager.") - def delete(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + if not self._manager: + Logger.log("e", "No network manager was created to execute the PUT call with.") + return + + body = data if isinstance(data, bytes) else data.encode() # type: bytes + reply = self._manager.put(request, body) + self._registerOnFinishedCallback(reply, on_finished) + + if on_progress is not None: + reply.uploadProgress.connect(on_progress) + + ## Sends a delete request to the given path. + # \param url: The path after the API prefix. + # \param on_finished: The function to be call when the response is received. + def delete(self, url: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: self._validateManager() - request = self._createEmptyRequest(target) + + request = self._createEmptyRequest(url) self._last_request_time = time() - if self._manager is not None: - reply = self._manager.deleteResource(request) - self._registerOnFinishedCallback(reply, on_finished) - else: - Logger.log("e", "Could not find manager.") - def get(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: + if not self._manager: + Logger.log("e", "No network manager was created to execute the DELETE call with.") + return + + reply = self._manager.deleteResource(request) + self._registerOnFinishedCallback(reply, on_finished) + + ## Sends a get request to the given path. + # \param url: The path after the API prefix. + # \param on_finished: The function to be call when the response is received. + def get(self, url: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: self._validateManager() - request = self._createEmptyRequest(target) + + request = self._createEmptyRequest(url) self._last_request_time = time() - if self._manager is not None: - reply = self._manager.get(request) - self._registerOnFinishedCallback(reply, on_finished) - else: - Logger.log("e", "Could not find manager.") - def post(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: + if not self._manager: + Logger.log("e", "No network manager was created to execute the GET call with.") + return + + reply = self._manager.get(request) + self._registerOnFinishedCallback(reply, on_finished) + + ## Sends a post request to the given path. + # \param url: The path after the API prefix. + # \param data: The data to be sent in the body + # \param on_finished: The function to call when the response is received. + # \param on_progress: The function to call when the progress changes. Parameters are bytes_sent / bytes_total. + def post(self, url: str, data: Union[str, bytes], + on_finished: Optional[Callable[[QNetworkReply], None]], + on_progress: Optional[Callable[[int, int], None]] = None) -> None: self._validateManager() - request = self._createEmptyRequest(target) + + request = self._createEmptyRequest(url) self._last_request_time = time() - if self._manager is not None: - reply = self._manager.post(request, data.encode()) - if on_progress is not None: - reply.uploadProgress.connect(on_progress) - self._registerOnFinishedCallback(reply, on_finished) - else: + + if not self._manager: Logger.log("e", "Could not find manager.") + return + + body = data if isinstance(data, bytes) else data.encode() # type: bytes + reply = self._manager.post(request, body) + if on_progress is not None: + reply.uploadProgress.connect(on_progress) + self._registerOnFinishedCallback(reply, on_finished) - def postFormWithParts(self, target: str, parts: List[QHttpPart], on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> QNetworkReply: + def postFormWithParts(self, target: str, parts: List[QHttpPart], + on_finished: Optional[Callable[[QNetworkReply], None]], + on_progress: Optional[Callable[[int, int], None]] = None) -> QNetworkReply: self._validateManager() request = self._createEmptyRequest(target, content_type=None) multi_post_part = QHttpMultiPart(QHttpMultiPart.FormDataType) @@ -282,8 +337,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): self._last_response_time = time() - if self._connection_state == ConnectionState.connecting: - self.setConnectionState(ConnectionState.connected) + if self._connection_state == ConnectionState.Connecting: + self.setConnectionState(ConnectionState.Connected) callback_key = reply.url().toString() + str(reply.operation()) try: diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py index 25b168e6fd..a77ac81909 100644 --- a/cura/PrinterOutput/PrintJobOutputModel.py +++ b/cura/PrinterOutput/PrintJobOutputModel.py @@ -118,17 +118,40 @@ class PrintJobOutputModel(QObject): self.nameChanged.emit() @pyqtProperty(int, notify = timeTotalChanged) - def timeTotal(self): + def timeTotal(self) -> int: return self._time_total @pyqtProperty(int, notify = timeElapsedChanged) - def timeElapsed(self): + def timeElapsed(self) -> int: return self._time_elapsed + @pyqtProperty(int, notify = timeElapsedChanged) + def timeRemaining(self) -> int: + # Never get a negative time remaining + return max(self.timeTotal - self.timeElapsed, 0) + + @pyqtProperty(float, notify = timeElapsedChanged) + def progress(self) -> float: + time_elapsed = max(float(self.timeElapsed), 1.0) # Prevent a division by zero exception + result = time_elapsed / self.timeTotal + return min(result, 1.0) # Never get a progress past 1.0 + @pyqtProperty(str, notify=stateChanged) - def state(self): + def state(self) -> str: return self._state + @pyqtProperty(bool, notify=stateChanged) + def isActive(self) -> bool: + inactiveStates = [ + "pausing", + "paused", + "resuming", + "wait_cleanup" + ] + if self.state in inactiveStates and self.timeRemaining > 0: + return False + return True + def updateTimeTotal(self, new_time_total): if self._time_total != new_time_total: self._time_total = new_time_total diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index 969aa3c460..dbdf8c986c 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -1,5 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from enum import IntEnum +from typing import Callable, List, Optional, Union from UM.Decorators import deprecated from UM.i18n import i18nCatalog @@ -12,9 +14,6 @@ from UM.Signal import signalemitter from UM.Qt.QtApplication import QtApplication from UM.FlameProfiler import pyqtSlot -from enum import IntEnum # For the connection state tracking. -from typing import Callable, List, Optional, Union - MYPY = False if MYPY: from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel @@ -28,11 +27,18 @@ i18n_catalog = i18nCatalog("cura") ## The current processing state of the backend. class ConnectionState(IntEnum): - closed = 0 - connecting = 1 - connected = 2 - busy = 3 - error = 4 + Closed = 0 + Connecting = 1 + Connected = 2 + Busy = 3 + Error = 4 + + +class ConnectionType(IntEnum): + NotConnected = 0 + UsbConnection = 1 + NetworkConnection = 2 + CloudConnection = 3 ## Printer output device adds extra interface options on top of output device. @@ -46,6 +52,7 @@ class ConnectionState(IntEnum): # For all other uses it should be used in the same way as a "regular" OutputDevice. @signalemitter class PrinterOutputDevice(QObject, OutputDevice): + printersChanged = pyqtSignal() connectionStateChanged = pyqtSignal(str) acceptsCommandsChanged = pyqtSignal() @@ -62,33 +69,34 @@ class PrinterOutputDevice(QObject, OutputDevice): # Signal to indicate that the configuration of one of the printers has changed. uniqueConfigurationsChanged = pyqtSignal() - def __init__(self, device_id: str, parent: QObject = None) -> None: + def __init__(self, device_id: str, connection_type: "ConnectionType" = ConnectionType.NotConnected, parent: QObject = None) -> None: super().__init__(device_id = device_id, parent = parent) # type: ignore # MyPy complains with the multiple inheritance self._printers = [] # type: List[PrinterOutputModel] self._unique_configurations = [] # type: List[ConfigurationModel] - self._monitor_view_qml_path = "" #type: str - self._monitor_component = None #type: Optional[QObject] - self._monitor_item = None #type: Optional[QObject] + self._monitor_view_qml_path = "" # type: str + self._monitor_component = None # type: Optional[QObject] + self._monitor_item = None # type: Optional[QObject] - self._control_view_qml_path = "" #type: str - self._control_component = None #type: Optional[QObject] - self._control_item = None #type: Optional[QObject] + self._control_view_qml_path = "" # type: str + self._control_component = None # type: Optional[QObject] + self._control_item = None # type: Optional[QObject] - self._accepts_commands = False #type: bool + self._accepts_commands = False # type: bool - self._update_timer = QTimer() #type: QTimer + self._update_timer = QTimer() # type: QTimer self._update_timer.setInterval(2000) # TODO; Add preference for update interval self._update_timer.setSingleShot(False) self._update_timer.timeout.connect(self._update) - self._connection_state = ConnectionState.closed #type: ConnectionState + self._connection_state = ConnectionState.Closed # type: ConnectionState + self._connection_type = connection_type # type: ConnectionType - self._firmware_updater = None #type: Optional[FirmwareUpdater] - self._firmware_name = None #type: Optional[str] - self._address = "" #type: str - self._connection_text = "" #type: str + self._firmware_updater = None # type: Optional[FirmwareUpdater] + self._firmware_name = None # type: Optional[str] + self._address = "" # type: str + self._connection_text = "" # type: str self.printersChanged.connect(self._onPrintersChanged) QtApplication.getInstance().getOutputDeviceManager().outputDevicesChanged.connect(self._updateUniqueConfigurations) @@ -110,15 +118,19 @@ class PrinterOutputDevice(QObject, OutputDevice): callback(QMessageBox.Yes) def isConnected(self) -> bool: - return self._connection_state != ConnectionState.closed and self._connection_state != ConnectionState.error + return self._connection_state != ConnectionState.Closed and self._connection_state != ConnectionState.Error - def setConnectionState(self, connection_state: ConnectionState) -> None: + def setConnectionState(self, connection_state: "ConnectionState") -> None: if self._connection_state != connection_state: self._connection_state = connection_state self.connectionStateChanged.emit(self._id) - @pyqtProperty(str, notify = connectionStateChanged) - def connectionState(self) -> ConnectionState: + @pyqtProperty(int, constant = True) + def connectionType(self) -> "ConnectionType": + return self._connection_type + + @pyqtProperty(int, notify = connectionStateChanged) + def connectionState(self) -> "ConnectionState": return self._connection_state def _update(self) -> None: @@ -131,7 +143,8 @@ class PrinterOutputDevice(QObject, OutputDevice): return None - def requestWrite(self, nodes: List["SceneNode"], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional["FileHandler"] = None, **kwargs: str) -> None: + def requestWrite(self, nodes: List["SceneNode"], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional["FileHandler"] = None, **kwargs: str) -> None: raise NotImplementedError("requestWrite needs to be implemented") @pyqtProperty(QObject, notify = printersChanged) @@ -174,13 +187,13 @@ class PrinterOutputDevice(QObject, OutputDevice): ## Attempt to establish connection def connect(self) -> None: - self.setConnectionState(ConnectionState.connecting) + self.setConnectionState(ConnectionState.Connecting) self._update_timer.start() ## Attempt to close the connection def close(self) -> None: self._update_timer.stop() - self.setConnectionState(ConnectionState.closed) + self.setConnectionState(ConnectionState.Closed) ## Ensure that close gets called when object is destroyed def __del__(self) -> None: @@ -207,10 +220,17 @@ class PrinterOutputDevice(QObject, OutputDevice): return self._unique_configurations def _updateUniqueConfigurations(self) -> None: - self._unique_configurations = list(set([printer.printerConfiguration for printer in self._printers if printer.printerConfiguration is not None])) - self._unique_configurations.sort(key = lambda k: k.printerType) + self._unique_configurations = sorted( + {printer.printerConfiguration for printer in self._printers if printer.printerConfiguration is not None}, + key=lambda config: config.printerType, + ) self.uniqueConfigurationsChanged.emit() + # Returns the unique configurations of the printers within this output device + @pyqtProperty("QStringList", notify = uniqueConfigurationsChanged) + def uniquePrinterTypes(self) -> List[str]: + return list(sorted(set([configuration.printerType for configuration in self._unique_configurations]))) + def _onPrintersChanged(self) -> None: for printer in self._printers: printer.configurationChanged.connect(self._updateUniqueConfigurations) @@ -238,4 +258,4 @@ class PrinterOutputDevice(QObject, OutputDevice): if not self._firmware_updater: return - self._firmware_updater.updateFirmware(firmware_file)
\ No newline at end of file + self._firmware_updater.updateFirmware(firmware_file) diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index 39124c5ba3..9bdb6a2c0e 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -187,7 +187,10 @@ class ConvexHullDecorator(SceneNodeDecorator): for child in self._node.getChildren(): child_hull = child.callDecoration("_compute2DConvexHull") if child_hull: - points = numpy.append(points, child_hull.getPoints(), axis = 0) + try: + points = numpy.append(points, child_hull.getPoints(), axis = 0) + except ValueError: + pass if points.size < 3: return None @@ -239,7 +242,7 @@ class ConvexHullDecorator(SceneNodeDecorator): # See http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array vertex_byte_view = numpy.ascontiguousarray(vertex_data).view( numpy.dtype((numpy.void, vertex_data.dtype.itemsize * vertex_data.shape[1]))) - _, idx = numpy.unique(vertex_byte_view, return_index=True) + _, idx = numpy.unique(vertex_byte_view, return_index = True) vertex_data = vertex_data[idx] # Select the unique rows by index. hull = Polygon(vertex_data) @@ -272,7 +275,7 @@ class ConvexHullDecorator(SceneNodeDecorator): head_and_fans = self._getHeadAndFans().intersectionConvexHulls(mirrored) # Min head hull is used for the push free - convex_hull = self._compute2DConvexHeadFull() + convex_hull = self._compute2DConvexHull() if convex_hull: return convex_hull.getMinkowskiHull(head_and_fans) return None diff --git a/cura/Scene/ConvexHullNode.py b/cura/Scene/ConvexHullNode.py index 4c79c7d5dc..90bf536308 100644 --- a/cura/Scene/ConvexHullNode.py +++ b/cura/Scene/ConvexHullNode.py @@ -1,7 +1,10 @@ # Copyright (c) 2015 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional from UM.Application import Application +from UM.Math.Polygon import Polygon +from UM.Qt.QtApplication import QtApplication from UM.Scene.SceneNode import SceneNode from UM.Resources import Resources from UM.Math.Color import Color @@ -16,7 +19,7 @@ class ConvexHullNode(SceneNode): # location an object uses on the buildplate. This area (or area's in case of one at a time printing) is # then displayed as a transparent shadow. If the adhesion type is set to raft, the area is extruded # to represent the raft as well. - def __init__(self, node, hull, thickness, parent = None): + def __init__(self, node: SceneNode, hull: Optional[Polygon], thickness: float, parent: Optional[SceneNode] = None) -> None: super().__init__(parent) self.setCalculateBoundingBox(False) @@ -25,7 +28,11 @@ class ConvexHullNode(SceneNode): # Color of the drawn convex hull if not Application.getInstance().getIsHeadLess(): - self._color = Color(*Application.getInstance().getTheme().getColor("convex_hull").getRgb()) + theme = QtApplication.getInstance().getTheme() + if theme: + self._color = Color(*theme.getColor("convex_hull").getRgb()) + else: + self._color = Color(0, 0, 0) else: self._color = Color(0, 0, 0) @@ -47,7 +54,7 @@ class ConvexHullNode(SceneNode): if hull_mesh_builder.addConvexPolygonExtrusion( self._hull.getPoints()[::-1], # bottom layer is reversed - self._mesh_height-thickness, self._mesh_height, color=self._color): + self._mesh_height - thickness, self._mesh_height, color = self._color): hull_mesh = hull_mesh_builder.build() self.setMeshData(hull_mesh) @@ -75,7 +82,7 @@ class ConvexHullNode(SceneNode): return True - def _onNodeDecoratorsChanged(self, node): + def _onNodeDecoratorsChanged(self, node: SceneNode) -> None: convex_hull_head = self._node.callDecoration("getConvexHullHead") if convex_hull_head: convex_hull_head_builder = MeshBuilder() diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 3cfca1a944..133e04e8fc 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -419,13 +419,13 @@ class ContainerManager(QObject): self._container_name_filters[name_filter] = entry ## Import single profile, file_url does not have to end with curaprofile - @pyqtSlot(QUrl, result="QVariantMap") - def importProfile(self, file_url: QUrl): + @pyqtSlot(QUrl, result = "QVariantMap") + def importProfile(self, file_url: QUrl) -> Dict[str, str]: if not file_url.isValid(): - return + return {"status": "error", "message": catalog.i18nc("@info:status", "Invalid file URL:") + " " + str(file_url)} path = file_url.toLocalFile() if not path: - return + return {"status": "error", "message": catalog.i18nc("@info:status", "Invalid file URL:") + " " + str(file_url)} return self._container_registry.importProfile(path) @pyqtSlot(QObject, QUrl, str) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 11640adc0f..9f44d075e0 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -5,12 +5,12 @@ import os import re
import configparser
-from typing import cast, Optional
-
+from typing import cast, Dict, Optional
from PyQt5.QtWidgets import QMessageBox
from UM.Decorators import override
from UM.Settings.ContainerFormatError import ContainerFormatError
+from UM.Settings.Interfaces import ContainerInterface
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.InstanceContainer import InstanceContainer
@@ -28,7 +28,7 @@ from . import GlobalStack import cura.CuraApplication
from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
-from cura.ReaderWriters.ProfileReader import NoProfileException
+from cura.ReaderWriters.ProfileReader import NoProfileException, ProfileReader
from UM.i18n import i18nCatalog
catalog = i18nCatalog("cura")
@@ -161,20 +161,20 @@ class CuraContainerRegistry(ContainerRegistry): ## Imports a profile from a file
#
- # \param file_name \type{str} the full path and filename of the profile to import
- # \return \type{Dict} dict with a 'status' key containing the string 'ok' or 'error', and a 'message' key
- # containing a message for the user
- def importProfile(self, file_name):
+ # \param file_name The full path and filename of the profile to import.
+ # \return Dict with a 'status' key containing the string 'ok' or 'error',
+ # and a 'message' key containing a message for the user.
+ def importProfile(self, file_name: str) -> Dict[str, str]:
Logger.log("d", "Attempting to import profile %s", file_name)
if not file_name:
- return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "Failed to import profile from <filename>{0}</filename>: <message>{1}</message>", file_name, "Invalid path")}
+ return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags <filename>!", "Failed to import profile from <filename>{0}</filename>: {1}", file_name, "Invalid path")}
plugin_registry = PluginRegistry.getInstance()
extension = file_name.split(".")[-1]
global_stack = Application.getInstance().getGlobalContainerStack()
if not global_stack:
- return
+ return {"status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags <filename>!", "Can't import profile from <filename>{0}</filename> before a printer is added.", file_name)}
machine_extruders = []
for position in sorted(global_stack.extruders):
@@ -183,7 +183,7 @@ class CuraContainerRegistry(ContainerRegistry): for plugin_id, meta_data in self._getIOPlugins("profile_reader"):
if meta_data["profile_reader"][0]["extension"] != extension:
continue
- profile_reader = plugin_registry.getPluginObject(plugin_id)
+ profile_reader = cast(ProfileReader, plugin_registry.getPluginObject(plugin_id))
try:
profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader.
except NoProfileException:
@@ -221,13 +221,13 @@ class CuraContainerRegistry(ContainerRegistry): # Make sure we have a profile_definition in the file:
if profile_definition is None:
break
- machine_definition = self.findDefinitionContainers(id = profile_definition)
- if not machine_definition:
+ machine_definitions = self.findDefinitionContainers(id = profile_definition)
+ if not machine_definitions:
Logger.log("e", "Incorrect profile [%s]. Unknown machine type [%s]", file_name, profile_definition)
return {"status": "error",
"message": catalog.i18nc("@info:status Don't translate the XML tags <filename>!", "This profile <filename>{0}</filename> contains incorrect data, could not import it.", file_name)
}
- machine_definition = machine_definition[0]
+ machine_definition = machine_definitions[0]
# Get the expected machine definition.
# i.e.: We expect gcode for a UM2 Extended to be defined as normal UM2 gcode...
@@ -274,11 +274,12 @@ class CuraContainerRegistry(ContainerRegistry): setting_value = global_profile.getProperty(qc_setting_key, "value")
setting_definition = global_stack.getSettingDefinition(qc_setting_key)
- new_instance = SettingInstance(setting_definition, profile)
- new_instance.setProperty("value", setting_value)
- new_instance.resetState() # Ensure that the state is not seen as a user state.
- profile.addInstance(new_instance)
- profile.setDirty(True)
+ if setting_definition is not None:
+ new_instance = SettingInstance(setting_definition, profile)
+ new_instance.setProperty("value", setting_value)
+ new_instance.resetState() # Ensure that the state is not seen as a user state.
+ profile.addInstance(new_instance)
+ profile.setDirty(True)
global_profile.removeInstance(qc_setting_key, postpone_emit=True)
extruder_profiles.append(profile)
@@ -290,7 +291,7 @@ class CuraContainerRegistry(ContainerRegistry): for profile_index, profile in enumerate(profile_or_list):
if profile_index == 0:
# This is assumed to be the global profile
- profile_id = (global_stack.getBottom().getId() + "_" + name_seed).lower().replace(" ", "_")
+ profile_id = (cast(ContainerInterface, global_stack.getBottom()).getId() + "_" + name_seed).lower().replace(" ", "_")
elif profile_index < len(machine_extruders) + 1:
# This is assumed to be an extruder profile
diff --git a/cura/Settings/CuraFormulaFunctions.py b/cura/Settings/CuraFormulaFunctions.py index 1db01857f8..9ef80bd3d4 100644 --- a/cura/Settings/CuraFormulaFunctions.py +++ b/cura/Settings/CuraFormulaFunctions.py @@ -5,6 +5,7 @@ from typing import Any, List, Optional, TYPE_CHECKING from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext from UM.Settings.SettingFunction import SettingFunction +from UM.Logger import Logger if TYPE_CHECKING: from cura.CuraApplication import CuraApplication @@ -38,7 +39,11 @@ class CuraFormulaFunctions: extruder_position = int(machine_manager.defaultExtruderPosition) global_stack = machine_manager.activeMachine - extruder_stack = global_stack.extruders[str(extruder_position)] + try: + extruder_stack = global_stack.extruders[str(extruder_position)] + except KeyError: + Logger.log("w", "Value for %s of extruder %s was requested, but that extruder is not available" % (property_key, extruder_position)) + return None value = extruder_stack.getRawProperty(property_key, "value", context = context) if isinstance(value, SettingFunction): diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 9089ba96e9..a459d65ba3 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -63,7 +63,7 @@ class ExtruderManager(QObject): if not self._application.getGlobalContainerStack(): return None # No active machine, so no active extruder. try: - return self._extruder_trains[self._application.getGlobalContainerStack().getId()][str(self._active_extruder_index)].getId() + return self._extruder_trains[self._application.getGlobalContainerStack().getId()][str(self.activeExtruderIndex)].getId() except KeyError: # Extruder index could be -1 if the global tab is selected, or the entry doesn't exist if the machine definition is wrong. return None @@ -83,8 +83,9 @@ class ExtruderManager(QObject): # \param index The index of the new active extruder. @pyqtSlot(int) def setActiveExtruderIndex(self, index: int) -> None: - self._active_extruder_index = index - self.activeExtruderChanged.emit() + if self._active_extruder_index != index: + self._active_extruder_index = index + self.activeExtruderChanged.emit() @pyqtProperty(int, notify = activeExtruderChanged) def activeExtruderIndex(self) -> int: @@ -144,7 +145,7 @@ class ExtruderManager(QObject): @pyqtSlot(result = QObject) def getActiveExtruderStack(self) -> Optional["ExtruderStack"]: - return self.getExtruderStack(self._active_extruder_index) + return self.getExtruderStack(self.activeExtruderIndex) ## Get an extruder stack by index def getExtruderStack(self, index) -> Optional["ExtruderStack"]: @@ -300,12 +301,7 @@ class ExtruderManager(QObject): global_stack = self._application.getGlobalContainerStack() if not global_stack: return [] - - result_tuple_list = sorted(list(global_stack.extruders.items()), key = lambda x: int(x[0])) - result_list = [item[1] for item in result_tuple_list] - - machine_extruder_count = global_stack.getProperty("machine_extruder_count", "value") - return result_list[:machine_extruder_count] + return global_stack.extruderList def _globalContainerStackChanged(self) -> None: # If the global container changed, the machine changed and might have extruders that were not registered yet @@ -344,6 +340,7 @@ class ExtruderManager(QObject): if extruders_changed: self.extrudersChanged.emit(global_stack_id) self.setActiveExtruderIndex(0) + self.activeExtruderChanged.emit() # After 3.4, all single-extrusion machines have their own extruder definition files instead of reusing # "fdmextruder". We need to check a machine here so its extruder definition is correct according to this. diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index d7faedb71c..edb0e7d41f 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -52,8 +52,8 @@ class ExtruderStack(CuraContainerStack): return super().getNextStack() def setEnabled(self, enabled: bool) -> None: - if "enabled" not in self._metadata: - self.setMetaDataEntry("enabled", "True") + if self.getMetaDataEntry("enabled", True) == enabled: # No change. + return # Don't emit a signal then. self.setMetaDataEntry("enabled", str(enabled)) self.enabledChanged.emit() diff --git a/cura/Settings/ExtrudersModel.py b/cura/Settings/ExtrudersModel.py index 52fc502bfc..076cebf60d 100644 --- a/cura/Settings/ExtrudersModel.py +++ b/cura/Settings/ExtrudersModel.py @@ -1,7 +1,7 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import Qt, pyqtSignal, pyqtSlot, pyqtProperty, QTimer +from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer from typing import Iterable from UM.i18n import i18nCatalog @@ -24,8 +24,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): ## Human-readable name of the extruder. NameRole = Qt.UserRole + 2 - ## Is the extruder enabled? - EnabledRole = Qt.UserRole + 9 ## Colour of the material loaded in the extruder. ColorRole = Qt.UserRole + 3 @@ -47,6 +45,12 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): VariantRole = Qt.UserRole + 7 StackRole = Qt.UserRole + 8 + MaterialBrandRole = Qt.UserRole + 9 + ColorNameRole = Qt.UserRole + 10 + + ## Is the extruder enabled? + EnabledRole = Qt.UserRole + 11 + ## List of colours to display if there is no material or the material has no known # colour. defaultColors = ["#ffc924", "#86ec21", "#22eeee", "#245bff", "#9124ff", "#ff24c8"] @@ -67,14 +71,13 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.VariantRole, "variant") self.addRoleName(self.StackRole, "stack") - + self.addRoleName(self.MaterialBrandRole, "material_brand") + self.addRoleName(self.ColorNameRole, "color_name") self._update_extruder_timer = QTimer() self._update_extruder_timer.setInterval(100) self._update_extruder_timer.setSingleShot(True) self._update_extruder_timer.timeout.connect(self.__updateExtruders) - self._simple_names = False - self._active_machine_extruders = [] # type: Iterable[ExtruderStack] self._add_optional_extruder = False @@ -96,21 +99,6 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): def addOptionalExtruder(self): return self._add_optional_extruder - ## Set the simpleNames property. - def setSimpleNames(self, simple_names): - if simple_names != self._simple_names: - self._simple_names = simple_names - self.simpleNamesChanged.emit() - self._updateExtruders() - - ## Emitted when the simpleNames property changes. - simpleNamesChanged = pyqtSignal() - - ## Whether or not the model should show all definitions regardless of visibility. - @pyqtProperty(bool, fset = setSimpleNames, notify = simpleNamesChanged) - def simpleNames(self): - return self._simple_names - ## Links to the stack-changed signal of the new extruders when an extruder # is swapped out or added in the current machine. # @@ -160,7 +148,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): def __updateExtruders(self): extruders_changed = False - if self.rowCount() != 0: + if self.count != 0: extruders_changed = True items = [] @@ -172,7 +160,7 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): machine_extruder_count = global_container_stack.getProperty("machine_extruder_count", "value") for extruder in Application.getInstance().getExtruderManager().getActiveExtruderStacks(): - position = extruder.getMetaDataEntry("position", default = "0") # Get the position + position = extruder.getMetaDataEntry("position", default = "0") try: position = int(position) except ValueError: @@ -183,7 +171,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): default_color = self.defaultColors[position] if 0 <= position < len(self.defaultColors) else self.defaultColors[0] color = extruder.material.getMetaDataEntry("color_code", default = default_color) if extruder.material else default_color - + material_brand = extruder.material.getMetaDataEntry("brand", default = "generic") + color_name = extruder.material.getMetaDataEntry("color_name") # construct an item with only the relevant information item = { "id": extruder.getId(), @@ -195,6 +184,8 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): "material": extruder.material.getName() if extruder.material else "", "variant": extruder.variant.getName() if extruder.variant else "", # e.g. print core "stack": extruder, + "material_brand": material_brand, + "color_name": color_name } items.append(item) @@ -213,9 +204,14 @@ class ExtrudersModel(UM.Qt.ListModel.ListModel): "enabled": True, "color": "#ffffff", "index": -1, - "definition": "" + "definition": "", + "material": "", + "variant": "", + "stack": None, + "material_brand": "", + "color_name": "", } items.append(item) - - self.setItems(items) - self.modelChanged.emit() + if self._items != items: + self.setItems(items) + self.modelChanged.emit() diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py index da1ec61254..8dba0f5204 100755 --- a/cura/Settings/GlobalStack.py +++ b/cura/Settings/GlobalStack.py @@ -3,8 +3,8 @@ from collections import defaultdict import threading -from typing import Any, Dict, Optional, Set, TYPE_CHECKING -from PyQt5.QtCore import pyqtProperty, pyqtSlot +from typing import Any, Dict, Optional, Set, TYPE_CHECKING, List +from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal from UM.Decorators import override from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase @@ -42,13 +42,23 @@ class GlobalStack(CuraContainerStack): # Per thread we have our own resolving_settings, or strange things sometimes occur. self._resolving_settings = defaultdict(set) #type: Dict[str, Set[str]] # keys are thread names + extrudersChanged = pyqtSignal() + ## Get the list of extruders of this stack. # # \return The extruders registered with this stack. - @pyqtProperty("QVariantMap") + @pyqtProperty("QVariantMap", notify = extrudersChanged) def extruders(self) -> Dict[str, "ExtruderStack"]: return self._extruders + @pyqtProperty("QVariantList", notify = extrudersChanged) + def extruderList(self) -> List["ExtruderStack"]: + result_tuple_list = sorted(list(self.extruders.items()), key=lambda x: int(x[0])) + result_list = [item[1] for item in result_tuple_list] + + machine_extruder_count = self.getProperty("machine_extruder_count", "value") + return result_list[:machine_extruder_count] + @classmethod def getLoadingPriority(cls) -> int: return 2 @@ -87,6 +97,7 @@ class GlobalStack(CuraContainerStack): return self._extruders[position] = extruder + self.extrudersChanged.emit() Logger.log("i", "Extruder[%s] added to [%s] at position [%s]", extruder.id, self.id, position) ## Overridden from ContainerStack diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index f321ce94a6..5763d2bcab 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -3,6 +3,8 @@ import collections import time +import re +import unicodedata from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional, cast from UM.ConfigurationErrorMessage import ConfigurationErrorMessage @@ -21,7 +23,7 @@ from UM.Settings.SettingFunction import SettingFunction from UM.Signal import postponeSignals, CompressTechnique from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch -from cura.PrinterOutputDevice import PrinterOutputDevice +from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionType from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel @@ -62,9 +64,7 @@ class MachineManager(QObject): self._default_extruder_position = "0" # to be updated when extruders are switched on and off - self.machine_extruder_material_update_dict = collections.defaultdict(list) #type: Dict[str, List[Callable[[], None]]] - - self._instance_container_timer = QTimer() #type: QTimer + self._instance_container_timer = QTimer() # type: QTimer self._instance_container_timer.setInterval(250) self._instance_container_timer.setSingleShot(True) self._instance_container_timer.timeout.connect(self.__emitChangedSignals) @@ -74,7 +74,7 @@ class MachineManager(QObject): self._application.globalContainerStackChanged.connect(self._onGlobalContainerChanged) self._container_registry.containerLoadComplete.connect(self._onContainersChanged) - ## When the global container is changed, active material probably needs to be updated. + # When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) self.globalContainerChanged.connect(self.activeVariantChanged) self.globalContainerChanged.connect(self.activeQualityChanged) @@ -86,12 +86,14 @@ class MachineManager(QObject): self._onGlobalContainerChanged() - ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged) + extruder_manager = self._application.getExtruderManager() + + extruder_manager.activeExtruderChanged.connect(self._onActiveExtruderStackChanged) self._onActiveExtruderStackChanged() - ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeMaterialChanged) - ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeVariantChanged) - ExtruderManager.getInstance().activeExtruderChanged.connect(self.activeQualityChanged) + extruder_manager.activeExtruderChanged.connect(self.activeMaterialChanged) + extruder_manager.activeExtruderChanged.connect(self.activeVariantChanged) + extruder_manager.activeExtruderChanged.connect(self.activeQualityChanged) self.globalContainerChanged.connect(self.activeStackChanged) self.globalValueChanged.connect(self.activeStackValueChanged) @@ -115,15 +117,15 @@ class MachineManager(QObject): self._material_incompatible_message = Message(catalog.i18nc("@info:status", "The selected material is incompatible with the selected machine or configuration."), - title = catalog.i18nc("@info:title", "Incompatible Material")) #type: Message + title = catalog.i18nc("@info:title", "Incompatible Material")) # type: Message - containers = CuraContainerRegistry.getInstance().findInstanceContainers(id = self.activeMaterialId) #type: List[InstanceContainer] + containers = CuraContainerRegistry.getInstance().findInstanceContainers(id = self.activeMaterialId) # type: List[InstanceContainer] if containers: containers[0].nameChanged.connect(self._onMaterialNameChanged) - self._material_manager = self._application.getMaterialManager() #type: MaterialManager - self._variant_manager = self._application.getVariantManager() #type: VariantManager - self._quality_manager = self._application.getQualityManager() #type: QualityManager + self._material_manager = self._application.getMaterialManager() # type: MaterialManager + self._variant_manager = self._application.getVariantManager() # type: VariantManager + self._quality_manager = self._application.getQualityManager() # type: QualityManager # When the materials lookup table gets updated, it can mean that a material has its name changed, which should # be reflected on the GUI. This signal emission makes sure that it happens. @@ -156,7 +158,7 @@ class MachineManager(QObject): blurSettings = pyqtSignal() # Emitted to force fields in the advanced sidebar to un-focus, so they update properly outputDevicesChanged = pyqtSignal() - currentConfigurationChanged = pyqtSignal() # Emitted every time the current configurations of the machine changes + currentConfigurationChanged = pyqtSignal() # Emitted every time the current configurations of the machine changes printerConnectedStatusChanged = pyqtSignal() # Emitted every time the active machine change or the outputdevices change rootMaterialChanged = pyqtSignal() @@ -174,6 +176,7 @@ class MachineManager(QObject): self._printer_output_devices.append(printer_output_device) self.outputDevicesChanged.emit() + self.printerConnectedStatusChanged.emit() @pyqtProperty(QObject, notify = currentConfigurationChanged) def currentConfiguration(self) -> ConfigurationModel: @@ -201,7 +204,7 @@ class MachineManager(QObject): extruder_configuration.hotendID = extruder.variant.getName() if extruder.variant != empty_variant_container else None self._current_printer_configuration.extruderConfigurations.append(extruder_configuration) - # an empty build plate configuration from the network printer is presented as an empty string, so use "" for an + # An empty build plate configuration from the network printer is presented as an empty string, so use "" for an # empty build plate. self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value") if self._global_container_stack.variant != empty_variant_container else "" self.currentConfigurationChanged.emit() @@ -247,7 +250,7 @@ class MachineManager(QObject): self.updateNumberExtrudersEnabled() self.globalContainerChanged.emit() - # after switching the global stack we reconnect all the signals and set the variant and material references + # After switching the global stack we reconnect all the signals and set the variant and material references if self._global_container_stack: self._application.getPreferences().setValue("cura/active_machine", self._global_container_stack.getId()) @@ -261,7 +264,7 @@ class MachineManager(QObject): if global_variant.getMetaDataEntry("hardware_type") != "buildplate": self._global_container_stack.setVariant(empty_variant_container) - # set the global material to empty as we now use the extruder stack at all times - CURA-4482 + # Set the global material to empty as we now use the extruder stack at all times - CURA-4482 global_material = self._global_container_stack.material if global_material != empty_material_container: self._global_container_stack.setMaterial(empty_material_container) @@ -271,11 +274,6 @@ class MachineManager(QObject): extruder_stack.propertyChanged.connect(self._onPropertyChanged) extruder_stack.containersChanged.connect(self._onContainersChanged) - if self._global_container_stack.getId() in self.machine_extruder_material_update_dict: - for func in self.machine_extruder_material_update_dict[self._global_container_stack.getId()]: - self._application.callLater(func) - del self.machine_extruder_material_update_dict[self._global_container_stack.getId()] - self.activeQualityGroupChanged.emit() def _onActiveExtruderStackChanged(self) -> None: @@ -295,6 +293,7 @@ class MachineManager(QObject): self.activeMaterialChanged.emit() self.rootMaterialChanged.emit() + self.numberExtrudersEnabledChanged.emit() def _onContainersChanged(self, container: ContainerInterface) -> None: self._instance_container_timer.start() @@ -419,7 +418,7 @@ class MachineManager(QObject): # Not a very pretty solution, but the extruder manager doesn't really know how many extruders there are machine_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() - count = 1 # we start with the global stack + count = 1 # We start with the global stack for stack in extruder_stacks: md = stack.getMetaData() if "position" in md and int(md["position"]) >= machine_extruder_count: @@ -438,12 +437,12 @@ class MachineManager(QObject): if not self._global_container_stack: return False - if self._global_container_stack.getTop().findInstances(): + if self._global_container_stack.getTop().getNumInstances() != 0: return True stacks = ExtruderManager.getInstance().getActiveExtruderStacks() for stack in stacks: - if stack.getTop().findInstances(): + if stack.getTop().getNumInstances() != 0: return True return False @@ -453,10 +452,10 @@ class MachineManager(QObject): if not self._global_container_stack: return 0 num_user_settings = 0 - num_user_settings += len(self._global_container_stack.getTop().findInstances()) - stacks = ExtruderManager.getInstance().getActiveExtruderStacks() + num_user_settings += self._global_container_stack.getTop().getNumInstances() + stacks = self._global_container_stack.extruderList for stack in stacks: - num_user_settings += len(stack.getTop().findInstances()) + num_user_settings += stack.getTop().getNumInstances() return num_user_settings ## Delete a user setting from the global stack and all extruder stacks. @@ -516,10 +515,30 @@ class MachineManager(QObject): return "" @pyqtProperty(bool, notify = printerConnectedStatusChanged) - def printerConnected(self): + def printerConnected(self) -> bool: return bool(self._printer_output_devices) - @pyqtProperty(str, notify = printerConnectedStatusChanged) + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineHasRemoteConnection(self) -> bool: + if self._global_container_stack: + connection_type = int(self._global_container_stack.getMetaDataEntry("connection_type", ConnectionType.NotConnected.value)) + return connection_type in [ConnectionType.NetworkConnection.value, ConnectionType.CloudConnection.value] + return False + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineIsGroup(self) -> bool: + return bool(self._printer_output_devices) and len(self._printer_output_devices[0].printers) > 1 + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineHasActiveNetworkConnection(self) -> bool: + # A network connection is only available if any output device is actually a network connected device. + return any(d.connectionType == ConnectionType.NetworkConnection for d in self._printer_output_devices) + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineHasActiveCloudConnection(self) -> bool: + # A cloud connection is only available if any output device actually is a cloud connected device. + return any(d.connectionType == ConnectionType.CloudConnection for d in self._printer_output_devices) + def activeMachineNetworkKey(self) -> str: if self._global_container_stack: return self._global_container_stack.getMetaDataEntry("um_network_key", "") @@ -616,6 +635,14 @@ class MachineManager(QObject): is_supported = self._current_quality_group.is_available return is_supported + @pyqtProperty(bool, notify = activeQualityGroupChanged) + def isActiveQualityExperimental(self) -> bool: + is_experimental = False + if self._global_container_stack: + if self._current_quality_group: + is_experimental = self._current_quality_group.is_experimental + return is_experimental + ## Returns whether there is anything unsupported in the current set-up. # # The current set-up signifies the global stack and all extruder stacks, @@ -646,7 +673,7 @@ class MachineManager(QObject): new_value = self._active_container_stack.getProperty(key, "value") extruder_stacks = [stack for stack in ExtruderManager.getInstance().getActiveExtruderStacks()] - # check in which stack the value has to be replaced + # Check in which stack the value has to be replaced for extruder_stack in extruder_stacks: if extruder_stack != self._active_container_stack and extruder_stack.getProperty(key, "value") != new_value: extruder_stack.userChanges.setProperty(key, "value", new_value) # TODO: nested property access, should be improved @@ -662,7 +689,7 @@ class MachineManager(QObject): for key in self._active_container_stack.userChanges.getAllKeys(): new_value = self._active_container_stack.getProperty(key, "value") - # check if the value has to be replaced + # Check if the value has to be replaced extruder_stack.userChanges.setProperty(key, "value", new_value) @pyqtProperty(str, notify = activeVariantChanged) @@ -731,7 +758,7 @@ class MachineManager(QObject): # If the machine that is being removed is the currently active machine, set another machine as the active machine. activate_new_machine = (self._global_container_stack and self._global_container_stack.getId() == machine_id) - # activate a new machine before removing a machine because this is safer + # Activate a new machine before removing a machine because this is safer if activate_new_machine: machine_stacks = CuraContainerRegistry.getInstance().findContainerStacksMetadata(type = "machine") other_machine_stacks = [s for s in machine_stacks if s["id"] != machine_id] @@ -739,7 +766,7 @@ class MachineManager(QObject): self.setActiveMachine(other_machine_stacks[0]["id"]) metadata = CuraContainerRegistry.getInstance().findContainerStacksMetadata(id = machine_id)[0] - network_key = metadata["um_network_key"] if "um_network_key" in metadata else None + network_key = metadata.get("um_network_key", None) ExtruderManager.getInstance().removeMachineExtruders(machine_id) containers = CuraContainerRegistry.getInstance().findInstanceContainersMetadata(type = "user", machine = machine_id) for container in containers: @@ -864,7 +891,7 @@ class MachineManager(QObject): caution_message = Message(catalog.i18nc( "@info:generic", "Settings have been changed to match the current availability of extruders: [%s]" % ", ".join(add_user_changes)), - lifetime=0, + lifetime = 0, title = catalog.i18nc("@info:title", "Settings updated")) caution_message.show() @@ -909,21 +936,18 @@ class MachineManager(QObject): # After CURA-4482 this should not be the case anymore, but we still want to support older project files. global_user_container = self._global_container_stack.userChanges - # Make sure extruder_stacks exists - extruder_stacks = [] #type: List[ExtruderStack] - - if previous_extruder_count == 1: - extruder_stacks = ExtruderManager.getInstance().getActiveExtruderStacks() - global_user_container = self._global_container_stack.userChanges - for setting_instance in global_user_container.findInstances(): setting_key = setting_instance.definition.key settable_per_extruder = self._global_container_stack.getProperty(setting_key, "settable_per_extruder") if settable_per_extruder: limit_to_extruder = int(self._global_container_stack.getProperty(setting_key, "limit_to_extruder")) - extruder_stack = extruder_stacks[max(0, limit_to_extruder)] - extruder_stack.userChanges.setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value")) + extruder_position = max(0, limit_to_extruder) + extruder_stack = self.getExtruder(extruder_position) + if extruder_stack: + extruder_stack.userChanges.setProperty(setting_key, "value", global_user_container.getProperty(setting_key, "value")) + else: + Logger.log("e", "Unable to find extruder on position %s", extruder_position) global_user_container.removeInstance(setting_key) # Signal that the global stack has changed @@ -932,10 +956,9 @@ class MachineManager(QObject): @pyqtSlot(int, result = QObject) def getExtruder(self, position: int) -> Optional[ExtruderStack]: - extruder = None if self._global_container_stack: - extruder = self._global_container_stack.extruders.get(str(position)) - return extruder + return self._global_container_stack.extruders.get(str(position)) + return None def updateDefaultExtruder(self) -> None: if self._global_container_stack is None: @@ -1001,12 +1024,12 @@ class MachineManager(QObject): if not enabled and position == ExtruderManager.getInstance().activeExtruderIndex: ExtruderManager.getInstance().setActiveExtruderIndex(int(self._default_extruder_position)) - # ensure that the quality profile is compatible with current combination, or choose a compatible one if available + # Ensure that the quality profile is compatible with current combination, or choose a compatible one if available self._updateQualityWithMaterial() self.extruderChanged.emit() - # update material compatibility color + # Update material compatibility color self.activeQualityGroupChanged.emit() - # update items in SettingExtruder + # Update items in SettingExtruder ExtruderManager.getInstance().extrudersChanged.emit(self._global_container_stack.getId()) # Make sure the front end reflects changes self.forceUpdateAllSettings() @@ -1080,7 +1103,6 @@ class MachineManager(QObject): return result - # # Sets all quality and quality_changes containers to empty_quality and empty_quality_changes containers # for all stacks in the currently active machine. # @@ -1139,7 +1161,7 @@ class MachineManager(QObject): def _setQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None: if self._global_container_stack is None: - return #Can't change that. + return # Can't change that. quality_type = quality_changes_group.quality_type # A custom quality can be created based on "not supported". # In that case, do not set quality containers to empty. @@ -1209,7 +1231,7 @@ class MachineManager(QObject): self.rootMaterialChanged.emit() def activeMaterialsCompatible(self) -> bool: - # check material - variant compatibility + # Check material - variant compatibility if self._global_container_stack is not None: if Util.parseBool(self._global_container_stack.getMetaDataEntry("has_materials", False)): for position, extruder in self._global_container_stack.extruders.items(): @@ -1310,17 +1332,18 @@ class MachineManager(QObject): # Get the definition id corresponding to this machine name machine_definition_id = CuraContainerRegistry.getInstance().findDefinitionContainers(name = machine_name)[0].getId() # Try to find a machine with the same network key - new_machine = self.getMachine(machine_definition_id, metadata_filter = {"um_network_key": self.activeMachineNetworkKey}) + new_machine = self.getMachine(machine_definition_id, metadata_filter = {"um_network_key": self.activeMachineNetworkKey()}) # If there is no machine, then create a new one and set it to the non-hidden instance if not new_machine: new_machine = CuraStackBuilder.createMachine(machine_definition_id + "_sync", machine_definition_id) if not new_machine: return - new_machine.setMetaDataEntry("um_network_key", self.activeMachineNetworkKey) + new_machine.setMetaDataEntry("um_network_key", self.activeMachineNetworkKey()) new_machine.setMetaDataEntry("connect_group_name", self.activeMachineNetworkGroupName) new_machine.setMetaDataEntry("hidden", False) + new_machine.setMetaDataEntry("connection_type", self._global_container_stack.getMetaDataEntry("connection_type")) else: - Logger.log("i", "Found a %s with the key %s. Let's use it!", machine_name, self.activeMachineNetworkKey) + Logger.log("i", "Found a %s with the key %s. Let's use it!", machine_name, self.activeMachineNetworkKey()) new_machine.setMetaDataEntry("hidden", False) # Set the current printer instance to hidden (the metadata entry must exist) @@ -1380,10 +1403,10 @@ class MachineManager(QObject): # After updating from 3.2 to 3.3 some group names may be temporary. If there is a mismatch in the name of the group # then all the container stacks are updated, both the current and the hidden ones. def checkCorrectGroupName(self, device_id: str, group_name: str) -> None: - if self._global_container_stack and device_id == self.activeMachineNetworkKey: + if self._global_container_stack and device_id == self.activeMachineNetworkKey(): # Check if the connect_group_name is correct. If not, update all the containers connected to the same printer if self.activeMachineNetworkGroupName != group_name: - metadata_filter = {"um_network_key": self.activeMachineNetworkKey} + metadata_filter = {"um_network_key": self.activeMachineNetworkKey()} containers = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine", **metadata_filter) for container in containers: container.setMetaDataEntry("connect_group_name", group_name) @@ -1419,7 +1442,7 @@ class MachineManager(QObject): material_diameter, root_material_id) self.setMaterial(position, material_node) - ## global_stack: if you want to provide your own global_stack instead of the current active one + ## Global_stack: if you want to provide your own global_stack instead of the current active one # if you update an active machine, special measures have to be taken. @pyqtSlot(str, "QVariant") def setMaterial(self, position: str, container_node, global_stack: Optional["GlobalStack"] = None) -> None: @@ -1522,6 +1545,10 @@ class MachineManager(QObject): def activeQualityChangesGroup(self) -> Optional["QualityChangesGroup"]: return self._current_quality_changes_group + @pyqtProperty(bool, notify = activeQualityChangesGroupChanged) + def hasCustomQuality(self) -> bool: + return self._current_quality_changes_group is not None + @pyqtProperty(str, notify = activeQualityGroupChanged) def activeQualityOrQualityChangesName(self) -> str: name = empty_quality_container.getName() @@ -1531,9 +1558,32 @@ class MachineManager(QObject): name = self._current_quality_group.name return name + @pyqtProperty(bool, notify = activeQualityGroupChanged) + def hasNotSupportedQuality(self) -> bool: + return self._current_quality_group is None and self._current_quality_changes_group is None + def _updateUponMaterialMetadataChange(self) -> None: if self._global_container_stack is None: return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self.updateMaterialWithVariant(None) self._updateQualityWithMaterial() + + ## This function will translate any printer type name to an abbreviated printer type name + @pyqtSlot(str, result = str) + def getAbbreviatedMachineName(self, machine_type_name: str) -> str: + abbr_machine = "" + for word in re.findall(r"[\w']+", machine_type_name): + if word.lower() == "ultimaker": + abbr_machine += "UM" + elif word.isdigit(): + abbr_machine += word + else: + stripped_word = "".join(char for char in unicodedata.normalize("NFD", word.upper()) if unicodedata.category(char) != "Mn") + # - use only the first character if the word is too long (> 3 characters) + # - use the whole word if it's not too long (<= 3 characters) + if len(stripped_word) > 3: + stripped_word = stripped_word[0] + abbr_machine += stripped_word + + return abbr_machine diff --git a/cura/Settings/SimpleModeSettingsManager.py b/cura/Settings/SimpleModeSettingsManager.py index fce43243bd..b1896a9205 100644 --- a/cura/Settings/SimpleModeSettingsManager.py +++ b/cura/Settings/SimpleModeSettingsManager.py @@ -1,7 +1,8 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Set -from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty +from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot from UM.Application import Application @@ -16,15 +17,11 @@ class SimpleModeSettingsManager(QObject): self._is_profile_user_created = False # True when profile was custom created by user self._machine_manager.activeStackValueChanged.connect(self._updateIsProfileCustomized) - self._machine_manager.activeQualityGroupChanged.connect(self._updateIsProfileUserCreated) - self._machine_manager.activeQualityChangesGroupChanged.connect(self._updateIsProfileUserCreated) # update on create as the activeQualityChanged signal is emitted before this manager is created when Cura starts self._updateIsProfileCustomized() - self._updateIsProfileUserCreated() isProfileCustomizedChanged = pyqtSignal() - isProfileUserCreatedChanged = pyqtSignal() @pyqtProperty(bool, notify = isProfileCustomizedChanged) def isProfileCustomized(self): @@ -57,33 +54,6 @@ class SimpleModeSettingsManager(QObject): self._is_profile_customized = has_customized_user_settings self.isProfileCustomizedChanged.emit() - @pyqtProperty(bool, notify = isProfileUserCreatedChanged) - def isProfileUserCreated(self): - return self._is_profile_user_created - - def _updateIsProfileUserCreated(self): - quality_changes_keys = set() - - if not self._machine_manager.activeMachine: - return False - - global_stack = self._machine_manager.activeMachine - - # check quality changes settings in the global stack - quality_changes_keys.update(global_stack.qualityChanges.getAllKeys()) - - # check quality changes settings in the extruder stacks - if global_stack.extruders: - for extruder_stack in global_stack.extruders.values(): - quality_changes_keys.update(extruder_stack.qualityChanges.getAllKeys()) - - # check if the qualityChanges container is not empty (meaning it is a user created profile) - has_quality_changes = len(quality_changes_keys) > 0 - - if has_quality_changes != self._is_profile_user_created: - self._is_profile_user_created = has_quality_changes - self.isProfileUserCreatedChanged.emit() - # These are the settings included in the Simple ("Recommended") Mode, so only when the other settings have been # changed, we consider it as a user customized profile in the Simple ("Recommended") Mode. __ignored_custom_setting_keys = ["support_enable", diff --git a/cura/Stages/CuraStage.py b/cura/Stages/CuraStage.py index b2f6d61799..844b0d0768 100644 --- a/cura/Stages/CuraStage.py +++ b/cura/Stages/CuraStage.py @@ -1,23 +1,29 @@ -# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+
from PyQt5.QtCore import pyqtProperty, QUrl
from UM.Stage import Stage
+# Since Cura has a few pre-defined "space claims" for the locations of certain components, we've provided some structure
+# to indicate this.
+# * The StageMenuComponent is the horizontal area below the stage bar. This should be used to show stage specific
+# buttons and elements. This component will be drawn over the bar & main component.
+# * The MainComponent is the component that will be drawn starting from the bottom of the stageBar and fills the rest
+# of the screen.
class CuraStage(Stage):
-
- def __init__(self, parent = None):
+ def __init__(self, parent = None) -> None:
super().__init__(parent)
@pyqtProperty(str, constant = True)
- def stageId(self):
+ def stageId(self) -> str:
return self.getPluginId()
@pyqtProperty(QUrl, constant = True)
- def mainComponent(self):
+ def mainComponent(self) -> QUrl:
return self.getDisplayComponent("main")
@pyqtProperty(QUrl, constant = True)
- def sidebarComponent(self):
- return self.getDisplayComponent("sidebar")
+ def stageMenuComponent(self) -> QUrl:
+ return self.getDisplayComponent("menu")
\ No newline at end of file diff --git a/cura/UltimakerCloudAuthentication.py b/cura/UltimakerCloudAuthentication.py new file mode 100644 index 0000000000..c8346e5c4e --- /dev/null +++ b/cura/UltimakerCloudAuthentication.py @@ -0,0 +1,30 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +# --------- +# Constants used for the Cloud API +# --------- +DEFAULT_CLOUD_API_ROOT = "https://api.ultimaker.com" # type: str +DEFAULT_CLOUD_API_VERSION = "1" # type: str +DEFAULT_CLOUD_ACCOUNT_API_ROOT = "https://account.ultimaker.com" # type: str + +try: + from cura.CuraVersion import CuraCloudAPIRoot # type: ignore + if CuraCloudAPIRoot == "": + CuraCloudAPIRoot = DEFAULT_CLOUD_API_ROOT +except ImportError: + CuraCloudAPIRoot = DEFAULT_CLOUD_API_ROOT + +try: + from cura.CuraVersion import CuraCloudAPIVersion # type: ignore + if CuraCloudAPIVersion == "": + CuraCloudAPIVersion = DEFAULT_CLOUD_API_VERSION +except ImportError: + CuraCloudAPIVersion = DEFAULT_CLOUD_API_VERSION + +try: + from cura.CuraVersion import CuraCloudAccountAPIRoot # type: ignore + if CuraCloudAccountAPIRoot == "": + CuraCloudAccountAPIRoot = DEFAULT_CLOUD_ACCOUNT_API_ROOT +except ImportError: + CuraCloudAccountAPIRoot = DEFAULT_CLOUD_ACCOUNT_API_ROOT diff --git a/cura_app.py b/cura_app.py index fea47e5a8b..bd6136f982 100755 --- a/cura_app.py +++ b/cura_app.py @@ -17,12 +17,6 @@ parser.add_argument("--debug", default = False, help = "Turn on the debug mode by setting this option." ) -parser.add_argument("--trigger-early-crash", - dest = "trigger_early_crash", - action = "store_true", - default = False, - help = "FOR TESTING ONLY. Trigger an early crash to show the crash dialog." - ) known_args = vars(parser.parse_known_args()[0]) if not known_args["debug"]: diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 9ee2ef0dd4..55296979b5 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -794,7 +794,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # Clear all existing containers quality_changes_info.global_info.container.clear() for container_info in quality_changes_info.extruder_info_dict.values(): - container_info.container.clear() + if container_info.container: + container_info.container.clear() # Loop over everything and override the existing containers global_info = quality_changes_info.global_info diff --git a/plugins/3MFReader/plugin.json b/plugins/3MFReader/plugin.json index 5e41975752..5af21a7033 100644 --- a/plugins/3MFReader/plugin.json +++ b/plugins/3MFReader/plugin.json @@ -1,8 +1,8 @@ { "name": "3MF Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for reading 3MF files.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/3MFWriter/plugin.json b/plugins/3MFWriter/plugin.json index 9ec4fb0c20..3820ebd2e7 100644 --- a/plugins/3MFWriter/plugin.json +++ b/plugins/3MFWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "3MF Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for writing 3MF files.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/ChangeLogPlugin/ChangeLog.py b/plugins/ChangeLogPlugin/ChangeLog.py index 723c83a021..eeec5edf9b 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.py +++ b/plugins/ChangeLogPlugin/ChangeLog.py @@ -1,4 +1,4 @@ -# Copyright (c) 2015 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.i18n import i18nCatalog @@ -29,6 +29,7 @@ class ChangeLog(Extension, QObject,): self._change_logs = None Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated) Application.getInstance().getPreferences().addPreference("general/latest_version_changelog_shown", "2.0.0") #First version of CURA with uranium + self.setMenuName(catalog.i18nc("@item:inmenu", "Changelog")) self.addMenuItem(catalog.i18nc("@item:inmenu", "Show Changelog"), self.showChangelog) def getChangeLogs(self): diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 7e5cf2dd3b..651abb0cac 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -943,7 +943,7 @@ This release adds support for printers with elliptic buildplates. This feature h *AppImage for Linux The Linux distribution is now in AppImage format, which makes Cura easier to install. -*bugfixes +*Bugfixes The user is now notified when a new version of Cura is available. When searching in the setting visibility preferences, the category for each setting is always displayed. 3MF files are now saved and loaded correctly. diff --git a/plugins/ChangeLogPlugin/plugin.json b/plugins/ChangeLogPlugin/plugin.json index e09a08564a..92041d1543 100644 --- a/plugins/ChangeLogPlugin/plugin.json +++ b/plugins/ChangeLogPlugin/plugin.json @@ -1,8 +1,8 @@ { "name": "Changelog", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Shows changes since latest checked version.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/CuraDrive/__init__.py b/plugins/CuraDrive/__init__.py new file mode 100644 index 0000000000..eeb6b78689 --- /dev/null +++ b/plugins/CuraDrive/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from .src.DrivePluginExtension import DrivePluginExtension + + +def getMetaData(): + return {} + + +def register(app): + return {"extension": DrivePluginExtension()} diff --git a/plugins/CuraDrive/plugin.json b/plugins/CuraDrive/plugin.json new file mode 100644 index 0000000000..d1cab39ca5 --- /dev/null +++ b/plugins/CuraDrive/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Cura Backups", + "author": "Ultimaker B.V.", + "description": "Backup and restore your configuration.", + "version": "1.2.0", + "api": 6, + "i18n-catalog": "cura" +} diff --git a/plugins/CuraDrive/src/DriveApiService.py b/plugins/CuraDrive/src/DriveApiService.py new file mode 100644 index 0000000000..7c1f8faa83 --- /dev/null +++ b/plugins/CuraDrive/src/DriveApiService.py @@ -0,0 +1,168 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import base64 +import hashlib +from datetime import datetime +from tempfile import NamedTemporaryFile +from typing import Any, Optional, List, Dict + +import requests + +from UM.Logger import Logger +from UM.Message import Message +from UM.Signal import Signal, signalemitter +from cura.CuraApplication import CuraApplication + +from .UploadBackupJob import UploadBackupJob +from .Settings import Settings + +from UM.i18n import i18nCatalog +catalog = i18nCatalog("cura") + + +## The DriveApiService is responsible for interacting with the CuraDrive API and Cura's backup handling. +@signalemitter +class DriveApiService: + BACKUP_URL = "{}/backups".format(Settings.DRIVE_API_URL) + + # Emit signal when restoring backup started or finished. + restoringStateChanged = Signal() + + # Emit signal when creating backup started or finished. + creatingStateChanged = Signal() + + def __init__(self) -> None: + self._cura_api = CuraApplication.getInstance().getCuraAPI() + + def getBackups(self) -> List[Dict[str, Any]]: + access_token = self._cura_api.account.accessToken + if not access_token: + Logger.log("w", "Could not get access token.") + return [] + + backup_list_request = requests.get(self.BACKUP_URL, headers = { + "Authorization": "Bearer {}".format(access_token) + }) + + # HTTP status 300s mean redirection. 400s and 500s are errors. + # Technically 300s are not errors, but the use case here relies on "requests" to handle redirects automatically. + if backup_list_request.status_code >= 300: + Logger.log("w", "Could not get backups list from remote: %s", backup_list_request.text) + Message(catalog.i18nc("@info:backup_status", "There was an error listing your backups."), title = catalog.i18nc("@info:title", "Backup")).show() + return [] + return backup_list_request.json()["data"] + + def createBackup(self) -> None: + self.creatingStateChanged.emit(is_creating = True) + + # Create the backup. + backup_zip_file, backup_meta_data = self._cura_api.backups.createBackup() + if not backup_zip_file or not backup_meta_data: + self.creatingStateChanged.emit(is_creating = False, error_message ="Could not create backup.") + return + + # Create an upload entry for the backup. + timestamp = datetime.now().isoformat() + backup_meta_data["description"] = "{}.backup.{}.cura.zip".format(timestamp, backup_meta_data["cura_release"]) + backup_upload_url = self._requestBackupUpload(backup_meta_data, len(backup_zip_file)) + if not backup_upload_url: + self.creatingStateChanged.emit(is_creating = False, error_message ="Could not upload backup.") + return + + # Upload the backup to storage. + upload_backup_job = UploadBackupJob(backup_upload_url, backup_zip_file) + upload_backup_job.finished.connect(self._onUploadFinished) + upload_backup_job.start() + + def _onUploadFinished(self, job: "UploadBackupJob") -> None: + if job.backup_upload_error_message != "": + # If the job contains an error message we pass it along so the UI can display it. + self.creatingStateChanged.emit(is_creating = False, error_message = job.backup_upload_error_message) + else: + self.creatingStateChanged.emit(is_creating = False) + + def restoreBackup(self, backup: Dict[str, Any]) -> None: + self.restoringStateChanged.emit(is_restoring = True) + download_url = backup.get("download_url") + if not download_url: + # If there is no download URL, we can't restore the backup. + return self._emitRestoreError() + + download_package = requests.get(download_url, stream = True) + if download_package.status_code >= 300: + # Something went wrong when attempting to download the backup. + Logger.log("w", "Could not download backup from url %s: %s", download_url, download_package.text) + return self._emitRestoreError() + + # We store the file in a temporary path fist to ensure integrity. + temporary_backup_file = NamedTemporaryFile(delete = False) + with open(temporary_backup_file.name, "wb") as write_backup: + for chunk in download_package: + write_backup.write(chunk) + + if not self._verifyMd5Hash(temporary_backup_file.name, backup.get("md5_hash", "")): + # Don't restore the backup if the MD5 hashes do not match. + # This can happen if the download was interrupted. + Logger.log("w", "Remote and local MD5 hashes do not match, not restoring backup.") + return self._emitRestoreError() + + # Tell Cura to place the backup back in the user data folder. + with open(temporary_backup_file.name, "rb") as read_backup: + self._cura_api.backups.restoreBackup(read_backup.read(), backup.get("metadata", {})) + self.restoringStateChanged.emit(is_restoring = False) + + def _emitRestoreError(self) -> None: + self.restoringStateChanged.emit(is_restoring = False, + error_message = catalog.i18nc("@info:backup_status", + "There was an error trying to restore your backup.")) + + # Verify the MD5 hash of a file. + # \param file_path Full path to the file. + # \param known_hash The known MD5 hash of the file. + # \return: Success or not. + @staticmethod + def _verifyMd5Hash(file_path: str, known_hash: str) -> bool: + with open(file_path, "rb") as read_backup: + local_md5_hash = base64.b64encode(hashlib.md5(read_backup.read()).digest(), altchars = b"_-").decode("utf-8") + return known_hash == local_md5_hash + + def deleteBackup(self, backup_id: str) -> bool: + access_token = self._cura_api.account.accessToken + if not access_token: + Logger.log("w", "Could not get access token.") + return False + + delete_backup = requests.delete("{}/{}".format(self.BACKUP_URL, backup_id), headers = { + "Authorization": "Bearer {}".format(access_token) + }) + if delete_backup.status_code >= 300: + Logger.log("w", "Could not delete backup: %s", delete_backup.text) + return False + return True + + # Request a backup upload slot from the API. + # \param backup_metadata: A dict containing some meta data about the backup. + # \param backup_size The size of the backup file in bytes. + # \return: The upload URL for the actual backup file if successful, otherwise None. + def _requestBackupUpload(self, backup_metadata: Dict[str, Any], backup_size: int) -> Optional[str]: + access_token = self._cura_api.account.accessToken + if not access_token: + Logger.log("w", "Could not get access token.") + return None + + backup_upload_request = requests.put(self.BACKUP_URL, json = { + "data": { + "backup_size": backup_size, + "metadata": backup_metadata + } + }, headers = { + "Authorization": "Bearer {}".format(access_token) + }) + + # Any status code of 300 or above indicates an error. + if backup_upload_request.status_code >= 300: + Logger.log("w", "Could not request backup upload: %s", backup_upload_request.text) + return None + + return backup_upload_request.json()["data"]["upload_url"] diff --git a/plugins/CuraDrive/src/DrivePluginExtension.py b/plugins/CuraDrive/src/DrivePluginExtension.py new file mode 100644 index 0000000000..060f1496f1 --- /dev/null +++ b/plugins/CuraDrive/src/DrivePluginExtension.py @@ -0,0 +1,162 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import os +from datetime import datetime +from typing import Optional, List, Dict, Any + +from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal + +from UM.Extension import Extension +from UM.Logger import Logger +from UM.Message import Message +from cura.CuraApplication import CuraApplication + +from .Settings import Settings +from .DriveApiService import DriveApiService + +from UM.i18n import i18nCatalog +catalog = i18nCatalog("cura") + + +# The DivePluginExtension provides functionality to backup and restore your Cura configuration to Ultimaker's cloud. +class DrivePluginExtension(QObject, Extension): + + # Signal emitted when the list of backups changed. + backupsChanged = pyqtSignal() + + # Signal emitted when restoring has started. Needed to prevent parallel restoring. + restoringStateChanged = pyqtSignal() + + # Signal emitted when creating has started. Needed to prevent parallel creation of backups. + creatingStateChanged = pyqtSignal() + + # Signal emitted when preferences changed (like auto-backup). + preferencesChanged = pyqtSignal() + + DATE_FORMAT = "%d/%m/%Y %H:%M:%S" + + def __init__(self) -> None: + QObject.__init__(self, None) + Extension.__init__(self) + + # Local data caching for the UI. + self._drive_window = None # type: Optional[QObject] + self._backups = [] # type: List[Dict[str, Any]] + self._is_restoring_backup = False + self._is_creating_backup = False + + # Initialize services. + preferences = CuraApplication.getInstance().getPreferences() + self._drive_api_service = DriveApiService() + + # Attach signals. + CuraApplication.getInstance().getCuraAPI().account.loginStateChanged.connect(self._onLoginStateChanged) + self._drive_api_service.restoringStateChanged.connect(self._onRestoringStateChanged) + self._drive_api_service.creatingStateChanged.connect(self._onCreatingStateChanged) + + # Register preferences. + preferences.addPreference(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY, False) + preferences.addPreference(Settings.AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY, + datetime.now().strftime(self.DATE_FORMAT)) + + # Register the menu item + self.addMenuItem(catalog.i18nc("@item:inmenu", "Manage backups"), self.showDriveWindow) + + # Make auto-backup on boot if required. + CuraApplication.getInstance().engineCreatedSignal.connect(self._autoBackup) + + def showDriveWindow(self) -> None: + if not self._drive_window: + plugin_dir_path = CuraApplication.getInstance().getPluginRegistry().getPluginPath("CuraDrive") + path = os.path.join(plugin_dir_path, "src", "qml", "main.qml") + self._drive_window = CuraApplication.getInstance().createQmlComponent(path, {"CuraDrive": self}) + self.refreshBackups() + if self._drive_window: + self._drive_window.show() + + def _autoBackup(self) -> None: + preferences = CuraApplication.getInstance().getPreferences() + if preferences.getValue(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY) and self._isLastBackupTooLongAgo(): + self.createBackup() + + def _isLastBackupTooLongAgo(self) -> bool: + current_date = datetime.now() + last_backup_date = self._getLastBackupDate() + date_diff = current_date - last_backup_date + return date_diff.days > 1 + + def _getLastBackupDate(self) -> "datetime": + preferences = CuraApplication.getInstance().getPreferences() + last_backup_date = preferences.getValue(Settings.AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY) + return datetime.strptime(last_backup_date, self.DATE_FORMAT) + + def _storeBackupDate(self) -> None: + backup_date = datetime.now().strftime(self.DATE_FORMAT) + preferences = CuraApplication.getInstance().getPreferences() + preferences.setValue(Settings.AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY, backup_date) + + def _onLoginStateChanged(self, logged_in: bool = False) -> None: + if logged_in: + self.refreshBackups() + + def _onRestoringStateChanged(self, is_restoring: bool = False, error_message: str = None) -> None: + self._is_restoring_backup = is_restoring + self.restoringStateChanged.emit() + if error_message: + Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show() + + def _onCreatingStateChanged(self, is_creating: bool = False, error_message: str = None) -> None: + self._is_creating_backup = is_creating + self.creatingStateChanged.emit() + if error_message: + Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show() + else: + self._storeBackupDate() + if not is_creating and not error_message: + # We've finished creating a new backup, to the list has to be updated. + self.refreshBackups() + + @pyqtSlot(bool, name = "toggleAutoBackup") + def toggleAutoBackup(self, enabled: bool) -> None: + preferences = CuraApplication.getInstance().getPreferences() + preferences.setValue(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY, enabled) + + @pyqtProperty(bool, notify = preferencesChanged) + def autoBackupEnabled(self) -> bool: + preferences = CuraApplication.getInstance().getPreferences() + return bool(preferences.getValue(Settings.AUTO_BACKUP_ENABLED_PREFERENCE_KEY)) + + @pyqtProperty("QVariantList", notify = backupsChanged) + def backups(self) -> List[Dict[str, Any]]: + return self._backups + + @pyqtSlot(name = "refreshBackups") + def refreshBackups(self) -> None: + self._backups = self._drive_api_service.getBackups() + self.backupsChanged.emit() + + @pyqtProperty(bool, notify = restoringStateChanged) + def isRestoringBackup(self) -> bool: + return self._is_restoring_backup + + @pyqtProperty(bool, notify = creatingStateChanged) + def isCreatingBackup(self) -> bool: + return self._is_creating_backup + + @pyqtSlot(str, name = "restoreBackup") + def restoreBackup(self, backup_id: str) -> None: + for backup in self._backups: + if backup.get("backup_id") == backup_id: + self._drive_api_service.restoreBackup(backup) + return + Logger.log("w", "Unable to find backup with the ID %s", backup_id) + + @pyqtSlot(name = "createBackup") + def createBackup(self) -> None: + self._drive_api_service.createBackup() + + @pyqtSlot(str, name = "deleteBackup") + def deleteBackup(self, backup_id: str) -> None: + self._drive_api_service.deleteBackup(backup_id) + self.refreshBackups() diff --git a/plugins/CuraDrive/src/Settings.py b/plugins/CuraDrive/src/Settings.py new file mode 100644 index 0000000000..abe64e0acd --- /dev/null +++ b/plugins/CuraDrive/src/Settings.py @@ -0,0 +1,13 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from cura import UltimakerCloudAuthentication + + +class Settings: + # Keeps the plugin settings. + DRIVE_API_VERSION = 1 + DRIVE_API_URL = "{}/cura-drive/v{}".format(UltimakerCloudAuthentication.CuraCloudAPIRoot, str(DRIVE_API_VERSION)) + + AUTO_BACKUP_ENABLED_PREFERENCE_KEY = "cura_drive/auto_backup_enabled" + AUTO_BACKUP_LAST_DATE_PREFERENCE_KEY = "cura_drive/auto_backup_date" diff --git a/plugins/CuraDrive/src/UploadBackupJob.py b/plugins/CuraDrive/src/UploadBackupJob.py new file mode 100644 index 0000000000..2e76ed9b4b --- /dev/null +++ b/plugins/CuraDrive/src/UploadBackupJob.py @@ -0,0 +1,41 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import requests + +from UM.Job import Job +from UM.Logger import Logger +from UM.Message import Message + +from UM.i18n import i18nCatalog +catalog = i18nCatalog("cura") + + +class UploadBackupJob(Job): + MESSAGE_TITLE = catalog.i18nc("@info:title", "Backups") + + # This job is responsible for uploading the backup file to cloud storage. + # As it can take longer than some other tasks, we schedule this using a Cura Job. + def __init__(self, signed_upload_url: str, backup_zip: bytes) -> None: + super().__init__() + self._signed_upload_url = signed_upload_url + self._backup_zip = backup_zip + self._upload_success = False + self.backup_upload_error_message = "" + + def run(self) -> None: + upload_message = Message(catalog.i18nc("@info:backup_status", "Uploading your backup..."), title = self.MESSAGE_TITLE, progress = -1) + upload_message.show() + + backup_upload = requests.put(self._signed_upload_url, data = self._backup_zip) + upload_message.hide() + + if backup_upload.status_code >= 300: + self.backup_upload_error_message = backup_upload.text + Logger.log("w", "Could not upload backup file: %s", backup_upload.text) + Message(catalog.i18nc("@info:backup_status", "There was an error while uploading your backup."), title = self.MESSAGE_TITLE).show() + else: + self._upload_success = True + Message(catalog.i18nc("@info:backup_status", "Your backup has finished uploading."), title = self.MESSAGE_TITLE).show() + + self.finished.emit(self) diff --git a/plugins/CuraDrive/src/__init__.py b/plugins/CuraDrive/src/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/plugins/CuraDrive/src/__init__.py diff --git a/plugins/CuraDrive/src/qml/components/BackupList.qml b/plugins/CuraDrive/src/qml/components/BackupList.qml new file mode 100644 index 0000000000..a4a460a885 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupList.qml @@ -0,0 +1,39 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.2 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM + +ScrollView +{ + property alias model: backupList.model + width: parent.width + clip: true + ListView + { + id: backupList + width: parent.width + delegate: Item + { + // Add a margin, otherwise the scrollbar is on top of the right most component + width: parent.width - UM.Theme.getSize("default_margin").width + height: childrenRect.height + + BackupListItem + { + id: backupListItem + width: parent.width + } + + Rectangle + { + id: divider + color: UM.Theme.getColor("lining") + height: UM.Theme.getSize("default_lining").height + } + } + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListFooter.qml b/plugins/CuraDrive/src/qml/components/BackupListFooter.qml new file mode 100644 index 0000000000..8decdc5c27 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListFooter.qml @@ -0,0 +1,46 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +import "../components" + +RowLayout +{ + id: backupListFooter + width: parent.width + property bool showInfoButton: false + + Cura.PrimaryButton + { + id: infoButton + text: catalog.i18nc("@button", "Want more?") + iconSource: UM.Theme.getIcon("info") + onClicked: Qt.openUrlExternally("https://goo.gl/forms/QACEP8pP3RV60QYG2") + visible: backupListFooter.showInfoButton + } + + Cura.PrimaryButton + { + id: createBackupButton + text: catalog.i18nc("@button", "Backup Now") + iconSource: UM.Theme.getIcon("plus") + enabled: !CuraDrive.isCreatingBackup && !CuraDrive.isRestoringBackup + onClicked: CuraDrive.createBackup() + busy: CuraDrive.isCreatingBackup + } + + Cura.CheckBoxWithTooltip + { + id: autoBackupEnabled + checked: CuraDrive.autoBackupEnabled + onClicked: CuraDrive.toggleAutoBackup(autoBackupEnabled.checked) + text: catalog.i18nc("@checkbox:description", "Auto Backup") + tooltip: catalog.i18nc("@checkbox:description", "Automatically create a backup each day that Cura is started.") + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListItem.qml b/plugins/CuraDrive/src/qml/components/BackupListItem.qml new file mode 100644 index 0000000000..5cdb500b4e --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListItem.qml @@ -0,0 +1,113 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Item +{ + id: backupListItem + width: parent.width + height: showDetails ? dataRow.height + backupDetails.height : dataRow.height + property bool showDetails: false + + // Backup details toggle animation. + Behavior on height + { + PropertyAnimation + { + duration: 70 + } + } + + RowLayout + { + id: dataRow + spacing: UM.Theme.getSize("wide_margin").width + width: parent.width + height: 50 * screenScaleFactor + + UM.SimpleButton + { + width: UM.Theme.getSize("section_icon").width + height: UM.Theme.getSize("section_icon").height + color: UM.Theme.getColor("small_button_text") + hoverColor: UM.Theme.getColor("small_button_text_hover") + iconSource: UM.Theme.getIcon("info") + onClicked: backupListItem.showDetails = !backupListItem.showDetails + } + + Label + { + text: new Date(modelData.generated_time).toLocaleString(UM.Preferences.getValue("general/language")) + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 100 * screenScaleFactor + Layout.maximumWidth: 500 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Label + { + text: modelData.metadata.description + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 100 * screenScaleFactor + Layout.maximumWidth: 500 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Cura.SecondaryButton + { + text: catalog.i18nc("@button", "Restore") + enabled: !CuraDrive.isCreatingBackup && !CuraDrive.isRestoringBackup + onClicked: confirmRestoreDialog.visible = true + } + + UM.SimpleButton + { + width: UM.Theme.getSize("message_close").width + height: UM.Theme.getSize("message_close").height + color: UM.Theme.getColor("small_button_text") + hoverColor: UM.Theme.getColor("small_button_text_hover") + iconSource: UM.Theme.getIcon("cross1") + onClicked: confirmDeleteDialog.visible = true + } + } + + BackupListItemDetails + { + id: backupDetails + backupDetailsData: modelData + width: parent.width + visible: parent.showDetails + anchors.top: dataRow.bottom + } + + MessageDialog + { + id: confirmDeleteDialog + title: catalog.i18nc("@dialog:title", "Delete Backup") + text: catalog.i18nc("@dialog:info", "Are you sure you want to delete this backup? This cannot be undone.") + standardButtons: StandardButton.Yes | StandardButton.No + onYes: CuraDrive.deleteBackup(modelData.backup_id) + } + + MessageDialog + { + id: confirmRestoreDialog + title: catalog.i18nc("@dialog:title", "Restore Backup") + text: catalog.i18nc("@dialog:info", "You will need to restart Cura before your backup is restored. Do you want to close Cura now?") + standardButtons: StandardButton.Yes | StandardButton.No + onYes: CuraDrive.restoreBackup(modelData.backup_id) + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListItemDetails.qml b/plugins/CuraDrive/src/qml/components/BackupListItemDetails.qml new file mode 100644 index 0000000000..4da15c6f16 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListItemDetails.qml @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM + +ColumnLayout +{ + id: backupDetails + width: parent.width + spacing: UM.Theme.getSize("default_margin").width + property var backupDetailsData + + // Cura version + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("application") + label: catalog.i18nc("@backuplist:label", "Cura Version") + value: backupDetailsData.metadata.cura_release + } + + // Machine count. + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("printer_single") + label: catalog.i18nc("@backuplist:label", "Machines") + value: backupDetailsData.metadata.machine_count + } + + // Material count + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("category_material") + label: catalog.i18nc("@backuplist:label", "Materials") + value: backupDetailsData.metadata.material_count + } + + // Profile count. + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("settings") + label: catalog.i18nc("@backuplist:label", "Profiles") + value: backupDetailsData.metadata.profile_count + } + + // Plugin count. + BackupListItemDetailsRow + { + iconSource: UM.Theme.getIcon("plugin") + label: catalog.i18nc("@backuplist:label", "Plugins") + value: backupDetailsData.metadata.plugin_count + } + + // Spacer. + Item + { + width: parent.width + height: UM.Theme.getSize("default_margin").height + } +} diff --git a/plugins/CuraDrive/src/qml/components/BackupListItemDetailsRow.qml b/plugins/CuraDrive/src/qml/components/BackupListItemDetailsRow.qml new file mode 100644 index 0000000000..9e4612fcf8 --- /dev/null +++ b/plugins/CuraDrive/src/qml/components/BackupListItemDetailsRow.qml @@ -0,0 +1,52 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM + +RowLayout +{ + id: detailsRow + width: parent.width + height: 40 * screenScaleFactor + + property alias iconSource: icon.source + property alias label: detailName.text + property alias value: detailValue.text + + UM.RecolorImage + { + id: icon + width: 18 * screenScaleFactor + height: width + source: "" + color: UM.Theme.getColor("text") + } + + Label + { + id: detailName + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 50 * screenScaleFactor + Layout.maximumWidth: 100 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Label + { + id: detailValue + color: UM.Theme.getColor("text") + elide: Text.ElideRight + Layout.minimumWidth: 50 * screenScaleFactor + Layout.maximumWidth: 100 * screenScaleFactor + Layout.fillWidth: true + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } +} diff --git a/plugins/CuraDrive/src/qml/images/icon.png b/plugins/CuraDrive/src/qml/images/icon.png Binary files differnew file mode 100644 index 0000000000..3f75491786 --- /dev/null +++ b/plugins/CuraDrive/src/qml/images/icon.png diff --git a/plugins/CuraDrive/src/qml/main.qml b/plugins/CuraDrive/src/qml/main.qml new file mode 100644 index 0000000000..48bf3b6ea4 --- /dev/null +++ b/plugins/CuraDrive/src/qml/main.qml @@ -0,0 +1,44 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Window 2.2 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "components" +import "pages" + +Window +{ + id: curaDriveDialog + minimumWidth: Math.round(UM.Theme.getSize("modal_window_minimum").width) + minimumHeight: Math.round(UM.Theme.getSize("modal_window_minimum").height) + maximumWidth: Math.round(minimumWidth * 1.2) + maximumHeight: Math.round(minimumHeight * 1.2) + width: minimumWidth + height: minimumHeight + color: UM.Theme.getColor("main_background") + title: catalog.i18nc("@title:window", "Cura Backups") + + // Globally available. + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + WelcomePage + { + id: welcomePage + visible: !Cura.API.account.isLoggedIn + } + + BackupsPage + { + id: backupsPage + visible: Cura.API.account.isLoggedIn + } +} diff --git a/plugins/CuraDrive/src/qml/pages/BackupsPage.qml b/plugins/CuraDrive/src/qml/pages/BackupsPage.qml new file mode 100644 index 0000000000..c337294744 --- /dev/null +++ b/plugins/CuraDrive/src/qml/pages/BackupsPage.qml @@ -0,0 +1,75 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "../components" + +Item +{ + id: backupsPage + anchors.fill: parent + anchors.margins: UM.Theme.getSize("wide_margin").width + + ColumnLayout + { + spacing: UM.Theme.getSize("wide_margin").height + width: parent.width + anchors.fill: parent + + Label + { + id: backupTitle + text: catalog.i18nc("@title", "My Backups") + font: UM.Theme.getFont("large") + color: UM.Theme.getColor("text") + Layout.fillWidth: true + renderType: Text.NativeRendering + } + + Label + { + text: catalog.i18nc("@empty_state", + "You don't have any backups currently. Use the 'Backup Now' button to create one.") + width: parent.width + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + wrapMode: Label.WordWrap + visible: backupList.model.length == 0 + Layout.fillWidth: true + Layout.fillHeight: true + renderType: Text.NativeRendering + } + + BackupList + { + id: backupList + model: CuraDrive.backups + Layout.fillWidth: true + Layout.fillHeight: true + } + + Label + { + text: catalog.i18nc("@backup_limit_info", + "During the preview phase, you'll be limited to 5 visible backups. Remove a backup to see older ones.") + width: parent.width + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + wrapMode: Label.WordWrap + visible: backupList.model.length > 4 + renderType: Text.NativeRendering + } + + BackupListFooter + { + id: backupListFooter + showInfoButton: backupList.model.length > 4 + } + } +} diff --git a/plugins/CuraDrive/src/qml/pages/WelcomePage.qml b/plugins/CuraDrive/src/qml/pages/WelcomePage.qml new file mode 100644 index 0000000000..0b207bc170 --- /dev/null +++ b/plugins/CuraDrive/src/qml/pages/WelcomePage.qml @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Window 2.2 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "../components" + + +Column +{ + id: welcomePage + spacing: UM.Theme.getSize("wide_margin").height + width: parent.width + height: childrenRect.height + anchors.centerIn: parent + + Image + { + id: profileImage + fillMode: Image.PreserveAspectFit + source: "../images/icon.png" + anchors.horizontalCenter: parent.horizontalCenter + width: Math.round(parent.width / 4) + } + + Label + { + id: welcomeTextLabel + text: catalog.i18nc("@description", "Backup and synchronize your Cura settings.") + width: Math.round(parent.width / 2) + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + anchors.horizontalCenter: parent.horizontalCenter + wrapMode: Label.WordWrap + renderType: Text.NativeRendering + } + + Cura.PrimaryButton + { + id: loginButton + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + anchors.horizontalCenter: parent.horizontalCenter + text: catalog.i18nc("@button", "Sign in") + onClicked: Cura.API.account.login() + fixedWidthMode: true + } +} + diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 292330576b..2eabe62366 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -29,7 +29,7 @@ message Object bytes normals = 3; //An array of 3 floats. bytes indices = 4; //An array of ints. repeated Setting settings = 5; // Setting override per object, overruling the global settings. - string name = 6; + string name = 6; //Mesh name } message Progress @@ -58,6 +58,7 @@ message Polygon { MoveCombingType = 8; MoveRetractionType = 9; SupportInterfaceType = 10; + PrimeTowerType = 11; } Type type = 1; // Type of move bytes points = 2; // The points of the polygon, or two points if only a line segment (Currently only line segments are used) @@ -108,8 +109,9 @@ message PrintTimeMaterialEstimates { // The print time for each feature and mate float time_travel = 9; float time_retract = 10; float time_support_interface = 11; + float time_prime_tower = 12; - repeated MaterialEstimates materialEstimates = 12; // materialEstimates data + repeated MaterialEstimates materialEstimates = 13; // materialEstimates data } message MaterialEstimates { diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 58bc74f3f1..ef0898bb04 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -86,8 +86,8 @@ class CuraEngineBackend(QObject, Backend): self._layer_view_active = False #type: bool self._onActiveViewChanged() - self._stored_layer_data = [] #type: List[Arcus.PythonMessage] - self._stored_optimized_layer_data = {} #type: Dict[int, List[Arcus.PythonMessage]] # key is build plate number, then arrays are stored until they go to the ProcessSlicesLayersJob + self._stored_layer_data = [] # type: List[Arcus.PythonMessage] + self._stored_optimized_layer_data = {} # type: Dict[int, List[Arcus.PythonMessage]] # key is build plate number, then arrays are stored until they go to the ProcessSlicesLayersJob self._scene = self._application.getController().getScene() #type: Scene self._scene.sceneChanged.connect(self._onSceneChanged) @@ -203,7 +203,7 @@ class CuraEngineBackend(QObject, Backend): @pyqtSlot() def stopSlicing(self) -> None: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) if self._slicing: # We were already slicing. Stop the old job. self._terminate() self._createSocket() @@ -229,6 +229,7 @@ class CuraEngineBackend(QObject, Backend): if not self._build_plates_to_be_sliced: self.processingProgress.emit(1.0) Logger.log("w", "Slice unnecessary, nothing has changed that needs reslicing.") + self.setState(BackendState.Done) return if self._process_layers_job: @@ -245,7 +246,7 @@ class CuraEngineBackend(QObject, Backend): num_objects = self._numObjectsPerBuildPlate() self._stored_layer_data = [] - self._stored_optimized_layer_data[build_plate_to_be_sliced] = [] + if build_plate_to_be_sliced not in num_objects or num_objects[build_plate_to_be_sliced] == 0: self._scene.gcode_dict[build_plate_to_be_sliced] = [] #type: ignore #Because we created this attribute above. @@ -253,7 +254,7 @@ class CuraEngineBackend(QObject, Backend): if self._build_plates_to_be_sliced: self.slice() return - + self._stored_optimized_layer_data[build_plate_to_be_sliced] = [] if self._application.getPrintInformation() and build_plate_to_be_sliced == active_build_plate: self._application.getPrintInformation().setToZeroPrintInformation(build_plate_to_be_sliced) @@ -322,7 +323,7 @@ class CuraEngineBackend(QObject, Backend): self._start_slice_job = None if job.isCancelled() or job.getError() or job.getResult() == StartJobResult.Error: - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) return @@ -331,10 +332,10 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current material as it is incompatible with the selected machine or configuration."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) return if job.getResult() == StartJobResult.SettingError: @@ -362,10 +363,10 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}").format(", ".join(error_labels)), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) return elif job.getResult() == StartJobResult.ObjectSettingError: @@ -386,7 +387,7 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = ", ".join(errors.values())), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) return @@ -395,28 +396,28 @@ class CuraEngineBackend(QObject, Backend): self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) if job.getResult() == StartJobResult.ObjectsWithDisabledExtruder: self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because there are objects associated with disabled Extruder %s." % job.getMessage()), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) return if job.getResult() == StartJobResult.NothingToSlice: if self._application.platformActivity: - self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit."), + self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume or are assigned to a disabled extruder. Please scale or rotate models to fit, or enable an extruder."), title = catalog.i18nc("@info:title", "Unable to slice")) self._error_message.show() - self.backendStateChange.emit(BackendState.Error) + self.setState(BackendState.Error) self.backendError.emit(job) else: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) self._invokeSlice() return @@ -424,7 +425,7 @@ class CuraEngineBackend(QObject, Backend): self._socket.sendMessage(job.getSliceMessage()) # Notify the user that it's now up to the backend to do it's job - self.backendStateChange.emit(BackendState.Processing) + self.setState(BackendState.Processing) if self._slice_start_time: Logger.log("d", "Sending slice message took %s seconds", time() - self._slice_start_time ) @@ -442,7 +443,7 @@ class CuraEngineBackend(QObject, Backend): for node in DepthFirstIterator(self._scene.getRoot()): #type: ignore #Ignore type error because iter() should get called automatically by Python syntax. if node.callDecoration("isBlockSlicing"): enable_timer = False - self.backendStateChange.emit(BackendState.Disabled) + self.setState(BackendState.Disabled) self._is_disabled = True gcode_list = node.callDecoration("getGCodeList") if gcode_list is not None: @@ -451,7 +452,7 @@ class CuraEngineBackend(QObject, Backend): if self._use_timer == enable_timer: return self._use_timer if enable_timer: - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) self.enableTimer() return True else: @@ -518,7 +519,7 @@ class CuraEngineBackend(QObject, Backend): self._build_plates_to_be_sliced.append(build_plate_number) self.printDurationMessage.emit(source_build_plate_number, {}, []) self.processingProgress.emit(0.0) - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) # if not self._use_timer: # With manually having to slice, we want to clear the old invalid layer data. self._clearLayerData(build_plate_changed) @@ -567,7 +568,7 @@ class CuraEngineBackend(QObject, Backend): self.stopSlicing() self.markSliceAll() self.processingProgress.emit(0.0) - self.backendStateChange.emit(BackendState.NotStarted) + self.setState(BackendState.NotStarted) if not self._use_timer: # With manually having to slice, we want to clear the old invalid layer data. self._clearLayerData() @@ -613,7 +614,7 @@ class CuraEngineBackend(QObject, Backend): # \param message The protobuf message containing the slicing progress. def _onProgressMessage(self, message: Arcus.PythonMessage) -> None: self.processingProgress.emit(message.amount) - self.backendStateChange.emit(BackendState.Processing) + self.setState(BackendState.Processing) def _invokeSlice(self) -> None: if self._use_timer: @@ -632,7 +633,7 @@ class CuraEngineBackend(QObject, Backend): # # \param message The protobuf message signalling that slicing is finished. def _onSlicingFinishedMessage(self, message: Arcus.PythonMessage) -> None: - self.backendStateChange.emit(BackendState.Done) + self.setState(BackendState.Done) self.processingProgress.emit(1.0) gcode_list = self._scene.gcode_dict[self._start_slice_job_build_plate] #type: ignore #Because we generate this attribute dynamically. @@ -832,7 +833,10 @@ class CuraEngineBackend(QObject, Backend): self._onChanged() def _onProcessLayersFinished(self, job: ProcessSlicedLayersJob) -> None: - del self._stored_optimized_layer_data[job.getBuildPlate()] + if job.getBuildPlate() in self._stored_optimized_layer_data: + del self._stored_optimized_layer_data[job.getBuildPlate()] + else: + Logger.log("w", "The optimized layer data was already deleted for buildplate %s", job.getBuildPlate()) self._process_layers_job = None Logger.log("d", "See if there is more to slice(2)...") self._invokeSlice() diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py index 594bf3a43e..3cc23130ea 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py @@ -137,6 +137,7 @@ class ProcessSlicedLayersJob(Job): extruder = polygon.extruder line_types = numpy.fromstring(polygon.line_type, dtype="u1") # Convert bytearray to numpy array + line_types = line_types.reshape((-1,1)) points = numpy.fromstring(polygon.points, dtype="f4") # Convert bytearray to numpy array @@ -195,7 +196,7 @@ class ProcessSlicedLayersJob(Job): if extruders: material_color_map = numpy.zeros((len(extruders), 4), dtype=numpy.float32) for extruder in extruders: - position = int(extruder.getMetaDataEntry("position", default="0")) # Get the position + position = int(extruder.getMetaDataEntry("position", default = "0")) try: default_color = ExtrudersModel.defaultColors[position] except IndexError: diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 79b1e5249c..d3882a1209 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -66,11 +66,19 @@ class GcodeStartEndFormatter(Formatter): return "{" + key + "}" key = key_fragments[0] - try: - return kwargs[str(extruder_nr)][key] - except KeyError: + + default_value_str = "{" + key + "}" + value = default_value_str + # "-1" is global stack, and if the setting value exists in the global stack, use it as the fallback value. + if key in kwargs["-1"]: + value = kwargs["-1"] + if str(extruder_nr) in kwargs and key in kwargs[str(extruder_nr)]: + value = kwargs[str(extruder_nr)][key] + + if value == default_value_str: Logger.log("w", "Unable to replace '%s' placeholder in start/end g-code", key) - return "{" + key + "}" + + return value ## Job class that builds up the message of scene data to send to CuraEngine. @@ -315,7 +323,7 @@ class StartSliceJob(Job): value = stack.getProperty(key, "value") result[key] = value Job.yieldThread() - + result["print_bed_temperature"] = result["material_bed_temperature"] # Renamed settings. result["print_temperature"] = result["material_print_temperature"] result["time"] = time.strftime("%H:%M:%S") #Some extra settings. diff --git a/plugins/CuraEngineBackend/plugin.json b/plugins/CuraEngineBackend/plugin.json index 111698d8d1..28f0e294e7 100644 --- a/plugins/CuraEngineBackend/plugin.json +++ b/plugins/CuraEngineBackend/plugin.json @@ -2,7 +2,7 @@ "name": "CuraEngine Backend", "author": "Ultimaker B.V.", "description": "Provides the link to the CuraEngine slicing backend.", - "api": 5, - "version": "1.0.0", + "api": "6.0", + "version": "1.0.1", "i18n-catalog": "cura" } diff --git a/plugins/CuraProfileReader/plugin.json b/plugins/CuraProfileReader/plugin.json index 66a2a6a56b..169fb43360 100644 --- a/plugins/CuraProfileReader/plugin.json +++ b/plugins/CuraProfileReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Cura Profile Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for importing Cura profiles.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/CuraProfileWriter/plugin.json b/plugins/CuraProfileWriter/plugin.json index 16c8c34152..9627c754d7 100644 --- a/plugins/CuraProfileWriter/plugin.json +++ b/plugins/CuraProfileWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "Cura Profile Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for exporting Cura profiles.", - "api": 5, + "api": "6.0", "i18n-catalog":"cura" } diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py index 415931b7ec..13b2e69b63 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py @@ -76,7 +76,7 @@ class FirmwareUpdateChecker(Extension): Logger.log("i", "No machine with name {0} in list of firmware to check.".format(container_name)) return - self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent, + self._check_job = FirmwareUpdateCheckerJob(silent = silent, machine_name = container_name, metadata = metadata, callback = self._onActionTriggered) self._check_job.start() diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py index 4c60b95824..a1460cca3f 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py @@ -25,15 +25,14 @@ class FirmwareUpdateCheckerJob(Job): ZERO_VERSION = Version(STRING_ZERO_VERSION) EPSILON_VERSION = Version(STRING_EPSILON_VERSION) - def __init__(self, container, silent, machine_name, metadata, callback) -> None: + def __init__(self, silent, machine_name, metadata, callback) -> None: super().__init__() - self._container = container self.silent = silent self._callback = callback self._machine_name = machine_name self._metadata = metadata - self._lookups = None # type:Optional[FirmwareUpdateCheckerLookup] + self._lookups = FirmwareUpdateCheckerLookup(self._machine_name, self._metadata) self._headers = {} # type:Dict[str, str] # Don't set headers yet. def getUrlResponse(self, url: str) -> str: @@ -45,7 +44,6 @@ class FirmwareUpdateCheckerJob(Job): result = response.read().decode("utf-8") except URLError: Logger.log("w", "Could not reach '{0}', if this URL is old, consider removal.".format(url)) - return result def parseVersionResponse(self, response: str) -> Version: @@ -70,9 +68,6 @@ class FirmwareUpdateCheckerJob(Job): return max_version def run(self): - if self._lookups is None: - self._lookups = FirmwareUpdateCheckerLookup(self._machine_name, self._metadata) - try: # Initialize a Preference that stores the last version checked for this printer. Application.getInstance().getPreferences().addPreference( @@ -83,16 +78,18 @@ class FirmwareUpdateCheckerJob(Job): application_version = Application.getInstance().getVersion() self._headers = {"User-Agent": "%s - %s" % (application_name, application_version)} - # get machine name from the definition container - machine_name = self._container.definition.getName() - # If it is not None, then we compare between the checked_version and the current_version machine_id = self._lookups.getMachineId() if machine_id is not None: - Logger.log("i", "You have a(n) {0} in the printer list. Let's check the firmware!".format(machine_name)) + Logger.log("i", "You have a(n) {0} in the printer list. Do firmware-check.".format(self._machine_name)) current_version = self.getCurrentVersion() + # This case indicates that was an error checking the version. + # It happens for instance when not connected to internet. + if current_version == self.ZERO_VERSION: + return + # If it is the first time the version is checked, the checked_version is "" setting_key_str = getSettingsKeyForMachine(machine_id) checked_version = Version(Application.getInstance().getPreferences().getValue(setting_key_str)) @@ -100,18 +97,20 @@ class FirmwareUpdateCheckerJob(Job): # If the checked_version is "", it's because is the first time we check firmware and in this case # we will not show the notification, but we will store it for the next time Application.getInstance().getPreferences().setValue(setting_key_str, current_version) - Logger.log("i", "Reading firmware version of %s: checked = %s - latest = %s", machine_name, checked_version, current_version) + Logger.log("i", "Reading firmware version of %s: checked = %s - latest = %s", + self._machine_name, checked_version, current_version) # The first time we want to store the current version, the notification will not be shown, # because the new version of Cura will be release before the firmware and we don't want to # notify the user when no new firmware version is available. if (checked_version != "") and (checked_version != current_version): Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE") - message = FirmwareUpdateCheckerMessage(machine_id, machine_name, self._lookups.getRedirectUserUrl()) + message = FirmwareUpdateCheckerMessage(machine_id, self._machine_name, + self._lookups.getRedirectUserUrl()) message.actionTriggered.connect(self._callback) message.show() else: - Logger.log("i", "No machine with name {0} in list of firmware to check.".format(machine_name)) + Logger.log("i", "No machine with name {0} in list of firmware to check.".format(self._machine_name)) except Exception as e: Logger.log("w", "Failed to check for new version: %s", e) diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py index a21ad3f0e5..c78e6f6025 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py @@ -18,7 +18,7 @@ class FirmwareUpdateCheckerLookup: self._machine_id = machine_json.get("id") self._machine_name = machine_name.lower() # Lower in-case upper-case chars are added to the original json. self._check_urls = [] # type:List[str] - for check_url in machine_json.get("check_urls"): + for check_url in machine_json.get("check_urls", []): self._check_urls.append(check_url) self._redirect_user = machine_json.get("update_url") diff --git a/plugins/FirmwareUpdateChecker/plugin.json b/plugins/FirmwareUpdateChecker/plugin.json index cbbd41e420..6c55d77fd8 100644 --- a/plugins/FirmwareUpdateChecker/plugin.json +++ b/plugins/FirmwareUpdateChecker/plugin.json @@ -1,8 +1,8 @@ { "name": "Firmware Update Checker", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Checks for firmware updates.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/FirmwareUpdateChecker/tests/TestFirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/tests/TestFirmwareUpdateChecker.py new file mode 100644 index 0000000000..8cd7083f16 --- /dev/null +++ b/plugins/FirmwareUpdateChecker/tests/TestFirmwareUpdateChecker.py @@ -0,0 +1,63 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import pytest + +from unittest.mock import MagicMock + +from UM.Version import Version + +from plugins.FirmwareUpdateChecker.FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob +from plugins.FirmwareUpdateChecker.FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup + +json_data = \ + { + "ned": + { + "id": 1, + "name": "ned", + "check_urls": [""], + "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware", + "version_parser": "default" + }, + "olivia": + { + "id": 3, + "name": "olivia", + "check_urls": [""], + "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware", + "version_parser": "default" + }, + "emmerson": + { + "id": 5, + "name": "emmerson", + "check_urls": [""], + "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware", + "version_parser": "default" + } + } + +@pytest.mark.parametrize("name, id", [ + ("ned" , 1), + ("olivia" , 3), + ("emmerson", 5), +]) +def test_FirmwareUpdateCheckerLookup(id, name): + lookup = FirmwareUpdateCheckerLookup(name, json_data.get(name)) + + assert lookup.getMachineName() == name + assert lookup.getMachineId() == id + assert len(lookup.getCheckUrls()) >= 1 + assert lookup.getRedirectUserUrl() is not None + +@pytest.mark.parametrize("name, version", [ + ("ned" , Version("5.1.2.3")), + ("olivia" , Version("4.3.2.1")), + ("emmerson", Version("6.7.8.1")), +]) +def test_FirmwareUpdateCheckerJob_getCurrentVersion(name, version): + machine_data = json_data.get(name) + job = FirmwareUpdateCheckerJob(False, name, machine_data, MagicMock) + job.getUrlResponse = MagicMock(return_value = str(version)) # Pretend like we got a good response from the server + assert job.getCurrentVersion() == version diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py index 0a3e3a0ff0..59552775b6 100644 --- a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py +++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py @@ -57,7 +57,7 @@ class FirmwareUpdaterMachineAction(MachineAction): outputDeviceCanUpdateFirmwareChanged = pyqtSignal() @pyqtProperty(QObject, notify = outputDeviceCanUpdateFirmwareChanged) def firmwareUpdater(self) -> Optional["FirmwareUpdater"]: - if self._active_output_device and self._active_output_device.activePrinter.getController().can_update_firmware: + if self._active_output_device and self._active_output_device.activePrinter and self._active_output_device.activePrinter.getController().can_update_firmware: self._active_firmware_updater = self._active_output_device.getFirmwareUpdater() return self._active_firmware_updater diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml index 9a56dbb20a..b5b6c15f50 100644 --- a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml +++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml @@ -22,7 +22,7 @@ Cura.MachineAction { id: firmwareUpdaterMachineAction anchors.fill: parent; - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog { id: catalog; name: "cura"} spacing: UM.Theme.getSize("default_margin").height Label diff --git a/plugins/FirmwareUpdater/plugin.json b/plugins/FirmwareUpdater/plugin.json index 3e09eab2b5..c1034e5e42 100644 --- a/plugins/FirmwareUpdater/plugin.json +++ b/plugins/FirmwareUpdater/plugin.json @@ -1,8 +1,8 @@ { "name": "Firmware Updater", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides a machine actions for updating firmware.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeGzReader/plugin.json b/plugins/GCodeGzReader/plugin.json index 3bd6a4097d..d4f281682f 100644 --- a/plugins/GCodeGzReader/plugin.json +++ b/plugins/GCodeGzReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Compressed G-code Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Reads g-code from a compressed archive.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeGzWriter/plugin.json b/plugins/GCodeGzWriter/plugin.json index 4c6497317b..b0e6f8d605 100644 --- a/plugins/GCodeGzWriter/plugin.json +++ b/plugins/GCodeGzWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "Compressed G-code Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Writes g-code to a compressed archive.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeProfileReader/plugin.json b/plugins/GCodeProfileReader/plugin.json index 9677628c85..af1c2d1827 100644 --- a/plugins/GCodeProfileReader/plugin.json +++ b/plugins/GCodeProfileReader/plugin.json @@ -1,8 +1,8 @@ { "name": "G-code Profile Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for importing profiles from g-code files.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 6fe2cb5260..baf21d47ce 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -364,6 +364,8 @@ class FlavorParser: self._layer_type = LayerPolygon.SupportType elif type == "FILL": self._layer_type = LayerPolygon.InfillType + elif type == "SUPPORT-INTERFACE": + self._layer_type = LayerPolygon.SupportInterfaceType else: Logger.log("w", "Encountered a unknown type (%s) while parsing g-code.", type) diff --git a/plugins/GCodeReader/plugin.json b/plugins/GCodeReader/plugin.json index 75b4d0cd4f..bbc94fa917 100644 --- a/plugins/GCodeReader/plugin.json +++ b/plugins/GCodeReader/plugin.json @@ -1,8 +1,8 @@ { "name": "G-code Reader", - "author": "Victor Larchenko", - "version": "1.0.0", + "author": "Victor Larchenko, Ultimaker", + "version": "1.0.1", "description": "Allows loading and displaying G-code files.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/GCodeWriter/plugin.json b/plugins/GCodeWriter/plugin.json index 3bbbab8b95..f3a95ddb78 100644 --- a/plugins/GCodeWriter/plugin.json +++ b/plugins/GCodeWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "G-code Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Writes g-code to a file.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/ImageReader/ConfigUI.qml b/plugins/ImageReader/ConfigUI.qml index 12c6aa8dde..b9ff2e4453 100644 --- a/plugins/ImageReader/ConfigUI.qml +++ b/plugins/ImageReader/ConfigUI.qml @@ -20,7 +20,7 @@ UM.Dialog GridLayout { - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} anchors.fill: parent; Layout.fillWidth: true columnSpacing: 16 * screenScaleFactor diff --git a/plugins/ImageReader/plugin.json b/plugins/ImageReader/plugin.json index 08195863e8..d966537d99 100644 --- a/plugins/ImageReader/plugin.json +++ b/plugins/ImageReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Image Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Enables ability to generate printable geometry from 2D image files.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/LegacyProfileReader/DictionaryOfDoom.json b/plugins/LegacyProfileReader/DictionaryOfDoom.json index 0be413dd2c..f65cc271d1 100644 --- a/plugins/LegacyProfileReader/DictionaryOfDoom.json +++ b/plugins/LegacyProfileReader/DictionaryOfDoom.json @@ -1,6 +1,6 @@ { "source_version": "15.04", - "target_version": 3, + "target_version": "4.5", "translation": { "machine_nozzle_size": "nozzle_size", diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index cd577218d5..013bab6f11 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser # For reading the legacy profile INI files. @@ -6,6 +6,7 @@ import io import json # For reading the Dictionary of Doom. import math # For mathematical operations included in the Dictionary of Doom. import os.path # For concatenating the path to the plugin and the relative path to the Dictionary of Doom. +from typing import Dict from UM.Application import Application # To get the machine manager to create the new profile in. from UM.Logger import Logger # Logging errors. @@ -33,10 +34,11 @@ class LegacyProfileReader(ProfileReader): # \param json The JSON file to load the default setting values from. This # should not be a URL but a pre-loaded JSON handle. # \return A dictionary of the default values of the legacy Cura version. - def prepareDefaults(self, json): + def prepareDefaults(self, json: Dict[str, Dict[str, str]]) -> Dict[str, str]: defaults = {} - for key in json["defaults"]: # We have to copy over all defaults from the JSON handle to a normal dict. - defaults[key] = json["defaults"][key] + if "defaults" in json: + for key in json["defaults"]: # We have to copy over all defaults from the JSON handle to a normal dict. + defaults[key] = json["defaults"][key] return defaults ## Prepares the local variables that can be used in evaluation of computing @@ -80,11 +82,10 @@ class LegacyProfileReader(ProfileReader): Logger.log("i", "Importing legacy profile from file " + file_name + ".") container_registry = ContainerRegistry.getInstance() profile_id = container_registry.uniqueName("Imported Legacy Profile") - profile = InstanceContainer(profile_id) # Create an empty profile. - parser = configparser.ConfigParser(interpolation = None) + input_parser = configparser.ConfigParser(interpolation = None) try: - parser.read([file_name]) # Parse the INI file. + input_parser.read([file_name]) # Parse the INI file. except Exception as e: Logger.log("e", "Unable to open legacy profile %s: %s", file_name, str(e)) return None @@ -92,7 +93,7 @@ class LegacyProfileReader(ProfileReader): # Legacy Cura saved the profile under the section "profile_N" where N is the ID of a machine, except when you export in which case it saves it in the section "profile". # Since importing multiple machine profiles is out of scope, just import the first section we find. section = "" - for found_section in parser.sections(): + for found_section in input_parser.sections(): if found_section.startswith("profile"): section = found_section break @@ -110,15 +111,13 @@ class LegacyProfileReader(ProfileReader): return None defaults = self.prepareDefaults(dict_of_doom) - legacy_settings = self.prepareLocals(parser, section, defaults) #Gets the settings from the legacy profile. + legacy_settings = self.prepareLocals(input_parser, section, defaults) #Gets the settings from the legacy profile. - #Check the target version in the Dictionary of Doom with this application version. - if "target_version" not in dict_of_doom: - Logger.log("e", "Dictionary of Doom has no target version. Is it the correct JSON file?") - return None - if InstanceContainer.Version != dict_of_doom["target_version"]: - Logger.log("e", "Dictionary of Doom of legacy profile reader (version %s) is not in sync with the current instance container version (version %s)!", dict_of_doom["target_version"], str(InstanceContainer.Version)) - return None + # Serialised format into version 4.5. Do NOT upgrade this, let the version upgrader handle it. + output_parser = configparser.ConfigParser(interpolation = None) + output_parser.add_section("general") + output_parser.add_section("metadata") + output_parser.add_section("values") if "translation" not in dict_of_doom: Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?") @@ -127,7 +126,7 @@ class LegacyProfileReader(ProfileReader): quality_definition = current_printer_definition.getMetaDataEntry("quality_definition") if not quality_definition: quality_definition = current_printer_definition.getId() - profile.setDefinition(quality_definition) + output_parser["general"]["definition"] = quality_definition for new_setting in dict_of_doom["translation"]: # Evaluate all new settings that would get a value from the translations. old_setting_expression = dict_of_doom["translation"][new_setting] compiled = compile(old_setting_expression, new_setting, "eval") @@ -140,37 +139,34 @@ class LegacyProfileReader(ProfileReader): definitions = current_printer_definition.findDefinitions(key = new_setting) if definitions: if new_value != value_using_defaults and definitions[0].default_value != new_value: # Not equal to the default in the new Cura OR the default in the legacy Cura. - profile.setProperty(new_setting, "value", new_value) # Store the setting in the profile! + output_parser["values"][new_setting] = str(new_value) # Store the setting in the profile! - if len(profile.getAllKeys()) == 0: + if len(output_parser["values"]) == 0: Logger.log("i", "A legacy profile was imported but everything evaluates to the defaults, creating an empty profile.") - profile.setMetaDataEntry("type", "profile") - # don't know what quality_type it is based on, so use "normal" by default - profile.setMetaDataEntry("quality_type", "normal") - profile.setName(profile_id) - profile.setDirty(True) + output_parser["general"]["version"] = "4" + output_parser["general"]["name"] = profile_id + output_parser["metadata"]["type"] = "quality_changes" + output_parser["metadata"]["quality_type"] = "normal" # Don't know what quality_type it is based on, so use "normal" by default. + output_parser["metadata"]["position"] = "0" # We only support single extrusion. + output_parser["metadata"]["setting_version"] = "5" # What the dictionary of doom is made for. - #Serialise and deserialise in order to perform the version upgrade. - parser = configparser.ConfigParser(interpolation = None) - data = profile.serialize() - parser.read_string(data) - parser["general"]["version"] = "1" - if parser.has_section("values"): - parser["settings"] = parser["values"] - del parser["values"] + # Serialise in order to perform the version upgrade. stream = io.StringIO() - parser.write(stream) + output_parser.write(stream) data = stream.getvalue() - profile.deserialize(data) - # The definition can get reset to fdmprinter during the deserialization's upgrade. Here we set the definition - # again. - profile.setDefinition(quality_definition) + profile = InstanceContainer(profile_id) + profile.deserialize(data) # Also performs the version upgrade. + profile.setDirty(True) #We need to return one extruder stack and one global stack. global_container_id = container_registry.uniqueName("Global Imported Legacy Profile") + # We duplicate the extruder profile into the global stack. + # This may introduce some settings that are global in the extruder stack and some settings that are per-extruder in the global stack. + # We don't care about that. The engine will ignore them anyway. global_profile = profile.duplicate(new_id = global_container_id, new_name = profile_id) #Needs to have the same name as the extruder profile. + del global_profile.getMetaData()["position"] # Has no position because it's global. global_profile.setDirty(True) profile_definition = "fdmprinter" diff --git a/plugins/LegacyProfileReader/plugin.json b/plugins/LegacyProfileReader/plugin.json index 179f5444e0..2f5264ad37 100644 --- a/plugins/LegacyProfileReader/plugin.json +++ b/plugins/LegacyProfileReader/plugin.json @@ -1,8 +1,8 @@ { "name": "Legacy Cura Profile Reader", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for importing profiles from legacy Cura versions.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py b/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py new file mode 100644 index 0000000000..480a61f301 --- /dev/null +++ b/plugins/LegacyProfileReader/tests/TestLegacyProfileReader.py @@ -0,0 +1,190 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser # An input for some functions we're testing. +import os.path # To find the integration test .ini files. +import pytest # To register tests with. +import unittest.mock # To mock the application, plug-in and container registry out. + +import UM.Application # To mock the application out. +import UM.PluginRegistry # To mock the plug-in registry out. +import UM.Settings.ContainerRegistry # To mock the container registry out. +import UM.Settings.InstanceContainer # To intercept the serialised data from the read() function. + +import LegacyProfileReader as LegacyProfileReaderModule # To get the directory of the module. +from LegacyProfileReader import LegacyProfileReader # The module we're testing. + +@pytest.fixture +def legacy_profile_reader(): + return LegacyProfileReader() + +test_prepareDefaultsData = [ + { + "defaults": + { + "foo": "bar" + }, + "cheese": "delicious" + }, + { + "cat": "fluffy", + "dog": "floofy" + } +] + +@pytest.mark.parametrize("input", test_prepareDefaultsData) +def test_prepareDefaults(legacy_profile_reader, input): + output = legacy_profile_reader.prepareDefaults(input) + if "defaults" in input: + assert input["defaults"] == output + else: + assert output == {} + +test_prepareLocalsData = [ + ( # Ordinary case. + { # Parser data. + "profile": + { + "layer_height": "0.2", + "infill_density": "30" + } + }, + { # Defaults. + "layer_height": "0.1", + "infill_density": "20", + "line_width": "0.4" + } + ), + ( # Empty data. + { # Parser data. + "profile": + { + } + }, + { # Defaults. + } + ), + ( # All defaults. + { # Parser data. + "profile": + { + } + }, + { # Defaults. + "foo": "bar", + "boo": "far" + } + ), + ( # Multiple config sections. + { # Parser data. + "some_other_name": + { + "foo": "bar" + }, + "profile": + { + "foo": "baz" #Not the same as in some_other_name + } + }, + { # Defaults. + "foo": "bla" + } + ) +] + +@pytest.mark.parametrize("parser_data, defaults", test_prepareLocalsData) +def test_prepareLocals(legacy_profile_reader, parser_data, defaults): + parser = configparser.ConfigParser() + parser.read_dict(parser_data) + + output = legacy_profile_reader.prepareLocals(parser, "profile", defaults) + + assert set(defaults.keys()) <= set(output.keys()) # All defaults must be in there. + assert set(parser_data["profile"]) <= set(output.keys()) # All overwritten values must be in there. + for key in output: + if key in parser_data["profile"]: + assert output[key] == parser_data["profile"][key] # If overwritten, must be the overwritten value. + else: + assert output[key] == defaults[key] # Otherwise must be equal to the default. + +test_prepareLocalsNoSectionErrorData = [ + ( # Section does not exist. + { # Parser data. + "some_other_name": + { + "foo": "bar" + }, + }, + { # Defaults. + "foo": "baz" + } + ) +] + +## Test cases where a key error is expected. +@pytest.mark.parametrize("parser_data, defaults", test_prepareLocalsNoSectionErrorData) +def test_prepareLocalsNoSectionError(legacy_profile_reader, parser_data, defaults): + parser = configparser.ConfigParser() + parser.read_dict(parser_data) + + with pytest.raises(configparser.NoSectionError): + legacy_profile_reader.prepareLocals(parser, "profile", defaults) + +intercepted_data = "" + +@pytest.mark.parametrize("file_name", ["normal_case.ini"]) +def test_read(legacy_profile_reader, file_name): + # Mock out all dependencies. Quite a lot! + global_stack = unittest.mock.MagicMock() + global_stack.getProperty = unittest.mock.MagicMock(return_value = 1) # For machine_extruder_count setting. + def getMetaDataEntry(key, default_value = ""): + if key == "quality_definition": + return "mocked_quality_definition" + if key == "has_machine_quality": + return "True" + global_stack.definition.getMetaDataEntry = getMetaDataEntry + global_stack.definition.getId = unittest.mock.MagicMock(return_value = "mocked_global_definition") + application = unittest.mock.MagicMock() + application.getGlobalContainerStack = unittest.mock.MagicMock(return_value = global_stack) + application_getInstance = unittest.mock.MagicMock(return_value = application) + container_registry = unittest.mock.MagicMock() + container_registry_getInstance = unittest.mock.MagicMock(return_value = container_registry) + container_registry.uniqueName = unittest.mock.MagicMock(return_value = "Imported Legacy Profile") + container_registry.findDefinitionContainers = unittest.mock.MagicMock(return_value = [global_stack.definition]) + UM.Settings.InstanceContainer.setContainerRegistry(container_registry) + plugin_registry = unittest.mock.MagicMock() + plugin_registry_getInstance = unittest.mock.MagicMock(return_value = plugin_registry) + plugin_registry.getPluginPath = unittest.mock.MagicMock(return_value = os.path.dirname(LegacyProfileReaderModule.__file__)) + + # Mock out the resulting InstanceContainer so that we can intercept the data before it's passed through the version upgrader. + def deserialize(self, data): # Intercepts the serialised data that we'd perform the version upgrade from when deserializing. + global intercepted_data + intercepted_data = data + + parser = configparser.ConfigParser() + parser.read_string(data) + self._metadata["position"] = parser["metadata"]["position"] + def duplicate(self, new_id, new_name): + self._metadata["id"] = new_id + self._metadata["name"] = new_name + return self + + with unittest.mock.patch.object(UM.Application.Application, "getInstance", application_getInstance): + with unittest.mock.patch.object(UM.Settings.ContainerRegistry.ContainerRegistry, "getInstance", container_registry_getInstance): + with unittest.mock.patch.object(UM.PluginRegistry.PluginRegistry, "getInstance", plugin_registry_getInstance): + with unittest.mock.patch.object(UM.Settings.InstanceContainer.InstanceContainer, "deserialize", deserialize): + with unittest.mock.patch.object(UM.Settings.InstanceContainer.InstanceContainer, "duplicate", duplicate): + result = legacy_profile_reader.read(os.path.join(os.path.dirname(__file__), file_name)) + + assert len(result) == 1 + + # Let's see what's inside the actual output file that we generated. + parser = configparser.ConfigParser() + parser.read_string(intercepted_data) + assert parser["general"]["definition"] == "mocked_quality_definition" + assert parser["general"]["version"] == "4" # Yes, before we upgraded. + assert parser["general"]["name"] == "Imported Legacy Profile" # Because we overwrote uniqueName. + assert parser["metadata"]["type"] == "quality_changes" + assert parser["metadata"]["quality_type"] == "normal" + assert parser["metadata"]["position"] == "0" + assert parser["metadata"]["setting_version"] == "5" # Yes, before we upgraded.
\ No newline at end of file diff --git a/plugins/LegacyProfileReader/tests/normal_case.ini b/plugins/LegacyProfileReader/tests/normal_case.ini new file mode 100644 index 0000000000..213444d2d3 --- /dev/null +++ b/plugins/LegacyProfileReader/tests/normal_case.ini @@ -0,0 +1,7 @@ +[profile] +foo = bar +boo = far +fill_overlap = 3 + +[alterations] +some = values diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index 004b4e3cfc..ef8fda224a 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -13,7 +13,8 @@ import Cura 1.0 as Cura Cura.MachineAction { id: base - property var extrudersModel: Cura.ExtrudersModel{} + property var extrudersModel: Cura.ExtrudersModel{} // Do not retrieve the Model from a backend. Otherwise the tabs + // in tabView will not removed/updated. Probably QML bug property int extruderTabsCount: 0 property var activeMachineId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.id : "" @@ -23,7 +24,7 @@ Cura.MachineAction target: base.extrudersModel onModelChanged: { - var extruderCount = base.extrudersModel.rowCount(); + var extruderCount = base.extrudersModel.count; base.extruderTabsCount = extruderCount; } } diff --git a/plugins/MachineSettingsAction/plugin.json b/plugins/MachineSettingsAction/plugin.json index 571658e40a..d734c1adf5 100644 --- a/plugins/MachineSettingsAction/plugin.json +++ b/plugins/MachineSettingsAction/plugin.json @@ -1,8 +1,8 @@ { "name": "Machine Settings action", "author": "fieldOfView", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/ModelChecker/ModelChecker.qml b/plugins/ModelChecker/ModelChecker.qml index 98db233bf8..ddeed063b1 100644 --- a/plugins/ModelChecker/ModelChecker.qml +++ b/plugins/ModelChecker/ModelChecker.qml @@ -4,19 +4,19 @@ import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 -import QtQuick.Dialogs 1.1 -import QtQuick.Window 2.2 import UM 1.2 as UM -import Cura 1.0 as Cura Button { id: modelCheckerButton - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog + { + id: catalog + name: "cura" + } visible: manager.hasWarnings tooltip: catalog.i18nc("@info:tooltip", "Some things could be problematic in this print. Click to see tips for adjustment.") @@ -25,6 +25,8 @@ Button width: UM.Theme.getSize("save_button_specs_icons").width height: UM.Theme.getSize("save_button_specs_icons").height + anchors.verticalCenter: parent ? parent.verticalCenter : undefined + style: ButtonStyle { background: Item @@ -33,7 +35,6 @@ Button { width: UM.Theme.getSize("save_button_specs_icons").width; height: UM.Theme.getSize("save_button_specs_icons").height; - sourceSize.width: width; sourceSize.height: width; color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene"); source: "model_checker.svg" diff --git a/plugins/ModelChecker/plugin.json b/plugins/ModelChecker/plugin.json index 3753c0cc88..59be5bbf0a 100644 --- a/plugins/ModelChecker/plugin.json +++ b/plugins/ModelChecker/plugin.json @@ -1,8 +1,8 @@ { "name": "Model Checker", "author": "Ultimaker B.V.", - "version": "0.1", - "api": 5, + "version": "1.0.1", + "api": "6.0", "description": "Checks models and print configuration for possible printing issues and give suggestions.", "i18n-catalog": "cura" } diff --git a/plugins/MonitorStage/MonitorMain.qml b/plugins/MonitorStage/MonitorMain.qml new file mode 100644 index 0000000000..5fda32db9e --- /dev/null +++ b/plugins/MonitorStage/MonitorMain.qml @@ -0,0 +1,45 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 1.4 + +import UM 1.3 as UM +import Cura 1.0 as Cura + + +// We show a nice overlay on the 3D viewer when the current output device has no monitor view +Rectangle +{ + id: viewportOverlay + + color: UM.Theme.getColor("viewport_overlay") + anchors.fill: parent + + // This mouse area is to prevent mouse clicks to be passed onto the scene. + MouseArea + { + anchors.fill: parent + acceptedButtons: Qt.AllButtons + onWheel: wheel.accepted = true + } + + // Disable dropping files into Cura when the monitor page is active + DropArea + { + anchors.fill: parent + } + Loader + { + id: monitorViewComponent + + anchors.fill: parent + + height: parent.height + + property real maximumWidth: parent.width + property real maximumHeight: parent.height + + sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem : null + } +}
\ No newline at end of file diff --git a/plugins/MonitorStage/MonitorMainView.qml b/plugins/MonitorStage/MonitorMainView.qml deleted file mode 100644 index c48f6d0aab..0000000000 --- a/plugins/MonitorStage/MonitorMainView.qml +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V.
-
-import QtQuick 2.2
-import QtQuick.Controls 1.1
-
-import UM 1.3 as UM
-import Cura 1.0 as Cura
-
-Item
-{
- // parent could be undefined as this component is not visible at all times
- width: parent ? parent.width : 0
- height: parent ? parent.height : 0
-
- // We show a nice overlay on the 3D viewer when the current output device has no monitor view
- Rectangle
- {
- id: viewportOverlay
-
- color: UM.Theme.getColor("viewport_overlay")
- width: parent.width
- height: parent.height
-
- MouseArea
- {
- anchors.fill: parent
- acceptedButtons: Qt.AllButtons
- onWheel: wheel.accepted = true
- }
- }
-
- Loader
- {
- id: monitorViewComponent
-
- width: parent.width
- height: parent.height
-
- property real maximumWidth: parent.width
- property real maximumHeight: parent.height
-
- sourceComponent: Cura.MachineManager.printerOutputDevices.length > 0 ? Cura.MachineManager.printerOutputDevices[0].monitorItem: null
- visible: sourceComponent != null
- }
-}
diff --git a/plugins/MonitorStage/MonitorMenu.qml b/plugins/MonitorStage/MonitorMenu.qml new file mode 100644 index 0000000000..bc95c276e8 --- /dev/null +++ b/plugins/MonitorStage/MonitorMenu.qml @@ -0,0 +1,23 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +Item +{ + signal showTooltip(Item item, point location, string text) + signal hideTooltip() + + Cura.MachineSelector + { + id: machineSelection + headerCornerSide: Cura.RoundedRectangle.Direction.All + width: UM.Theme.getSize("machine_selector_widget").width + height: parent.height + anchors.centerIn: parent + } +}
\ No newline at end of file diff --git a/plugins/MonitorStage/MonitorStage.py b/plugins/MonitorStage/MonitorStage.py index ace201e994..69b7f20f4e 100644 --- a/plugins/MonitorStage/MonitorStage.py +++ b/plugins/MonitorStage/MonitorStage.py @@ -65,15 +65,10 @@ class MonitorStage(CuraStage): # We can only connect now, as we need to be sure that everything is loaded (plugins get created quite early)
Application.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
self._onOutputDevicesChanged()
- self._updateMainOverlay()
- self._updateSidebar()
- def _updateMainOverlay(self):
- main_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("MonitorStage"),
- "MonitorMainView.qml")
- self.addDisplayComponent("main", main_component_path)
-
- def _updateSidebar(self):
- sidebar_component_path = os.path.join(Resources.getPath(Application.getInstance().ResourceTypes.QmlFiles),
- "MonitorSidebar.qml")
- self.addDisplayComponent("sidebar", sidebar_component_path)
+ plugin_path = Application.getInstance().getPluginRegistry().getPluginPath(self.getPluginId())
+ if plugin_path is not None:
+ menu_component_path = os.path.join(plugin_path, "MonitorMenu.qml")
+ main_component_path = os.path.join(plugin_path, "MonitorMain.qml")
+ self.addDisplayComponent("menu", menu_component_path)
+ self.addDisplayComponent("main", main_component_path)
diff --git a/plugins/MonitorStage/__init__.py b/plugins/MonitorStage/__init__.py index bdaf53a36c..0468e6319b 100644 --- a/plugins/MonitorStage/__init__.py +++ b/plugins/MonitorStage/__init__.py @@ -7,14 +7,16 @@ from . import MonitorStage from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
+
def getMetaData():
return {
"stage": {
"name": i18n_catalog.i18nc("@item:inmenu", "Monitor"),
- "weight": 1
+ "weight": 2
}
}
+
def register(app):
return {
"stage": MonitorStage.MonitorStage()
diff --git a/plugins/MonitorStage/plugin.json b/plugins/MonitorStage/plugin.json index 88b53840e0..95e4b86f36 100644 --- a/plugins/MonitorStage/plugin.json +++ b/plugins/MonitorStage/plugin.json @@ -1,8 +1,8 @@ {
"name": "Monitor Stage",
"author": "Ultimaker B.V.",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "Provides a monitor stage in Cura.",
- "api": 5,
+ "api": "6.0",
"i18n-catalog": "cura"
}
\ No newline at end of file diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 5d4e17a102..0e2bd88619 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -265,7 +265,6 @@ Item { anchors.verticalCenter: parent.verticalCenter width: parent.width height: width - sourceSize.width: width sourceSize.height: width color: control.hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") source: UM.Theme.getIcon("minus") diff --git a/plugins/PerObjectSettingsTool/plugin.json b/plugins/PerObjectSettingsTool/plugin.json index 15fde63387..f272abf06a 100644 --- a/plugins/PerObjectSettingsTool/plugin.json +++ b/plugins/PerObjectSettingsTool/plugin.json @@ -1,8 +1,8 @@ { "name": "Per Model Settings Tool", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides the Per Model Settings.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py index 1a1ea92d10..78f9cc0516 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py @@ -32,7 +32,8 @@ class PostProcessingPlugin(QObject, Extension): def __init__(self, parent = None) -> None: QObject.__init__(self, parent) Extension.__init__(self) - self.addMenuItem(i18n_catalog.i18n("Modify G-Code"), self.showPopup) + self.setMenuName(i18n_catalog.i18nc("@item:inmenu", "Post Processing")) + self.addMenuItem(i18n_catalog.i18nc("@item:inmenu", "Modify G-Code"), self.showPopup) self._view = None # Loaded scripts are all scripts that can be used @@ -54,14 +55,14 @@ class PostProcessingPlugin(QObject, Extension): def selectedScriptDefinitionId(self) -> Optional[str]: try: return self._script_list[self._selected_script_index].getDefinitionId() - except: + except IndexError: return "" @pyqtProperty(str, notify=selectedIndexChanged) def selectedScriptStackId(self) -> Optional[str]: try: return self._script_list[self._selected_script_index].getStackId() - except: + except IndexError: return "" ## Execute all post-processing scripts on the gcode. diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml index d492e06462..cd8303d1d3 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml @@ -25,13 +25,13 @@ UM.Dialog { if(!visible) //Whenever the window is closed (either via the "Close" button or the X on the window frame), we want to update it in the stack. { - manager.writeScriptsToStack(); + manager.writeScriptsToStack() } } Item { - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} id: base property int columnWidth: Math.round((base.width / 2) - UM.Theme.getSize("default_margin").width) property int textMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) @@ -61,18 +61,23 @@ UM.Dialog anchors.leftMargin: base.textMargin anchors.right: parent.right anchors.rightMargin: base.textMargin - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") elide: Text.ElideRight } ListView { id: activeScriptsList - anchors.top: activeScriptsHeader.bottom - anchors.topMargin: base.textMargin - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: base.textMargin + + anchors + { + top: activeScriptsHeader.bottom + left: parent.left + right: parent.right + rightMargin: base.textMargin + topMargin: base.textMargin + leftMargin: UM.Theme.getSize("default_margin").width + } + height: childrenRect.height model: manager.scriptList delegate: Item @@ -84,8 +89,12 @@ UM.Dialog id: activeScriptButton text: manager.getScriptLabelByKey(modelData.toString()) exclusiveGroup: selectedScriptGroup + width: parent.width + height: UM.Theme.getSize("setting").height checkable: true - checked: { + + checked: + { if (manager.selectedScriptIndex == index) { base.activeScriptName = manager.getScriptLabelByKey(modelData.toString()) @@ -102,8 +111,7 @@ UM.Dialog manager.setSelectedScriptIndex(index) base.activeScriptName = manager.getScriptLabelByKey(modelData.toString()) } - width: parent.width - height: UM.Theme.getSize("setting").height + style: ButtonStyle { background: Rectangle @@ -121,6 +129,7 @@ UM.Dialog } } } + Button { id: removeButton @@ -141,7 +150,6 @@ UM.Dialog anchors.horizontalCenter: parent.horizontalCenter width: Math.round(control.width / 2.7) height: Math.round(control.height / 2.7) - sourceSize.width: width sourceSize.height: width color: palette.text source: UM.Theme.getIcon("cross1") @@ -176,7 +184,6 @@ UM.Dialog anchors.horizontalCenter: parent.horizontalCenter width: Math.round(control.width / 2.5) height: Math.round(control.height / 2.5) - sourceSize.width: width sourceSize.height: width color: control.enabled ? palette.text : disabledPalette.text source: UM.Theme.getIcon("arrow_bottom") @@ -211,7 +218,6 @@ UM.Dialog anchors.horizontalCenter: parent.horizontalCenter width: Math.round(control.width / 2.5) height: Math.round(control.height / 2.5) - sourceSize.width: width sourceSize.height: width color: control.enabled ? palette.text : disabledPalette.text source: UM.Theme.getIcon("arrow_top") @@ -252,15 +258,15 @@ UM.Dialog onTriggered: manager.addScriptToList(modelData.toString()) } - onObjectAdded: scriptsMenu.insertItem(index, object); - onObjectRemoved: scriptsMenu.removeItem(object); + onObjectAdded: scriptsMenu.insertItem(index, object) + onObjectRemoved: scriptsMenu.removeItem(object) } } } Rectangle { - color: UM.Theme.getColor("sidebar") + color: UM.Theme.getColor("main_background") anchors.left: activeScripts.right anchors.leftMargin: UM.Theme.getSize("default_margin").width anchors.right: parent.right @@ -271,26 +277,35 @@ UM.Dialog { id: scriptSpecsHeader text: manager.selectedScriptIndex == -1 ? catalog.i18nc("@label", "Settings") : base.activeScriptName - anchors.top: parent.top - anchors.topMargin: base.textMargin - anchors.left: parent.left - anchors.leftMargin: base.textMargin - anchors.right: parent.right - anchors.rightMargin: base.textMargin + anchors + { + top: parent.top + topMargin: base.textMargin + left: parent.left + leftMargin: base.textMargin + right: parent.right + rightMargin: base.textMargin + } + elide: Text.ElideRight height: 20 * screenScaleFactor - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") } ScrollView { id: scrollView - anchors.top: scriptSpecsHeader.bottom - anchors.topMargin: settingsPanel.textMargin - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom + anchors + { + top: scriptSpecsHeader.bottom + topMargin: settingsPanel.textMargin + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + bottom: parent.bottom + } + visible: manager.selectedScriptDefinitionId != "" style: UM.Theme.styles.scrollview; @@ -300,11 +315,12 @@ UM.Dialog spacing: UM.Theme.getSize("default_lining").height model: UM.SettingDefinitionsModel { - id: definitionsModel; + id: definitionsModel containerId: manager.selectedScriptDefinitionId showAll: true } - delegate:Loader + + delegate: Loader { id: settingLoader @@ -315,23 +331,24 @@ UM.Dialog { if(model.type != undefined) { - return UM.Theme.getSize("section").height; + return UM.Theme.getSize("section").height } else { - return 0; + return 0 } } else { - return 0; + return 0 } - } Behavior on height { NumberAnimation { duration: 100 } } opacity: provider.properties.enabled == "True" ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } enabled: opacity > 0 + property var definition: model property var settingDefinitionsModel: definitionsModel property var propertyProvider: provider @@ -342,11 +359,12 @@ UM.Dialog //causing nasty issues when selecting different options. So disable asynchronous loading of enum type completely. asynchronous: model.type != "enum" && model.type != "extruder" - onLoaded: { + onLoaded: + { settingLoader.item.showRevertButton = false settingLoader.item.showInheritButton = false settingLoader.item.showLinkedSettingIcon = false - settingLoader.item.doDepthIndentation = true + settingLoader.item.doDepthIndentation = false settingLoader.item.doQualityUserSettingEmphasis = false } @@ -398,24 +416,20 @@ UM.Dialog onShowTooltip: { - tooltip.text = text; - var position = settingLoader.mapToItem(settingsPanel, settingsPanel.x, 0); - tooltip.show(position); + tooltip.text = text + var position = settingLoader.mapToItem(settingsPanel, settingsPanel.x, 0) + tooltip.show(position) tooltip.target.x = position.x + 1 } - onHideTooltip: - { - tooltip.hide(); - } + onHideTooltip: tooltip.hide() } - } } } } - Cura.SidebarTooltip + Cura.PrintSetupTooltip { id: tooltip } @@ -462,6 +476,7 @@ UM.Dialog Cura.SettingUnknown { } } } + rightButtons: Button { text: catalog.i18nc("@action:button", "Close") @@ -469,44 +484,15 @@ UM.Dialog onClicked: dialog.accept() } - Button { + Cura.SecondaryButton + { objectName: "postProcessingSaveAreaButton" visible: activeScriptsList.count > 0 - height: UM.Theme.getSize("save_button_save_to_button").height + height: UM.Theme.getSize("action_button").height width: height tooltip: catalog.i18nc("@info:tooltip", "Change active post-processing scripts") onClicked: dialog.show() - - style: ButtonStyle { - background: Rectangle { - id: deviceSelectionIcon - border.width: UM.Theme.getSize("default_lining").width - border.color: !control.enabled ? UM.Theme.getColor("action_button_disabled_border") : - control.pressed ? UM.Theme.getColor("action_button_active_border") : - control.hovered ? UM.Theme.getColor("action_button_hovered_border") : UM.Theme.getColor("action_button_border") - color: !control.enabled ? UM.Theme.getColor("action_button_disabled") : - control.pressed ? UM.Theme.getColor("action_button_active") : - control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") - Behavior on color { ColorAnimation { duration: 50; } } - anchors.left: parent.left - anchors.leftMargin: Math.round(UM.Theme.getSize("save_button_text_margin").width / 2); - width: parent.height - height: parent.height - - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: Math.round(parent.width / 2) - height: Math.round(parent.height / 2) - sourceSize.width: width - sourceSize.height: height - color: !control.enabled ? UM.Theme.getColor("action_button_disabled_text") : - control.pressed ? UM.Theme.getColor("action_button_active_text") : - control.hovered ? UM.Theme.getColor("action_button_hovered_text") : UM.Theme.getColor("action_button_text"); - source: "postprocessing.svg" - } - } - label: Label{ } - } + iconSource: "postprocessing.svg" + fixedWidthMode: true } }
\ No newline at end of file diff --git a/plugins/PostProcessingPlugin/plugin.json b/plugins/PostProcessingPlugin/plugin.json index fea061e93b..1e73133c53 100644 --- a/plugins/PostProcessingPlugin/plugin.json +++ b/plugins/PostProcessingPlugin/plugin.json @@ -1,8 +1,8 @@ { "name": "Post Processing", "author": "Ultimaker", - "version": "2.2", - "api": 5, + "version": "2.2.1", + "api": "6.0", "description": "Extension that allows for user created scripts for post processing", "catalog": "cura" }
\ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py index 919b06d28e..be9f93c0f6 100644 --- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py @@ -112,7 +112,7 @@ class ChangeAtZ(Script): "e1_Change_speed": { "label": "Change Speed", - "description": "Select if total speed (print and travel) has to be cahnged", + "description": "Select if total speed (print and travel) has to be changed", "type": "bool", "default_value": false }, diff --git a/plugins/PostProcessingPlugin/scripts/ExampleScript.md b/plugins/PostProcessingPlugin/scripts/ExampleScript.md new file mode 100644 index 0000000000..08652132aa --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/ExampleScript.md @@ -0,0 +1,3 @@ +A good example script is SearchAndReplace.py. +If you have any questions please ask them at: +https://github.com/Ultimaker/Cura/issues
\ No newline at end of file diff --git a/plugins/PostProcessingPlugin/scripts/ExampleScript.py b/plugins/PostProcessingPlugin/scripts/ExampleScript.py deleted file mode 100644 index 416a5f5404..0000000000 --- a/plugins/PostProcessingPlugin/scripts/ExampleScript.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) 2015 Jaime van Kessel, Ultimaker B.V. -# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher. -from ..Script import Script - -class ExampleScript(Script): - def __init__(self): - super().__init__() - - def getSettingDataString(self): - return """{ - "name":"Example script", - "key": "ExampleScript", - "metadata": {}, - "version": 2, - "settings": - { - "test": - { - "label": "Test", - "description": "None", - "unit": "mm", - "type": "float", - "default_value": 0.5, - "minimum_value": "0", - "minimum_value_warning": "0.1", - "maximum_value_warning": "1" - }, - "derp": - { - "label": "zomg", - "description": "afgasgfgasfgasf", - "unit": "mm", - "type": "float", - "default_value": 0.5, - "minimum_value": "0", - "minimum_value_warning": "0.1", - "maximum_value_warning": "1" - } - } - }""" - - def execute(self, data): - return data
\ No newline at end of file diff --git a/plugins/PrepareStage/PrepareMenu.qml b/plugins/PrepareStage/PrepareMenu.qml new file mode 100644 index 0000000000..b62d65254d --- /dev/null +++ b/plugins/PrepareStage/PrepareMenu.qml @@ -0,0 +1,134 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import QtGraphicalEffects 1.0 // For the dropshadow + +Item +{ + id: prepareMenu + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + // Item to ensure that all of the buttons are nicely centered. + Item + { + anchors.horizontalCenter: parent.horizontalCenter + width: openFileButton.width + itemRow.width + UM.Theme.getSize("default_margin").width + height: parent.height + + RowLayout + { + id: itemRow + + anchors.left: openFileButton.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + + width: Math.round(0.9 * prepareMenu.width) + height: parent.height + spacing: 0 + + Cura.MachineSelector + { + id: machineSelection + headerCornerSide: Cura.RoundedRectangle.Direction.Left + Layout.minimumWidth: UM.Theme.getSize("machine_selector_widget").width + Layout.maximumWidth: UM.Theme.getSize("machine_selector_widget").width + Layout.fillWidth: true + Layout.fillHeight: true + } + + // Separator line + Rectangle + { + height: parent.height + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") + } + + Cura.ConfigurationMenu + { + Layout.fillHeight: true + Layout.fillWidth: true + Layout.preferredWidth: itemRow.width - machineSelection.width - printSetupSelectorItem.width - 2 * UM.Theme.getSize("default_lining").width + } + + // Separator line + Rectangle + { + height: parent.height + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") + } + + Item + { + id: printSetupSelectorItem + // This is a work around to prevent the printSetupSelector from having to be re-loaded every time + // a stage switch is done. + children: [printSetupSelector] + height: childrenRect.height + width: childrenRect.width + } + } + + Button + { + id: openFileButton + height: UM.Theme.getSize("stage_menu").height + width: UM.Theme.getSize("stage_menu").height + onClicked: Cura.Actions.open.trigger() + hoverEnabled: true + + contentItem: Item + { + anchors.fill: parent + UM.RecolorImage + { + id: buttonIcon + anchors.centerIn: parent + source: UM.Theme.getIcon("load") + width: UM.Theme.getSize("button_icon").width + height: UM.Theme.getSize("button_icon").height + color: UM.Theme.getColor("icon") + + sourceSize.height: height + } + } + + background: Rectangle + { + id: background + height: UM.Theme.getSize("stage_menu").height + width: UM.Theme.getSize("stage_menu").height + + radius: UM.Theme.getSize("default_radius").width + color: openFileButton.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: background + source: background + verticalOffset: 2 + visible: true + color: UM.Theme.getColor("action_button_shadow") + // Should always be drawn behind the background. + z: background.z - 1 + } + } + } +} diff --git a/plugins/PrepareStage/PrepareStage.py b/plugins/PrepareStage/PrepareStage.py index c3c9f0a1f8..b0f862dc48 100644 --- a/plugins/PrepareStage/PrepareStage.py +++ b/plugins/PrepareStage/PrepareStage.py @@ -1,19 +1,19 @@ -# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os.path
from UM.Application import Application
+from UM.PluginRegistry import PluginRegistry
from UM.Resources import Resources
from cura.Stages.CuraStage import CuraStage
+
## Stage for preparing model (slicing).
class PrepareStage(CuraStage):
-
def __init__(self, parent = None):
super().__init__(parent)
Application.getInstance().engineCreatedSignal.connect(self._engineCreated)
def _engineCreated(self):
- sidebar_component_path = os.path.join(Resources.getPath(Application.getInstance().ResourceTypes.QmlFiles),
- "PrepareSidebar.qml")
- self.addDisplayComponent("sidebar", sidebar_component_path)
+ menu_component_path = os.path.join(PluginRegistry.getInstance().getPluginPath("PrepareStage"), "PrepareMenu.qml")
+ self.addDisplayComponent("menu", menu_component_path)
diff --git a/plugins/PrepareStage/plugin.json b/plugins/PrepareStage/plugin.json index f0464313c7..dc5c68ce16 100644 --- a/plugins/PrepareStage/plugin.json +++ b/plugins/PrepareStage/plugin.json @@ -1,8 +1,8 @@ {
"name": "Prepare Stage",
"author": "Ultimaker B.V.",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "Provides a prepare stage in Cura.",
- "api": 5,
+ "api": "6.0",
"i18n-catalog": "cura"
}
\ No newline at end of file diff --git a/plugins/PreviewStage/PreviewMain.qml b/plugins/PreviewStage/PreviewMain.qml new file mode 100644 index 0000000000..04241783e9 --- /dev/null +++ b/plugins/PreviewStage/PreviewMain.qml @@ -0,0 +1,18 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.0 as UM +import Cura 1.0 as Cura + + +Loader +{ + id: previewMain + + source: UM.Controller.activeView != null && UM.Controller.activeView.mainComponent != null ? UM.Controller.activeView.mainComponent : "" +}
\ No newline at end of file diff --git a/plugins/PreviewStage/PreviewMenu.qml b/plugins/PreviewStage/PreviewMenu.qml new file mode 100644 index 0000000000..62f814aac9 --- /dev/null +++ b/plugins/PreviewStage/PreviewMenu.qml @@ -0,0 +1,79 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +Item +{ + id: previewMenu + + property real itemHeight: height - 2 * UM.Theme.getSize("default_lining").width + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Row + { + id: stageMenuRow + anchors.centerIn: parent + height: parent.height + width: childrenRect.width + + // We want this row to have a preferred with equals to the 85% of the parent + property int preferredWidth: Math.round(0.85 * previewMenu.width) + + Cura.ViewsSelector + { + id: viewsSelector + height: parent.height + width: UM.Theme.getSize("views_selector").width + headerCornerSide: Cura.RoundedRectangle.Direction.Left + } + + // Separator line + Rectangle + { + height: parent.height + // If there is no viewPanel, we only need a single spacer, so hide this one. + visible: viewPanel.source != "" + width: visible ? UM.Theme.getSize("default_lining").width : 0 + + color: UM.Theme.getColor("lining") + } + + // This component will grow freely up to complete the preferredWidth of the row. + Loader + { + id: viewPanel + height: parent.height + width: source != "" ? (stageMenuRow.preferredWidth - viewsSelector.width - printSetupSelectorItem.width - 2 * UM.Theme.getSize("default_lining").width) : 0 + source: UM.Controller.activeView != null && UM.Controller.activeView.stageMenuComponent != null ? UM.Controller.activeView.stageMenuComponent : "" + } + + // Separator line + Rectangle + { + height: parent.height + width: UM.Theme.getSize("default_lining").width + color: UM.Theme.getColor("lining") + } + + Item + { + id: printSetupSelectorItem + // This is a work around to prevent the printSetupSelector from having to be re-loaded every time + // a stage switch is done. + children: [printSetupSelector] + height: childrenRect.height + width: childrenRect.width + } + } +} diff --git a/plugins/PreviewStage/PreviewStage.py b/plugins/PreviewStage/PreviewStage.py new file mode 100644 index 0000000000..1c487c8340 --- /dev/null +++ b/plugins/PreviewStage/PreviewStage.py @@ -0,0 +1,51 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import os.path + +from UM.Qt.QtApplication import QtApplication +from cura.Stages.CuraStage import CuraStage + +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from UM.View.View import View + + +## Displays a preview of what you're about to print. +# +# The Python component of this stage just loads PreviewMain.qml for display +# when the stage is selected, and makes sure that it reverts to the previous +# view when the previous stage is activated. +class PreviewStage(CuraStage): + def __init__(self, application: QtApplication, parent = None) -> None: + super().__init__(parent) + self._application = application + self._application.engineCreatedSignal.connect(self._engineCreated) + self._previously_active_view = None # type: Optional[View] + + ## When selecting the stage, remember which was the previous view so that + # we can revert to that view when we go out of the stage later. + def onStageSelected(self) -> None: + self._previously_active_view = self._application.getController().getActiveView() + + ## Called when going to a different stage (away from the Preview Stage). + # + # When going to a different stage, the view should be reverted to what it + # was before. Normally, that just reverts it to solid view. + def onStageDeselected(self) -> None: + if self._previously_active_view is not None: + self._application.getController().setActiveView(self._previously_active_view.getPluginId()) + self._previously_active_view = None + + ## Delayed load of the QML files. + # + # We need to make sure that the QML engine is running before we can load + # these. + def _engineCreated(self) -> None: + plugin_path = self._application.getPluginRegistry().getPluginPath(self.getPluginId()) + if plugin_path is not None: + menu_component_path = os.path.join(plugin_path, "PreviewMenu.qml") + main_component_path = os.path.join(plugin_path, "PreviewMain.qml") + self.addDisplayComponent("menu", menu_component_path) + self.addDisplayComponent("main", main_component_path) diff --git a/plugins/PreviewStage/__init__.py b/plugins/PreviewStage/__init__.py new file mode 100644 index 0000000000..424f573e4a --- /dev/null +++ b/plugins/PreviewStage/__init__.py @@ -0,0 +1,22 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from . import PreviewStage + +from UM.i18n import i18nCatalog +i18n_catalog = i18nCatalog("cura") + + +def getMetaData(): + return { + "stage": { + "name": i18n_catalog.i18nc("@item:inmenu", "Preview"), + "weight": 1 + } + } + + +def register(app): + return { + "stage": PreviewStage.PreviewStage(app) + } diff --git a/plugins/PreviewStage/plugin.json b/plugins/PreviewStage/plugin.json new file mode 100644 index 0000000000..e1e4288bae --- /dev/null +++ b/plugins/PreviewStage/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Preview Stage", + "author": "Ultimaker B.V.", + "version": "1.0.1", + "description": "Provides a preview stage in Cura.", + "api": "6.0", + "i18n-catalog": "cura" +}
\ No newline at end of file diff --git a/plugins/RemovableDriveOutputDevice/plugin.json b/plugins/RemovableDriveOutputDevice/plugin.json index 36bb9ae186..5523d6b1c1 100644 --- a/plugins/RemovableDriveOutputDevice/plugin.json +++ b/plugins/RemovableDriveOutputDevice/plugin.json @@ -2,7 +2,7 @@ "name": "Removable Drive Output Device Plugin", "author": "Ultimaker B.V.", "description": "Provides removable drive hotplugging and writing support.", - "version": "1.0.0", - "api": 5, + "version": "1.0.1", + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 1552506969..88f298d1f5 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -13,23 +13,20 @@ Item { id: sliderRoot - // handle properties - property real handleSize: 10 + // Handle properties + property real handleSize: UM.Theme.getSize("slider_handle").width property real handleRadius: handleSize / 2 property real minimumRangeHandleSize: handleSize / 2 - property color upperHandleColor: "black" - property color lowerHandleColor: "black" - property color rangeHandleColor: "black" - property color handleActiveColor: "white" - property real handleLabelWidth: width + property color upperHandleColor: UM.Theme.getColor("slider_handle") + property color lowerHandleColor: UM.Theme.getColor("slider_handle") + property color rangeHandleColor: UM.Theme.getColor("slider_groove_fill") + property color handleActiveColor: UM.Theme.getColor("slider_handle_active") property var activeHandle: upperHandle - // track properties - property real trackThickness: 4 // width of the slider track - property real trackRadius: trackThickness / 2 - property color trackColor: "white" - property real trackBorderWidth: 1 // width of the slider track border - property color trackBorderColor: "black" + // Track properties + property real trackThickness: UM.Theme.getSize("slider_groove").width // width of the slider track + property real trackRadius: UM.Theme.getSize("slider_groove_radius").width + property color trackColor: UM.Theme.getColor("slider_groove") // value properties property real maximumValue: 100 @@ -80,7 +77,7 @@ Item return Math.min(Math.max(value, sliderRoot.minimumValue), sliderRoot.maximumValue) } - // slider track + // Slider track Rectangle { id: track @@ -90,8 +87,6 @@ Item radius: sliderRoot.trackRadius anchors.centerIn: sliderRoot color: sliderRoot.trackColor - border.width: sliderRoot.trackBorderWidth - border.color: sliderRoot.trackBorderColor visible: sliderRoot.layersVisible } @@ -106,7 +101,7 @@ Item anchors.horizontalCenter: sliderRoot.horizontalCenter visible: sliderRoot.layersVisible - // set the new value when dragging + // Set the new value when dragging function onHandleDragged() { sliderRoot.manuallyChanged = true @@ -140,9 +135,10 @@ Item Rectangle { - width: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth + width: sliderRoot.trackThickness height: parent.height + sliderRoot.handleSize anchors.centerIn: parent + radius: sliderRoot.trackRadius color: sliderRoot.rangeHandleColor } @@ -275,7 +271,7 @@ Item id: upperHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height - x: parent.x - width - UM.Theme.getSize("default_margin").width + x: parent.x - parent.width - width anchors.verticalCenter: parent.verticalCenter target: Qt.point(sliderRoot.width, y + height / 2) visible: sliderRoot.activeHandle == parent @@ -385,9 +381,9 @@ Item id: lowerHandleLabel height: sliderRoot.handleSize + UM.Theme.getSize("default_margin").height - x: parent.x - width - UM.Theme.getSize("default_margin").width + x: parent.x - parent.width - width anchors.verticalCenter: parent.verticalCenter - target: Qt.point(sliderRoot.width, y + height / 2) + target: Qt.point(sliderRoot.width + width, y + height / 2) visible: sliderRoot.activeHandle == parent // custom properties diff --git a/plugins/SimulationView/PathSlider.qml b/plugins/SimulationView/PathSlider.qml index f3c28fb5f7..c7a43c6407 100644 --- a/plugins/SimulationView/PathSlider.qml +++ b/plugins/SimulationView/PathSlider.qml @@ -14,19 +14,17 @@ Item id: sliderRoot // handle properties - property real handleSize: 10 + property real handleSize: UM.Theme.getSize("slider_handle").width property real handleRadius: handleSize / 2 - property color handleColor: "black" - property color handleActiveColor: "white" - property color rangeColor: "black" + property color handleColor: UM.Theme.getColor("slider_handle") + property color handleActiveColor: UM.Theme.getColor("slider_handle_active") + property color rangeColor: UM.Theme.getColor("slider_groove_fill") property real handleLabelWidth: width // track properties - property real trackThickness: 4 // width of the slider track - property real trackRadius: trackThickness / 2 - property color trackColor: "white" - property real trackBorderWidth: 1 // width of the slider track border - property color trackBorderColor: "black" + property real trackThickness: UM.Theme.getSize("slider_groove").width + property real trackRadius: UM.Theme.getSize("slider_groove_radius").width + property color trackColor: UM.Theme.getColor("slider_groove") // value properties property real maximumValue: 100 @@ -68,8 +66,6 @@ Item radius: sliderRoot.trackRadius anchors.centerIn: sliderRoot color: sliderRoot.trackColor - border.width: sliderRoot.trackBorderWidth - border.color: sliderRoot.trackBorderColor visible: sliderRoot.pathsVisible } @@ -86,9 +82,10 @@ Item Rectangle { - height: sliderRoot.trackThickness - 2 * sliderRoot.trackBorderWidth + height: sliderRoot.trackThickness width: parent.width + sliderRoot.handleSize anchors.centerIn: parent + radius: sliderRoot.trackRadius color: sliderRoot.rangeColor } } diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 0ae8b4d9e4..3b2db2efac 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -16,6 +16,7 @@ from UM.Mesh.MeshBuilder import MeshBuilder from UM.Message import Message from UM.Platform import Platform from UM.PluginRegistry import PluginRegistry +from UM.Qt.QtApplication import QtApplication from UM.Resources import Resources from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator @@ -26,8 +27,8 @@ from UM.View.GL.OpenGL import OpenGL from UM.View.GL.OpenGLContext import OpenGLContext from UM.View.GL.ShaderProgram import ShaderProgram -from UM.View.View import View from UM.i18n import i18nCatalog +from cura.CuraView import CuraView from cura.Scene.ConvexHullNode import ConvexHullNode from cura.CuraApplication import CuraApplication @@ -48,15 +49,15 @@ catalog = i18nCatalog("cura") ## View used to display g-code paths. -class SimulationView(View): - # Must match SimulationView.qml +class SimulationView(CuraView): + # Must match SimulationViewMenuComponent.qml LAYER_VIEW_TYPE_MATERIAL_TYPE = 0 LAYER_VIEW_TYPE_LINE_TYPE = 1 LAYER_VIEW_TYPE_FEEDRATE = 2 LAYER_VIEW_TYPE_THICKNESS = 3 - def __init__(self) -> None: - super().__init__() + def __init__(self, parent = None) -> None: + super().__init__(parent) self._max_layers = 0 self._current_layer_num = 0 @@ -113,6 +114,16 @@ class SimulationView(View): self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled"), title = catalog.i18nc("@info:title", "Simulation View")) + QtApplication.getInstance().engineCreatedSignal.connect(self._onEngineCreated) + + def _onEngineCreated(self) -> None: + plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId()) + if plugin_path: + self.addDisplayComponent("main", os.path.join(plugin_path, "SimulationViewMainComponent.qml")) + self.addDisplayComponent("menu", os.path.join(plugin_path, "SimulationViewMenuComponent.qml")) + else: + Logger.log("e", "Unable to find the path for %s", self.getPluginId()) + def _evaluateCompatibilityMode(self) -> bool: return OpenGLContext.isLegacyOpenGL() or bool(Application.getInstance().getPreferences().getValue("view/force_layer_view_compatibility_mode")) @@ -331,12 +342,16 @@ class SimulationView(View): return self._extruder_count def getMinFeedrate(self) -> float: + if abs(self._min_feedrate - sys.float_info.max) < 10: # Some lenience due to floating point rounding. + return 0.0 # If it's still max-float, there are no measurements. Use 0 then. return self._min_feedrate def getMaxFeedrate(self) -> float: return self._max_feedrate def getMinThickness(self) -> float: + if abs(self._min_thickness - sys.float_info.max) < 10: # Some lenience due to floating point rounding. + return 0.0 # If it's still max-float, there are no measurements. Use 0 then. return self._min_thickness def getMaxThickness(self) -> float: diff --git a/plugins/SimulationView/SimulationView.qml b/plugins/SimulationView/SimulationView.qml deleted file mode 100644 index be124157fb..0000000000 --- a/plugins/SimulationView/SimulationView.qml +++ /dev/null @@ -1,808 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.4 -import QtQuick.Controls 1.2 -import QtQuick.Layouts 1.1 -import QtQuick.Controls.Styles 1.1 - -import UM 1.0 as UM -import Cura 1.0 as Cura - -Item -{ - id: base - width: - { - if (UM.SimulationView.compatibilityMode) - { - return UM.Theme.getSize("layerview_menu_size_compatibility").width; - } - else - { - return UM.Theme.getSize("layerview_menu_size").width; - } - } - height: { - if (viewSettings.collapsed) - { - if (UM.SimulationView.compatibilityMode) - { - return UM.Theme.getSize("layerview_menu_size_compatibility_collapsed").height; - } - return UM.Theme.getSize("layerview_menu_size_collapsed").height; - } - else if (UM.SimulationView.compatibilityMode) - { - return UM.Theme.getSize("layerview_menu_size_compatibility").height; - } - else if (UM.Preferences.getValue("layerview/layer_view_type") == 0) - { - return UM.Theme.getSize("layerview_menu_size_material_color_mode").height + UM.SimulationView.extruderCount * (UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("layerview_row_spacing").height) - } - else - { - return UM.Theme.getSize("layerview_menu_size").height + UM.SimulationView.extruderCount * (UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("layerview_row_spacing").height) - } - } - Behavior on height { NumberAnimation { duration: 100 } } - - property var buttonTarget: - { - if(parent != null) - { - var force_binding = parent.y; // ensure this gets reevaluated when the panel moves - return base.mapFromItem(parent.parent, parent.buttonTarget.x, parent.buttonTarget.y) - } - return Qt.point(0,0) - } - - Rectangle - { - id: layerViewMenu - anchors.right: parent.right - anchors.top: parent.top - width: parent.width - height: parent.height - clip: true - z: layerSlider.z - 1 - color: UM.Theme.getColor("tool_panel_background") - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - - Button { - id: collapseButton - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("default_margin").height + (UM.Theme.getSize("layerview_row").height - UM.Theme.getSize("default_margin").height) / 2) - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - - onClicked: viewSettings.collapsed = !viewSettings.collapsed - - style: ButtonStyle - { - background: UM.RecolorImage - { - width: control.width - height: control.height - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.getColor("setting_control_text") - source: viewSettings.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") - } - label: Label{ } - } - } - - ColumnLayout - { - id: viewSettings - - property bool collapsed: false - property var extruder_opacities: UM.Preferences.getValue("layerview/extruder_opacities").split("|") - property bool show_travel_moves: UM.Preferences.getValue("layerview/show_travel_moves") - property bool show_helpers: UM.Preferences.getValue("layerview/show_helpers") - property bool show_skin: UM.Preferences.getValue("layerview/show_skin") - property bool show_infill: UM.Preferences.getValue("layerview/show_infill") - // if we are in compatibility mode, we only show the "line type" - property bool show_legend: UM.SimulationView.compatibilityMode ? true : UM.Preferences.getValue("layerview/layer_view_type") == 1 - property bool show_gradient: UM.SimulationView.compatibilityMode ? false : UM.Preferences.getValue("layerview/layer_view_type") == 2 || UM.Preferences.getValue("layerview/layer_view_type") == 3 - property bool show_feedrate_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 2 - property bool show_thickness_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 3 - property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers") - property int top_layer_count: UM.Preferences.getValue("view/top_layer_count") - - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - spacing: UM.Theme.getSize("layerview_row_spacing").height - - Label - { - id: layerViewTypesLabel - anchors.left: parent.left - text: catalog.i18nc("@label","Color scheme") - font: UM.Theme.getFont("default"); - visible: !UM.SimulationView.compatibilityMode - Layout.fillWidth: true - color: UM.Theme.getColor("setting_control_text") - } - - ListModel // matches SimulationView.py - { - id: layerViewTypes - } - - Component.onCompleted: - { - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Material Color"), - type_id: 0 - }) - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Line Type"), - type_id: 1 - }) - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Feedrate"), - type_id: 2 - }) - layerViewTypes.append({ - text: catalog.i18nc("@label:listbox", "Layer thickness"), - type_id: 3 // these ids match the switching in the shader - }) - } - - ComboBox - { - id: layerTypeCombobox - anchors.left: parent.left - Layout.fillWidth: true - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - model: layerViewTypes - visible: !UM.SimulationView.compatibilityMode - style: UM.Theme.styles.combobox - anchors.right: parent.right - - onActivated: - { - UM.Preferences.setValue("layerview/layer_view_type", index); - } - - Component.onCompleted: - { - currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); - updateLegends(currentIndex); - } - - function updateLegends(type_id) - { - // update visibility of legends - viewSettings.show_legend = UM.SimulationView.compatibilityMode || (type_id == 1); - viewSettings.show_gradient = !UM.SimulationView.compatibilityMode && (type_id == 2 || type_id == 3); - viewSettings.show_feedrate_gradient = viewSettings.show_gradient && (type_id == 2); - viewSettings.show_thickness_gradient = viewSettings.show_gradient && (type_id == 3); - } - } - - Label - { - id: compatibilityModeLabel - anchors.left: parent.left - text: catalog.i18nc("@label","Compatibility Mode") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - visible: UM.SimulationView.compatibilityMode - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - } - - Item - { - height: Math.round(UM.Theme.getSize("default_margin").width / 2) - width: width - } - - Connections - { - target: UM.Preferences - onPreferenceChanged: - { - layerTypeCombobox.currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); - layerTypeCombobox.updateLegends(layerTypeCombobox.currentIndex); - playButton.pauseSimulation(); - viewSettings.extruder_opacities = UM.Preferences.getValue("layerview/extruder_opacities").split("|"); - viewSettings.show_travel_moves = UM.Preferences.getValue("layerview/show_travel_moves"); - viewSettings.show_helpers = UM.Preferences.getValue("layerview/show_helpers"); - viewSettings.show_skin = UM.Preferences.getValue("layerview/show_skin"); - viewSettings.show_infill = UM.Preferences.getValue("layerview/show_infill"); - viewSettings.only_show_top_layers = UM.Preferences.getValue("view/only_show_top_layers"); - viewSettings.top_layer_count = UM.Preferences.getValue("view/top_layer_count"); - } - } - - Repeater - { - model: Cura.ExtrudersModel{} - CheckBox - { - id: extrudersModelCheckBox - checked: viewSettings.extruder_opacities[index] > 0.5 || viewSettings.extruder_opacities[index] == undefined || viewSettings.extruder_opacities[index] == "" - onClicked: - { - viewSettings.extruder_opacities[index] = checked ? 1.0 : 0.0 - UM.Preferences.setValue("layerview/extruder_opacities", viewSettings.extruder_opacities.join("|")); - } - visible: !UM.SimulationView.compatibilityMode - enabled: index + 1 <= 4 - Rectangle - { - anchors.verticalCenter: parent.verticalCenter - anchors.right: extrudersModelCheckBox.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: model.color - radius: Math.round(width / 2) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: !viewSettings.show_legend & !viewSettings.show_gradient - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox - Label - { - text: model.name - elide: Text.ElideRight - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - anchors.verticalCenter: parent.verticalCenter - anchors.left: extrudersModelCheckBox.left; - anchors.right: extrudersModelCheckBox.right; - anchors.leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width/2) - anchors.rightMargin: UM.Theme.getSize("default_margin").width * 2 - } - } - } - - Repeater - { - model: ListModel - { - id: typesLegendModel - Component.onCompleted: - { - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Travels"), - initialValue: viewSettings.show_travel_moves, - preference: "layerview/show_travel_moves", - colorId: "layerview_move_combing" - }); - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Helpers"), - initialValue: viewSettings.show_helpers, - preference: "layerview/show_helpers", - colorId: "layerview_support" - }); - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Shell"), - initialValue: viewSettings.show_skin, - preference: "layerview/show_skin", - colorId: "layerview_inset_0" - }); - typesLegendModel.append({ - label: catalog.i18nc("@label", "Show Infill"), - initialValue: viewSettings.show_infill, - preference: "layerview/show_infill", - colorId: "layerview_infill" - }); - } - } - - CheckBox - { - id: legendModelCheckBox - checked: model.initialValue - onClicked: - { - UM.Preferences.setValue(model.preference, checked); - } - Rectangle - { - anchors.verticalCenter: parent.verticalCenter - anchors.right: legendModelCheckBox.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor(model.colorId) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: viewSettings.show_legend - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - style: UM.Theme.styles.checkbox - Label - { - text: label - font: UM.Theme.getFont("default") - elide: Text.ElideRight - color: UM.Theme.getColor("setting_control_text") - anchors.verticalCenter: parent.verticalCenter - anchors.left: legendModelCheckBox.left; - anchors.right: legendModelCheckBox.right; - anchors.leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width/2) - anchors.rightMargin: UM.Theme.getSize("default_margin").width * 2 - } - } - } - - CheckBox - { - checked: viewSettings.only_show_top_layers - onClicked: - { - UM.Preferences.setValue("view/only_show_top_layers", checked ? 1.0 : 0.0); - } - text: catalog.i18nc("@label", "Only Show Top Layers") - visible: UM.SimulationView.compatibilityMode - style: UM.Theme.styles.checkbox - } - CheckBox - { - checked: viewSettings.top_layer_count == 5 - onClicked: - { - UM.Preferences.setValue("view/top_layer_count", checked ? 5 : 1); - } - text: catalog.i18nc("@label", "Show 5 Detailed Layers On Top") - visible: UM.SimulationView.compatibilityMode - style: UM.Theme.styles.checkbox - } - - Repeater - { - model: ListModel - { - id: typesLegendModelNoCheck - Component.onCompleted: - { - typesLegendModelNoCheck.append({ - label: catalog.i18nc("@label", "Top / Bottom"), - colorId: "layerview_skin", - }); - typesLegendModelNoCheck.append({ - label: catalog.i18nc("@label", "Inner Wall"), - colorId: "layerview_inset_x", - }); - } - } - - Label - { - text: label - visible: viewSettings.show_legend - id: typesLegendModelLabel - Rectangle - { - anchors.verticalCenter: parent.verticalCenter - anchors.right: typesLegendModelLabel.right - width: UM.Theme.getSize("layerview_legend_size").width - height: UM.Theme.getSize("layerview_legend_size").height - color: UM.Theme.getColor(model.colorId) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - visible: viewSettings.show_legend - } - Layout.fillWidth: true - Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height - Layout.preferredWidth: UM.Theme.getSize("layerview_row").width - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - } - } - - // Text for the minimum, maximum and units for the feedrates and layer thickness - Item - { - id: gradientLegend - visible: viewSettings.show_gradient - width: parent.width - height: UM.Theme.getSize("layerview_row").height - anchors - { - topMargin: UM.Theme.getSize("slider_layerview_margin").height - horizontalCenter: parent.horizontalCenter - } - - Label - { - text: minText() - anchors.left: parent.left - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - - function minText() - { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) - { - // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) - { - return parseFloat(UM.SimulationView.getMinFeedrate()).toFixed(2) - } - // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) - { - return parseFloat(UM.SimulationView.getMinThickness()).toFixed(2) - } - } - return catalog.i18nc("@label","min") - } - } - - Label - { - text: unitsText() - anchors.horizontalCenter: parent.horizontalCenter - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - - function unitsText() - { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) - { - // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) - { - return "mm/s" - } - // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) - { - return "mm" - } - } - return "" - } - } - - Label - { - text: maxText() - anchors.right: parent.right - color: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default") - - function maxText() - { - if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) - { - // Feedrate selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 2) - { - return parseFloat(UM.SimulationView.getMaxFeedrate()).toFixed(2) - } - // Layer thickness selected - if (UM.Preferences.getValue("layerview/layer_view_type") == 3) - { - return parseFloat(UM.SimulationView.getMaxThickness()).toFixed(2) - } - } - return catalog.i18nc("@label","max") - } - } - } - - // Gradient colors for feedrate - Rectangle - { // In QML 5.9 can be changed by LinearGradient - // Invert values because then the bar is rotated 90 degrees - id: feedrateGradient - visible: viewSettings.show_feedrate_gradient - anchors.left: parent.right - height: parent.width - width: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - transform: Rotation {origin.x: 0; origin.y: 0; angle: 90} - gradient: Gradient - { - GradientStop - { - position: 0.000 - color: Qt.rgba(1, 0.5, 0, 1) - } - GradientStop - { - position: 0.625 - color: Qt.rgba(0.375, 0.5, 0, 1) - } - GradientStop - { - position: 0.75 - color: Qt.rgba(0.25, 1, 0, 1) - } - GradientStop - { - position: 1.0 - color: Qt.rgba(0, 0, 1, 1) - } - } - } - - // Gradient colors for layer thickness (similar to parula colormap) - Rectangle // In QML 5.9 can be changed by LinearGradient - { - // Invert values because then the bar is rotated 90 degrees - id: thicknessGradient - visible: viewSettings.show_thickness_gradient - anchors.left: parent.right - height: parent.width - width: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - transform: Rotation {origin.x: 0; origin.y: 0; angle: 90} - gradient: Gradient - { - GradientStop - { - position: 0.000 - color: Qt.rgba(1, 1, 0, 1) - } - GradientStop - { - position: 0.25 - color: Qt.rgba(1, 0.75, 0.25, 1) - } - GradientStop - { - position: 0.5 - color: Qt.rgba(0, 0.75, 0.5, 1) - } - GradientStop - { - position: 0.75 - color: Qt.rgba(0, 0.375, 0.75, 1) - } - GradientStop - { - position: 1.0 - color: Qt.rgba(0, 0, 0.5, 1) - } - } - } - } - } - - Item - { - id: slidersBox - - width: parent.width - visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity - - anchors - { - top: parent.bottom - topMargin: UM.Theme.getSize("slider_layerview_margin").height - left: parent.left - } - - PathSlider - { - id: pathSlider - - height: UM.Theme.getSize("slider_handle").width - anchors.left: playButton.right - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.right: parent.right - visible: !UM.SimulationView.compatibilityMode - - // custom properties - handleValue: UM.SimulationView.currentPath - maximumValue: UM.SimulationView.numPaths - handleSize: UM.Theme.getSize("slider_handle").width - trackThickness: UM.Theme.getSize("slider_groove").width - trackColor: UM.Theme.getColor("slider_groove") - trackBorderColor: UM.Theme.getColor("slider_groove_border") - handleColor: UM.Theme.getColor("slider_handle") - handleActiveColor: UM.Theme.getColor("slider_handle_active") - rangeColor: UM.Theme.getColor("slider_groove_fill") - - // update values when layer data changes - Connections - { - target: UM.SimulationView - onMaxPathsChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) - onCurrentPathChanged: - { - // Only pause the simulation when the layer was changed manually, not when the simulation is running - if (pathSlider.manuallyChanged) - { - playButton.pauseSimulation() - } - pathSlider.setHandleValue(UM.SimulationView.currentPath) - } - } - - // make sure the slider handlers show the correct value after switching views - Component.onCompleted: - { - pathSlider.setHandleValue(UM.SimulationView.currentPath) - } - } - - LayerSlider - { - id: layerSlider - - width: UM.Theme.getSize("slider_handle").width - height: UM.Theme.getSize("layerview_menu_size").height - - anchors - { - top: !UM.SimulationView.compatibilityMode ? pathSlider.bottom : parent.top - topMargin: !UM.SimulationView.compatibilityMode ? UM.Theme.getSize("default_margin").height : 0 - right: parent.right - rightMargin: UM.Theme.getSize("slider_layerview_margin").width - } - - // custom properties - upperValue: UM.SimulationView.currentLayer - lowerValue: UM.SimulationView.minimumLayer - maximumValue: UM.SimulationView.numLayers - handleSize: UM.Theme.getSize("slider_handle").width - trackThickness: UM.Theme.getSize("slider_groove").width - trackColor: UM.Theme.getColor("slider_groove") - trackBorderColor: UM.Theme.getColor("slider_groove_border") - upperHandleColor: UM.Theme.getColor("slider_handle") - lowerHandleColor: UM.Theme.getColor("slider_handle") - rangeHandleColor: UM.Theme.getColor("slider_groove_fill") - handleActiveColor: UM.Theme.getColor("slider_handle_active") - handleLabelWidth: UM.Theme.getSize("slider_layerview_background").width - - // update values when layer data changes - Connections - { - target: UM.SimulationView - onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) - onMinimumLayerChanged: layerSlider.setLowerValue(UM.SimulationView.minimumLayer) - onCurrentLayerChanged: - { - // Only pause the simulation when the layer was changed manually, not when the simulation is running - if (layerSlider.manuallyChanged) - { - playButton.pauseSimulation() - } - layerSlider.setUpperValue(UM.SimulationView.currentLayer) - } - } - - // make sure the slider handlers show the correct value after switching views - Component.onCompleted: - { - layerSlider.setLowerValue(UM.SimulationView.minimumLayer) - layerSlider.setUpperValue(UM.SimulationView.currentLayer) - } - } - - // Play simulation button - Button - { - id: playButton - iconSource: "./resources/simulation_resume.svg" - style: UM.Theme.styles.small_tool_button - visible: !UM.SimulationView.compatibilityMode - anchors - { - verticalCenter: pathSlider.verticalCenter - } - - property var status: 0 // indicates if it's stopped (0) or playing (1) - - onClicked: - { - switch(status) - { - case 0: - { - resumeSimulation() - break - } - case 1: - { - pauseSimulation() - break - } - } - } - - function pauseSimulation() - { - UM.SimulationView.setSimulationRunning(false) - iconSource = "./resources/simulation_resume.svg" - simulationTimer.stop() - status = 0 - layerSlider.manuallyChanged = true - pathSlider.manuallyChanged = true - } - - function resumeSimulation() - { - UM.SimulationView.setSimulationRunning(true) - iconSource = "./resources/simulation_pause.svg" - simulationTimer.start() - layerSlider.manuallyChanged = false - pathSlider.manuallyChanged = false - } - } - - Timer - { - id: simulationTimer - interval: 100 - running: false - repeat: true - onTriggered: - { - var currentPath = UM.SimulationView.currentPath - var numPaths = UM.SimulationView.numPaths - var currentLayer = UM.SimulationView.currentLayer - var numLayers = UM.SimulationView.numLayers - // When the user plays the simulation, if the path slider is at the end of this layer, we start - // the simulation at the beginning of the current layer. - if (playButton.status == 0) - { - if (currentPath >= numPaths) - { - UM.SimulationView.setCurrentPath(0) - } - else - { - UM.SimulationView.setCurrentPath(currentPath+1) - } - } - // If the simulation is already playing and we reach the end of a layer, then it automatically - // starts at the beginning of the next layer. - else - { - if (currentPath >= numPaths) - { - // At the end of the model, the simulation stops - if (currentLayer >= numLayers) - { - playButton.pauseSimulation() - } - else - { - UM.SimulationView.setCurrentLayer(currentLayer+1) - UM.SimulationView.setCurrentPath(0) - } - } - else - { - UM.SimulationView.setCurrentPath(currentPath+1) - } - } - // The status must be set here instead of in the resumeSimulation function otherwise it won't work - // correctly, because part of the logic is in this trigger function. - playButton.status = 1 - } - } - } - - FontMetrics - { - id: fontMetrics - font: UM.Theme.getFont("default") - } -} diff --git a/plugins/SimulationView/SimulationViewMainComponent.qml b/plugins/SimulationView/SimulationViewMainComponent.qml new file mode 100644 index 0000000000..58901652d3 --- /dev/null +++ b/plugins/SimulationView/SimulationViewMainComponent.qml @@ -0,0 +1,216 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.4 as UM +import Cura 1.0 as Cura + +Item +{ + property bool is_simulation_playing: false + visible: UM.SimulationView.layerActivity && CuraApplication.platformActivity + + PathSlider + { + id: pathSlider + height: UM.Theme.getSize("slider_handle").width + width: UM.Theme.getSize("slider_layerview_size").height + + anchors.bottom: parent.bottom + anchors.bottomMargin: UM.Theme.getSize("default_margin").height + + anchors.horizontalCenter: parent.horizontalCenter + + visible: !UM.SimulationView.compatibilityMode + + // Custom properties + handleValue: UM.SimulationView.currentPath + maximumValue: UM.SimulationView.numPaths + + // Update values when layer data changes. + Connections + { + target: UM.SimulationView + onMaxPathsChanged: pathSlider.setHandleValue(UM.SimulationView.currentPath) + onCurrentPathChanged: + { + // Only pause the simulation when the layer was changed manually, not when the simulation is running + if (pathSlider.manuallyChanged) + { + playButton.pauseSimulation() + } + pathSlider.setHandleValue(UM.SimulationView.currentPath) + } + } + + // Ensure that the slider handlers show the correct value after switching views. + Component.onCompleted: + { + pathSlider.setHandleValue(UM.SimulationView.currentPath) + } + + } + + UM.SimpleButton + { + id: playButton + iconSource: !is_simulation_playing ? "./resources/simulation_resume.svg": "./resources/simulation_pause.svg" + width: UM.Theme.getSize("small_button").width + height: UM.Theme.getSize("small_button").height + hoverColor: UM.Theme.getColor("slider_handle_active") + color: UM.Theme.getColor("slider_handle") + iconMargin: UM.Theme.getSize("thick_lining").width + visible: !UM.SimulationView.compatibilityMode + + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "view/only_show_top_layers" && preference !== "view/top_layer_count" && ! preference.match("layerview/")) + { + return; + } + + playButton.pauseSimulation() + } + } + + anchors + { + right: pathSlider.left + verticalCenter: pathSlider.verticalCenter + } + + onClicked: + { + if(is_simulation_playing) + { + pauseSimulation() + } + else + { + resumeSimulation() + } + } + + function pauseSimulation() + { + UM.SimulationView.setSimulationRunning(false) + simulationTimer.stop() + is_simulation_playing = false + layerSlider.manuallyChanged = true + pathSlider.manuallyChanged = true + } + + function resumeSimulation() + { + UM.SimulationView.setSimulationRunning(true) + simulationTimer.start() + layerSlider.manuallyChanged = false + pathSlider.manuallyChanged = false + } + } + + Timer + { + id: simulationTimer + interval: 100 + running: false + repeat: true + onTriggered: + { + var currentPath = UM.SimulationView.currentPath + var numPaths = UM.SimulationView.numPaths + var currentLayer = UM.SimulationView.currentLayer + var numLayers = UM.SimulationView.numLayers + + // When the user plays the simulation, if the path slider is at the end of this layer, we start + // the simulation at the beginning of the current layer. + if (!is_simulation_playing) + { + if (currentPath >= numPaths) + { + UM.SimulationView.setCurrentPath(0) + } + else + { + UM.SimulationView.setCurrentPath(currentPath + 1) + } + } + // If the simulation is already playing and we reach the end of a layer, then it automatically + // starts at the beginning of the next layer. + else + { + if (currentPath >= numPaths) + { + // At the end of the model, the simulation stops + if (currentLayer >= numLayers) + { + playButton.pauseSimulation() + } + else + { + UM.SimulationView.setCurrentLayer(currentLayer + 1) + UM.SimulationView.setCurrentPath(0) + } + } + else + { + UM.SimulationView.setCurrentPath(currentPath + 1) + } + } + // The status must be set here instead of in the resumeSimulation function otherwise it won't work + // correctly, because part of the logic is in this trigger function. + is_simulation_playing = true + } + } + + LayerSlider + { + id: layerSlider + + width: UM.Theme.getSize("slider_handle").width + height: UM.Theme.getSize("slider_layerview_size").height + + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + rightMargin: UM.Theme.getSize("default_margin").width + } + + // Custom properties + upperValue: UM.SimulationView.currentLayer + lowerValue: UM.SimulationView.minimumLayer + maximumValue: UM.SimulationView.numLayers + + // Update values when layer data changes + Connections + { + target: UM.SimulationView + onMaxLayersChanged: layerSlider.setUpperValue(UM.SimulationView.currentLayer) + onMinimumLayerChanged: layerSlider.setLowerValue(UM.SimulationView.minimumLayer) + onCurrentLayerChanged: + { + // Only pause the simulation when the layer was changed manually, not when the simulation is running + if (layerSlider.manuallyChanged) + { + playButton.pauseSimulation() + } + layerSlider.setUpperValue(UM.SimulationView.currentLayer) + } + } + + // Make sure the slider handlers show the correct value after switching views + Component.onCompleted: + { + layerSlider.setLowerValue(UM.SimulationView.minimumLayer) + layerSlider.setUpperValue(UM.SimulationView.currentLayer) + } + } +}
\ No newline at end of file diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml new file mode 100644 index 0000000000..957d8170cf --- /dev/null +++ b/plugins/SimulationView/SimulationViewMenuComponent.qml @@ -0,0 +1,556 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.4 +import QtQuick.Controls 1.2 +import QtQuick.Layouts 1.1 +import QtQuick.Controls.Styles 1.1 +import QtGraphicalEffects 1.0 + +import UM 1.0 as UM +import Cura 1.0 as Cura + + +Cura.ExpandableComponent +{ + id: base + + contentHeaderTitle: catalog.i18nc("@label", "Color scheme") + + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "view/only_show_top_layers" && preference !== "view/top_layer_count" && ! preference.match("layerview/")) + { + return; + } + + layerTypeCombobox.currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type") + layerTypeCombobox.updateLegends(layerTypeCombobox.currentIndex) + viewSettings.extruder_opacities = UM.Preferences.getValue("layerview/extruder_opacities").split("|") + viewSettings.show_travel_moves = UM.Preferences.getValue("layerview/show_travel_moves") + viewSettings.show_helpers = UM.Preferences.getValue("layerview/show_helpers") + viewSettings.show_skin = UM.Preferences.getValue("layerview/show_skin") + viewSettings.show_infill = UM.Preferences.getValue("layerview/show_infill") + viewSettings.only_show_top_layers = UM.Preferences.getValue("view/only_show_top_layers") + viewSettings.top_layer_count = UM.Preferences.getValue("view/top_layer_count") + } + } + + headerItem: Item + { + Label + { + id: colorSchemeLabel + text: catalog.i18nc("@label", "Color scheme") + verticalAlignment: Text.AlignVCenter + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering + } + + Label + { + text: layerTypeCombobox.currentText + verticalAlignment: Text.AlignVCenter + anchors + { + left: colorSchemeLabel.right + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + } + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + } + } + + contentItem: Column + { + id: viewSettings + + property var extruder_opacities: UM.Preferences.getValue("layerview/extruder_opacities").split("|") + property bool show_travel_moves: UM.Preferences.getValue("layerview/show_travel_moves") + property bool show_helpers: UM.Preferences.getValue("layerview/show_helpers") + property bool show_skin: UM.Preferences.getValue("layerview/show_skin") + property bool show_infill: UM.Preferences.getValue("layerview/show_infill") + + // If we are in compatibility mode, we only show the "line type" + property bool show_legend: UM.SimulationView.compatibilityMode ? true : UM.Preferences.getValue("layerview/layer_view_type") == 1 + property bool show_gradient: UM.SimulationView.compatibilityMode ? false : UM.Preferences.getValue("layerview/layer_view_type") == 2 || UM.Preferences.getValue("layerview/layer_view_type") == 3 + property bool show_feedrate_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 2 + property bool show_thickness_gradient: show_gradient && UM.Preferences.getValue("layerview/layer_view_type") == 3 + property bool only_show_top_layers: UM.Preferences.getValue("view/only_show_top_layers") + property int top_layer_count: UM.Preferences.getValue("view/top_layer_count") + + width: UM.Theme.getSize("layerview_menu_size").width - 2 * UM.Theme.getSize("default_margin").width + height: implicitHeight + + spacing: UM.Theme.getSize("layerview_row_spacing").height + + ListModel // matches SimulationView.py + { + id: layerViewTypes + } + + Component.onCompleted: + { + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Material Color"), + type_id: 0 + }) + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Line Type"), + type_id: 1 + }) + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Feedrate"), + type_id: 2 + }) + layerViewTypes.append({ + text: catalog.i18nc("@label:listbox", "Layer thickness"), + type_id: 3 // these ids match the switching in the shader + }) + } + + ComboBox + { + id: layerTypeCombobox + width: parent.width + model: layerViewTypes + visible: !UM.SimulationView.compatibilityMode + style: UM.Theme.styles.combobox + + onActivated: + { + UM.Preferences.setValue("layerview/layer_view_type", index); + } + + Component.onCompleted: + { + currentIndex = UM.SimulationView.compatibilityMode ? 1 : UM.Preferences.getValue("layerview/layer_view_type"); + updateLegends(currentIndex); + } + + function updateLegends(type_id) + { + // Update the visibility of the legends. + viewSettings.show_legend = UM.SimulationView.compatibilityMode || (type_id == 1); + viewSettings.show_gradient = !UM.SimulationView.compatibilityMode && (type_id == 2 || type_id == 3); + viewSettings.show_feedrate_gradient = viewSettings.show_gradient && (type_id == 2); + viewSettings.show_thickness_gradient = viewSettings.show_gradient && (type_id == 3); + } + } + + Label + { + id: compatibilityModeLabel + text: catalog.i18nc("@label", "Compatibility Mode") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + visible: UM.SimulationView.compatibilityMode + height: UM.Theme.getSize("layerview_row").height + width: parent.width + renderType: Text.NativeRendering + } + + Item // Spacer + { + height: UM.Theme.getSize("narrow_margin").width + width: width + } + + Repeater + { + model: CuraApplication.getExtrudersModel() + + CheckBox + { + id: extrudersModelCheckBox + checked: viewSettings.extruder_opacities[index] > 0.5 || viewSettings.extruder_opacities[index] == undefined || viewSettings.extruder_opacities[index] == "" + height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + width: parent.width + visible: !UM.SimulationView.compatibilityMode + enabled: index < 4 + + onClicked: + { + viewSettings.extruder_opacities[index] = checked ? 1.0 : 0.0 + UM.Preferences.setValue("layerview/extruder_opacities", viewSettings.extruder_opacities.join("|")); + } + + style: UM.Theme.styles.checkbox + + + UM.RecolorImage + { + id: swatch + anchors.verticalCenter: parent.verticalCenter + anchors.right: extrudersModelCheckBox.right + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + source: UM.Theme.getIcon("extruder_button") + color: model.color + } + + Label + { + text: model.name + elide: Text.ElideRight + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + anchors + { + verticalCenter: parent.verticalCenter + left: extrudersModelCheckBox.left + right: extrudersModelCheckBox.right + leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width / 2) + rightMargin: UM.Theme.getSize("default_margin").width * 2 + } + renderType: Text.NativeRendering + } + } + } + + Repeater + { + model: ListModel + { + id: typesLegendModel + Component.onCompleted: + { + typesLegendModel.append({ + label: catalog.i18nc("@label", "Travels"), + initialValue: viewSettings.show_travel_moves, + preference: "layerview/show_travel_moves", + colorId: "layerview_move_combing" + }); + typesLegendModel.append({ + label: catalog.i18nc("@label", "Helpers"), + initialValue: viewSettings.show_helpers, + preference: "layerview/show_helpers", + colorId: "layerview_support" + }); + typesLegendModel.append({ + label: catalog.i18nc("@label", "Shell"), + initialValue: viewSettings.show_skin, + preference: "layerview/show_skin", + colorId: "layerview_inset_0" + }); + typesLegendModel.append({ + label: catalog.i18nc("@label", "Infill"), + initialValue: viewSettings.show_infill, + preference: "layerview/show_infill", + colorId: "layerview_infill" + }); + } + } + + CheckBox + { + id: legendModelCheckBox + checked: model.initialValue + onClicked: UM.Preferences.setValue(model.preference, checked) + height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + width: parent.width + + style: UM.Theme.styles.checkbox + + Rectangle + { + anchors.verticalCenter: parent.verticalCenter + anchors.right: legendModelCheckBox.right + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + color: UM.Theme.getColor(model.colorId) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + visible: viewSettings.show_legend + } + + Label + { + text: label + font: UM.Theme.getFont("default") + elide: Text.ElideRight + renderType: Text.NativeRendering + color: UM.Theme.getColor("setting_control_text") + anchors.verticalCenter: parent.verticalCenter + anchors.left: legendModelCheckBox.left + anchors.right: legendModelCheckBox.right + anchors.leftMargin: UM.Theme.getSize("checkbox").width + Math.round(UM.Theme.getSize("default_margin").width / 2) + anchors.rightMargin: UM.Theme.getSize("default_margin").width * 2 + } + } + } + + CheckBox + { + checked: viewSettings.only_show_top_layers + onClicked: UM.Preferences.setValue("view/only_show_top_layers", checked ? 1.0 : 0.0) + text: catalog.i18nc("@label", "Only Show Top Layers") + visible: UM.SimulationView.compatibilityMode + style: UM.Theme.styles.checkbox + width: parent.width + } + + CheckBox + { + checked: viewSettings.top_layer_count == 5 + onClicked: UM.Preferences.setValue("view/top_layer_count", checked ? 5 : 1) + text: catalog.i18nc("@label", "Show 5 Detailed Layers On Top") + width: parent.width + visible: UM.SimulationView.compatibilityMode + style: UM.Theme.styles.checkbox + } + + Repeater + { + model: ListModel + { + id: typesLegendModelNoCheck + Component.onCompleted: + { + typesLegendModelNoCheck.append({ + label: catalog.i18nc("@label", "Top / Bottom"), + colorId: "layerview_skin", + }); + typesLegendModelNoCheck.append({ + label: catalog.i18nc("@label", "Inner Wall"), + colorId: "layerview_inset_x", + }); + } + } + + Label + { + text: label + visible: viewSettings.show_legend + id: typesLegendModelLabel + + height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + width: parent.width + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + Rectangle + { + anchors.verticalCenter: parent.verticalCenter + anchors.right: typesLegendModelLabel.right + + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + + color: UM.Theme.getColor(model.colorId) + + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + } + } + } + + // Text for the minimum, maximum and units for the feedrates and layer thickness + Item + { + id: gradientLegend + visible: viewSettings.show_gradient + width: parent.width + height: UM.Theme.getSize("layerview_row").height + + Label //Minimum value. + { + text: + { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { + // Feedrate selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { + return parseFloat(UM.SimulationView.getMinFeedrate()).toFixed(2) + } + // Layer thickness selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { + return parseFloat(UM.SimulationView.getMinThickness()).toFixed(2) + } + } + return catalog.i18nc("@label","min") + } + anchors.left: parent.left + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Label //Unit in the middle. + { + text: + { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { + // Feedrate selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { + return "mm/s" + } + // Layer thickness selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { + return "mm" + } + } + return "" + } + + anchors.horizontalCenter: parent.horizontalCenter + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + } + + Label //Maximum value. + { + text: { + if (UM.SimulationView.layerActivity && CuraApplication.platformActivity) + { + // Feedrate selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 2) + { + return parseFloat(UM.SimulationView.getMaxFeedrate()).toFixed(2) + } + // Layer thickness selected + if (UM.Preferences.getValue("layerview/layer_view_type") == 3) + { + return parseFloat(UM.SimulationView.getMaxThickness()).toFixed(2) + } + } + return catalog.i18nc("@label","max") + } + + anchors.right: parent.right + color: UM.Theme.getColor("setting_control_text") + font: UM.Theme.getFont("default") + } + } + + // Gradient colors for feedrate + Rectangle + { + id: feedrateGradient + visible: viewSettings.show_feedrate_gradient + anchors.left: parent.left + anchors.right: parent.right + height: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + + LinearGradient + { + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_lining").width + right: parent.right + rightMargin: UM.Theme.getSize("default_lining").width + top: parent.top + topMargin: UM.Theme.getSize("default_lining").width + bottom: parent.bottom + bottomMargin: UM.Theme.getSize("default_lining").width + } + start: Qt.point(0, 0) + end: Qt.point(parent.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.000 + color: Qt.rgba(0, 0, 1, 1) + } + GradientStop + { + position: 0.25 + color: Qt.rgba(0.25, 1, 0, 1) + } + GradientStop + { + position: 0.375 + color: Qt.rgba(0.375, 0.5, 0, 1) + } + GradientStop + { + position: 1.0 + color: Qt.rgba(1, 0.5, 0, 1) + } + } + } + } + + // Gradient colors for layer thickness (similar to parula colormap) + Rectangle + { + id: thicknessGradient + visible: viewSettings.show_thickness_gradient + anchors.left: parent.left + anchors.right: parent.right + height: Math.round(UM.Theme.getSize("layerview_row").height * 1.5) + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + + LinearGradient + { + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_lining").width + right: parent.right + rightMargin: UM.Theme.getSize("default_lining").width + top: parent.top + topMargin: UM.Theme.getSize("default_lining").width + bottom: parent.bottom + bottomMargin: UM.Theme.getSize("default_lining").width + } + start: Qt.point(0, 0) + end: Qt.point(parent.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.000 + color: Qt.rgba(0, 0, 0.5, 1) + } + GradientStop + { + position: 0.25 + color: Qt.rgba(0, 0.375, 0.75, 1) + } + GradientStop + { + position: 0.5 + color: Qt.rgba(0, 0.75, 0.5, 1) + } + GradientStop + { + position: 0.75 + color: Qt.rgba(1, 0.75, 0.25, 1) + } + GradientStop + { + position: 1.0 + color: Qt.rgba(1, 1, 0, 1) + } + } + } + } + } + + FontMetrics + { + id: fontMetrics + font: UM.Theme.getFont("default") + } +} diff --git a/plugins/SimulationView/__init__.py b/plugins/SimulationView/__init__.py index 360fdc1de9..420ee60660 100644 --- a/plugins/SimulationView/__init__.py +++ b/plugins/SimulationView/__init__.py @@ -8,19 +8,21 @@ from . import SimulationViewProxy, SimulationView catalog = i18nCatalog("cura") + def getMetaData(): return { "view": { "name": catalog.i18nc("@item:inlistbox", "Layer view"), - "view_panel": "SimulationView.qml", - "weight": 2 + "weight": 0 } } + def createSimulationViewProxy(engine, script_engine): return SimulationViewProxy.SimulationViewProxy() + def register(app): simulation_view = SimulationView.SimulationView() qmlRegisterSingletonType(SimulationViewProxy.SimulationViewProxy, "UM", 1, 0, "SimulationView", simulation_view.getProxy) - return { "view": SimulationView.SimulationView()} + return { "view": simulation_view} diff --git a/plugins/SimulationView/layers.shader b/plugins/SimulationView/layers.shader index 30f23a3189..69c7c61ee5 100644 --- a/plugins/SimulationView/layers.shader +++ b/plugins/SimulationView/layers.shader @@ -49,12 +49,13 @@ fragment = // discard movements discard; } - // support: 4, 5, 7, 10 + // support: 4, 5, 7, 10, 11 (prime tower) if ((u_show_helpers == 0) && ( ((v_line_type >= 3.5) && (v_line_type <= 4.5)) || + ((v_line_type >= 4.5) && (v_line_type <= 5.5)) || ((v_line_type >= 6.5) && (v_line_type <= 7.5)) || ((v_line_type >= 9.5) && (v_line_type <= 10.5)) || - ((v_line_type >= 4.5) && (v_line_type <= 5.5)) + ((v_line_type >= 10.5) && (v_line_type <= 11.5)) )) { discard; } diff --git a/plugins/SimulationView/layers3d.shader b/plugins/SimulationView/layers3d.shader index de2b9335d8..a277606509 100644 --- a/plugins/SimulationView/layers3d.shader +++ b/plugins/SimulationView/layers3d.shader @@ -154,7 +154,7 @@ geometry41core = if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9))) { return; } - if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10))) { + if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10) || v_line_type[0] == 11)) { return; } if ((u_show_skin == 0) && ((v_line_type[0] == 1) || (v_line_type[0] == 2) || (v_line_type[0] == 3))) { diff --git a/plugins/SimulationView/layers_shadow.shader b/plugins/SimulationView/layers_shadow.shader index 7ceccff21e..6149cc1703 100644 --- a/plugins/SimulationView/layers_shadow.shader +++ b/plugins/SimulationView/layers_shadow.shader @@ -45,19 +45,23 @@ fragment = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) + { // actually, 8 and 9 // discard movements discard; } - // support: 4, 5, 7, 10 + // support: 4, 5, 7, 10, 11 if ((u_show_helpers == 0) && ( ((v_line_type >= 3.5) && (v_line_type <= 4.5)) || ((v_line_type >= 6.5) && (v_line_type <= 7.5)) || ((v_line_type >= 9.5) && (v_line_type <= 10.5)) || - ((v_line_type >= 4.5) && (v_line_type <= 5.5)) - )) { + ((v_line_type >= 4.5) && (v_line_type <= 5.5)) || + ((v_line_type >= 10.5) && (v_line_type <= 11.5)) + )) + { discard; } + // skin: 1, 2, 3 if ((u_show_skin == 0) && ( (v_line_type >= 0.5) && (v_line_type <= 3.5) @@ -65,7 +69,8 @@ fragment = discard; } // infill: - if ((u_show_infill == 0) && (v_line_type >= 5.5) && (v_line_type <= 6.5)) { + if ((u_show_infill == 0) && (v_line_type >= 5.5) && (v_line_type <= 6.5)) + { // discard movements discard; } @@ -117,12 +122,13 @@ fragment41core = // discard movements discard; } - // helpers: 4, 5, 7, 10 + // helpers: 4, 5, 7, 10, 11 if ((u_show_helpers == 0) && ( ((v_line_type >= 3.5) && (v_line_type <= 4.5)) || ((v_line_type >= 6.5) && (v_line_type <= 7.5)) || ((v_line_type >= 9.5) && (v_line_type <= 10.5)) || - ((v_line_type >= 4.5) && (v_line_type <= 5.5)) + ((v_line_type >= 4.5) && (v_line_type <= 5.5)) || + ((v_line_type >= 10.5) && (v_line_type <= 11.5)) )) { discard; } diff --git a/plugins/SimulationView/plugin.json b/plugins/SimulationView/plugin.json index 93df98068f..3ccf91b9e6 100644 --- a/plugins/SimulationView/plugin.json +++ b/plugins/SimulationView/plugin.json @@ -1,8 +1,8 @@ { "name": "Simulation View", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides the Simulation view.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/SliceInfoPlugin/plugin.json b/plugins/SliceInfoPlugin/plugin.json index 939e5ff235..8ff0e194fb 100644 --- a/plugins/SliceInfoPlugin/plugin.json +++ b/plugins/SliceInfoPlugin/plugin.json @@ -1,8 +1,8 @@ { "name": "Slice info", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Submits anonymous slice info. Can be disabled through preferences.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py index b9ad5c8829..797d6dabec 100644 --- a/plugins/SolidView/SolidView.py +++ b/plugins/SolidView/SolidView.py @@ -12,7 +12,6 @@ from UM.Math.Color import Color from UM.View.GL.OpenGL import OpenGL from cura.Settings.ExtruderManager import ExtruderManager -from cura.Settings.ExtrudersModel import ExtrudersModel import math @@ -29,13 +28,16 @@ class SolidView(View): self._non_printing_shader = None self._support_mesh_shader = None - self._extruders_model = ExtrudersModel() + self._extruders_model = None self._theme = None def beginRendering(self): scene = self.getController().getScene() renderer = self.getRenderer() + if not self._extruders_model: + self._extruders_model = Application.getInstance().getExtrudersModel() + if not self._theme: self._theme = Application.getInstance().getTheme() diff --git a/plugins/SolidView/__init__.py b/plugins/SolidView/__init__.py index db2e48f489..34148fcf05 100644 --- a/plugins/SolidView/__init__.py +++ b/plugins/SolidView/__init__.py @@ -10,7 +10,8 @@ def getMetaData(): return { "view": { "name": i18n_catalog.i18nc("@item:inmenu", "Solid view"), - "weight": 0 + "weight": 0, + "visible": False } } diff --git a/plugins/SolidView/plugin.json b/plugins/SolidView/plugin.json index e70ec224dd..b3f62221c5 100644 --- a/plugins/SolidView/plugin.json +++ b/plugins/SolidView/plugin.json @@ -1,8 +1,8 @@ { "name": "Solid View", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides a normal solid mesh view.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" }
\ No newline at end of file diff --git a/plugins/SupportEraser/plugin.json b/plugins/SupportEraser/plugin.json index 7af35e0fb5..fa6d6d230e 100644 --- a/plugins/SupportEraser/plugin.json +++ b/plugins/SupportEraser/plugin.json @@ -1,8 +1,8 @@ { "name": "Support Eraser", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Creates an eraser mesh to block the printing of support in certain places", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/Toolbox/plugin.json b/plugins/Toolbox/plugin.json index 2557185524..61dc0429f5 100644 --- a/plugins/Toolbox/plugin.json +++ b/plugins/Toolbox/plugin.json @@ -1,7 +1,7 @@ { "name": "Toolbox", "author": "Ultimaker B.V.", - "version": "1.0.0", - "api": 5, + "version": "1.0.1", + "api": "6.0", "description": "Find, manage and install new Cura packages." } diff --git a/plugins/Toolbox/resources/images/loading.gif b/plugins/Toolbox/resources/images/loading.gif Binary files differdeleted file mode 100644 index 43cc1ed6d7..0000000000 --- a/plugins/Toolbox/resources/images/loading.gif +++ /dev/null diff --git a/plugins/Toolbox/resources/images/loading.svg b/plugins/Toolbox/resources/images/loading.svg deleted file mode 100644 index 1ceb4a8d7f..0000000000 --- a/plugins/Toolbox/resources/images/loading.svg +++ /dev/null @@ -1 +0,0 @@ -<svg width="200px" height="200px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="lds-rolling" style="animation-play-state: running; animation-delay: 0s; background-image: none; background-position: initial initial; background-repeat: initial initial;"><circle cx="50" cy="50" fill="none" ng-attr-stroke="{{config.color}}" ng-attr-stroke-width="{{config.width}}" ng-attr-r="{{config.radius}}" ng-attr-stroke-dasharray="{{config.dasharray}}" stroke="#0CA9E3" stroke-width="13" r="43" stroke-dasharray="202.63272615654165 69.54424205218055" style="animation-play-state: running; animation-delay: 0s;"><animateTransform attributeName="transform" type="rotate" calcMode="linear" values="0 50 50;360 50 50" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite" style="animation-play-state: running; animation-delay: 0s;"></animateTransform></circle></svg>
\ No newline at end of file diff --git a/plugins/Toolbox/resources/qml/RatingWidget.qml b/plugins/Toolbox/resources/qml/RatingWidget.qml new file mode 100644 index 0000000000..441cf238f7 --- /dev/null +++ b/plugins/Toolbox/resources/qml/RatingWidget.qml @@ -0,0 +1,106 @@ +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import UM 1.0 as UM +import Cura 1.1 as Cura +Item +{ + id: ratingWidget + + property real rating: 0 + property int indexHovered: -1 + property string packageId: "" + + property int userRating: 0 + property bool canRate: false + + signal rated(int rating) + + width: contentRow.width + height: contentRow.height + MouseArea + { + id: mouseArea + anchors.fill: parent + hoverEnabled: ratingWidget.canRate + acceptedButtons: Qt.NoButton + onExited: + { + if(ratingWidget.canRate) + { + ratingWidget.indexHovered = -1 + } + } + + Row + { + id: contentRow + height: childrenRect.height + Repeater + { + model: 5 // We need to get 5 stars + Button + { + id: control + hoverEnabled: true + onHoveredChanged: + { + if(hovered && ratingWidget.canRate) + { + indexHovered = index + } + } + + ToolTip.visible: control.hovered && !ratingWidget.canRate + ToolTip.text: !Cura.API.account.isLoggedIn ? catalog.i18nc("@label", "You need to login first before you can rate"): catalog.i18nc("@label", "You need to install the package before you can rate") + + property bool isStarFilled: + { + // If the entire widget is hovered, override the actual rating. + if(ratingWidget.indexHovered >= 0) + { + return indexHovered >= index + } + + if(ratingWidget.userRating > 0) + { + return userRating >= index +1 + } + + return rating >= index + 1 + } + + contentItem: Item {} + height: UM.Theme.getSize("rating_star").height + width: UM.Theme.getSize("rating_star").width + background: UM.RecolorImage + { + source: UM.Theme.getIcon(control.isStarFilled ? "star_filled" : "star_empty") + sourceSize.width: width + sourceSize.height: height + + // Unfilled stars should always have the default color. Only filled stars should change on hover + color: + { + if(!ratingWidget.canRate) + { + return UM.Theme.getColor("rating_star") + } + if((ratingWidget.indexHovered >= 0 || ratingWidget.userRating > 0) && isStarFilled) + { + return UM.Theme.getColor("primary") + } + return UM.Theme.getColor("rating_star") + } + } + onClicked: + { + if(ratingWidget.canRate) + { + rated(index + 1) // Notify anyone who cares about this. + } + } + } + } + } + } +}
\ No newline at end of file diff --git a/plugins/Toolbox/resources/qml/SmallRatingWidget.qml b/plugins/Toolbox/resources/qml/SmallRatingWidget.qml new file mode 100644 index 0000000000..965b81dc0f --- /dev/null +++ b/plugins/Toolbox/resources/qml/SmallRatingWidget.qml @@ -0,0 +1,36 @@ +import QtQuick 2.3 +import QtQuick.Controls 1.4 +import UM 1.1 as UM +import Cura 1.1 as Cura + +Row +{ + id: rating + height: UM.Theme.getSize("rating_star").height + visible: model.average_rating > 0 //Has a rating at all. + spacing: UM.Theme.getSize("thick_lining").width + width: starIcon.width + spacing + numRatingsLabel.width + UM.RecolorImage + { + id: starIcon + source: UM.Theme.getIcon("star_filled") + color: model.user_rating == 0 ? UM.Theme.getColor("rating_star") : UM.Theme.getColor("primary") + height: UM.Theme.getSize("rating_star").height + width: UM.Theme.getSize("rating_star").width + sourceSize.height: height + sourceSize.width: width + } + + Label + { + id: numRatingsLabel + text: model.average_rating != undefined ? model.average_rating.toFixed(1) + " (" + model.num_ratings + " " + catalog.i18nc("@label", "ratings") + ")": "" + verticalAlignment: Text.AlignVCenter + height: starIcon.height + width: contentWidth + anchors.verticalCenter: starIcon.verticalCenter + color: starIcon.color + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } +}
\ No newline at end of file diff --git a/plugins/Toolbox/resources/qml/Toolbox.qml b/plugins/Toolbox/resources/qml/Toolbox.qml index 9a98c998b0..d15d98eed7 100644 --- a/plugins/Toolbox/resources/qml/Toolbox.qml +++ b/plugins/Toolbox/resources/qml/Toolbox.qml @@ -14,17 +14,17 @@ Window modality: Qt.ApplicationModal flags: Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint | Qt.WindowCloseButtonHint - width: 720 * screenScaleFactor - height: 640 * screenScaleFactor + width: Math.floor(720 * screenScaleFactor) + height: Math.floor(640 * screenScaleFactor) minimumWidth: width maximumWidth: minimumWidth minimumHeight: height maximumHeight: minimumHeight - color: UM.Theme.getColor("sidebar") + color: UM.Theme.getColor("main_background") UM.I18nCatalog { id: catalog - name:"cura" + name: "cura" } Item { @@ -38,7 +38,7 @@ Window { id: mainView width: parent.width - z: -1 + z: parent.z - 1 anchors { top: header.bottom @@ -95,6 +95,7 @@ Window licenseDialog.show(); } } + ToolboxLicenseDialog { id: licenseDialog diff --git a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml index 4aaea20813..b653f1a73b 100644 --- a/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.3 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -55,10 +55,11 @@ Item bottomMargin: UM.Theme.getSize("default_margin").height } text: details.name || "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") wrapMode: Text.WordWrap width: parent.width height: UM.Theme.getSize("toolbox_property_label").height + renderType: Text.NativeRendering } Label { @@ -70,6 +71,7 @@ Item left: title.left topMargin: UM.Theme.getSize("default_margin").height } + renderType: Text.NativeRendering } Column { @@ -86,14 +88,16 @@ Item Label { text: catalog.i18nc("@label", "Website") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } Label { text: catalog.i18nc("@label", "Email") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } } Column @@ -118,10 +122,11 @@ Item } return "" } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") linkColor: UM.Theme.getColor("text_link") onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering } Label @@ -134,10 +139,11 @@ Item } return "" } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") linkColor: UM.Theme.getColor("text_link") onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering } } Rectangle diff --git a/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml b/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml index 8524b7d1e5..dba9f19ccd 100644 --- a/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml +++ b/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -61,9 +61,15 @@ Item id: labelStyle text: control.text color: control.enabled ? (control.hovered ? UM.Theme.getColor("primary") : UM.Theme.getColor("text")) : UM.Theme.getColor("text_inactive") - font: UM.Theme.getFont("default_bold") - horizontalAlignment: Text.AlignRight + font: UM.Theme.getFont("medium_bold") + horizontalAlignment: Text.AlignLeft + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + } width: control.width + renderType: Text.NativeRendering } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml index a48cb2ee3f..db4e8c628f 100644 --- a/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml +++ b/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -36,12 +36,19 @@ Item var pg_name = "printingGuidelines" return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined } + + property var materialWebsiteUrl: + { + var pg_name = "website" + return (pg_name in packageData.links) ? packageData.links[pg_name] : undefined + } anchors.topMargin: UM.Theme.getSize("default_margin").height height: visible ? childrenRect.height : 0 visible: packageData.type == "material" && (packageData.has_configs || technicalDataSheetUrl !== undefined || - safetyDataSheetUrl !== undefined || printingGuidelinesUrl !== undefined) + safetyDataSheetUrl !== undefined || printingGuidelinesUrl !== undefined || + materialWebsiteUrl !== undefined) Item { @@ -60,6 +67,7 @@ Item wrapMode: Text.WordWrap color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering } TableView @@ -83,7 +91,7 @@ Item model: packageData.supported_configs headerDelegate: Rectangle { - color: UM.Theme.getColor("sidebar") + color: UM.Theme.getColor("main_background") height: UM.Theme.getSize("toolbox_chart_row").height Label { @@ -92,6 +100,7 @@ Item text: styleData.value || "" color: UM.Theme.getColor("text") font: UM.Theme.getFont("default_bold") + renderType: Text.NativeRendering } Rectangle { @@ -111,6 +120,7 @@ Item text: styleData.value || "" color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("default") + renderType: Text.NativeRendering } } itemDelegate: Item @@ -123,6 +133,7 @@ Item text: styleData.value || "" color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("default") + renderType: Text.NativeRendering } } @@ -137,6 +148,7 @@ Item elide: Text.ElideRight color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("default") + renderType: Text.NativeRendering } } @@ -180,7 +192,8 @@ Item anchors.top: combatibilityItem.bottom anchors.topMargin: UM.Theme.getSize("default_margin").height / 2 visible: base.technicalDataSheetUrl !== undefined || - base.safetyDataSheetUrl !== undefined || base.printingGuidelinesUrl !== undefined + base.safetyDataSheetUrl !== undefined || base.printingGuidelinesUrl !== undefined || + base.materialWebsiteUrl !== undefined height: visible ? contentHeight : 0 text: { @@ -208,11 +221,22 @@ Item var pg_name = catalog.i18nc("@action:label", "Printing Guidelines") result += "<a href='%1'>%2</a>".arg(base.printingGuidelinesUrl).arg(pg_name) } + if (base.materialWebsiteUrl !== undefined) + { + if (result.length > 0) + { + result += "<br/>" + } + var pg_name = catalog.i18nc("@action:label", "Website") + result += "<a href='%1'>%2</a>".arg(base.materialWebsiteUrl).arg(pg_name) + } + return result } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") linkColor: UM.Theme.getColor("text_link") onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering } } diff --git a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml index 2c5d08aa72..e238132680 100644 --- a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml +++ b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Layouts 1.1 @@ -66,6 +66,7 @@ UM.Dialog anchors.right: parent.right font: UM.Theme.getFont("default") wrapMode: Text.WordWrap + renderType: Text.NativeRendering } // Buttons diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml index 2e5eae098c..4e44ea7d0b 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailList.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailList.qml @@ -26,10 +26,19 @@ Item } height: childrenRect.height + 2 * UM.Theme.getSize("wide_margin").height spacing: UM.Theme.getSize("default_margin").height + Repeater { model: toolbox.packagesModel - delegate: ToolboxDetailTile {} + delegate: Loader + { + // FIXME: When using asynchronous loading, on Mac and Windows, the tile may fail to load complete, + // leaving an empty space below the title part. We turn it off for now to make it work on Mac and + // Windows. + // Can be related to this QT bug: https://bugreports.qt.io/browse/QTBUG-50992 + asynchronous: false + source: "ToolboxDetailTile.qml" + } } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml index 437a2ef351..fef2732af9 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml @@ -1,11 +1,13 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.3 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.1 as Cura + Item { id: page @@ -24,7 +26,7 @@ Item right: parent.right rightMargin: UM.Theme.getSize("wide_margin").width } - height: UM.Theme.getSize("toolbox_detail_header").height + height: childrenRect.height + 3 * UM.Theme.getSize("default_margin").width Rectangle { id: thumbnail @@ -37,7 +39,7 @@ Item leftMargin: UM.Theme.getSize("wide_margin").width topMargin: UM.Theme.getSize("wide_margin").height } - color: white //Always a white background for image (regardless of theme). + color: UM.Theme.getColor("main_background") Image { anchors.fill: parent @@ -55,16 +57,21 @@ Item top: thumbnail.top left: thumbnail.right leftMargin: UM.Theme.getSize("default_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("wide_margin").width - bottomMargin: UM.Theme.getSize("default_margin").height } text: details === null ? "" : (details.name || "") - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") - wrapMode: Text.WordWrap - width: parent.width - height: UM.Theme.getSize("toolbox_property_label").height + width: contentWidth + height: contentHeight + renderType: Text.NativeRendering + } + + SmallRatingWidget + { + anchors.left: title.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: title.verticalCenter + property var model: details } Column @@ -81,27 +88,38 @@ Item height: childrenRect.height Label { + text: catalog.i18nc("@label", "Your rating") + ":" + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering + } + Label + { text: catalog.i18nc("@label", "Version") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } Label { text: catalog.i18nc("@label", "Last updated") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } Label { text: catalog.i18nc("@label", "Author") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } Label { text: catalog.i18nc("@label", "Downloads") + ":" - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering } } Column @@ -116,11 +134,54 @@ Item } spacing: Math.floor(UM.Theme.getSize("narrow_margin").height) height: childrenRect.height + RatingWidget + { + id: rating + visible: details.type == "plugin" + packageId: details.id != undefined ? details.id: "" + userRating: details.user_rating != undefined ? details.user_rating: 0 + canRate: toolbox.isInstalled(details.id) && Cura.API.account.isLoggedIn + + onRated: + { + toolbox.ratePackage(details.id, rating) + // HACK: This is a far from optimal solution, but without major refactoring, this is the best we can + // do. Since a rework of this is scheduled, it shouldn't live that long... + var index = toolbox.pluginsAvailableModel.find("id", details.id) + if(index != -1) + { + if(details.user_rating == 0) // User never rated before. + { + toolbox.pluginsAvailableModel.setProperty(index, "num_ratings", details.num_ratings + 1) + } + + toolbox.pluginsAvailableModel.setProperty(index, "user_rating", rating) + + + // Hack; This is because the current selection is an outdated copy, so we need to re-copy it. + base.selection = toolbox.pluginsAvailableModel.getItem(index) + return + } + index = toolbox.pluginsShowcaseModel.find("id", details.id) + if(index != -1) + { + if(details.user_rating == 0) // User never rated before. + { + toolbox.pluginsShowcaseModel.setProperty(index, "user_rating", rating) + } + toolbox.pluginsShowcaseModel.setProperty(index, "num_ratings", details.num_ratings + 1) + + // Hack; This is because the current selection is an outdated copy, so we need to re-copy it. + base.selection = toolbox.pluginsShowcaseModel.getItem(index) + } + } + } Label { text: details === null ? "" : (details.version || catalog.i18nc("@label", "Unknown")) - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") + renderType: Text.NativeRendering } Label { @@ -133,8 +194,9 @@ Item var date = new Date(details.last_updated) return date.toLocaleString(UM.Preferences.getValue("general/language")) } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") + renderType: Text.NativeRendering } Label { @@ -144,34 +206,25 @@ Item { return "" } - if (details.author_email) - { - return "<a href=\"mailto:" + details.author_email+"?Subject=Cura: " + details.name + "\">" + details.author_name + "</a>" - } else { return "<a href=\"" + details.website + "\">" + details.author_name + "</a>" } } - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") linkColor: UM.Theme.getColor("text_link") onLinkActivated: Qt.openUrlExternally(link) + renderType: Text.NativeRendering } Label { text: details === null ? "" : (details.download_count || catalog.i18nc("@label", "Unknown")) - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") + renderType: Text.NativeRendering } } - Rectangle - { - color: UM.Theme.getColor("lining") - width: parent.width - height: UM.Theme.getSize("default_lining").height - anchors.bottom: parent.bottom - } } ToolboxDetailList { diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml index 9061a8e06b..43f97baf3f 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTile.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -31,17 +31,19 @@ Item wrapMode: Text.WordWrap color: UM.Theme.getColor("text") font: UM.Theme.getFont("medium_bold") + renderType: Text.NativeRendering } Label { anchors.top: packageName.bottom width: parent.width text: model.description - maximumLineCount: 6 + maximumLineCount: 25 elide: Text.ElideRight wrapMode: Text.WordWrap color: UM.Theme.getColor("text") font: UM.Theme.getFont("default") + renderType: Text.NativeRendering } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml b/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml index cd1e4cdbda..87fc5d6955 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml @@ -1,40 +1,69 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.1 as Cura Column { property bool installed: toolbox.isInstalled(model.id) property bool canUpdate: toolbox.canUpdate(model.id) + property bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn + width: UM.Theme.getSize("toolbox_action_button").width spacing: UM.Theme.getSize("narrow_margin").height - ToolboxProgressButton + Item { - id: installButton - active: toolbox.isDownloading && toolbox.activePackage == model - complete: installed - readyAction: function() + width: installButton.width + height: installButton.height + ToolboxProgressButton { - toolbox.activePackage = model - toolbox.startDownload(model.download_url) + id: installButton + active: toolbox.isDownloading && toolbox.activePackage == model + onReadyAction: + { + toolbox.activePackage = model + toolbox.startDownload(model.download_url) + } + onActiveAction: toolbox.cancelDownload() + + // Don't allow installing while another download is running + enabled: installed || (!(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired) + opacity: enabled ? 1.0 : 0.5 + visible: !updateButton.visible && !installed// Don't show when the update button is visible } - activeAction: function() + + Cura.SecondaryButton { - toolbox.cancelDownload() + visible: installed + onClicked: toolbox.viewCategory = "installed" + text: catalog.i18nc("@action:button", "Installed") + fixedWidthMode: true + width: installButton.width + height: installButton.height } - completeAction: function() + } + + Label + { + wrapMode: Text.WordWrap + text: catalog.i18nc("@label:The string between <a href=> and </a> is the highlighted link", "<a href='%1'>Log in</a> is required to install or update") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + visible: loginRequired + width: installButton.width + renderType: Text.NativeRendering + + MouseArea { - toolbox.viewCategory = "installed" + anchors.fill: parent + onClicked: Cura.API.account.login() } - // Don't allow installing while another download is running - enabled: installed || !(toolbox.isDownloading && toolbox.activePackage != model) - opacity: enabled ? 1.0 : 0.5 - visible: !updateButton.visible // Don't show when the update button is visible } ToolboxProgressButton @@ -44,24 +73,28 @@ Column readyLabel: catalog.i18nc("@action:button", "Update") activeLabel: catalog.i18nc("@action:button", "Updating") completeLabel: catalog.i18nc("@action:button", "Updated") - readyAction: function() + + onReadyAction: { toolbox.activePackage = model toolbox.update(model.id) } - activeAction: function() - { - toolbox.cancelDownload() - } + onActiveAction: toolbox.cancelDownload() // Don't allow installing while another download is running - enabled: !(toolbox.isDownloading && toolbox.activePackage != model) + enabled: !(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired opacity: enabled ? 1.0 : 0.5 visible: canUpdate } + Connections { target: toolbox onInstallChanged: installed = toolbox.isInstalled(model.id) onMetadataChanged: canUpdate = toolbox.canUpdate(model.id) + onFilterChanged: + { + installed = toolbox.isInstalled(model.id) + canUpdate = toolbox.canUpdate(model.id) + } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml index c586828969..a9fcb39b28 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGrid.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.3 @@ -22,9 +22,10 @@ Column text: gridArea.heading width: parent.width color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") + font: UM.Theme.getFont("large") + renderType: Text.NativeRendering } - GridLayout + Grid { id: grid width: parent.width - 2 * parent.padding @@ -34,10 +35,12 @@ Column Repeater { model: gridArea.model - delegate: ToolboxDownloadsGridTile + delegate: Loader { - Layout.preferredWidth: (grid.width - (grid.columns - 1) * grid.columnSpacing) / grid.columns - Layout.preferredHeight: UM.Theme.getSize("toolbox_thumbnail_small").height + asynchronous: true + width: Math.round((grid.width - (grid.columns - 1) * grid.columnSpacing) / grid.columns) + height: UM.Theme.getSize("toolbox_thumbnail_small").height + source: "ToolboxDownloadsGridTile.qml" } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml index 887140bbfa..a11c6ee963 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml @@ -1,11 +1,12 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.3 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.3 import UM 1.1 as UM +import Cura 1.1 as Cura Item { @@ -14,91 +15,13 @@ Item property int installedPackages: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0) height: childrenRect.height Layout.alignment: Qt.AlignTop | Qt.AlignLeft - Rectangle - { - id: highlight - anchors.fill: parent - opacity: 0.0 - color: UM.Theme.getColor("primary") - } - Row - { - width: parent.width - height: childrenRect.height - spacing: Math.floor(UM.Theme.getSize("narrow_margin").width) - Rectangle - { - id: thumbnail - width: UM.Theme.getSize("toolbox_thumbnail_small").width - height: UM.Theme.getSize("toolbox_thumbnail_small").height - color: "white" - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") - Image - { - anchors.centerIn: parent - width: UM.Theme.getSize("toolbox_thumbnail_small").width - UM.Theme.getSize("wide_margin").width - height: UM.Theme.getSize("toolbox_thumbnail_small").height - UM.Theme.getSize("wide_margin").width - fillMode: Image.PreserveAspectFit - source: model.icon_url || "../images/logobot.svg" - mipmap: true - } - UM.RecolorImage - { - width: (parent.width * 0.4) | 0 - height: (parent.height * 0.4) | 0 - anchors - { - bottom: parent.bottom - right: parent.right - } - sourceSize.width: width - sourceSize.height: height - visible: installedPackages != 0 - color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") - source: "../images/installed_check.svg" - } - } - Column - { - width: parent.width - thumbnail.width - parent.spacing - spacing: Math.floor(UM.Theme.getSize("narrow_margin").width) - Label - { - id: name - text: model.name - width: parent.width - wrapMode: Text.WordWrap - color: UM.Theme.getColor("text") - font: UM.Theme.getFont("default_bold") - } - Label - { - id: info - text: model.description - maximumLineCount: 2 - elide: Text.ElideRight - width: parent.width - wrapMode: Text.WordWrap - color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("very_small") - } - } - } + MouseArea { anchors.fill: parent hoverEnabled: true - onEntered: - { - thumbnail.border.color = UM.Theme.getColor("primary") - highlight.opacity = 0.1 - } - onExited: - { - thumbnail.border.color = UM.Theme.getColor("lining") - highlight.opacity = 0.0 - } + onEntered: thumbnail.border.color = UM.Theme.getColor("primary") + onExited: thumbnail.border.color = UM.Theme.getColor("lining") onClicked: { base.selection = model @@ -128,4 +51,83 @@ Item } } } + + Rectangle + { + id: thumbnail + width: UM.Theme.getSize("toolbox_thumbnail_small").width + height: UM.Theme.getSize("toolbox_thumbnail_small").height + color: UM.Theme.getColor("main_background") + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + + Image + { + anchors.centerIn: parent + width: UM.Theme.getSize("toolbox_thumbnail_small").width - UM.Theme.getSize("wide_margin").width + height: UM.Theme.getSize("toolbox_thumbnail_small").height - UM.Theme.getSize("wide_margin").width + fillMode: Image.PreserveAspectFit + source: model.icon_url || "../images/logobot.svg" + mipmap: true + } + UM.RecolorImage + { + width: (parent.width * 0.4) | 0 + height: (parent.height * 0.4) | 0 + anchors + { + bottom: parent.bottom + right: parent.right + } + sourceSize.height: height + visible: installedPackages != 0 + color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") + source: "../images/installed_check.svg" + } + } + Item + { + anchors + { + left: thumbnail.right + leftMargin: Math.floor(UM.Theme.getSize("narrow_margin").width) + right: parent.right + top: parent.top + bottom: parent.bottom + } + + Label + { + id: name + text: model.name + width: parent.width + elide: Text.ElideRight + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default_bold") + } + Label + { + id: info + text: model.description + elide: Text.ElideRight + width: parent.width + wrapMode: Text.WordWrap + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + anchors.top: name.bottom + anchors.bottom: rating.top + verticalAlignment: Text.AlignVCenter + maximumLineCount: 2 + } + SmallRatingWidget + { + id: rating + anchors + { + bottom: parent.bottom + left: parent.left + right: parent.right + } + } + } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml index 46f5debfdd..795622cf82 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -23,30 +23,34 @@ Rectangle text: catalog.i18nc("@label", "Featured") width: parent.width color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") + font: UM.Theme.getFont("large") + renderType: Text.NativeRendering } Grid { height: childrenRect.height spacing: UM.Theme.getSize("wide_margin").width columns: 3 - anchors - { - horizontalCenter: parent.horizontalCenter - } + anchors.horizontalCenter: parent.horizontalCenter + Repeater { - model: { - if ( toolbox.viewCategory == "plugin" ) + model: + { + if (toolbox.viewCategory == "plugin") { return toolbox.pluginsShowcaseModel } - if ( toolbox.viewCategory == "material" ) + if (toolbox.viewCategory == "material") { return toolbox.materialsShowcaseModel } } - delegate: ToolboxDownloadsShowcaseTile {} + delegate: Loader + { + asynchronous: true + source: "ToolboxDownloadsShowcaseTile.qml" + } } } } diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml index 4fb70541d2..c8c1e56c82 100644 --- a/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcaseTile.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtGraphicalEffects 1.0 @@ -13,92 +13,79 @@ Rectangle property int installedPackages: toolbox.viewCategory == "material" ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0) id: tileBase width: UM.Theme.getSize("toolbox_thumbnail_large").width + (2 * UM.Theme.getSize("default_lining").width) - height: thumbnail.height + packageNameBackground.height + (2 * UM.Theme.getSize("default_lining").width) + height: thumbnail.height + packageName.height + rating.height + UM.Theme.getSize("default_margin").width border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") - color: "transparent" - Rectangle + color: UM.Theme.getColor("main_background") + Image { id: thumbnail - color: "white" - width: UM.Theme.getSize("toolbox_thumbnail_large").width - height: UM.Theme.getSize("toolbox_thumbnail_large").height + height: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height + width: UM.Theme.getSize("toolbox_thumbnail_large").height - 4 * UM.Theme.getSize("default_margin").height + fillMode: Image.PreserveAspectFit + source: model.icon_url || "../images/logobot.svg" + mipmap: true anchors { top: parent.top + topMargin: UM.Theme.getSize("default_margin").height horizontalCenter: parent.horizontalCenter - topMargin: UM.Theme.getSize("default_lining").width - } - Image - { - anchors.centerIn: parent - width: UM.Theme.getSize("toolbox_thumbnail_large").width - 2 * UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("toolbox_thumbnail_large").height - 2 * UM.Theme.getSize("default_margin").height - fillMode: Image.PreserveAspectFit - source: model.icon_url || "../images/logobot.svg" - mipmap: true - } - UM.RecolorImage - { - width: (parent.width * 0.3) | 0 - height: (parent.height * 0.3) | 0 - anchors - { - bottom: parent.bottom - right: parent.right - bottomMargin: UM.Theme.getSize("default_lining").width - } - sourceSize.width: width - sourceSize.height: height - visible: installedPackages != 0 - color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") - source: "../images/installed_check.svg" } } - Rectangle + Label { - id: packageNameBackground - color: UM.Theme.getColor("primary") + id: packageName + text: model.name anchors { - top: thumbnail.bottom horizontalCenter: parent.horizontalCenter + top: thumbnail.bottom } + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering height: UM.Theme.getSize("toolbox_heading_label").height - width: parent.width - Label + width: parent.width - UM.Theme.getSize("default_margin").width + wrapMode: Text.WordWrap + elide: Text.ElideRight + font: UM.Theme.getFont("medium_bold") + } + UM.RecolorImage + { + width: (parent.width * 0.20) | 0 + height: width + anchors { - id: packageName - text: model.name - anchors - { - horizontalCenter: parent.horizontalCenter - } - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - height: UM.Theme.getSize("toolbox_heading_label").height - width: parent.width - wrapMode: Text.WordWrap - color: UM.Theme.getColor("button_text") - font: UM.Theme.getFont("medium_bold") + bottom: bottomBorder.top + right: parent.right } + visible: installedPackages != 0 + color: (installedPackages == packageCount) ? UM.Theme.getColor("primary") : UM.Theme.getColor("border") + source: "../images/installed_check.svg" + } + + SmallRatingWidget + { + id: rating + anchors.bottom: parent.bottom + anchors.bottomMargin: UM.Theme.getSize("narrow_margin").height + anchors.horizontalCenter: parent.horizontalCenter } + Rectangle + { + id: bottomBorder + color: UM.Theme.getColor("primary") + anchors.bottom: parent.bottom + width: parent.width + height: UM.Theme.getSize("toolbox_header_highlight").height + } + MouseArea { anchors.fill: parent hoverEnabled: true - onEntered: - { - packageName.color = UM.Theme.getColor("button_text_hover") - packageNameBackground.color = UM.Theme.getColor("primary_hover") - tileBase.border.color = UM.Theme.getColor("primary_hover") - } - onExited: - { - packageName.color = UM.Theme.getColor("button_text") - packageNameBackground.color = UM.Theme.getColor("primary") - tileBase.border.color = UM.Theme.getColor("lining") - } + onEntered: tileBase.border.color = UM.Theme.getColor("primary") + onExited: tileBase.border.color = UM.Theme.getColor("lining") onClicked: { base.selection = model diff --git a/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml b/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml index 600ae2b39f..e57e63dbb9 100644 --- a/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 @@ -18,5 +18,6 @@ Rectangle { centerIn: parent } + renderType: Text.NativeRendering } } diff --git a/plugins/Toolbox/resources/qml/ToolboxFooter.qml b/plugins/Toolbox/resources/qml/ToolboxFooter.qml index 5c2a6577ad..6f46e939ff 100644 --- a/plugins/Toolbox/resources/qml/ToolboxFooter.qml +++ b/plugins/Toolbox/resources/qml/ToolboxFooter.qml @@ -1,22 +1,24 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick 2.10 +import QtQuick.Controls 2.3 + import UM 1.1 as UM +import Cura 1.0 as Cura Item { id: footer width: parent.width anchors.bottom: parent.bottom - height: visible ? Math.floor(UM.Theme.getSize("toolbox_footer").height) : 0 + height: visible ? UM.Theme.getSize("toolbox_footer").height : 0 + Label { text: catalog.i18nc("@info", "You will need to restart Cura before changes in packages have effect.") color: UM.Theme.getColor("text") - height: Math.floor(UM.Theme.getSize("toolbox_footer_button").height) + height: UM.Theme.getSize("toolbox_footer_button").height verticalAlignment: Text.AlignVCenter anchors { @@ -26,12 +28,12 @@ Item right: restartButton.right rightMargin: UM.Theme.getSize("default_margin").width } - + renderType: Text.NativeRendering } - Button + + Cura.PrimaryButton { id: restartButton - text: catalog.i18nc("@info:button", "Quit Cura") anchors { top: parent.top @@ -39,26 +41,11 @@ Item right: parent.right rightMargin: UM.Theme.getSize("wide_margin").width } - iconName: "dialog-restart" + height: UM.Theme.getSize("toolbox_footer_button").height + text: catalog.i18nc("@info:button", "Quit Cura") onClicked: toolbox.restart() - style: ButtonStyle - { - background: Rectangle - { - implicitWidth: UM.Theme.getSize("toolbox_footer_button").width - implicitHeight: Math.floor(UM.Theme.getSize("toolbox_footer_button").height) - color: control.hovered ? UM.Theme.getColor("primary_hover") : UM.Theme.getColor("primary") - } - label: Label - { - color: UM.Theme.getColor("button_text") - font: UM.Theme.getFont("default_bold") - text: control.text - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - } - } } + ToolboxShadow { visible: footer.visible diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml index e683f89823..a85a69cbac 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 @@ -21,44 +21,40 @@ ScrollView Column { spacing: UM.Theme.getSize("default_margin").height + visible: toolbox.pluginsInstalledModel.items.length > 0 + height: childrenRect.height + 4 * UM.Theme.getSize("default_margin").height + anchors { right: parent.right left: parent.left - leftMargin: UM.Theme.getSize("wide_margin").width - topMargin: UM.Theme.getSize("wide_margin").height - bottomMargin: UM.Theme.getSize("wide_margin").height + margins: UM.Theme.getSize("default_margin").width top: parent.top } - height: childrenRect.height + 4 * UM.Theme.getSize("default_margin").height + Label { - visible: toolbox.pluginsInstalledModel.items.length > 0 - width: parent.width + width: page.width text: catalog.i18nc("@title:tab", "Plugins") color: UM.Theme.getColor("text_medium") - font: UM.Theme.getFont("medium") + font: UM.Theme.getFont("large") + renderType: Text.NativeRendering } Rectangle { - visible: toolbox.pluginsInstalledModel.items.length > 0 color: "transparent" width: parent.width - height: childrenRect.height + 1 * UM.Theme.getSize("default_lining").width + height: childrenRect.height + UM.Theme.getSize("default_margin").width border.color: UM.Theme.getColor("lining") border.width: UM.Theme.getSize("default_lining").width Column { - height: childrenRect.height anchors { top: parent.top right: parent.right left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width - rightMargin: UM.Theme.getSize("default_margin").width - topMargin: UM.Theme.getSize("default_lining").width - bottomMargin: UM.Theme.getSize("default_lining").width + margins: UM.Theme.getSize("default_margin").width } Repeater { @@ -70,32 +66,27 @@ ScrollView } Label { - visible: toolbox.materialsInstalledModel.items.length > 0 - width: page.width text: catalog.i18nc("@title:tab", "Materials") color: UM.Theme.getColor("text_medium") font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering } + Rectangle { - visible: toolbox.materialsInstalledModel.items.length > 0 color: "transparent" width: parent.width - height: childrenRect.height + 1 * UM.Theme.getSize("default_lining").width + height: childrenRect.height + UM.Theme.getSize("default_margin").width border.color: UM.Theme.getColor("lining") border.width: UM.Theme.getSize("default_lining").width Column { - height: Math.max( UM.Theme.getSize("wide_margin").height, childrenRect.height) anchors { top: parent.top right: parent.right left: parent.left - leftMargin: UM.Theme.getSize("default_margin").width - rightMargin: UM.Theme.getSize("default_margin").width - topMargin: UM.Theme.getSize("default_lining").width - bottomMargin: UM.Theme.getSize("default_lining").width + margins: UM.Theme.getSize("default_margin").width } Repeater { diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml index b16564fdd2..f50c3f3ac6 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTile.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM @@ -30,6 +30,7 @@ Item CheckBox { id: disableButton + anchors.verticalCenter: pluginInfo.verticalCenter checked: isEnabled visible: model.type == "plugin" width: visible ? UM.Theme.getSize("checkbox").width : 0 @@ -49,17 +50,20 @@ Item width: parent.width height: Math.floor(UM.Theme.getSize("toolbox_property_label").height) wrapMode: Text.WordWrap - font: UM.Theme.getFont("default_bold") + font: UM.Theme.getFont("large_bold") color: pluginInfo.color + renderType: Text.NativeRendering } Label { text: model.description + font: UM.Theme.getFont("default") maximumLineCount: 3 elide: Text.ElideRight width: parent.width wrapMode: Text.WordWrap color: pluginInfo.color + renderType: Text.NativeRendering } } Column @@ -80,6 +84,7 @@ Item return model.author_name } } + font: UM.Theme.getFont("medium") width: parent.width height: Math.floor(UM.Theme.getSize("toolbox_property_label").height) wrapMode: Text.WordWrap @@ -88,16 +93,19 @@ Item onLinkActivated: Qt.openUrlExternally("mailto:" + model.author_email + "?Subject=Cura: " + model.name + " Plugin") color: model.enabled ? UM.Theme.getColor("text") : UM.Theme.getColor("lining") linkColor: UM.Theme.getColor("text_link") + renderType: Text.NativeRendering } Label { text: model.version + font: UM.Theme.getFont("default") width: parent.width height: UM.Theme.getSize("toolbox_property_label").height color: UM.Theme.getColor("text") verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft + renderType: Text.NativeRendering } } ToolboxInstalledTileActions diff --git a/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml b/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml index 8fd88b1cfd..61af84fbe5 100644 --- a/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml +++ b/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml @@ -1,15 +1,18 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.1 as Cura + Column { property bool canUpdate: false property bool canDowngrade: false + property bool loginRequired: model.login_required && !Cura.API.account.isLoggedIn width: UM.Theme.getSize("toolbox_action_button").width spacing: UM.Theme.getSize("narrow_margin").height @@ -21,6 +24,7 @@ Column font: UM.Theme.getFont("default") wrapMode: Text.WordWrap width: parent.width + renderType: Text.NativeRendering } ToolboxProgressButton @@ -30,59 +34,49 @@ Column readyLabel: catalog.i18nc("@action:button", "Update") activeLabel: catalog.i18nc("@action:button", "Updating") completeLabel: catalog.i18nc("@action:button", "Updated") - readyAction: function() + onReadyAction: { toolbox.activePackage = model toolbox.update(model.id) } - activeAction: function() - { - toolbox.cancelDownload() - } + onActiveAction: toolbox.cancelDownload() + // Don't allow installing while another download is running - enabled: !(toolbox.isDownloading && toolbox.activePackage != model) + enabled: !(toolbox.isDownloading && toolbox.activePackage != model) && !loginRequired opacity: enabled ? 1.0 : 0.5 visible: canUpdate } - Button + Label + { + wrapMode: Text.WordWrap + text: catalog.i18nc("@label:The string between <a href=> and </a> is the highlighted link", "<a href='%1'>Log in</a> is required to update") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") + visible: loginRequired + width: updateButton.width + renderType: Text.NativeRendering + + MouseArea + { + anchors.fill: parent + onClicked: Cura.API.account.login() + } + } + + Cura.SecondaryButton { id: removeButton text: canDowngrade ? catalog.i18nc("@action:button", "Downgrade") : catalog.i18nc("@action:button", "Uninstall") visible: !model.is_bundled && model.is_installed enabled: !toolbox.isDownloading - style: ButtonStyle - { - background: Rectangle - { - implicitWidth: UM.Theme.getSize("toolbox_action_button").width - implicitHeight: UM.Theme.getSize("toolbox_action_button").height - color: "transparent" - border - { - width: UM.Theme.getSize("default_lining").width - color: - { - if (control.hovered) - { - return UM.Theme.getColor("primary_hover") - } - else - { - return UM.Theme.getColor("lining") - } - } - } - } - label: Label - { - text: control.text - color: UM.Theme.getColor("text") - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - font: UM.Theme.getFont("default") - } - } + + width: UM.Theme.getSize("toolbox_action_button").width + height: UM.Theme.getSize("toolbox_action_button").height + + fixedWidthMode: true + onClicked: toolbox.checkPackageUsageAndUninstall(model.id) Connections { diff --git a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml b/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml index b8baf7bc83..40b22c268d 100644 --- a/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml +++ b/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 +import QtQuick 2.10 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 @@ -32,6 +32,7 @@ UM.Dialog anchors.right: parent.right text: licenseDialog.pluginName + catalog.i18nc("@label", "This plugin contains a license.\nYou need to accept this license to install this plugin.\nDo you agree with the terms below?") wrapMode: Text.Wrap + renderType: Text.NativeRendering } TextArea { diff --git a/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml b/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml index 1ba271dcab..025239bd43 100644 --- a/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml +++ b/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml @@ -1,7 +1,7 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.7 +import QtQuick 2.10 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 @@ -18,5 +18,6 @@ Rectangle { centerIn: parent } + renderType: Text.NativeRendering } } diff --git a/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml b/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml index 2744e40ec9..4d4ae92e73 100644 --- a/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml +++ b/plugins/Toolbox/resources/qml/ToolboxProgressButton.qml @@ -5,6 +5,7 @@ import QtQuick 2.2 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM +import Cura 1.0 as Cura Item @@ -18,16 +19,19 @@ Item property var activeLabel: catalog.i18nc("@action:button", "Cancel") property var completeLabel: catalog.i18nc("@action:button", "Installed") - property var readyAction: null // Action when button is ready and clicked (likely install) - property var activeAction: null // Action when button is active and clicked (likely cancel) - property var completeAction: null // Action when button is complete and clicked (likely go to installed) + signal readyAction() // Action when button is ready and clicked (likely install) + signal activeAction() // Action when button is active and clicked (likely cancel) + signal completeAction() // Action when button is complete and clicked (likely go to installed) width: UM.Theme.getSize("toolbox_action_button").width height: UM.Theme.getSize("toolbox_action_button").height - Button + Cura.PrimaryButton { id: button + width: UM.Theme.getSize("toolbox_action_button").width + height: UM.Theme.getSize("toolbox_action_button").height + fixedWidthMode: true text: { if (complete) @@ -47,114 +51,17 @@ Item { if (complete) { - return completeAction() + completeAction() } else if (active) { - return activeAction() + activeAction() } else { - return readyAction() + readyAction() } } - style: ButtonStyle - { - background: Rectangle - { - implicitWidth: UM.Theme.getSize("toolbox_action_button").width - implicitHeight: UM.Theme.getSize("toolbox_action_button").height - color: - { - if (base.complete) - { - return "transparent" - } - else - { - if (control.hovered) - { - return UM.Theme.getColor("primary_hover") - } - else - { - return UM.Theme.getColor("primary") - } - } - } - border - { - width: - { - if (base.complete) - { - UM.Theme.getSize("default_lining").width - } - else - { - return 0 - } - } - color: - { - if (control.hovered) - { - return UM.Theme.getColor("primary_hover") - } - else - { - return UM.Theme.getColor("lining") - } - } - } - } - label: Label - { - text: control.text - color: - { - if (base.complete) - { - return UM.Theme.getColor("text") - } - else - { - if (control.hovered) - { - return UM.Theme.getColor("button_text_hover") - } - else - { - return UM.Theme.getColor("button_text") - } - } - } - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter - font: - { - if (base.complete) - { - return UM.Theme.getFont("default") - } - else - { - return UM.Theme.getFont("default_bold") - } - } - } - } - } - - AnimatedImage - { - id: loader - visible: active - source: visible ? "../images/loading.gif" : "" - width: UM.Theme.getSize("toolbox_loader").width - height: UM.Theme.getSize("toolbox_loader").height - anchors.right: button.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: button.verticalCenter + busy: active } } diff --git a/plugins/Toolbox/resources/qml/ToolboxTabButton.qml b/plugins/Toolbox/resources/qml/ToolboxTabButton.qml index 22fb6d73ca..5e1aeaa636 100644 --- a/plugins/Toolbox/resources/qml/ToolboxTabButton.qml +++ b/plugins/Toolbox/resources/qml/ToolboxTabButton.qml @@ -1,51 +1,51 @@ // Copyright (c) 2018 Ultimaker B.V. // Toolbox is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick 2.10 +import QtQuick.Controls 2.3 import UM 1.1 as UM Button { + id: control property bool active: false - style: ButtonStyle + hoverEnabled: true + + background: Item { - background: Rectangle + implicitWidth: UM.Theme.getSize("toolbox_header_tab").width + implicitHeight: UM.Theme.getSize("toolbox_header_tab").height + Rectangle { - color: "transparent" - implicitWidth: UM.Theme.getSize("toolbox_header_tab").width - implicitHeight: UM.Theme.getSize("toolbox_header_tab").height - Rectangle - { - visible: control.active - color: UM.Theme.getColor("sidebar_header_highlight_hover") - anchors.bottom: parent.bottom - width: parent.width - height: UM.Theme.getSize("sidebar_header_highlight").height - } + visible: control.active + color: UM.Theme.getColor("primary") + anchors.bottom: parent.bottom + width: parent.width + height: UM.Theme.getSize("toolbox_header_highlight").height } - label: Label + } + contentItem: Label + { + id: label + text: control.text + color: { - text: control.text - color: + if(control.hovered) + { + return UM.Theme.getColor("toolbox_header_button_text_hovered"); + } + if(control.active) + { + return UM.Theme.getColor("toolbox_header_button_text_active"); + } + else { - if(control.hovered) - { - return UM.Theme.getColor("topbar_button_text_hovered"); - } - if(control.active) - { - return UM.Theme.getColor("topbar_button_text_active"); - } - else - { - return UM.Theme.getColor("topbar_button_text_inactive"); - } + return UM.Theme.getColor("toolbox_header_button_text_inactive"); } - font: control.enabled ? (control.active ? UM.Theme.getFont("medium_bold") : UM.Theme.getFont("medium")) : UM.Theme.getFont("default_italic") - verticalAlignment: Text.AlignVCenter - horizontalAlignment: Text.AlignHCenter } + font: control.enabled ? (control.active ? UM.Theme.getFont("medium_bold") : UM.Theme.getFont("medium")) : UM.Theme.getFont("default_italic") + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering } -} +}
\ No newline at end of file diff --git a/plugins/Toolbox/src/AuthorsModel.py b/plugins/Toolbox/src/AuthorsModel.py index bea3893504..877f8256ee 100644 --- a/plugins/Toolbox/src/AuthorsModel.py +++ b/plugins/Toolbox/src/AuthorsModel.py @@ -2,18 +2,19 @@ # Cura is released under the terms of the LGPLv3 or higher. import re -from typing import Dict +from typing import Dict, List, Optional, Union from PyQt5.QtCore import Qt, pyqtProperty, pyqtSignal from UM.Qt.ListModel import ListModel + ## Model that holds cura packages. By setting the filter property the instances held by this model can be changed. class AuthorsModel(ListModel): - def __init__(self, parent = None): + def __init__(self, parent = None) -> None: super().__init__(parent) - self._metadata = None + self._metadata = None # type: Optional[List[Dict[str, Union[str, List[str], int]]]] self.addRoleName(Qt.UserRole + 1, "id") self.addRoleName(Qt.UserRole + 2, "name") @@ -25,39 +26,40 @@ class AuthorsModel(ListModel): self.addRoleName(Qt.UserRole + 8, "description") # List of filters for queries. The result is the union of the each list of results. - self._filter = {} # type: Dict[str,str] + self._filter = {} # type: Dict[str, str] - def setMetadata(self, data): - self._metadata = data - self._update() + def setMetadata(self, data: List[Dict[str, Union[str, List[str], int]]]): + if self._metadata != data: + self._metadata = data + self._update() - def _update(self): - items = [] + def _update(self) -> None: + items = [] # type: List[Dict[str, Union[str, List[str], int, None]]] if not self._metadata: - self.setItems([]) + self.setItems(items) return for author in self._metadata: items.append({ - "id": author["author_id"], - "name": author["display_name"], - "email": author["email"] if "email" in author else None, - "website": author["website"], - "package_count": author["package_count"] if "package_count" in author else 0, - "package_types": author["package_types"] if "package_types" in author else [], - "icon_url": author["icon_url"] if "icon_url" in author else None, - "description": "Material and quality profiles from {author_name}".format(author_name = author["display_name"]) + "id": author.get("author_id"), + "name": author.get("display_name"), + "email": author.get("email"), + "website": author.get("website"), + "package_count": author.get("package_count", 0), + "package_types": author.get("package_types", []), + "icon_url": author.get("icon_url"), + "description": "Material and quality profiles from {author_name}".format(author_name = author.get("display_name", "")) }) # Filter on all the key-word arguments. for key, value in self._filter.items(): if key is "package_types": - key_filter = lambda item, value = value: value in item["package_types"] + key_filter = lambda item, value = value: value in item["package_types"] # type: ignore elif "*" in value: - key_filter = lambda item, key = key, value = value: self._matchRegExp(item, key, value) + key_filter = lambda item, key = key, value = value: self._matchRegExp(item, key, value) # type: ignore else: - key_filter = lambda item, key = key, value = value: self._matchString(item, key, value) - items = filter(key_filter, items) + key_filter = lambda item, key = key, value = value: self._matchString(item, key, value) # type: ignore + items = filter(key_filter, items) # type: ignore # Execute all filters. filtered_items = list(items) diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py index a31facf75a..d94fdf6bb7 100644 --- a/plugins/Toolbox/src/PackagesModel.py +++ b/plugins/Toolbox/src/PackagesModel.py @@ -33,20 +33,25 @@ class PackagesModel(ListModel): self.addRoleName(Qt.UserRole + 12, "last_updated") self.addRoleName(Qt.UserRole + 13, "is_bundled") self.addRoleName(Qt.UserRole + 14, "is_active") - self.addRoleName(Qt.UserRole + 15, "is_installed") # Scheduled pkgs are included in the model but should not be marked as actually installed + self.addRoleName(Qt.UserRole + 15, "is_installed") # Scheduled pkgs are included in the model but should not be marked as actually installed self.addRoleName(Qt.UserRole + 16, "has_configs") self.addRoleName(Qt.UserRole + 17, "supported_configs") self.addRoleName(Qt.UserRole + 18, "download_count") self.addRoleName(Qt.UserRole + 19, "tags") self.addRoleName(Qt.UserRole + 20, "links") self.addRoleName(Qt.UserRole + 21, "website") + self.addRoleName(Qt.UserRole + 22, "login_required") + self.addRoleName(Qt.UserRole + 23, "average_rating") + self.addRoleName(Qt.UserRole + 24, "num_ratings") + self.addRoleName(Qt.UserRole + 25, "user_rating") # List of filters for queries. The result is the union of the each list of results. self._filter = {} # type: Dict[str, str] def setMetadata(self, data): - self._metadata = data - self._update() + if self._metadata != data: + self._metadata = data + self._update() def _update(self): items = [] @@ -99,6 +104,10 @@ class PackagesModel(ListModel): "tags": package["tags"] if "tags" in package else [], "links": links_dict, "website": package["website"] if "website" in package else None, + "login_required": "login-required" in package.get("tags", []), + "average_rating": float(package.get("rating", {}).get("average", 0)), + "num_ratings": package.get("rating", {}).get("count", 0), + "user_rating": package.get("rating", {}).get("user_rating", 0) }) # Filter on all the key-word arguments. diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index 4f3722d7ba..42cb5d52a8 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -13,11 +13,11 @@ from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkRepl from UM.Logger import Logger from UM.PluginRegistry import PluginRegistry from UM.Extension import Extension -from UM.Qt.ListModel import ListModel from UM.i18n import i18nCatalog from UM.Version import Version -import cura +from cura import ApplicationMetadata +from cura import UltimakerCloudAuthentication from cura.CuraApplication import CuraApplication from .AuthorsModel import AuthorsModel @@ -31,17 +31,14 @@ i18n_catalog = i18nCatalog("cura") ## The Toolbox class is responsible of communicating with the server through the API class Toolbox(QObject, Extension): - DEFAULT_CLOUD_API_ROOT = "https://api.ultimaker.com" #type: str - DEFAULT_CLOUD_API_VERSION = 1 #type: int - def __init__(self, application: CuraApplication) -> None: super().__init__() self._application = application # type: CuraApplication - self._sdk_version = None # type: Optional[Union[str, int]] - self._cloud_api_version = None # type: Optional[int] - self._cloud_api_root = None # type: Optional[str] + self._sdk_version = ApplicationMetadata.CuraSDKVersion # type: Union[str, int] + self._cloud_api_version = UltimakerCloudAuthentication.CuraCloudAPIVersion # type: int + self._cloud_api_root = UltimakerCloudAuthentication.CuraCloudAPIRoot # type: str self._api_url = None # type: Optional[str] # Network: @@ -50,47 +47,35 @@ class Toolbox(QObject, Extension): self._download_progress = 0 # type: float self._is_downloading = False # type: bool self._network_manager = None # type: Optional[QNetworkAccessManager] - self._request_header = [ - b"User-Agent", - str.encode( - "%s/%s (%s %s)" % ( - self._application.getApplicationName(), - self._application.getVersion(), - platform.system(), - platform.machine(), - ) - ) - ] + self._request_headers = [] # type: List[Tuple[bytes, bytes]] + self._updateRequestHeader() + + self._request_urls = {} # type: Dict[str, QUrl] self._to_update = [] # type: List[str] # Package_ids that are waiting to be updated self._old_plugin_ids = set() # type: Set[str] self._old_plugin_metadata = dict() # type: Dict[str, Dict[str, Any]] - # Data: - self._metadata = { + # The responses as given by the server parsed to a list. + self._server_response_data = { "authors": [], - "packages": [], - "plugins_showcase": [], - "plugins_available": [], - "plugins_installed": [], - "materials_showcase": [], - "materials_available": [], - "materials_installed": [], - "materials_generic": [] + "packages": [] } # type: Dict[str, List[Any]] # Models: self._models = { "authors": AuthorsModel(self), "packages": PackagesModel(self), - "plugins_showcase": PackagesModel(self), - "plugins_available": PackagesModel(self), - "plugins_installed": PackagesModel(self), - "materials_showcase": AuthorsModel(self), - "materials_available": AuthorsModel(self), - "materials_installed": PackagesModel(self), - "materials_generic": PackagesModel(self) - } # type: Dict[str, ListModel] + } # type: Dict[str, Union[AuthorsModel, PackagesModel]] + + self._plugins_showcase_model = PackagesModel(self) + self._plugins_available_model = PackagesModel(self) + self._plugins_installed_model = PackagesModel(self) + + self._materials_showcase_model = AuthorsModel(self) + self._materials_available_model = AuthorsModel(self) + self._materials_installed_model = PackagesModel(self) + self._materials_generic_model = PackagesModel(self) # These properties are for keeping track of the UI state: # ---------------------------------------------------------------------- @@ -120,6 +105,7 @@ class Toolbox(QObject, Extension): self._restart_dialog_message = "" # type: str self._application.initializationFinished.connect(self._onAppInitialized) + self._application.getCuraAPI().account.loginStateChanged.connect(self._updateRequestHeader) # Signals: # -------------------------------------------------------------------------- @@ -139,12 +125,38 @@ class Toolbox(QObject, Extension): showLicenseDialog = pyqtSignal() uninstallVariablesChanged = pyqtSignal() + def _updateRequestHeader(self): + self._request_headers = [ + (b"User-Agent", + str.encode( + "%s/%s (%s %s)" % ( + self._application.getApplicationName(), + self._application.getVersion(), + platform.system(), + platform.machine(), + ) + )) + ] + access_token = self._application.getCuraAPI().account.accessToken + if access_token: + self._request_headers.append((b"Authorization", "Bearer {}".format(access_token).encode())) + def _resetUninstallVariables(self) -> None: self._package_id_to_uninstall = None # type: Optional[str] self._package_name_to_uninstall = "" self._package_used_materials = [] # type: List[Tuple[GlobalStack, str, str]] self._package_used_qualities = [] # type: List[Tuple[GlobalStack, str, str]] + @pyqtSlot(str, int) + def ratePackage(self, package_id: str, rating: int) -> None: + url = QUrl("{base_url}/packages/{package_id}/ratings".format(base_url=self._api_url, package_id = package_id)) + + self._rate_request = QNetworkRequest(url) + for header_name, header_value in self._request_headers: + cast(QNetworkRequest, self._rate_request).setRawHeader(header_name, header_value) + data = "{\"data\": {\"cura_version\": \"%s\", \"rating\": %i}}" % (Version(self._application.getVersion()), rating) + self._rate_reply = cast(QNetworkAccessManager, self._network_manager).put(self._rate_request, data.encode()) + @pyqtSlot(result = str) def getLicenseDialogPluginName(self) -> str: return self._license_dialog_plugin_name @@ -168,9 +180,6 @@ class Toolbox(QObject, Extension): def _onAppInitialized(self) -> None: self._plugin_registry = self._application.getPluginRegistry() self._package_manager = self._application.getPackageManager() - self._sdk_version = self._getSDKVersion() - self._cloud_api_version = self._getCloudAPIVersion() - self._cloud_api_root = self._getCloudAPIRoot() self._api_url = "{cloud_api_root}/cura-packages/v{cloud_api_version}/cura/v{sdk_version}".format( cloud_api_root = self._cloud_api_root, cloud_api_version = self._cloud_api_version, @@ -178,44 +187,9 @@ class Toolbox(QObject, Extension): ) self._request_urls = { "authors": QUrl("{base_url}/authors".format(base_url = self._api_url)), - "packages": QUrl("{base_url}/packages".format(base_url = self._api_url)), - "plugins_showcase": QUrl("{base_url}/showcase".format(base_url = self._api_url)), - "plugins_available": QUrl("{base_url}/packages?package_type=plugin".format(base_url = self._api_url)), - "materials_showcase": QUrl("{base_url}/showcase".format(base_url = self._api_url)), - "materials_available": QUrl("{base_url}/packages?package_type=material".format(base_url = self._api_url)), - "materials_generic": QUrl("{base_url}/packages?package_type=material&tags=generic".format(base_url = self._api_url)) + "packages": QUrl("{base_url}/packages".format(base_url = self._api_url)) } - # Get the API root for the packages API depending on Cura version settings. - def _getCloudAPIRoot(self) -> str: - if not hasattr(cura, "CuraVersion"): - return self.DEFAULT_CLOUD_API_ROOT - if not hasattr(cura.CuraVersion, "CuraCloudAPIRoot"): # type: ignore - return self.DEFAULT_CLOUD_API_ROOT - if not cura.CuraVersion.CuraCloudAPIRoot: # type: ignore - return self.DEFAULT_CLOUD_API_ROOT - return cura.CuraVersion.CuraCloudAPIRoot # type: ignore - - # Get the cloud API version from CuraVersion - def _getCloudAPIVersion(self) -> int: - if not hasattr(cura, "CuraVersion"): - return self.DEFAULT_CLOUD_API_VERSION - if not hasattr(cura.CuraVersion, "CuraCloudAPIVersion"): # type: ignore - return self.DEFAULT_CLOUD_API_VERSION - if not cura.CuraVersion.CuraCloudAPIVersion: # type: ignore - return self.DEFAULT_CLOUD_API_VERSION - return cura.CuraVersion.CuraCloudAPIVersion # type: ignore - - # Get the packages version depending on Cura version settings. - def _getSDKVersion(self) -> Union[int, str]: - if not hasattr(cura, "CuraVersion"): - return self._application.getAPIVersion().getMajor() - if not hasattr(cura.CuraVersion, "CuraSDKVersion"): # type: ignore - return self._application.getAPIVersion().getMajor() - if not cura.CuraVersion.CuraSDKVersion: # type: ignore - return self._application.getAPIVersion().getMajor() - return cura.CuraVersion.CuraSDKVersion # type: ignore - @pyqtSlot() def browsePackages(self) -> None: # Create the network manager: @@ -231,12 +205,6 @@ class Toolbox(QObject, Extension): # Make remote requests: self._makeRequestByType("packages") self._makeRequestByType("authors") - # TODO: Uncomment in the future when the tag-filtered api calls work in the cloud server - # self._makeRequestByType("plugins_showcase") - # self._makeRequestByType("plugins_available") - # self._makeRequestByType("materials_showcase") - # self._makeRequestByType("materials_available") - # self._makeRequestByType("materials_generic") # Gather installed packages: self._updateInstalledModels() @@ -267,12 +235,17 @@ class Toolbox(QObject, Extension): def _convertPluginMetadata(self, plugin_data: Dict[str, Any]) -> Optional[Dict[str, Any]]: try: + highest_sdk_version_supported = Version(0) + for supported_version in plugin_data["plugin"]["supported_sdk_versions"]: + if supported_version > highest_sdk_version_supported: + highest_sdk_version_supported = supported_version + formatted = { "package_id": plugin_data["id"], "package_type": "plugin", "display_name": plugin_data["plugin"]["name"], "package_version": plugin_data["plugin"]["version"], - "sdk_version": plugin_data["plugin"]["api"], + "sdk_version": highest_sdk_version_supported, "author": { "author_id": plugin_data["plugin"]["author"], "display_name": plugin_data["plugin"]["author"] @@ -281,7 +254,7 @@ class Toolbox(QObject, Extension): "description": plugin_data["plugin"]["description"] } return formatted - except: + except KeyError: Logger.log("w", "Unable to convert plugin meta data %s", str(plugin_data)) return None @@ -319,13 +292,10 @@ class Toolbox(QObject, Extension): if plugin_id not in all_plugin_package_ids) self._old_plugin_metadata = {k: v for k, v in self._old_plugin_metadata.items() if k in self._old_plugin_ids} - self._metadata["plugins_installed"] = all_packages["plugin"] + list(self._old_plugin_metadata.values()) - self._models["plugins_installed"].setMetadata(self._metadata["plugins_installed"]) + self._plugins_installed_model.setMetadata(all_packages["plugin"] + list(self._old_plugin_metadata.values())) self.metadataChanged.emit() if "material" in all_packages: - self._metadata["materials_installed"] = all_packages["material"] - # TODO: ADD MATERIALS HERE ONCE MATERIALS PORTION OF TOOLBOX IS LIVE - self._models["materials_installed"].setMetadata(self._metadata["materials_installed"]) + self._materials_installed_model.setMetadata(all_packages["material"]) self.metadataChanged.emit() @pyqtSlot(str) @@ -479,7 +449,7 @@ class Toolbox(QObject, Extension): def getRemotePackage(self, package_id: str) -> Optional[Dict]: # TODO: make the lookup in a dict, not a loop. canUpdate is called for every item. remote_package = None - for package in self._metadata["packages"]: + for package in self._server_response_data["packages"]: if package["package_id"] == package_id: remote_package = package break @@ -491,11 +461,8 @@ class Toolbox(QObject, Extension): def canUpdate(self, package_id: str) -> bool: local_package = self._package_manager.getInstalledPackageInfo(package_id) if local_package is None: - Logger.log("i", "Could not find package [%s] as installed in the package manager, fall back to check the old plugins", - package_id) local_package = self.getOldPluginPackageMetadata(package_id) if local_package is None: - Logger.log("i", "Could not find package [%s] in the old plugins", package_id) return False remote_package = self.getRemotePackage(package_id) @@ -511,7 +478,10 @@ class Toolbox(QObject, Extension): # version, we also need to check if the current one has a lower SDK version. If so, this package should also # be upgradable. elif remote_version == local_version: - can_upgrade = local_package.get("sdk_version", 0) < remote_package.get("sdk_version", 0) + # First read sdk_version_semver. If that doesn't exist, read just sdk_version (old version system). + remote_sdk_version = Version(remote_package.get("sdk_version_semver", remote_package.get("sdk_version", 0))) + local_sdk_version = Version(local_package.get("sdk_version_semver", local_package.get("sdk_version", 0))) + can_upgrade = local_sdk_version < remote_sdk_version return can_upgrade @@ -542,8 +512,8 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, result = int) def getNumberOfInstalledPackagesByAuthor(self, author_id: str) -> int: count = 0 - for package in self._metadata["materials_installed"]: - if package["author"]["author_id"] == author_id: + for package in self._materials_installed_model.items: + if package["author_id"] == author_id: count += 1 return count @@ -551,7 +521,7 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, result = int) def getTotalNumberOfMaterialPackagesByAuthor(self, author_id: str) -> int: count = 0 - for package in self._metadata["packages"]: + for package in self._server_response_data["packages"]: if package["package_type"] == "material": if package["author"]["author_id"] == author_id: count += 1 @@ -565,34 +535,31 @@ class Toolbox(QObject, Extension): # Check for plugins that were installed with the old plugin browser def isOldPlugin(self, plugin_id: str) -> bool: - if plugin_id in self._old_plugin_ids: - return True - return False + return plugin_id in self._old_plugin_ids def getOldPluginPackageMetadata(self, plugin_id: str) -> Optional[Dict[str, Any]]: return self._old_plugin_metadata.get(plugin_id) - def loadingComplete(self) -> bool: + def isLoadingComplete(self) -> bool: populated = 0 - for list in self._metadata.items(): - if len(list) > 0: + for metadata_list in self._server_response_data.items(): + if metadata_list: populated += 1 - if populated == len(self._metadata.items()): - return True - return False + return populated == len(self._server_response_data.items()) # Make API Calls # -------------------------------------------------------------------------- - def _makeRequestByType(self, type: str) -> None: - Logger.log("i", "Marketplace: Requesting %s metadata from server.", type) - request = QNetworkRequest(self._request_urls[type]) - request.setRawHeader(*self._request_header) + def _makeRequestByType(self, request_type: str) -> None: + Logger.log("i", "Requesting %s metadata from server.", request_type) + request = QNetworkRequest(self._request_urls[request_type]) + for header_name, header_value in self._request_headers: + request.setRawHeader(header_name, header_value) if self._network_manager: self._network_manager.get(request) @pyqtSlot(str) def startDownload(self, url: str) -> None: - Logger.log("i", "Marketplace: Attempting to download & install package from %s.", url) + Logger.log("i", "Attempting to download & install package from %s.", url) url = QUrl(url) self._download_request = QNetworkRequest(url) if hasattr(QNetworkRequest, "FollowRedirectsAttribute"): @@ -601,7 +568,8 @@ class Toolbox(QObject, Extension): if hasattr(QNetworkRequest, "RedirectPolicyAttribute"): # Patch for Qt 5.9+ cast(QNetworkRequest, self._download_request).setAttribute(QNetworkRequest.RedirectPolicyAttribute, True) - cast(QNetworkRequest, self._download_request).setRawHeader(*self._request_header) + for header_name, header_value in self._request_headers: + cast(QNetworkRequest, self._download_request).setRawHeader(header_name, header_value) self._download_reply = cast(QNetworkAccessManager, self._network_manager).get(self._download_request) self.setDownloadProgress(0) self.setIsDownloading(True) @@ -609,15 +577,15 @@ class Toolbox(QObject, Extension): @pyqtSlot() def cancelDownload(self) -> None: - Logger.log("i", "Marketplace: User cancelled the download of a package.") + Logger.log("i", "User cancelled the download of a package.") self.resetDownload() def resetDownload(self) -> None: if self._download_reply: try: self._download_reply.downloadProgress.disconnect(self._onDownloadProgress) - except TypeError: #Raised when the method is not connected to the signal yet. - pass #Don't need to disconnect. + except TypeError: # Raised when the method is not connected to the signal yet. + pass # Don't need to disconnect. self._download_reply.abort() self._download_reply = None self._download_request = None @@ -643,22 +611,8 @@ class Toolbox(QObject, Extension): self.resetDownload() return - # HACK: These request are not handled independently at this moment, but together from the "packages" call - do_not_handle = [ - "materials_available", - "materials_showcase", - "materials_generic", - "plugins_available", - "plugins_showcase", - ] - if reply.operation() == QNetworkAccessManager.GetOperation: - for type, url in self._request_urls.items(): - - # HACK: Do nothing because we'll handle these from the "packages" call - if type in do_not_handle: - continue - + for response_type, url in self._request_urls.items(): if reply.url() == url: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) == 200: try: @@ -671,39 +625,34 @@ class Toolbox(QObject, Extension): return # Create model and apply metadata: - if not self._models[type]: - Logger.log("e", "Could not find the %s model.", type) + if not self._models[response_type]: + Logger.log("e", "Could not find the %s model.", response_type) break - self._metadata[type] = json_data["data"] - self._models[type].setMetadata(self._metadata[type]) - - # Do some auto filtering - # TODO: Make multiple API calls in the future to handle this - if type is "packages": - self._models[type].setFilter({"type": "plugin"}) - self.buildMaterialsModels() - self.buildPluginsModels() - if type is "authors": - self._models[type].setFilter({"package_types": "material"}) - if type is "materials_generic": - self._models[type].setFilter({"tags": "generic"}) + self._server_response_data[response_type] = json_data["data"] + self._models[response_type].setMetadata(self._server_response_data[response_type]) + + if response_type is "packages": + self._models[response_type].setFilter({"type": "plugin"}) + self.reBuildMaterialsModels() + self.reBuildPluginsModels() + elif response_type is "authors": + self._models[response_type].setFilter({"package_types": "material"}) + self._models[response_type].setFilter({"tags": "generic"}) self.metadataChanged.emit() - if self.loadingComplete() is True: + if self.isLoadingComplete(): self.setViewPage("overview") - return except json.decoder.JSONDecodeError: - Logger.log("w", "Marketplace: Received invalid JSON for %s.", type) + Logger.log("w", "Received invalid JSON for %s.", response_type) break else: + Logger.log("w", "Unable to connect with the server, we got a response code %s while trying to connect to %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url()) self.setViewPage("errored") self.resetDownload() - return - - else: + elif reply.operation() == QNetworkAccessManager.PutOperation: # Ignore any operation that is not a get operation pass @@ -713,7 +662,13 @@ class Toolbox(QObject, Extension): self.setDownloadProgress(new_progress) if bytes_sent == bytes_total: self.setIsDownloading(False) - cast(QNetworkReply, self._download_reply).downloadProgress.disconnect(self._onDownloadProgress) + self._download_reply = cast(QNetworkReply, self._download_reply) + self._download_reply.downloadProgress.disconnect(self._onDownloadProgress) + + # Check if the download was sucessfull + if self._download_reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: + Logger.log("w", "Failed to download package. The following error was returned: %s", json.loads(bytes(self._download_reply.readAll()).decode("utf-8"))) + return # Must not delete the temporary file on Windows self._temp_plugin_file = tempfile.NamedTemporaryFile(mode = "w+b", suffix = ".curapackage", delete = False) file_path = self._temp_plugin_file.name @@ -723,10 +678,10 @@ class Toolbox(QObject, Extension): self._onDownloadComplete(file_path) def _onDownloadComplete(self, file_path: str) -> None: - Logger.log("i", "Marketplace: Download complete.") + Logger.log("i", "Download complete.") package_info = self._package_manager.getPackageInfo(file_path) if not package_info: - Logger.log("w", "Marketplace: Package file [%s] was not a valid CuraPackage.", file_path) + Logger.log("w", "Package file [%s] was not a valid CuraPackage.", file_path) return license_content = self._package_manager.getPackageLicense(file_path) @@ -735,7 +690,6 @@ class Toolbox(QObject, Extension): return self.install(file_path) - return # Getter & Setters for Properties: # -------------------------------------------------------------------------- @@ -758,8 +712,9 @@ class Toolbox(QObject, Extension): return self._is_downloading def setActivePackage(self, package: Dict[str, Any]) -> None: - self._active_package = package - self.activePackageChanged.emit() + if self._active_package != package: + self._active_package = package + self.activePackageChanged.emit() ## The active package is the package that is currently being downloaded @pyqtProperty(QObject, fset = setActivePackage, notify = activePackageChanged) @@ -767,16 +722,18 @@ class Toolbox(QObject, Extension): return self._active_package def setViewCategory(self, category: str = "plugin") -> None: - self._view_category = category - self.viewChanged.emit() + if self._view_category != category: + self._view_category = category + self.viewChanged.emit() @pyqtProperty(str, fset = setViewCategory, notify = viewChanged) def viewCategory(self) -> str: return self._view_category def setViewPage(self, page: str = "overview") -> None: - self._view_page = page - self.viewChanged.emit() + if self._view_page != page: + self._view_page = page + self.viewChanged.emit() @pyqtProperty(str, fset = setViewPage, notify = viewChanged) def viewPage(self) -> str: @@ -784,48 +741,48 @@ class Toolbox(QObject, Extension): # Exposed Models: # -------------------------------------------------------------------------- - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def authorsModel(self) -> AuthorsModel: return cast(AuthorsModel, self._models["authors"]) - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def packagesModel(self) -> PackagesModel: return cast(PackagesModel, self._models["packages"]) - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def pluginsShowcaseModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["plugins_showcase"]) + return self._plugins_showcase_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def pluginsAvailableModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["plugins_available"]) + return self._plugins_available_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def pluginsInstalledModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["plugins_installed"]) + return self._plugins_installed_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def materialsShowcaseModel(self) -> AuthorsModel: - return cast(AuthorsModel, self._models["materials_showcase"]) + return self._materials_showcase_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def materialsAvailableModel(self) -> AuthorsModel: - return cast(AuthorsModel, self._models["materials_available"]) + return self._materials_available_model - @pyqtProperty(QObject, notify = metadataChanged) + @pyqtProperty(QObject, constant=True) def materialsInstalledModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["materials_installed"]) + return self._materials_installed_model - @pyqtProperty(QObject, notify=metadataChanged) + @pyqtProperty(QObject, constant=True) def materialsGenericModel(self) -> PackagesModel: - return cast(PackagesModel, self._models["materials_generic"]) + return self._materials_generic_model # Filter Models: # -------------------------------------------------------------------------- @pyqtSlot(str, str, str) def filterModelByProp(self, model_type: str, filter_type: str, parameter: str) -> None: if not self._models[model_type]: - Logger.log("w", "Marketplace: Couldn't filter %s model because it doesn't exist.", model_type) + Logger.log("w", "Couldn't filter %s model because it doesn't exist.", model_type) return self._models[model_type].setFilter({filter_type: parameter}) self.filterChanged.emit() @@ -833,7 +790,7 @@ class Toolbox(QObject, Extension): @pyqtSlot(str, "QVariantMap") def setFilters(self, model_type: str, filter_dict: dict) -> None: if not self._models[model_type]: - Logger.log("w", "Marketplace: Couldn't filter %s model because it doesn't exist.", model_type) + Logger.log("w", "Couldn't filter %s model because it doesn't exist.", model_type) return self._models[model_type].setFilter(filter_dict) self.filterChanged.emit() @@ -841,21 +798,21 @@ class Toolbox(QObject, Extension): @pyqtSlot(str) def removeFilters(self, model_type: str) -> None: if not self._models[model_type]: - Logger.log("w", "Marketplace: Couldn't remove filters on %s model because it doesn't exist.", model_type) + Logger.log("w", "Couldn't remove filters on %s model because it doesn't exist.", model_type) return self._models[model_type].setFilter({}) self.filterChanged.emit() # HACK(S): # -------------------------------------------------------------------------- - def buildMaterialsModels(self) -> None: - self._metadata["materials_showcase"] = [] - self._metadata["materials_available"] = [] - self._metadata["materials_generic"] = [] + def reBuildMaterialsModels(self) -> None: + materials_showcase_metadata = [] + materials_available_metadata = [] + materials_generic_metadata = [] - processed_authors = [] # type: List[str] + processed_authors = [] # type: List[str] - for item in self._metadata["packages"]: + for item in self._server_response_data["packages"]: if item["package_type"] == "material": author = item["author"] @@ -864,30 +821,29 @@ class Toolbox(QObject, Extension): # Generic materials to be in the same section if "generic" in item["tags"]: - self._metadata["materials_generic"].append(item) + materials_generic_metadata.append(item) else: if "showcase" in item["tags"]: - self._metadata["materials_showcase"].append(author) + materials_showcase_metadata.append(author) else: - self._metadata["materials_available"].append(author) + materials_available_metadata.append(author) processed_authors.append(author["author_id"]) - self._models["materials_showcase"].setMetadata(self._metadata["materials_showcase"]) - self._models["materials_available"].setMetadata(self._metadata["materials_available"]) - self._models["materials_generic"].setMetadata(self._metadata["materials_generic"]) + self._materials_showcase_model.setMetadata(materials_showcase_metadata) + self._materials_available_model.setMetadata(materials_available_metadata) + self._materials_generic_model.setMetadata(materials_generic_metadata) - def buildPluginsModels(self) -> None: - self._metadata["plugins_showcase"] = [] - self._metadata["plugins_available"] = [] + def reBuildPluginsModels(self) -> None: + plugins_showcase_metadata = [] + plugins_available_metadata = [] - for item in self._metadata["packages"]: + for item in self._server_response_data["packages"]: if item["package_type"] == "plugin": - if "showcase" in item["tags"]: - self._metadata["plugins_showcase"].append(item) + plugins_showcase_metadata.append(item) else: - self._metadata["plugins_available"].append(item) + plugins_available_metadata.append(item) - self._models["plugins_showcase"].setMetadata(self._metadata["plugins_showcase"]) - self._models["plugins_available"].setMetadata(self._metadata["plugins_available"]) + self._plugins_showcase_model.setMetadata(plugins_showcase_metadata) + self._plugins_available_model.setMetadata(plugins_available_metadata) diff --git a/plugins/UFPWriter/plugin.json b/plugins/UFPWriter/plugin.json index ab590353e0..288d6acf77 100644 --- a/plugins/UFPWriter/plugin.json +++ b/plugins/UFPWriter/plugin.json @@ -1,8 +1,8 @@ { "name": "UFP Writer", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides support for writing Ultimaker Format Packages.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" }
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/__init__.py b/plugins/UM3NetworkPrinting/__init__.py index e2ad5a2b12..3da7795589 100644 --- a/plugins/UM3NetworkPrinting/__init__.py +++ b/plugins/UM3NetworkPrinting/__init__.py @@ -1,11 +1,15 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - from .src import DiscoverUM3Action from .src import UM3OutputDevicePlugin + def getMetaData(): return {} + def register(app): - return { "output_device": UM3OutputDevicePlugin.UM3OutputDevicePlugin(), "machine_action": DiscoverUM3Action.DiscoverUM3Action()}
\ No newline at end of file + return { + "output_device": UM3OutputDevicePlugin.UM3OutputDevicePlugin(), + "machine_action": DiscoverUM3Action.DiscoverUM3Action() + } diff --git a/plugins/UM3NetworkPrinting/plugin.json b/plugins/UM3NetworkPrinting/plugin.json index d415338374..088b4dae6a 100644 --- a/plugins/UM3NetworkPrinting/plugin.json +++ b/plugins/UM3NetworkPrinting/plugin.json @@ -2,7 +2,7 @@ "name": "UM3 Network Connection", "author": "Ultimaker B.V.", "description": "Manages network connections to Ultimaker 3 printers.", - "version": "1.0.0", - "api": 5, + "version": "1.0.1", + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3 Extended.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3 Extended.png Binary files differnew file mode 100644 index 0000000000..1ce19c2933 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3 Extended.png diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3.png Binary files differnew file mode 100644 index 0000000000..4639cb3fde --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 3.png diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker S5.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker S5.png Binary files differnew file mode 100644 index 0000000000..29ba428e38 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/png/Ultimaker S5.png diff --git a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml index 7e5c254e5c..6f054f9c19 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml @@ -8,11 +8,13 @@ import UM 1.3 as UM import Cura 1.0 as Cura Rectangle { + id: base property var iconSource: null; - color: clickArea.containsMouse ? UM.Theme.getColor("primary_hover") : UM.Theme.getColor("primary"); // "Cura Blue" + color: "#0a0850" // TODO: Theme! height: width; radius: Math.round(0.5 * width); - width: 36 * screenScaleFactor; + width: 24 * screenScaleFactor; + property var enabled: true UM.RecolorImage { id: icon; @@ -29,12 +31,18 @@ Rectangle { MouseArea { id: clickArea; anchors.fill: parent; - hoverEnabled: true; + hoverEnabled: base.enabled onClicked: { - if (OutputDevice.activeCameraUrl != "") { - OutputDevice.setActiveCameraUrl(""); - } else { - OutputDevice.setActiveCameraUrl(modelData.cameraUrl); + if (base.enabled) + { + if (OutputDevice.activeCameraUrl != "") + { + OutputDevice.setActiveCameraUrl("") + } + else + { + OutputDevice.setActiveCameraUrl(modelData.cameraUrl) + } } } } diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml deleted file mode 100644 index 068c369a3f..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.3 -import UM 1.3 as UM -import Cura 1.0 as Cura - -Component { - Rectangle { - id: base; - property var shadowRadius: UM.Theme.getSize("monitor_shadow_radius").width; - property var cornerRadius: UM.Theme.getSize("monitor_corner_radius").width; - anchors.fill: parent; - color: UM.Theme.getColor("sidebar"); - visible: OutputDevice != null; - - UM.I18nCatalog { - id: catalog; - name: "cura"; - } - - Label { - id: printingLabel; - anchors { - left: parent.left; - leftMargin: 4 * UM.Theme.getSize("default_margin").width; - margins: 2 * UM.Theme.getSize("default_margin").width; - right: parent.right; - top: parent.top; - } - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("large"); - text: catalog.i18nc("@label", "Printing"); - } - - Label { - id: managePrintersLabel; - anchors { - bottom: printingLabel.bottom; - right: printerScrollView.right; - rightMargin: 4 * UM.Theme.getSize("default_margin").width; - } - color: UM.Theme.getColor("primary"); // "Cura Blue" - font: UM.Theme.getFont("default"); - linkColor: UM.Theme.getColor("primary"); // "Cura Blue" - text: catalog.i18nc("@label link to connect manager", "Manage printers"); - } - - MouseArea { - anchors.fill: managePrintersLabel; - hoverEnabled: true; - onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel(); - onEntered: managePrintersLabel.font.underline = true; - onExited: managePrintersLabel.font.underline = false; - } - - // Skeleton loading - Column { - id: skeletonLoader; - anchors { - left: parent.left; - leftMargin: UM.Theme.getSize("wide_margin").width; - right: parent.right; - rightMargin: UM.Theme.getSize("wide_margin").width; - top: printingLabel.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - } - spacing: UM.Theme.getSize("default_margin").height - 10; - visible: printerList.count === 0; - - PrinterCard { - printer: null; - } - PrinterCard { - printer: null; - } - } - - // Actual content - ScrollView { - id: printerScrollView; - anchors { - bottom: parent.bottom; - left: parent.left; - right: parent.right; - top: printingLabel.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - } - style: UM.Theme.styles.scrollview; - - ListView { - id: printerList; - property var currentIndex: -1; - anchors { - fill: parent; - leftMargin: UM.Theme.getSize("wide_margin").width; - rightMargin: UM.Theme.getSize("wide_margin").width; - } - delegate: PrinterCard { - printer: modelData; - } - model: OutputDevice.printers; - spacing: UM.Theme.getSize("default_margin").height - 10; - } - } - } -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml deleted file mode 100644 index d210ab40f3..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import UM 1.3 as UM -import Cura 1.0 as Cura - -Component { - Rectangle { - id: monitorFrame; - property var emphasisColor: UM.Theme.getColor("setting_control_border_highlight"); - property var cornerRadius: UM.Theme.getSize("monitor_corner_radius").width; - color: UM.Theme.getColor("viewport_background"); - height: maximumHeight; - onVisibleChanged: { - if (monitorFrame != null && !monitorFrame.visible) { - OutputDevice.setActiveCameraUrl(""); - } - } - width: maximumWidth; - - UM.I18nCatalog { - id: catalog; - name: "cura"; - } - - Label { - id: manageQueueLabel; - anchors { - bottom: queuedLabel.bottom; - right: queuedPrintJobs.right; - rightMargin: 3 * UM.Theme.getSize("default_margin").width; - } - color: UM.Theme.getColor("primary"); - font: UM.Theme.getFont("default"); - linkColor: UM.Theme.getColor("primary"); - text: catalog.i18nc("@label link to connect manager", "Manage queue"); - } - - MouseArea { - anchors.fill: manageQueueLabel; - hoverEnabled: true; - onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel(); - onEntered: manageQueueLabel.font.underline = true; - onExited: manageQueueLabel.font.underline = false; - } - - Label { - id: queuedLabel; - anchors { - left: queuedPrintJobs.left; - leftMargin: 3 * UM.Theme.getSize("default_margin").width + 5 * screenScaleFactor; - top: parent.top; - topMargin: 2 * UM.Theme.getSize("default_margin").height; - } - color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("large"); - text: catalog.i18nc("@label", "Queued"); - } - - Column { - id: skeletonLoader; - anchors { - bottom: parent.bottom; - bottomMargin: UM.Theme.getSize("default_margin").height; - horizontalCenter: parent.horizontalCenter; - top: queuedLabel.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - } - visible: !queuedPrintJobs.visible; - width: Math.min(800 * screenScaleFactor, maximumWidth); - - PrintJobInfoBlock { - anchors { - left: parent.left; - leftMargin: UM.Theme.getSize("default_margin").width; - right: parent.right; - rightMargin: UM.Theme.getSize("default_margin").width; - } - printJob: null; // Use as skeleton - } - - PrintJobInfoBlock { - anchors { - left: parent.left; - leftMargin: UM.Theme.getSize("default_margin").width; - right: parent.right; - rightMargin: UM.Theme.getSize("default_margin").width; - } - printJob: null; // Use as skeleton - } - } - - ScrollView { - id: queuedPrintJobs; - anchors { - top: queuedLabel.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - horizontalCenter: parent.horizontalCenter; - bottomMargin: UM.Theme.getSize("default_margin").height; - bottom: parent.bottom; - } - style: UM.Theme.styles.scrollview; - visible: OutputDevice.receivedPrintJobs; - width: Math.min(800 * screenScaleFactor, maximumWidth); - - ListView { - id: printJobList; - anchors.fill: parent; - delegate: PrintJobInfoBlock { - anchors { - left: parent.left; - leftMargin: UM.Theme.getSize("default_margin").width; - right: parent.right; - rightMargin: UM.Theme.getSize("default_margin").width; - } - printJob: modelData; - } - model: OutputDevice.queuedPrintJobs; - spacing: UM.Theme.getSize("default_margin").height - 2 * UM.Theme.getSize("monitor_shadow_radius").width; - } - } - - PrinterVideoStream { - anchors.fill: parent; - cameraUrl: OutputDevice.activeCameraUrl; - visible: OutputDevice.activeCameraUrl != ""; - } - } -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml index 58443115a9..3883a7e285 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml @@ -28,7 +28,7 @@ Cura.MachineAction // Check if there is another instance with the same key if (!manager.existsKey(printerKey)) { - manager.setKey(printerKey) + manager.associateActiveMachineWithPrinterDevice(base.selectedDevice) manager.setGroupName(printerName) // TODO To change when the groups have a name completed() } @@ -64,6 +64,7 @@ Cura.MachineAction width: parent.width text: catalog.i18nc("@title:window", "Connect to Networked Printer") wrapMode: Text.WordWrap + renderType: Text.NativeRendering font.pointSize: 18 } @@ -72,6 +73,7 @@ Cura.MachineAction id: pageDescription width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "To print directly to your printer over the network, please make sure your printer is connected to the network using a network cable or by connecting your printer to your WIFI network. If you don't connect Cura with your printer, you can still use a USB drive to transfer g-code files to your printer.\n\nSelect your printer from the list below:") } @@ -182,6 +184,7 @@ Cura.MachineAction text: listview.model[index].name color: parent.ListView.isCurrentItem ? palette.highlightedText : palette.text elide: Text.ElideRight + renderType: Text.NativeRendering } MouseArea @@ -204,6 +207,7 @@ Cura.MachineAction anchors.left: parent.left anchors.right: parent.right wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "If your printer is not listed, read the <a href='%1'>network printing troubleshooting guide</a>").arg("https://ultimaker.com/en/troubleshooting"); onLinkActivated: Qt.openUrlExternally(link) } @@ -219,8 +223,9 @@ Cura.MachineAction width: parent.width wrapMode: Text.WordWrap text: base.selectedDevice ? base.selectedDevice.name : "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") elide: Text.ElideRight + renderType: Text.NativeRendering } Grid { @@ -231,12 +236,14 @@ Cura.MachineAction { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "Type") } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: { if(base.selectedDevice) @@ -268,24 +275,28 @@ Cura.MachineAction { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "Firmware version") } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: base.selectedDevice ? base.selectedDevice.firmwareVersion : "" } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: catalog.i18nc("@label", "Address") } Label { width: Math.round(parent.width * 0.5) wrapMode: Text.WordWrap + renderType: Text.NativeRendering text: base.selectedDevice ? base.selectedDevice.ipAddress : "" } } @@ -294,6 +305,7 @@ Cura.MachineAction { width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering text:{ // The property cluster size does not exist for older UM3 devices. if(!base.selectedDevice || base.selectedDevice.clusterSize == null || base.selectedDevice.clusterSize == 1) @@ -315,6 +327,7 @@ Cura.MachineAction { width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering visible: base.selectedDevice != null && !base.completeProperties text: catalog.i18nc("@label", "The printer at this address has not yet responded." ) } @@ -358,9 +371,10 @@ Cura.MachineAction Label { - text: catalog.i18nc("@alabel","Enter the IP address or hostname of your printer on the network.") + text: catalog.i18nc("@alabel", "Enter the IP address or hostname of your printer on the network.") width: parent.width wrapMode: Text.WordWrap + renderType: Text.NativeRendering } TextField diff --git a/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml b/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml new file mode 100644 index 0000000000..d4c123652d --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/ExpandableCard.qml @@ -0,0 +1,87 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM +import Cura 1.0 as Cura + +// TODO: Theme & documentation! +// The expandable component has 3 major sub components: +// * The headerItem Always visible and should hold some info about what happens if the component is expanded +// * The popupItem The content that needs to be shown if the component is expanded. +Item +{ + id: base + + property bool expanded: false + property bool enabled: true + property var borderWidth: 1 + property color borderColor: "#CCCCCC" + property color headerBackgroundColor: "white" + property color headerHoverColor: "#e8f2fc" + property color drawerBackgroundColor: "white" + property alias headerItem: header.children + property alias drawerItem: drawer.children + + width: parent.width + height: childrenRect.height + + Rectangle + { + id: header + border + { + color: borderColor + width: borderWidth + } + color: base.enabled && headerMouseArea.containsMouse ? headerHoverColor : headerBackgroundColor + height: childrenRect.height + width: parent.width + Behavior on color + { + ColorAnimation + { + duration: 100 + } + } + } + + MouseArea + { + id: headerMouseArea + anchors.fill: header + onClicked: + { + if (!base.enabled) return + base.expanded = !base.expanded + } + hoverEnabled: base.enabled + } + + Rectangle + { + id: drawer + anchors + { + top: header.bottom + topMargin: -1 + } + border + { + color: borderColor + width: borderWidth + } + clip: true + color: headerBackgroundColor + height: base.expanded ? childrenRect.height : 0 + width: parent.width + Behavior on height + { + NumberAnimation + { + duration: 100 + } + } + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml b/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml deleted file mode 100644 index aeb92697ad..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Controls 2.0 -import UM 1.3 as UM - -Rectangle { - color: UM.Theme.getColor("monitor_lining_light"); // TODO: Maybe theme separately? Maybe not. - height: UM.Theme.getSize("default_lining").height; - width: parent.width; -}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml new file mode 100644 index 0000000000..192a5a7f76 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorBuildplateConfiguration.qml @@ -0,0 +1,74 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * This component comprises a buildplate icon and the buildplate name. It is + * used by the MonitorPrinterConfiguration component along with two instances + * of MonitorExtruderConfiguration. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + // The buildplate name + property var buildplate: null + + // Height is one 18px label/icon + height: 18 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + + Row + { + height: parent.height + spacing: UM.Theme.getSize("print_setup_slider_handle").width // TODO: Theme! (Should be same as extruder spacing) + + // This wrapper ensures that the buildplate icon is located centered + // below an extruder icon. + Item + { + height: parent.height + width: 32 * screenScaleFactor // Ensure the icon is centered under the extruder icon (same width) + + Rectangle + { + anchors.centerIn: parent + height: parent.height + width: height + color: buildplateIcon.visible > 0 ? "transparent" : "#eeeeee" // TODO: Theme! + radius: Math.floor(height / 2) + } + + UM.RecolorImage + { + id: buildplateIcon + anchors.centerIn: parent + color: "#0a0850" // TODO: Theme! (Standard purple) + height: parent.height + source: "../svg/icons/buildplate.svg" + width: height + visible: buildplate + } + } + + Label + { + id: buildplateLabel + color: "#191919" // TODO: Theme! + elide: Text.ElideRight + font: UM.Theme.getFont("default") // 12pt, regular + text: buildplate ? buildplate : "" + visible: text !== "" + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml new file mode 100644 index 0000000000..de24ee5a8c --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorCarousel.qml @@ -0,0 +1,258 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 2.0 +import QtGraphicalEffects 1.0 +import UM 1.3 as UM + +Item +{ + id: base + + property var currentIndex: 0 + property var tileWidth: 834 * screenScaleFactor // TODO: Theme! + property var tileHeight: 216 * screenScaleFactor // TODO: Theme! + property var tileSpacing: 60 * screenScaleFactor // TODO: Theme! + + // Array/model of printers to populate the carousel with + property var printers: [] + + // Maximum distance the carousel can be shifted + property var maxOffset: (printers.length - 1) * (tileWidth + tileSpacing) + + height: centerSection.height + width: maximumWidth + + // Enable keyboard navigation + Keys.onLeftPressed: navigateTo(currentIndex - 1) + Keys.onRightPressed: navigateTo(currentIndex + 1) + + Item + { + id: leftHint + anchors + { + right: leftButton.left + rightMargin: 12 * screenScaleFactor // TODO: Theme! + left: parent.left + } + height: parent.height + z: 10 + LinearGradient + { + anchors.fill: parent + start: Qt.point(0, 0) + end: Qt.point(leftHint.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.0 + color: "#fff6f6f6" // TODO: Theme! + } + GradientStop + { + position: 1.0 + color: "#66f6f6f6" // TODO: Theme! + } + } + } + MouseArea + { + anchors.fill: parent + onClicked: navigateTo(currentIndex - 1) + } + } + + Button + { + id: leftButton + anchors + { + verticalCenter: parent.verticalCenter + right: centerSection.left + rightMargin: 12 * screenScaleFactor // TODO: Theme! + } + width: 36 * screenScaleFactor // TODO: Theme! + height: 72 * screenScaleFactor // TODO: Theme! + visible: currentIndex > 0 + hoverEnabled: true + z: 10 + onClicked: navigateTo(currentIndex - 1) + background: Rectangle + { + color: leftButton.hovered ? "#e8f2fc" : "#ffffff" // TODO: Theme! + border.width: 1 * screenScaleFactor // TODO: Theme! + border.color: "#cccccc" // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + } + contentItem: Item + { + anchors.fill: parent + UM.RecolorImage + { + anchors.centerIn: parent + width: 18 // TODO: Theme! + height: width // TODO: Theme! + sourceSize.width: width // TODO: Theme! + sourceSize.height: width // TODO: Theme! + color: "#152950" // TODO: Theme! + source: UM.Theme.getIcon("arrow_left") + } + } + } + + Item + { + id: centerSection + anchors + { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + width: tileWidth + height: tiles.height + z: 1 + + Row + { + id: tiles + height: childrenRect.height + width: 5 * tileWidth + 4 * tileSpacing // TODO: Theme! + x: 0 + z: 0 + Behavior on x + { + NumberAnimation + { + duration: 200 + easing.type: Easing.InOutCubic + } + } + spacing: 60 * screenScaleFactor // TODO: Theme! + + Repeater + { + model: printers + MonitorPrinterCard + { + printer: modelData + enabled: model.index == currentIndex + } + } + } + } + + Button + { + id: rightButton + anchors + { + verticalCenter: parent.verticalCenter + left: centerSection.right + leftMargin: 12 * screenScaleFactor // TODO: Theme! + } + width: 36 * screenScaleFactor // TODO: Theme! + height: 72 * screenScaleFactor // TODO: Theme! + z: 10 + visible: currentIndex < printers.length - 1 + onClicked: navigateTo(currentIndex + 1) + hoverEnabled: true + background: Rectangle + { + color: rightButton.hovered ? "#e8f2fc" : "#ffffff" // TODO: Theme! + border.width: 1 * screenScaleFactor // TODO: Theme! + border.color: "#cccccc" // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + } + contentItem: Item + { + anchors.fill: parent + UM.RecolorImage + { + anchors.centerIn: parent + width: 18 // TODO: Theme! + height: width // TODO: Theme! + sourceSize.width: width // TODO: Theme! + sourceSize.height: width // TODO: Theme! + color: "#152950" // TODO: Theme! + source: UM.Theme.getIcon("arrow_right") + } + } + } + + Item + { + id: rightHint + anchors + { + left: rightButton.right + leftMargin: 12 * screenScaleFactor // TODO: Theme! + right: parent.right + } + height: centerSection.height + z: 10 + + LinearGradient + { + anchors.fill: parent + start: Qt.point(0, 0) + end: Qt.point(rightHint.width, 0) + gradient: Gradient + { + GradientStop + { + position: 0.0 + color: "#66f6f6f6" // TODO: Theme! + } + GradientStop + { + position: 1.0 + color: "#fff6f6f6" // TODO: Theme! + } + } + } + MouseArea + { + anchors.fill: parent + onClicked: navigateTo(currentIndex + 1) + } + } + + Row + { + id: navigationDots + anchors + { + horizontalCenter: centerSection.horizontalCenter + top: centerSection.bottom + topMargin: 36 * screenScaleFactor // TODO: Theme! + } + spacing: 8 * screenScaleFactor // TODO: Theme! + visible: printers.length > 1 + Repeater + { + model: printers + Button + { + background: Rectangle + { + color: model.index == currentIndex ? "#777777" : "#d8d8d8" // TODO: Theme! + radius: Math.floor(width / 2) + width: 12 * screenScaleFactor // TODO: Theme! + height: width // TODO: Theme! + } + onClicked: navigateTo(model.index) + } + } + } + + function navigateTo( i ) { + if (i >= 0 && i < printers.length) + { + tiles.x = -1 * i * (tileWidth + tileSpacing) + currentIndex = i + } + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml new file mode 100644 index 0000000000..1718994d83 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorConfigOverrideDialog.qml @@ -0,0 +1,142 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 1.4 +import QtQuick.Layouts 1.3 +import QtQuick.Dialogs 1.2 +import UM 1.3 as UM + +UM.Dialog +{ + id: overrideConfirmationDialog + + property var printer: null + + minimumWidth: screenScaleFactor * 640; + minimumHeight: screenScaleFactor * 320; + width: minimumWidth + height: minimumHeight + title: catalog.i18nc("@title:window", "Configuration Changes") + rightButtons: + [ + Button + { + id: overrideButton + anchors.margins: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@action:button", "Override") + onClicked: + { + OutputDevice.forceSendJob(printer.activePrintJob.key) + overrideConfirmationDialog.close() + } + }, + Button + { + id: cancelButton + anchors.margins: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@action:button", "Cancel") + onClicked: + { + overrideConfirmationDialog.reject() + } + } + ] + + Label + { + anchors + { + fill: parent + margins: 36 * screenScaleFactor // TODO: Theme! + bottomMargin: 56 * screenScaleFactor // TODO: Theme! + } + wrapMode: Text.WordWrap + text: + { + if (!printer || !printer.activePrintJob) + { + return "" + } + var topLine + if (materialsAreKnown(printer.activePrintJob)) + { + topLine = catalog.i18ncp("@label", "The assigned printer, %1, requires the following configuration change:", "The assigned printer, %1, requires the following configuration changes:", printer.activePrintJob.configurationChanges.length).arg(printer.name) + } + else + { + topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printer.name) + } + var result = "<p>" + topLine +"</p>\n\n" + for (var i = 0; i < printer.activePrintJob.configurationChanges.length; i++) + { + var change = printer.activePrintJob.configurationChanges[i] + var text + switch (change.typeOfChange) + { + case "material_change": + text = catalog.i18nc("@label", "Change material %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName) + break + case "material_insert": + text = catalog.i18nc("@label", "Load %3 as material %1 (This cannot be overridden).").arg(change.index + 1).arg(change.targetName) + break + case "print_core_change": + text = catalog.i18nc("@label", "Change print core %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName) + break + case "buildplate_change": + text = catalog.i18nc("@label", "Change build plate to %1 (This cannot be overridden).").arg(formatBuildPlateType(change.target_name)) + break + default: + text = "unknown" + } + result += "<p><b>" + text + "</b></p>\n\n" + } + var bottomLine = catalog.i18nc("@label", "Override will use the specified settings with the existing printer configuration. This may result in a failed print.") + result += "<p>" + bottomLine + "</p>\n\n" + return result + } + } + // Utils + function formatPrintJobName(name) + { + var extensions = [ ".gcode.gz", ".gz", ".gcode", ".ufp" ] + for (var i = 0; i < extensions.length; i++) + { + var extension = extensions[i] + if (name.slice(-extension.length) === extension) + { + name = name.substring(0, name.length - extension.length) + } + } + return name; + } + function materialsAreKnown(job) + { + var conf0 = job.configuration[0] + if (conf0 && !conf0.material.material) + { + return false + } + var conf1 = job.configuration[1] + if (conf1 && !conf1.material.material) + { + return false + } + return true + } + function formatBuildPlateType(buildPlateType) + { + var translationText = "" + switch (buildPlateType) { + case "glass": + translationText = catalog.i18nc("@label", "Glass") + break + case "aluminum": + translationText = catalog.i18nc("@label", "Aluminum") + break + default: + translationText = null + } + return translationText + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml new file mode 100644 index 0000000000..17c0fa8651 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorExtruderConfiguration.qml @@ -0,0 +1,100 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * This component comprises a colored extruder icon, the material name, and the + * print core name. It is used by the MonitorPrinterConfiguration component with + * a sibling instance as well as a MonitorBuildplateConfiguration instance. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + // The material color + property alias color: extruderIcon.color + + // The extruder position; NOTE: Decent human beings count from 0 + property alias position: extruderIcon.position + + // The material name + property alias material: materialLabel.text + + // The print core name (referred to as hotendID in Python) + property alias printCore: printCoreLabel.text + + // Height is 2 x 18px labels, plus 4px spacing between them + height: 40 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + + MonitorIconExtruder + { + id: extruderIcon + color: "#eeeeee" // TODO: Theme! + position: 0 + } + + Rectangle + { + id: materialLabelWrapper + anchors + { + left: extruderIcon.right + leftMargin: 12 * screenScaleFactor // TODO: Theme! + } + color: materialLabel.visible > 0 ? "transparent" : "#eeeeee" // TODO: Theme! + height: 18 * screenScaleFactor // TODO: Theme! + width: Math.max(materialLabel.contentWidth, 60 * screenScaleFactor) // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + + Label + { + id: materialLabel + + color: "#191919" // TODO: Theme! + elide: Text.ElideRight + font: UM.Theme.getFont("default") // 12pt, regular + text: "" + visible: text !== "" + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle + { + id: printCoreLabelWrapper + anchors + { + left: materialLabelWrapper.left + bottom: parent.bottom + } + color: printCoreLabel.visible > 0 ? "transparent" : "#eeeeee" // TODO: Theme! + height: 18 * screenScaleFactor // TODO: Theme! + width: Math.max(printCoreLabel.contentWidth, 36 * screenScaleFactor) // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + + Label + { + id: printCoreLabel + + color: "#191919" // TODO: Theme! + elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") // 12pt, bold + text: "" + visible: text !== "" + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml new file mode 100644 index 0000000000..93dbebc8c6 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorIconExtruder.qml @@ -0,0 +1,61 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * This component is a sort of "super icon" which includes a colored SVG image + * as well as the extruder position number. It is used in the the + * MonitorExtruderConfiguration component. + */ +Item +{ + // The material color + property alias color: icon.color + + // The extruder position; NOTE: Decent human beings count from 0 + property int position: 0 + + // The extruder icon size; NOTE: This shouldn't need to be changed + property int size: 32 // TODO: Theme! + + // THe extruder icon source; NOTE: This shouldn't need to be changed + property string iconSource: "../svg/icons/extruder.svg" + + height: size + width: size + + UM.RecolorImage + { + id: icon + anchors.fill: parent + source: iconSource + width: size + } + + /* + * The label uses some "fancy" math to ensure that if you change the overall + * icon size, the number scales with it. That is to say, the font properties + * are linked to the icon size, NOT the theme. And that's intentional. + */ + Label + { + id: positionLabel + font + { + pointSize: Math.round(size * 0.3125) + weight: Font.Bold + } + height: Math.round(size / 2) * screenScaleFactor + horizontalAlignment: Text.AlignHCenter + text: position + 1 + verticalAlignment: Text.AlignVCenter + width: Math.round(size / 2) * screenScaleFactor + x: Math.round(size * 0.25) * screenScaleFactor + y: Math.round(size * 0.15625) * screenScaleFactor + // TODO: Once 'size' is themed, screenScaleFactor won't be needed + visible: position >= 0 + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml new file mode 100644 index 0000000000..f2b9c3cff7 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobCard.qml @@ -0,0 +1,215 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * A Print Job Card is essentially just a filled-in Expandable Card item. All + * data within it is derived from being passed a printJob property. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + id: base + + // The print job which all other data is derived from + property var printJob: null + + width: parent.width + height: childrenRect.height + + ExpandableCard + { + enabled: printJob != null + borderColor: printJob.configurationChanges.length !== 0 ? "#f5a623" : "#CCCCCC" // TODO: Theme! + headerItem: Row + { + height: 48 * screenScaleFactor // TODO: Theme! + anchors.left: parent.left + anchors.leftMargin: 24 * screenScaleFactor // TODO: Theme! + spacing: 18 * screenScaleFactor // TODO: Theme! + + MonitorPrintJobPreview + { + printJob: base.printJob + size: 32 * screenScaleFactor // TODO: Theme! + anchors.verticalCenter: parent.verticalCenter + } + + Item + { + anchors.verticalCenter: parent.verticalCenter + height: 18 * screenScaleFactor // TODO: Theme! + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + Rectangle + { + color: "#eeeeee" + width: Math.round(parent.width / 2) + height: parent.height + visible: !printJob + } + Label + { + text: printJob && printJob.name ? printJob.name : "" + color: "#374355" + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + visible: printJob + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } + + Item + { + anchors.verticalCenter: parent.verticalCenter + height: 18 * screenScaleFactor // TODO: Theme! + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + Rectangle + { + color: "#eeeeee" + width: Math.round(parent.width / 3) + height: parent.height + visible: !printJob + } + Label + { + text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : "" + color: "#374355" + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + visible: printJob + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + Item + { + anchors.verticalCenter: parent.verticalCenter + height: 18 * screenScaleFactor // TODO: This should be childrenRect.height but QML throws warnings + width: childrenRect.width + + Rectangle + { + color: "#eeeeee" + width: 72 * screenScaleFactor // TODO: Theme! + height: parent.height + visible: !printJob + } + + Label + { + id: printerAssignmentLabel + anchors.verticalCenter: parent.verticalCenter + color: "#374355" + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + text: { + if (printJob !== null) { + if (printJob.assignedPrinter == null) + { + if (printJob.state == "error") + { + return catalog.i18nc("@label", "Unavailable printer") + } + return catalog.i18nc("@label", "First available") + } + return printJob.assignedPrinter.name + } + return "" + } + visible: printJob + width: 120 * screenScaleFactor // TODO: Theme! + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + + Row + { + id: printerFamilyPills + anchors + { + left: printerAssignmentLabel.right; + leftMargin: 12 // TODO: Theme! + verticalCenter: parent.verticalCenter + } + height: childrenRect.height + spacing: 6 // TODO: Theme! + visible: printJob + + Repeater + { + id: compatiblePills + delegate: MonitorPrinterPill + { + text: modelData + } + model: printJob ? printJob.compatibleMachineFamilies : [] + } + } + } + } + drawerItem: Row + { + anchors + { + left: parent.left + leftMargin: 74 * screenScaleFactor // TODO: Theme! + } + height: 108 * screenScaleFactor // TODO: Theme! + spacing: 18 * screenScaleFactor // TODO: Theme! + + MonitorPrinterConfiguration + { + id: printerConfiguration + anchors.verticalCenter: parent.verticalCenter + buildplate: "Glass" + configurations: + [ + base.printJob.configuration.extruderConfigurations[0], + base.printJob.configuration.extruderConfigurations[1] + ] + height: 72 * screenScaleFactor // TODO: Theme! + } + Label { + text: printJob && printJob.owner ? printJob.owner : "" + color: "#374355" // TODO: Theme! + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.top: printerConfiguration.top + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + } + + PrintJobContextMenu + { + id: contextButton + anchors + { + right: parent.right; + rightMargin: 8 * screenScaleFactor // TODO: Theme! + top: parent.top + topMargin: 8 * screenScaleFactor // TODO: Theme! + } + printJob: base.printJob + width: 32 * screenScaleFactor // TODO: Theme! + height: 32 * screenScaleFactor // TODO: Theme! + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml new file mode 100644 index 0000000000..d0bad63258 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobPreview.qml @@ -0,0 +1,101 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +// TODO: Documentation! +Item +{ + id: printJobPreview + + property var printJob: null + property var size: 256 + + width: size + height: size + + Rectangle + { + anchors.fill: parent + color: printJob ? "transparent" : "#eeeeee" // TODO: Theme! + radius: 8 // TODO: Theme! + Image + { + id: previewImage + anchors.fill: parent + opacity: + { + if (printJob && (printJob.state == "error" || printJob.configurationChanges.length > 0 || !printJob.isActive)) + { + return 0.5 + } + return 1.0 + } + source: printJob ? printJob.previewImageUrl : "" + } + } + + + UM.RecolorImage + { + id: ultiBotImage + + anchors.centerIn: printJobPreview + color: UM.Theme.getColor("monitor_placeholder_image") + height: printJobPreview.height + source: "../svg/ultibot.svg" + sourceSize + { + height: height + width: width + } + /* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or + not in order to determine if we show the placeholder (ultibot) image instead. */ + visible: printJob && previewImage.status == Image.Error + width: printJobPreview.width + } + + UM.RecolorImage + { + id: overlayIcon + anchors.centerIn: printJobPreview + color: UM.Theme.getColor("monitor_image_overlay") + height: 0.5 * printJobPreview.height + source: + { + if (!printJob) + { + return "" + } + if (printJob.configurationChanges.length > 0) + { + return "../svg/warning-icon.svg" + } + switch(printJob.state) + { + case "error": + return "../svg/aborted-icon.svg" + case "wait_cleanup": + return printJob.timeTotal > printJob.timeElapsed ? "../svg/aborted-icon.svg" : "" + case "pausing": + return "../svg/paused-icon.svg" + case "paused": + return "../svg/paused-icon.svg" + case "resuming": + return "../svg/paused-icon.svg" + default: + return "" + } + return "" + } + sourceSize + { + height: height + width: width + } + visible: source != "" + width: 0.5 * printJobPreview.width + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml new file mode 100644 index 0000000000..d5d4705a36 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrintJobProgressBar.qml @@ -0,0 +1,119 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls.Styles 1.3 +import QtQuick.Controls 1.4 +import UM 1.3 as UM + +/** + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + id: base + + // The print job which all other information is dervied from + property var printJob: null + + width: childrenRect.width + height: 18 * screenScaleFactor // TODO: Theme! + + ProgressBar + { + id: progressBar + anchors + { + verticalCenter: parent.verticalCenter + } + value: printJob ? printJob.progress : 0 + style: ProgressBarStyle + { + background: Rectangle + { + color: "#f5f5f5" // TODO: Theme! + implicitHeight: visible ? 8 * screenScaleFactor : 0 // TODO: Theme! + implicitWidth: 180 * screenScaleFactor // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + } + progress: Rectangle + { + id: progressItem; + color: printJob && printJob.isActive ? "#3282ff" : "#CCCCCC" // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + } + } + } + Label + { + id: percentLabel + anchors + { + left: progressBar.right + leftMargin: 18 * screenScaleFactor // TODO: Theme! + } + text: printJob ? Math.round(printJob.progress * 100) + "%" : "0%" + color: printJob && printJob.isActive ? "#374355" : "#babac1" // TODO: Theme! + width: contentWidth + font: UM.Theme.getFont("medium") // 14pt, regular + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + Label + { + id: statusLabel + anchors + { + left: percentLabel.right + leftMargin: 18 * screenScaleFactor // TODO: Theme! + } + color: "#374355" // TODO: Theme! + font: UM.Theme.getFont("medium") // 14pt, regular + text: + { + if (!printJob) + { + return "" + } + switch (printJob.state) + { + case "wait_cleanup": + if (printJob.timeTotal > printJob.timeElapsed) + { + return catalog.i18nc("@label:status", "Aborted") + } + return catalog.i18nc("@label:status", "Finished") + case "finished": + return catalog.i18nc("@label:status", "Finished") + case "sent_to_printer": + return catalog.i18nc("@label:status", "Preparing...") + case "pre_print": + return catalog.i18nc("@label:status", "Preparing...") + case "aborting": // NOTE: Doesn't exist but maybe should someday + return catalog.i18nc("@label:status", "Aborting...") + case "aborted": // NOTE: Unused, see above + return catalog.i18nc("@label:status", "Aborted") + case "pausing": + return catalog.i18nc("@label:status", "Pausing...") + case "paused": + return catalog.i18nc("@label:status", "Paused") + case "resuming": + return catalog.i18nc("@label:status", "Resuming...") + case "queued": + return catalog.i18nc("@label:status", "Action required") + default: + return catalog.i18nc("@label:status", "Finishes %1 at %2".arg(OutputDevice.getDateCompleted( printJob.timeRemaining )).arg(OutputDevice.getTimeCompleted( printJob.timeRemaining ))) + } + } + width: contentWidth + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml new file mode 100644 index 0000000000..facfaaaaaf --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterCard.qml @@ -0,0 +1,404 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.3 +import QtQuick.Controls 2.0 +import QtQuick.Dialogs 1.1 +import UM 1.3 as UM + +/** + * A Printer Card is has two main components: the printer portion and the print + * job portion, the latter being paired in the UI when a print job is paired + * a printer in-cluster. + * + * NOTE: For most labels, a fixed height with vertical alignment is used to make + * layouts more deterministic (like the fixed-size textboxes used in original + * mock-ups). This is also a stand-in for CSS's 'line-height' property. Denoted + * with '// FIXED-LINE-HEIGHT:'. + */ +Item +{ + id: base + + // The printer which all printer data is derived from + property var printer: null + + property var borderSize: 1 * screenScaleFactor // TODO: Theme, and remove from here + + // If the printer card's controls are enabled. This is used by the carousel + // to prevent opening the context menu or camera while the printer card is not + // "in focus" + property var enabled: true + + width: 834 * screenScaleFactor // TODO: Theme! + height: childrenRect.height + + Rectangle + { + id: background + anchors.fill: parent + color: "#FFFFFF" // TODO: Theme! + border + { + color: "#CCCCCC" // TODO: Theme! + width: borderSize // TODO: Remove once themed + } + radius: 2 * screenScaleFactor // TODO: Theme! + } + + // Printer portion + Item + { + id: printerInfo + + width: parent.width + height: 144 * screenScaleFactor // TODO: Theme! + + Row + { + anchors + { + left: parent.left + leftMargin: 36 * screenScaleFactor // TODO: Theme! + verticalCenter: parent.verticalCenter + } + spacing: 18 * screenScaleFactor // TODO: Theme! + + Rectangle + { + id: printerImage + width: 108 * screenScaleFactor // TODO: Theme! + height: 108 * screenScaleFactor // TODO: Theme! + color: printer ? "transparent" : "#eeeeee" // TODO: Theme! + radius: 8 // TODO: Theme! + Image + { + anchors.fill: parent + fillMode: Image.PreserveAspectFit + source: printer ? "../png/" + printer.type + ".png" : "" + mipmap: true + } + } + + + Item + { + anchors + { + verticalCenter: parent.verticalCenter + } + width: 180 * screenScaleFactor // TODO: Theme! + height: printerNameLabel.height + printerFamilyPill.height + 6 * screenScaleFactor // TODO: Theme! + + Rectangle + { + id: printerNameLabel + // color: "#414054" // TODO: Theme! + color: printer ? "transparent" : "#eeeeee" // TODO: Theme! + height: 18 * screenScaleFactor // TODO: Theme! + width: parent.width + radius: 2 * screenScaleFactor // TODO: Theme! + + Label + { + text: printer && printer.name ? printer.name : "" + color: "#414054" // TODO: Theme! + elide: Text.ElideRight + font: UM.Theme.getFont("large") // 16pt, bold + width: parent.width + visible: printer + + // FIXED-LINE-HEIGHT: + height: parent.height + verticalAlignment: Text.AlignVCenter + } + } + + Rectangle + { + color: "#eeeeee" // TODO: Theme! + height: 18 * screenScaleFactor // TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + visible: !printer + width: 48 * screenScaleFactor // TODO: Theme! + } + MonitorPrinterPill + { + id: printerFamilyPill + anchors + { + top: printerNameLabel.bottom + topMargin: 6 * screenScaleFactor // TODO: Theme! + left: printerNameLabel.left + } + text: printer ? printer.type : "" + } + } + + MonitorPrinterConfiguration + { + id: printerConfiguration + anchors.verticalCenter: parent.verticalCenter + buildplate: printer ? "Glass" : null // 'Glass' as a default + configurations: + { + var configs = [] + if (printer) + { + configs.push(printer.printerConfiguration.extruderConfigurations[0]) + configs.push(printer.printerConfiguration.extruderConfigurations[1]) + } + else + { + configs.push(null, null) + } + return configs + } + height: 72 * screenScaleFactor // TODO: Theme!te theRect's x property + } + + // TODO: Make this work. + PropertyAnimation { target: printerConfiguration; property: "visible"; to: 0; loops: Animation.Infinite; duration: 500 } + } + + + + PrintJobContextMenu + { + id: contextButton + anchors + { + right: parent.right + rightMargin: 12 * screenScaleFactor // TODO: Theme! + top: parent.top + topMargin: 12 * screenScaleFactor // TODO: Theme! + } + printJob: printer ? printer.activePrintJob : null + width: 36 * screenScaleFactor // TODO: Theme! + height: 36 * screenScaleFactor // TODO: Theme! + enabled: base.enabled + visible: printer + } + CameraButton + { + id: cameraButton; + anchors + { + right: parent.right + rightMargin: 20 * screenScaleFactor // TODO: Theme! + bottom: parent.bottom + bottomMargin: 20 * screenScaleFactor // TODO: Theme! + } + iconSource: "../svg/icons/camera.svg" + enabled: base.enabled + visible: printer + } + } + + + // Divider + Rectangle + { + anchors + { + top: printJobInfo.top + left: printJobInfo.left + right: printJobInfo.right + } + height: borderSize // Remove once themed + color: background.border.color + } + + // Print job portion + Rectangle + { + id: printJobInfo + anchors + { + top: printerInfo.bottom + topMargin: -borderSize * screenScaleFactor // TODO: Theme! + } + border + { + color: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 ? "#f5a623" : "transparent" // TODO: Theme! + width: borderSize // TODO: Remove once themed + } + color: "transparent" // TODO: Theme! + height: 84 * screenScaleFactor + borderSize // TODO: Remove once themed + width: parent.width + + Row + { + anchors + { + fill: parent + topMargin: 12 * screenScaleFactor + borderSize // TODO: Theme! + bottomMargin: 12 * screenScaleFactor // TODO: Theme! + leftMargin: 36 * screenScaleFactor // TODO: Theme! + } + height: childrenRect.height + spacing: 18 * screenScaleFactor // TODO: Theme! + + Label + { + id: printerStatus + anchors + { + verticalCenter: parent.verticalCenter + } + color: printer ? "#414054" : "#aaaaaa" // TODO: Theme! + font: UM.Theme.getFont("large_bold") // 16pt, bold + text: { + if (!printer) { + return catalog.i18nc("@label:status", "Loading...") + } + if (printer && printer.state == "disabled") + { + return catalog.i18nc("@label:status", "Unavailable") + } + if (printer && printer.state == "unreachable") + { + return catalog.i18nc("@label:status", "Unavailable") + } + if (printer && !printer.activePrintJob && printer.state == "idle") + { + return catalog.i18nc("@label:status", "Idle") + } + return "" + } + visible: text !== "" + } + + Item + { + anchors + { + verticalCenter: parent.verticalCenter + } + width: printerImage.width + height: 60 * screenScaleFactor // TODO: Theme! + MonitorPrintJobPreview + { + anchors.centerIn: parent + printJob: printer ? printer.activePrintJob : null + size: parent.height + } + visible: printer && printer.activePrintJob && !printerStatus.visible + } + + Item + { + anchors + { + verticalCenter: parent.verticalCenter + } + width: 180 * screenScaleFactor // TODO: Theme! + height: printerNameLabel.height + printerFamilyPill.height + 6 * screenScaleFactor // TODO: Theme! + visible: printer && printer.activePrintJob && !printerStatus.visible + + Label + { + id: printerJobNameLabel + color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? "#414054" : "#babac1" // TODO: Theme! + elide: Text.ElideRight + font: UM.Theme.getFont("large") // 16pt, bold + text: printer && printer.activePrintJob ? printer.activePrintJob.name : "Untitled" // TODO: I18N + width: parent.width + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + + Label + { + id: printerJobOwnerLabel + anchors + { + top: printerJobNameLabel.bottom + topMargin: 6 * screenScaleFactor // TODO: Theme! + left: printerJobNameLabel.left + } + color: printer && printer.activePrintJob && printer.activePrintJob.isActive ? "#53657d" : "#babac1" // TODO: Theme! + elide: Text.ElideRight + font: UM.Theme.getFont("default") // 12pt, regular + text: printer && printer.activePrintJob ? printer.activePrintJob.owner : "Anonymous" // TODO: I18N + width: parent.width + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + MonitorPrintJobProgressBar + { + anchors + { + verticalCenter: parent.verticalCenter + } + printJob: printer && printer.activePrintJob + visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length === 0 && !printerStatus.visible + } + + Label + { + anchors + { + verticalCenter: parent.verticalCenter + } + font: UM.Theme.getFont("default") + text: "Requires configuration changes" + visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + Button + { + id: detailsButton + anchors + { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: 18 * screenScaleFactor // TODO: Theme! + } + background: Rectangle + { + color: "#d8d8d8" // TODO: Theme! + radius: 2 * screenScaleFactor // Todo: Theme! + Rectangle + { + anchors.fill: parent + anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme! + color: detailsButton.hovered ? "#e4e4e4" : "#f0f0f0" // TODO: Theme! + radius: 2 * screenScaleFactor // Todo: Theme! + } + } + contentItem: Label + { + anchors.fill: parent + anchors.bottomMargin: 2 * screenScaleFactor // TODO: Theme! + color: "#1e66d7" // TODO: Theme! + font: UM.Theme.getFont("medium") // 14pt, regular + text: "Details" // TODO: I18NC! + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + height: 18 * screenScaleFactor // TODO: Theme! + } + implicitHeight: 32 * screenScaleFactor // TODO: Theme! + implicitWidth: 96 * screenScaleFactor // TODO: Theme! + visible: printer && printer.activePrintJob && printer.activePrintJob.configurationChanges.length > 0 && !printerStatus.visible + onClicked: base.enabled ? overrideConfirmationDialog.open() : {} + } + } + + MonitorConfigOverrideDialog + { + id: overrideConfirmationDialog + printer: base.printer + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml new file mode 100644 index 0000000000..debc8b7959 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterConfiguration.qml @@ -0,0 +1,58 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 2.0 +import UM 1.3 as UM + +/** + * The MonitorPrinterConfiguration accepts 2 configuration objects as input and + * applies them to a MonitorBuildplateConfiguration instance and two instances + * of MonitorExtruderConfiguration. It's used in both the MonitorPrintJobCard + * component as well as the MonitorPrinterCard component. + */ +Item +{ + id: base + + // Extracted buildplate configuration + property alias buildplate: buildplateConfig.buildplate + + // Array of extracted extruder configurations + property var configurations: [null,null] + + // Default size, but should be stretched to fill parent + height: 72 * parent.height + width: 450 * screenScaleFactor // TODO: Theme! + + Row + { + id: extruderConfigurationRow + spacing: 18 * screenScaleFactor // TODO: Theme! + + Repeater + { + id: extruderConfigurationRepeater + model: configurations + + MonitorExtruderConfiguration + { + color: modelData && modelData.activeMaterial ? modelData.activeMaterial.color : "#eeeeee" // TODO: Theme! + material: modelData && modelData.activeMaterial ? modelData.activeMaterial.name : "" + position: modelData && typeof(modelData.position) === "number" ? modelData.position : -1 // Use negative one to create empty extruder number + printCore: modelData ? modelData.hotendID : "" + + // Keep things responsive! + width: Math.floor((base.width - (configurations.length - 1) * extruderConfigurationRow.spacing) / configurations.length) + } + + } + } + + MonitorBuildplateConfiguration + { + id: buildplateConfig + anchors.bottom: parent.bottom + buildplate: null + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml new file mode 100644 index 0000000000..2408089e1e --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorPrinterPill.qml @@ -0,0 +1,47 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import UM 1.2 as UM + +/** + * A MonitorPrinterPill is a blue-colored tag indicating which printers a print + * job is compatible with. It is used by the MonitorPrintJobCard component. + */ +Item +{ + // The printer name + property var text: "" + property var tagText: { + switch(text) { + case "Ultimaker 3": + return "UM 3" + case "Ultimaker 3 Extended": + return "UM 3 EXT" + case "Ultimaker S5": + return "UM S5" + default: + return text + } + } + + implicitHeight: 18 * screenScaleFactor // TODO: Theme! + implicitWidth: Math.max(printerNameLabel.contentWidth + 12 * screenScaleFactor, 36 * screenScaleFactor) // TODO: Theme! + + Rectangle { + id: background + anchors.fill: parent + color: printerNameLabel.visible ? "#e4e4f2" : "#eeeeee"// TODO: Theme! + radius: 2 * screenScaleFactor // TODO: Theme! + } + + Label { + id: printerNameLabel + anchors.centerIn: parent + color: "#535369" // TODO: Theme! + text: tagText + font.pointSize: 10 // TODO: Theme! + visible: text !== "" + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml new file mode 100644 index 0000000000..f2dc09de95 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorQueue.qml @@ -0,0 +1,167 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import UM 1.3 as UM +import Cura 1.0 as Cura + +/** + * This component contains the print job queue, extracted from the primary + * MonitorStage.qml file not for reusability but simply to keep it lean and more + * readable. + */ +Item +{ + Label + { + id: queuedLabel + anchors + { + left: queuedPrintJobs.left + top: parent.top + } + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("large") + text: catalog.i18nc("@label", "Queued") + } + + Item + { + id: manageQueueLabel + anchors + { + right: queuedPrintJobs.right + verticalCenter: queuedLabel.verticalCenter + } + height: 18 * screenScaleFactor // TODO: Theme! + width: childrenRect.width + + UM.RecolorImage + { + id: externalLinkIcon + anchors.verticalCenter: manageQueueLabel.verticalCenter + color: UM.Theme.getColor("text_link") + source: UM.Theme.getIcon("external_link") + width: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) + height: 16 * screenScaleFactor // TODO: Theme! (Y U NO USE 18 LIKE ALL OTHER ICONS?!) + } + Label + { + id: manageQueueText + anchors + { + left: externalLinkIcon.right + leftMargin: 6 * screenScaleFactor // TODO: Theme! + verticalCenter: externalLinkIcon.verticalCenter + } + color: UM.Theme.getColor("text_link") + font: UM.Theme.getFont("default") // 12pt, regular + linkColor: UM.Theme.getColor("text_link") + text: catalog.i18nc("@label link to connect manager", "Manage queue in Cura Connect") + renderType: Text.NativeRendering + } + } + + MouseArea + { + anchors.fill: manageQueueLabel + hoverEnabled: true + onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel() + onEntered: + { + manageQueueText.font.underline = true + } + onExited: + { + manageQueueText.font.underline = false + } + } + + Row + { + id: printJobQueueHeadings + anchors + { + left: queuedPrintJobs.left + leftMargin: 6 * screenScaleFactor // TODO: Theme! + top: queuedLabel.bottom + topMargin: 24 * screenScaleFactor // TODO: Theme! + } + spacing: 18 * screenScaleFactor // TODO: Theme! + + Label + { + text: catalog.i18nc("@label", "Print jobs") + color: "#666666" + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.verticalCenter: parent.verticalCenter + width: 284 * screenScaleFactor // TODO: Theme! (Should match column size) + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + + Label + { + text: catalog.i18nc("@label", "Total print time") + color: "#666666" + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.verticalCenter: parent.verticalCenter + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + + Label + { + text: catalog.i18nc("@label", "Waiting for") + color: "#666666" + elide: Text.ElideRight + font: UM.Theme.getFont("medium") // 14pt, regular + anchors.verticalCenter: parent.verticalCenter + width: 216 * screenScaleFactor // TODO: Theme! (Should match column size) + + // FIXED-LINE-HEIGHT: + height: 18 * screenScaleFactor // TODO: Theme! + verticalAlignment: Text.AlignVCenter + } + } + + ScrollView + { + id: queuedPrintJobs + anchors + { + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + top: printJobQueueHeadings.bottom + topMargin: 12 * screenScaleFactor // TODO: Theme! + } + style: UM.Theme.styles.scrollview + width: parent.width + + ListView + { + id: printJobList + anchors.fill: parent + delegate: MonitorPrintJobCard + { + anchors + { + left: parent.left + right: parent.right + } + printJob: modelData + } + model: OutputDevice.receivedPrintJobs ? OutputDevice.queuedPrintJobs : [null,null] + spacing: 6 // TODO: Theme! + } + } +}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml new file mode 100644 index 0000000000..8723e6f46e --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorStage.qml @@ -0,0 +1,94 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import UM 1.3 as UM +import Cura 1.0 as Cura +import QtGraphicalEffects 1.0 + +// This is the root component for the monitor stage. +Component +{ + Item + { + id: monitorFrame + + height: maximumHeight + onVisibleChanged: + { + if (monitorFrame != null && !monitorFrame.visible) + { + OutputDevice.setActiveCameraUrl("") + } + } + width: maximumWidth + + // Enable keyboard navigation. NOTE: This is done here so that we can also potentially + // forward to the queue items in the future. (Deleting selected print job, etc.) + Keys.forwardTo: carousel + Component.onCompleted: forceActiveFocus() + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + LinearGradient + { + anchors.fill: parent + gradient: Gradient + { + GradientStop + { + position: 0.0 + color: "#f6f6f6" // TODO: Theme! + } + GradientStop + { + position: 1.0 + color: "#ffffff" // TODO: Theme! + } + } + } + + Item + { + id: printers + anchors + { + top: parent.top + topMargin: 48 * screenScaleFactor // TODO: Theme! + } + width: parent.width + height: 264 * screenScaleFactor // TODO: Theme! + MonitorCarousel + { + id: carousel + printers: OutputDevice.receivedPrintJobs ? OutputDevice.printers : [null] + } + } + + MonitorQueue + { + id: queue + width: Math.min(834 * screenScaleFactor, maximumWidth) + anchors + { + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + top: printers.bottom + topMargin: 48 * screenScaleFactor // TODO: Theme! + } + } + + PrinterVideoStream + { + anchors.fill: parent + cameraUrl: OutputDevice.activeCameraUrl + visible: OutputDevice.activeCameraUrl != "" + } + } +} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml deleted file mode 100644 index 7bcd9ce6e4..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import UM 1.2 as UM - -Item { - id: extruderInfo; - property var printCoreConfiguration: null; - height: childrenRect.height; - width: Math.round(parent.width / 2); - - // Extruder circle - Item { - id: extruderCircle; - height: UM.Theme.getSize("monitor_extruder_circle").height; - width: UM.Theme.getSize("monitor_extruder_circle").width; - - // Loading skeleton - Rectangle { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_skeleton_fill"); - radius: Math.round(width / 2); - visible: !printCoreConfiguration; - } - - // Actual content - Rectangle { - anchors.fill: parent; - border.width: UM.Theme.getSize("monitor_thick_lining").width; - border.color: UM.Theme.getColor("monitor_lining_heavy"); - color: "transparent"; - opacity: { - if (printCoreConfiguration == null || printCoreConfiguration.activeMaterial == null || printCoreConfiguration.hotendID == null) { - return 0.5; - } - return 1; - } - radius: Math.round(width / 2); - visible: printCoreConfiguration; - - Label { - anchors.centerIn: parent; - color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("default_bold"); - text: printCoreConfiguration ? printCoreConfiguration.position + 1 : 0; - } - } - } - - // Print core and material labels - Item { - id: materialLabel - anchors { - left: extruderCircle.right; - leftMargin: UM.Theme.getSize("default_margin").width; - right: parent.right; - top: parent.top; - } - height: UM.Theme.getSize("monitor_text_line").height; - - // Loading skeleton - Rectangle { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_skeleton_fill"); - visible: !extruderInfo.printCoreConfiguration; - } - - // Actual content - Label { - anchors.fill: parent; - elide: Text.ElideRight; - color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("default"); - text: { - if (printCoreConfiguration && printCoreConfiguration.activeMaterial != undefined) { - return printCoreConfiguration.activeMaterial.name; - } - return ""; - } - visible: extruderInfo.printCoreConfiguration; - } - } - - Item { - id: printCoreLabel; - anchors { - left: extruderCircle.right; - leftMargin: UM.Theme.getSize("default_margin").width; - right: parent.right; - top: materialLabel.bottom; - topMargin: Math.floor(UM.Theme.getSize("default_margin").height/4); - } - height: UM.Theme.getSize("monitor_text_line").height; - - // Loading skeleton - Rectangle { - color: UM.Theme.getColor("monitor_skeleton_fill"); - height: parent.height; - visible: !extruderInfo.printCoreConfiguration; - width: Math.round(parent.width / 3); - } - - // Actual content - Label { - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default"); - opacity: 0.6; - text: { - if (printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) { - return printCoreConfiguration.hotendID; - } - return ""; - } - visible: extruderInfo.printCoreConfiguration; - } - } -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml index 11bc913d06..5c5c892dad 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml @@ -13,6 +13,7 @@ Item { property var printJob: null; property var started: isStarted(printJob); property var assigned: isAssigned(printJob); + property var enabled: true Button { id: button; @@ -25,14 +26,14 @@ Item { } contentItem: Label { color: UM.Theme.getColor("monitor_context_menu_dots"); - font.pixelSize: 25 * screenScaleFactor; + font.pixelSize: 32 * screenScaleFactor; horizontalAlignment: Text.AlignHCenter; text: button.text; verticalAlignment: Text.AlignVCenter; } height: width; - hoverEnabled: true; - onClicked: parent.switchPopupState(); + hoverEnabled: base.enabled + onClicked: base.enabled ? parent.switchPopupState() : {} text: "\u22EE"; //Unicode; Three stacked points. visible: { if (!printJob) { @@ -41,7 +42,7 @@ Item { var states = ["queued", "sent_to_printer", "pre_print", "printing", "pausing", "paused", "resuming"]; return states.indexOf(printJob.state) !== -1; } - width: 35 * screenScaleFactor; // TODO: Theme! + width: 36 * screenScaleFactor; // TODO: Theme! } Popup { @@ -182,7 +183,7 @@ Item { abortConfirmationDialog.visible = true; popup.close(); } - text: printJob.state == "aborting" ? catalog.i18nc("@label", "Aborting...") : catalog.i18nc("@label", "Abort"); + text: printJob && printJob.state == "aborting" ? catalog.i18nc("@label", "Aborting...") : catalog.i18nc("@label", "Abort"); visible: { if (!printJob) { return false; diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml deleted file mode 100644 index a611cb4ff6..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml +++ /dev/null @@ -1,505 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Dialogs 1.1 -import QtQuick.Controls 2.0 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.0 -import QtQuick.Layouts 1.1 -import QtQuick.Dialogs 1.1 -import UM 1.3 as UM - -Item { - id: root; - property var shadowRadius: UM.Theme.getSize("monitor_shadow_radius").width; - property var shadowOffset: 2 * screenScaleFactor; - property var debug: false; - property var printJob: null; - width: parent.width; // Bubbles downward - height: childrenRect.height + shadowRadius * 2; // Bubbles upward - - UM.I18nCatalog { - id: catalog; - name: "cura"; - } - - // The actual card (white block) - Rectangle { - // 5px margin, but shifted 2px vertically because of the shadow - anchors { - bottomMargin: root.shadowRadius + root.shadowOffset; - leftMargin: root.shadowRadius; - rightMargin: root.shadowRadius; - topMargin: root.shadowRadius - root.shadowOffset; - } - color: UM.Theme.getColor("monitor_card_background"); - height: childrenRect.height; - layer.enabled: true - layer.effect: DropShadow { - radius: root.shadowRadius - verticalOffset: 2 * screenScaleFactor - color: "#3F000000" // 25% shadow - } - width: parent.width - shadowRadius * 2; - - Column { - height: childrenRect.height; - width: parent.width; - - // Main content - Item { - id: mainContent; - height: 200 * screenScaleFactor; // TODO: Theme! - width: parent.width; - - // Left content - Item { - anchors { - bottom: parent.bottom; - left: parent.left; - margins: UM.Theme.getSize("wide_margin").width; - right: parent.horizontalCenter; - top: parent.top; - } - - Item { - id: printJobName; - width: parent.width; - height: UM.Theme.getSize("monitor_text_line").height; - - Rectangle { - color: UM.Theme.getColor("monitor_skeleton_fill"); - height: parent.height; - visible: !printJob; - width: Math.round(parent.width / 3); - } - Label { - anchors.fill: parent; - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default_bold"); - text: printJob && printJob.name ? printJob.name : ""; // Supress QML warnings - visible: printJob; - } - } - - Item { - id: printJobOwnerName; - anchors { - top: printJobName.bottom; - topMargin: Math.floor(UM.Theme.getSize("default_margin").height / 2); - } - height: UM.Theme.getSize("monitor_text_line").height; - width: parent.width; - - Rectangle { - color: UM.Theme.getColor("monitor_skeleton_fill"); - height: parent.height; - visible: !printJob; - width: Math.round(parent.width / 2); - } - Label { - anchors.fill: parent; - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default"); - text: printJob ? printJob.owner : ""; // Supress QML warnings - visible: printJob; - } - } - - Item { - id: printJobPreview; - property var useUltibot: false; - anchors { - bottom: parent.bottom; - horizontalCenter: parent.horizontalCenter; - top: printJobOwnerName.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - } - width: height; - - // Skeleton - Rectangle { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_skeleton_fill"); - radius: UM.Theme.getSize("default_margin").width; - visible: !printJob; - } - - // Actual content - Image { - id: previewImage; - anchors.fill: parent; - opacity: printJob && printJob.state == "error" ? 0.5 : 1.0; - source: printJob ? printJob.previewImageUrl : ""; - visible: printJob; - } - - UM.RecolorImage { - id: ultiBotImage; - - anchors.centerIn: printJobPreview; - color: UM.Theme.getColor("monitor_placeholder_image"); - height: printJobPreview.height; - source: "../svg/ultibot.svg"; - sourceSize { - height: height; - width: width; - } - /* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or - not in order to determine if we show the placeholder (ultibot) image instead. */ - visible: printJob && previewImage.status == Image.Error; - width: printJobPreview.width; - } - - UM.RecolorImage { - id: statusImage; - anchors.centerIn: printJobPreview; - color: UM.Theme.getColor("monitor_image_overlay"); - height: 0.5 * printJobPreview.height; - source: printJob && printJob.state == "error" ? "../svg/aborted-icon.svg" : ""; - sourceSize { - height: height; - width: width; - } - visible: source != ""; - width: 0.5 * printJobPreview.width; - } - } - - Label { - id: totalTimeLabel; - anchors { - bottom: parent.bottom; - right: parent.right; - } - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default"); - text: printJob ? OutputDevice.formatDuration(printJob.timeTotal) : ""; - } - } - - // Divider - Rectangle { - anchors { - horizontalCenter: parent.horizontalCenter; - verticalCenter: parent.verticalCenter; - } - color: !printJob ? UM.Theme.getColor("monitor_skeleton_fill") : UM.Theme.getColor("monitor_lining_light"); - height: parent.height - 2 * UM.Theme.getSize("default_margin").height; - width: UM.Theme.getSize("default_lining").width; - } - - // Right content - Item { - anchors { - bottom: parent.bottom; - left: parent.horizontalCenter; - margins: UM.Theme.getSize("wide_margin").width; - right: parent.right; - top: parent.top; - } - - Item { - id: targetPrinterLabel; - height: UM.Theme.getSize("monitor_text_line").height; - width: parent.width; - - Rectangle { - visible: !printJob; - color: UM.Theme.getColor("monitor_skeleton_fill"); - anchors.fill: parent; - } - - Label { - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default_bold"); - text: { - if (printJob !== null) { - if (printJob.assignedPrinter == null) { - if (printJob.state == "error") { - return catalog.i18nc("@label", "Waiting for: Unavailable printer"); - } - return catalog.i18nc("@label", "Waiting for: First available"); - } else { - return catalog.i18nc("@label", "Waiting for: ") + printJob.assignedPrinter.name; - } - } - return ""; - } - visible: printJob; - } - } - - PrinterInfoBlock { - anchors.bottom: parent.bottom; - printer: root.printJon && root.printJob.assignedPrinter; - printJob: root.printJob; - } - } - - PrintJobContextMenu { - id: contextButton; - anchors { - right: mainContent.right; - rightMargin: UM.Theme.getSize("default_margin").width * 3 + root.shadowRadius; - top: mainContent.top; - topMargin: UM.Theme.getSize("default_margin").height; - } - printJob: root.printJob; - visible: root.printJob; - } - } - - Item { - id: configChangesBox; - height: childrenRect.height; - visible: printJob && printJob.configurationChanges.length !== 0; - width: parent.width; - - // Config change toggle - Rectangle { - id: configChangeToggle; - color: { - if (configChangeToggleArea.containsMouse) { - return UM.Theme.getColor("viewport_background"); // TODO: Theme! - } else { - return "transparent"; - } - } - width: parent.width; - height: UM.Theme.getSize("default_margin").height * 4; // TODO: Theme! - anchors { - left: parent.left; - right: parent.right; - top: parent.top; - } - - Rectangle { - color: !printJob ? UM.Theme.getColor("monitor_skeleton_fill") : UM.Theme.getColor("monitor_lining_light"); - height: UM.Theme.getSize("default_lining").height; - width: parent.width; - } - - UM.RecolorImage { - anchors { - right: configChangeToggleLabel.left; - rightMargin: UM.Theme.getSize("default_margin").width; - verticalCenter: parent.verticalCenter; - } - color: UM.Theme.getColor("text"); - height: 23 * screenScaleFactor; // TODO: Theme! - source: "../svg/warning-icon.svg"; - sourceSize { - height: height; - width: width; - } - width: 23 * screenScaleFactor; // TODO: Theme! - } - - Label { - id: configChangeToggleLabel; - anchors { - horizontalCenter: parent.horizontalCenter; - verticalCenter: parent.verticalCenter; - } - color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("default"); - text: catalog.i18nc("@label", "Configuration change"); - } - - UM.RecolorImage { - anchors { - left: configChangeToggleLabel.right; - leftMargin: UM.Theme.getSize("default_margin").width; - verticalCenter: parent.verticalCenter; - } - color: UM.Theme.getColor("text"); - height: 15 * screenScaleFactor; // TODO: Theme! - source: { - if (configChangeDetails.visible) { - return UM.Theme.getIcon("arrow_top"); - } else { - return UM.Theme.getIcon("arrow_bottom"); - } - } - sourceSize { - width: width; - height: height; - } - width: 15 * screenScaleFactor; // TODO: Theme! - } - - MouseArea { - id: configChangeToggleArea; - anchors.fill: parent; - hoverEnabled: true; - onClicked: { - configChangeDetails.visible = !configChangeDetails.visible; - } - } - } - - // Config change details - Item { - id: configChangeDetails; - anchors.top: configChangeToggle.bottom; - Behavior on height { NumberAnimation { duration: 100 } } - // In case of really massive multi-line configuration changes - height: visible ? Math.max(UM.Theme.getSize("monitor_config_override_box").height, childrenRect.height) : 0; - visible: false; - width: parent.width; - - Item { - anchors { - bottomMargin: UM.Theme.getSize("wide_margin").height; - fill: parent; - leftMargin: UM.Theme.getSize("wide_margin").height * 4; - rightMargin: UM.Theme.getSize("wide_margin").height * 4; - topMargin: UM.Theme.getSize("wide_margin").height; - } - clip: true; - - Label { - anchors.fill: parent; - elide: Text.ElideRight; - color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("default"); - text: { - if (!printJob || printJob.configurationChanges.length === 0) { - return ""; - } - var topLine; - if (materialsAreKnown(printJob)) { - topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(printJob.assignedPrinter.name); - } else { - topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printJob.assignedPrinter.name); - } - var result = "<p>" + topLine +"</p>"; - for (var i = 0; i < printJob.configurationChanges.length; i++) { - var change = printJob.configurationChanges[i]; - var text; - switch (change.typeOfChange) { - case "material_change": - text = catalog.i18nc("@label", "Change material %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName); - break; - case "material_insert": - text = catalog.i18nc("@label", "Load %3 as material %1 (This cannot be overridden).").arg(change.index + 1).arg(change.targetName); - break; - case "print_core_change": - text = catalog.i18nc("@label", "Change print core %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName); - break; - case "buildplate_change": - text = catalog.i18nc("@label", "Change build plate to %1 (This cannot be overridden).").arg(formatBuildPlateType(change.target_name)); - break; - default: - text = ""; - } - result += "<p><b>" + text + "</b></p>"; - } - return result; - } - wrapMode: Text.WordWrap; - } - - Button { - anchors { - bottom: parent.bottom; - left: parent.left; - } - background: Rectangle { - border { - color: UM.Theme.getColor("monitor_lining_heavy"); - width: UM.Theme.getSize("default_lining").width; - } - color: parent.hovered ? UM.Theme.getColor("monitor_card_background_inactive") : UM.Theme.getColor("monitor_card_background"); - implicitHeight: UM.Theme.getSize("default_margin").height * 3; - implicitWidth: UM.Theme.getSize("default_margin").height * 8; - } - contentItem: Label { - color: UM.Theme.getColor("text"); - font: UM.Theme.getFont("medium"); - horizontalAlignment: Text.AlignHCenter; - text: parent.text; - verticalAlignment: Text.AlignVCenter; - } - onClicked: { - overrideConfirmationDialog.visible = true; - } - text: catalog.i18nc("@label", "Override"); - visible: { - if (printJob && printJob.configurationChanges) { - var length = printJob.configurationChanges.length; - for (var i = 0; i < length; i++) { - var typeOfChange = printJob.configurationChanges[i].typeOfChange; - if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") { - return false; - } - } - } - return true; - } - } - } - } - - MessageDialog { - id: overrideConfirmationDialog; - Component.onCompleted: visible = false; - icon: StandardIcon.Warning; - onYes: OutputDevice.forceSendJob(printJob.key); - standardButtons: StandardButton.Yes | StandardButton.No; - text: { - if (!printJob) { - return ""; - } - var printJobName = formatPrintJobName(printJob.name); - var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName); - return confirmText; - } - title: catalog.i18nc("@window:title", "Override configuration configuration and start print"); - } - } - } - } - // Utils - function formatPrintJobName(name) { - var extensions = [ ".gz", ".gcode", ".ufp" ]; - for (var i = 0; i < extensions.length; i++) { - var extension = extensions[i]; - if (name.slice(-extension.length) === extension) { - name = name.substring(0, name.length - extension.length); - } - } - return name; - } - function materialsAreKnown(job) { - var conf0 = job.configuration[0]; - if (conf0 && !conf0.material.material) { - return false; - } - var conf1 = job.configuration[1]; - if (conf1 && !conf1.material.material) { - return false; - } - return true; - } - function formatBuildPlateType(buildPlateType) { - var translationText = ""; - switch (buildPlateType) { - case "glass": - translationText = catalog.i18nc("@label", "Glass"); - break; - case "aluminum": - translationText = catalog.i18nc("@label", "Aluminum"); - break; - default: - translationText = null; - } - return translationText; - } -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml deleted file mode 100644 index b1a73255f4..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Dialogs 1.1 -import QtQuick.Controls 2.0 -import QtQuick.Controls.Styles 1.3 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 1.4 as LegacyControls -import UM 1.3 as UM - -// Includes print job name, owner, and preview - -Item { - property var job: null; - property var useUltibot: false; - height: 100 * screenScaleFactor; - width: height; - - // Skeleton - Rectangle { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_skeleton_fill"); - radius: UM.Theme.getSize("default_margin").width; - visible: !job; - } - - // Actual content - Image { - id: previewImage; - visible: job; - source: job ? job.previewImageUrl : ""; - opacity: { - if (job == null) { - return 1.0; - } - var states = ["wait_cleanup", "wait_user_action", "error", "paused"]; - if (states.indexOf(job.state) !== -1) { - return 0.5; - } - return 1.0; - } - anchors.fill: parent; - } - - UM.RecolorImage { - id: ultibotImage; - anchors.centerIn: parent; - color: UM.Theme.getColor("monitor_placeholder_image"); // TODO: Theme! - height: parent.height; - source: "../svg/ultibot.svg"; - sourceSize { - height: height; - width: width; - } - /* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or - not in order to determine if we show the placeholder (ultibot) image instead. */ - visible: job && previewImage.status == Image.Error; - width: parent.width; - } - - UM.RecolorImage { - id: statusImage; - anchors.centerIn: parent; - color: "black"; // TODO: Theme! - height: Math.round(0.5 * parent.height); - source: job && job.state == "error" ? "../svg/aborted-icon.svg" : ""; - sourceSize { - height: height; - width: width; - } - visible: source != ""; - width: Math.round(0.5 * parent.width); - } -}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml deleted file mode 100644 index f9f7b5ae87..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Controls 2.0 -import UM 1.3 as UM - -Column { - property var job: null; - height: childrenRect.height; - spacing: Math.floor( UM.Theme.getSize("default_margin").height / 2); // TODO: Use explicit theme size - width: parent.width; - - Item { - id: jobName; - height: UM.Theme.getSize("monitor_text_line").height; - width: parent.width; - - // Skeleton loading - Rectangle { - color: UM.Theme.getColor("monitor_skeleton_fill"); - height: parent.height; - visible: !job; - width: Math.round(parent.width / 3); - } - - Label { - anchors.fill: parent; - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default_bold"); - text: job && job.name ? job.name : ""; - visible: job; - } - } - - Item { - id: ownerName; - height: UM.Theme.getSize("monitor_text_line").height; - width: parent.width; - - // Skeleton loading - Rectangle { - color: UM.Theme.getColor("monitor_skeleton_fill"); - height: parent.height; - visible: !job; - width: Math.round(parent.width / 2); - } - - Label { - anchors.fill: parent; - color: UM.Theme.getColor("text") - elide: Text.ElideRight; - font: UM.Theme.getFont("default"); - text: job ? job.owner : ""; - visible: job; - } - } -}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml deleted file mode 100644 index 24beaf70fe..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml +++ /dev/null @@ -1,241 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Dialogs 1.1 -import QtQuick.Controls 2.0 -import QtQuick.Controls.Styles 1.3 -import QtGraphicalEffects 1.0 -import UM 1.3 as UM - -Item { - id: root; - property var shadowRadius: UM.Theme.getSize("monitor_shadow_radius").width; - property var shadowOffset: UM.Theme.getSize("monitor_shadow_offset").width; - property var printer: null; - property var collapsed: true; - height: childrenRect.height + shadowRadius * 2; // Bubbles upward - width: parent.width; // Bubbles downward - - // The actual card (white block) - Rectangle { - // 5px margin, but shifted 2px vertically because of the shadow - anchors { - bottomMargin: root.shadowRadius + root.shadowOffset; - leftMargin: root.shadowRadius; - rightMargin: root.shadowRadius; - topMargin: root.shadowRadius - root.shadowOffset; - } - color: { - if (!printer) { - return UM.Theme.getColor("monitor_card_background_inactive"); - } - if (printer.state == "disabled") { - return UM.Theme.getColor("monitor_card_background_inactive"); - } else { - return UM.Theme.getColor("monitor_card_background"); - } - } - height: childrenRect.height; - layer.effect: DropShadow { - radius: root.shadowRadius; - verticalOffset: root.shadowOffset; - color: "#3F000000"; // 25% shadow - } - layer.enabled: true - width: parent.width - 2 * shadowRadius; - - Column { - id: cardContents; - height: childrenRect.height; - width: parent.width; - - // Main card - Item { - id: mainCard; - anchors { - left: parent.left; - leftMargin: UM.Theme.getSize("default_margin").width; - right: parent.right; - rightMargin: UM.Theme.getSize("default_margin").width; - } - height: 60 * screenScaleFactor + 2 * UM.Theme.getSize("default_margin").height; - width: parent.width; - - // Machine icon - Item { - id: machineIcon; - anchors.verticalCenter: parent.verticalCenter; - height: parent.height - 2 * UM.Theme.getSize("default_margin").width; - width: height; - - // Skeleton - Rectangle { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_skeleton_fill_dark"); - radius: UM.Theme.getSize("default_margin").width; - visible: !printer; - } - - // Content - UM.RecolorImage { - anchors.centerIn: parent; - color: { - if (printer && printer.activePrintJob != undefined) { - return UM.Theme.getColor("monitor_printer_icon"); - } - return UM.Theme.getColor("monitor_printer_icon_inactive"); - } - height: sourceSize.height; - source: { - if (!printer) { - return ""; - } - switch(printer.type) { - case "Ultimaker 3": - return "../svg/UM3-icon.svg"; - case "Ultimaker 3 Extended": - return "../svg/UM3x-icon.svg"; - case "Ultimaker S5": - return "../svg/UMs5-icon.svg"; - } - } - visible: printer; - width: sourceSize.width; - } - } - - // Printer info - Item { - id: printerInfo; - anchors { - left: machineIcon.right; - leftMargin: UM.Theme.getSize("wide_margin").width; - right: collapseIcon.left; - verticalCenter: machineIcon.verticalCenter; - } - height: childrenRect.height; - - // Machine name - Item { - id: machineNameLabel; - height: UM.Theme.getSize("monitor_text_line").height; - width: { - var percent = printer ? 0.75 : 0.3; - return Math.round(parent.width * percent); - } - - // Skeleton - Rectangle { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_skeleton_fill_dark"); - visible: !printer; - } - - // Actual content - Label { - anchors.fill: parent; - color: UM.Theme.getColor("text"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default_bold"); - text: printer ? printer.name : ""; - visible: printer; - width: parent.width; - } - } - - // Job name - Item { - id: activeJobLabel; - anchors { - top: machineNameLabel.bottom; - topMargin: Math.round(UM.Theme.getSize("default_margin").height / 2); - } - height: UM.Theme.getSize("monitor_text_line").height; - width: Math.round(parent.width * 0.75); - - // Skeleton - Rectangle { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_skeleton_fill_dark"); - visible: !printer; - } - - // Actual content - Label { - anchors.fill: parent; - color: UM.Theme.getColor("monitor_text_inactive"); - elide: Text.ElideRight; - font: UM.Theme.getFont("default"); - text: { - if (!printer) { - return ""; - } - if (printer.state == "disabled") { - return catalog.i18nc("@label", "Not available"); - } else if (printer.state == "unreachable") { - return catalog.i18nc("@label", "Unreachable"); - } - if (printer.activePrintJob != null && printer.activePrintJob.name) { - return printer.activePrintJob.name; - } - return catalog.i18nc("@label", "Available"); - } - visible: printer; - } - } - } - - // Collapse icon - UM.RecolorImage { - id: collapseIcon; - anchors { - right: parent.right; - rightMargin: UM.Theme.getSize("default_margin").width; - verticalCenter: parent.verticalCenter; - } - color: UM.Theme.getColor("text"); - height: 15 * screenScaleFactor; // TODO: Theme! - source: root.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom"); - sourceSize { - height: height; - width: width; - } - visible: printer; - width: 15 * screenScaleFactor; // TODO: Theme! - } - - MouseArea { - anchors.fill: parent; - enabled: printer; - onClicked: { - if (model && root.collapsed) { - printerList.currentIndex = model.index; - } else { - printerList.currentIndex = -1; - } - } - } - - Connections { - target: printerList; - onCurrentIndexChanged: { - root.collapsed = printerList.currentIndex != model.index; - } - } - } - // Detailed card - PrinterCardDetails { - collapsed: root.collapsed; - printer: root.printer; - visible: root.printer; - } - - // Progress bar - PrinterCardProgressBar { - visible: printer && printer.activePrintJob != null; - width: parent.width; - } - } - } -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml deleted file mode 100644 index 31da388b00..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Dialogs 1.1 -import QtQuick.Controls 2.0 -import QtQuick.Controls.Styles 1.3 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 1.4 as LegacyControls -import UM 1.3 as UM - -Item { - id: root; - property var printer: null; - property var printJob: printer ? printer.activePrintJob : null; - property var collapsed: true; - Behavior on height { NumberAnimation { duration: 100 } } - Behavior on opacity { NumberAnimation { duration: 100 } } - height: collapsed ? 0 : childrenRect.height; - opacity: collapsed ? 0 : 1; - width: parent.width; - - Column { - id: contentColumn; - anchors { - left: parent.left; - leftMargin: UM.Theme.getSize("default_margin").width; - right: parent.right; - rightMargin: UM.Theme.getSize("default_margin").width; - } - height: childrenRect.height + UM.Theme.getSize("default_margin").height; - spacing: UM.Theme.getSize("default_margin").height; - width: parent.width; - - HorizontalLine {} - - PrinterInfoBlock { - printer: root.printer; - printJob: root.printer ? root.printer.activePrintJob : null; - } - - HorizontalLine {} - - Row { - height: childrenRect.height; - visible: root.printJob; - width: parent.width; - - PrintJobTitle { - job: root.printer ? root.printer.activePrintJob : null; - } - PrintJobContextMenu { - id: contextButton; - anchors { - right: parent.right; - rightMargin: UM.Theme.getSize("wide_margin").width; - } - printJob: root.printer ? root.printer.activePrintJob : null; - visible: printJob; - } - } - - PrintJobPreview { - anchors.horizontalCenter: parent.horizontalCenter; - job: root.printer && root.printer.activePrintJob ? root.printer.activePrintJob : null; - visible: root.printJob; - } - - CameraButton { - id: showCameraButton; - iconSource: "../svg/camera-icon.svg"; - visible: root.printer; - } - } -} diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml deleted file mode 100644 index e86c959b8c..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Controls.Styles 1.3 -import QtQuick.Controls 1.4 -import UM 1.3 as UM - -ProgressBar { - property var progress: { - if (!printer || printer.activePrintJob == null) { - return 0; - } - var result = printer.activePrintJob.timeElapsed / printer.activePrintJob.timeTotal; - if (result > 1.0) { - result = 1.0; - } - return result; - } - style: ProgressBarStyle { - property var remainingTime: { - if (!printer || printer.activePrintJob == null) { - return 0; - } - /* Sometimes total minus elapsed is less than 0. Use Math.max() to prevent remaining - time from ever being less than 0. Negative durations cause strange behavior such - as displaying "-1h -1m". */ - return Math.max(printer.activePrintJob.timeTotal - printer.activePrintJob.timeElapsed, 0); - } - property var progressText: { - if (printer === null ) { - return ""; - } - switch (printer.activePrintJob.state) { - case "wait_cleanup": - if (printer.activePrintJob.timeTotal > printer.activePrintJob.timeElapsed) { - return catalog.i18nc("@label:status", "Aborted"); - } - return catalog.i18nc("@label:status", "Finished"); - case "pre_print": - case "sent_to_printer": - return catalog.i18nc("@label:status", "Preparing"); - case "aborted": - return catalog.i18nc("@label:status", "Aborted"); - case "wait_user_action": - return catalog.i18nc("@label:status", "Aborted"); - case "pausing": - return catalog.i18nc("@label:status", "Pausing"); - case "paused": - return OutputDevice.formatDuration( remainingTime ); - case "resuming": - return catalog.i18nc("@label:status", "Resuming"); - case "queued": - return catalog.i18nc("@label:status", "Action required"); - default: - return OutputDevice.formatDuration( remainingTime ); - } - } - background: Rectangle { - color: UM.Theme.getColor("monitor_progress_background"); - implicitHeight: visible ? 24 : 0; - implicitWidth: 100; - } - progress: Rectangle { - id: progressItem; - color: { - if (! printer || !printer.activePrintJob) { - return "black"; - } - var state = printer.activePrintJob.state - var inactiveStates = [ - "pausing", - "paused", - "resuming", - "wait_cleanup" - ]; - if (inactiveStates.indexOf(state) > -1 && remainingTime > 0) { - return UM.Theme.getColor("monitor_progress_fill_inactive"); - } else { - return UM.Theme.getColor("monitor_progress_fill"); - } - } - - Label { - id: progressLabel; - anchors { - left: parent.left; - leftMargin: getTextOffset(); - } - text: progressText; - anchors.verticalCenter: parent.verticalCenter; - color: progressItem.width + progressLabel.width < control.width ? UM.Theme.getColor("text") : UM.Theme.getColor("monitor_progress_fill_text"); - width: contentWidth; - font: UM.Theme.getFont("default"); - } - - function getTextOffset() { - if (progressItem.width + progressLabel.width + 16 < control.width) { - return progressItem.width + UM.Theme.getSize("default_margin").width; - } else { - return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width; - } - } - } - } - value: progress; - width: parent.width; -}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml deleted file mode 100644 index 0a88b053a8..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.4 -import UM 1.2 as UM - -Item { - property alias text: familyNameLabel.text; - property var padding: 3 * screenScaleFactor; // TODO: Theme! - implicitHeight: familyNameLabel.contentHeight + 2 * padding; // Apply the padding to top and bottom. - implicitWidth: Math.max(48 * screenScaleFactor, familyNameLabel.contentWidth + implicitHeight); // The extra height is added to ensure the radius doesn't cut something off. - - Rectangle { - id: background; - anchors { - horizontalCenter: parent.horizontalCenter; - right: parent.right; - } - color: familyNameLabel.text.length < 1 ? UM.Theme.getColor("monitor_skeleton_fill") : UM.Theme.getColor("monitor_pill_background"); - height: parent.height; - radius: 0.5 * height; - width: parent.width; - } - - Label { - id: familyNameLabel; - anchors.centerIn: parent; - color: UM.Theme.getColor("text"); - text: ""; - } -}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml deleted file mode 100644 index 92a8f1dcb3..0000000000 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.3 -import QtQuick.Dialogs 1.1 -import QtQuick.Controls 2.0 -import QtQuick.Controls.Styles 1.3 -import QtGraphicalEffects 1.0 -import QtQuick.Controls 1.4 as LegacyControls -import UM 1.3 as UM - -// Includes printer type pill and extuder configurations - -Item { - id: root; - property var printer: null; - property var printJob: null; - width: parent.width; - height: childrenRect.height; - - // Printer family pills - Row { - id: printerFamilyPills; - anchors { - left: parent.left; - right: parent.right; - } - height: childrenRect.height; - spacing: Math.round(0.5 * UM.Theme.getSize("default_margin").width); - width: parent.width; - - Repeater { - id: compatiblePills; - delegate: PrinterFamilyPill { - text: modelData; - } - model: printJob ? printJob.compatibleMachineFamilies : []; - visible: printJob; - - } - - PrinterFamilyPill { - text: printer ? printer.type : ""; - visible: !compatiblePills.visible && printer; - } - } - - // Extruder info - Row { - id: extrudersInfo; - anchors { - left: parent.left; - right: parent.right; - rightMargin: UM.Theme.getSize("default_margin").width; - top: printerFamilyPills.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - } - height: childrenRect.height; - spacing: UM.Theme.getSize("default_margin").width; - width: parent.width; - - PrintCoreConfiguration { - width: Math.round(parent.width / 2) * screenScaleFactor; - printCoreConfiguration: getExtruderConfig(0); - } - - PrintCoreConfiguration { - width: Math.round(parent.width / 2) * screenScaleFactor; - printCoreConfiguration: getExtruderConfig(1); - } - } - - function getExtruderConfig( i ) { - if (root.printJob) { - // Use more-specific print job if possible - return root.printJob.configuration.extruderConfigurations[i]; - } - if (root.printer) { - return root.printer.printerConfiguration.extruderConfigurations[i]; - } - return null; - } -}
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml index 105143c851..c99ed1688e 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml @@ -13,8 +13,40 @@ Item { property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId; property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null; property bool printerConnected: Cura.MachineManager.printerConnected; - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands; - property bool authenticationRequested: printerConnected && (Cura.MachineManager.printerOutputDevices[0].authenticationState == 2 || Cura.MachineManager.printerOutputDevices[0].authenticationState == 5); // AuthState.AuthenticationRequested or AuthenticationReceived. + property bool printerAcceptsCommands: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + return Cura.MachineManager.printerOutputDevices[0].acceptsCommands + } + return false + } + property bool authenticationRequested: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + var device = Cura.MachineManager.printerOutputDevices[0] + // AuthState.AuthenticationRequested or AuthState.AuthenticationReceived + return device.authenticationState == 2 || device.authenticationState == 5 + } + return false + } + property var materialNames: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + return Cura.MachineManager.printerOutputDevices[0].materialNames + } + return null + } + property var hotendIds: + { + if (printerConnected && Cura.MachineManager.printerOutputDevices[0]) + { + return Cura.MachineManager.printerOutputDevices[0].hotendIds + } + return null + } UM.I18nCatalog { id: catalog; @@ -29,7 +61,7 @@ Item { Button { height: UM.Theme.getSize("save_button_save_to_button").height; onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication(); - style: UM.Theme.styles.sidebar_action_button; + style: UM.Theme.styles.print_setup_action_button; text: catalog.i18nc("@action:button", "Request Access"); tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer"); visible: printerConnected && !printerAcceptsCommands && !authenticationRequested; @@ -38,7 +70,7 @@ Item { Button { height: UM.Theme.getSize("save_button_save_to_button").height; onClicked: connectActionDialog.show(); - style: UM.Theme.styles.sidebar_action_button; + style: UM.Theme.styles.print_setup_action_button; text: catalog.i18nc("@action:button", "Connect"); tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer"); visible: !printerConnected; @@ -58,69 +90,4 @@ Item { source: "DiscoverUM3Action.qml"; } } - - Column { - anchors.fill: parent; - objectName: "networkPrinterConnectionInfo"; - spacing: UM.Theme.getSize("default_margin").width; - visible: isUM3; - - Button { - onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication(); - text: catalog.i18nc("@action:button", "Request Access"); - tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer"); - visible: printerConnected && !printerAcceptsCommands && !authenticationRequested; - } - - Row { - anchors { - left: parent.left; - right: parent.right; - } - height: childrenRect.height; - spacing: UM.Theme.getSize("default_margin").width; - visible: printerConnected; - - Column { - Repeater { - model: Cura.ExtrudersModel { - simpleNames: true; - } - - Label { - text: model.name; - } - } - } - - Column { - Repeater { - id: nozzleColumn; - model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].hotendIds : null; - - Label { - text: nozzleColumn.model[index]; - } - } - } - - Column { - Repeater { - id: materialColumn; - model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].materialNames : null; - - Label { - text: materialColumn.model[index]; - } - } - } - } - - Button { - onClicked: manager.loadConfigurationFromPrinter(); - text: catalog.i18nc("@action:button", "Activate Configuration"); - tooltip: catalog.i18nc("@info:tooltip", "Load the configuration of the printer into Cura"); - visible: false; // printerConnected && !isClusterPrinter() - } - } } diff --git a/plugins/UM3NetworkPrinting/resources/svg/icons/buildplate.svg b/plugins/UM3NetworkPrinting/resources/svg/icons/buildplate.svg new file mode 100644 index 0000000000..bcb278a8ca --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/icons/buildplate.svg @@ -0,0 +1,5 @@ +<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <path d="M18,5 L18,6 L9,10 L0,6 L0,5 L9,1 L18,5 Z M18,8.18863507 L9,12.1886351 L0,8.18863507 L0,7.09431753 L9,11.0943175 L18,7.09431753 L18,8.18863507 Z M18,10.3772701 L9,14.3772701 L0,10.3772701 L0,9.2829526 L9,13.2829526 L18,9.2829526 L18,10.3772701 Z M18,12.5659052 L9,16.5659052 L0,12.5659052 L0,11.4715877 L9,15.4715877 L18,11.4715877 L18,12.5659052 Z" id="Combined-Shape" fill="#D10000" fill-rule="nonzero"></path> + </g> +</svg>
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/icons/camera.svg b/plugins/UM3NetworkPrinting/resources/svg/icons/camera.svg new file mode 100644 index 0000000000..2eaebb812d --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/icons/camera.svg @@ -0,0 +1,5 @@ +<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <path d="M4.298828,0.998047 L7.7,0.998047 L8.7,3 L12,3 L12,10 L0,10 L0,3 L3.3,3 L4.298828,0.998047 Z M6,4 C4.625211,4 3.5,5.1252 3.5,6.5 C3.5,7.8748 4.625211,9 6,9 C7.37479,9 8.5,7.8748 8.5,6.5 C8.5,5.1252 7.37479,4 6,4 Z M6,5 C6.83435,5 7.5,5.6657 7.5,6.5 C7.5,7.3343 6.83435,8 6,8 C5.165651,8 4.5,7.3343 4.5,6.5 C4.5,5.6657 5.165651,5 6,5 Z" id="Combined-Shape" fill="#0A0850" fill-rule="nonzero"></path> + </g> +</svg>
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/resources/svg/icons/extruder.svg b/plugins/UM3NetworkPrinting/resources/svg/icons/extruder.svg new file mode 100644 index 0000000000..235cb432e9 --- /dev/null +++ b/plugins/UM3NetworkPrinting/resources/svg/icons/extruder.svg @@ -0,0 +1,5 @@ +<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <path d="M24,24 L16,32 L8,24 L2,24 C0.8954305,24 1.3527075e-16,23.1045695 0,22 L0,2 C-1.3527075e-16,0.8954305 0.8954305,2.02906125e-16 2,0 L30,0 C31.1045695,-2.02906125e-16 32,0.8954305 32,2 L32,22 C32,23.1045695 31.1045695,24 30,24 L24,24 Z M16,21 C20.418278,21 24,17.418278 24,13 C24,8.581722 20.418278,5 16,5 C11.581722,5 8,8.581722 8,13 C8,17.418278 11.581722,21 16,21 Z" id="Combined-Shape" fill="#D8D8D8" fill-rule="nonzero"></path> + </g> +</svg>
\ No newline at end of file diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py new file mode 100644 index 0000000000..9d6c29c0a4 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py @@ -0,0 +1,166 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +from json import JSONDecodeError +from time import time +from typing import Callable, List, Type, TypeVar, Union, Optional, Tuple, Dict, Any, cast + +from PyQt5.QtCore import QUrl +from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager + +from UM.Logger import Logger +from cura import UltimakerCloudAuthentication +from cura.API import Account +from .ToolPathUploader import ToolPathUploader +from ..Models import BaseModel +from .Models.CloudClusterResponse import CloudClusterResponse +from .Models.CloudError import CloudError +from .Models.CloudClusterStatus import CloudClusterStatus +from .Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from .Models.CloudPrintResponse import CloudPrintResponse +from .Models.CloudPrintJobResponse import CloudPrintJobResponse + + +## The generic type variable used to document the methods below. +CloudApiClientModel = TypeVar("CloudApiClientModel", bound = BaseModel) + + +## The cloud API client is responsible for handling the requests and responses from the cloud. +# Each method should only handle models instead of exposing Any HTTP details. +class CloudApiClient: + + # The cloud URL to use for this remote cluster. + ROOT_PATH = UltimakerCloudAuthentication.CuraCloudAPIRoot + CLUSTER_API_ROOT = "{}/connect/v1".format(ROOT_PATH) + CURA_API_ROOT = "{}/cura/v1".format(ROOT_PATH) + + ## Initializes a new cloud API client. + # \param account: The user's account object + # \param on_error: The callback to be called whenever we receive errors from the server. + def __init__(self, account: Account, on_error: Callable[[List[CloudError]], None]) -> None: + super().__init__() + self._manager = QNetworkAccessManager() + self._account = account + self._on_error = on_error + self._upload = None # type: Optional[ToolPathUploader] + # In order to avoid garbage collection we keep the callbacks in this list. + self._anti_gc_callbacks = [] # type: List[Callable[[], None]] + + ## Gets the account used for the API. + @property + def account(self) -> Account: + return self._account + + ## Retrieves all the clusters for the user that is currently logged in. + # \param on_finished: The function to be called after the result is parsed. + def getClusters(self, on_finished: Callable[[List[CloudClusterResponse]], Any]) -> None: + url = "{}/clusters".format(self.CLUSTER_API_ROOT) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, CloudClusterResponse) + + ## Retrieves the status of the given cluster. + # \param cluster_id: The ID of the cluster. + # \param on_finished: The function to be called after the result is parsed. + def getClusterStatus(self, cluster_id: str, on_finished: Callable[[CloudClusterStatus], Any]) -> None: + url = "{}/clusters/{}/status".format(self.CLUSTER_API_ROOT, cluster_id) + reply = self._manager.get(self._createEmptyRequest(url)) + self._addCallback(reply, on_finished, CloudClusterStatus) + + ## Requests the cloud to register the upload of a print job mesh. + # \param request: The request object. + # \param on_finished: The function to be called after the result is parsed. + def requestUpload(self, request: CloudPrintJobUploadRequest, on_finished: Callable[[CloudPrintJobResponse], Any] + ) -> None: + url = "{}/jobs/upload".format(self.CURA_API_ROOT) + body = json.dumps({"data": request.toDict()}) + reply = self._manager.put(self._createEmptyRequest(url), body.encode()) + self._addCallback(reply, on_finished, CloudPrintJobResponse) + + ## Uploads a print job tool path to the cloud. + # \param print_job: The object received after requesting an upload with `self.requestUpload`. + # \param mesh: The tool path data to be uploaded. + # \param on_finished: The function to be called after the upload is successful. + # \param on_progress: A function to be called during upload progress. It receives a percentage (0-100). + # \param on_error: A function to be called if the upload fails. + def uploadToolPath(self, print_job: CloudPrintJobResponse, mesh: bytes, on_finished: Callable[[], Any], + on_progress: Callable[[int], Any], on_error: Callable[[], Any]): + self._upload = ToolPathUploader(self._manager, print_job, mesh, on_finished, on_progress, on_error) + self._upload.start() + + # Requests a cluster to print the given print job. + # \param cluster_id: The ID of the cluster. + # \param job_id: The ID of the print job. + # \param on_finished: The function to be called after the result is parsed. + def requestPrint(self, cluster_id: str, job_id: str, on_finished: Callable[[CloudPrintResponse], Any]) -> None: + url = "{}/clusters/{}/print/{}".format(self.CLUSTER_API_ROOT, cluster_id, job_id) + reply = self._manager.post(self._createEmptyRequest(url), b"") + self._addCallback(reply, on_finished, CloudPrintResponse) + + ## We override _createEmptyRequest in order to add the user credentials. + # \param url: The URL to request + # \param content_type: The type of the body contents. + def _createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json") -> QNetworkRequest: + request = QNetworkRequest(QUrl(path)) + if content_type: + request.setHeader(QNetworkRequest.ContentTypeHeader, content_type) + if self._account.isLoggedIn: + request.setRawHeader(b"Authorization", "Bearer {}".format(self._account.accessToken).encode()) + return request + + ## Parses the given JSON network reply into a status code and a dictionary, handling unexpected errors as well. + # \param reply: The reply from the server. + # \return A tuple with a status code and a dictionary. + @staticmethod + def _parseReply(reply: QNetworkReply) -> Tuple[int, Dict[str, Any]]: + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) + try: + response = bytes(reply.readAll()).decode() + return status_code, json.loads(response) + except (UnicodeDecodeError, JSONDecodeError, ValueError) as err: + error = CloudError(code=type(err).__name__, title=str(err), http_code=str(status_code), + id=str(time()), http_status="500") + Logger.logException("e", "Could not parse the stardust response: %s", error) + return status_code, {"errors": [error.toDict()]} + + ## Parses the given models and calls the correct callback depending on the result. + # \param response: The response from the server, after being converted to a dict. + # \param on_finished: The callback in case the response is successful. + # \param model_class: The type of the model to convert the response to. It may either be a single record or a list. + def _parseModels(self, response: Dict[str, Any], + on_finished: Union[Callable[[CloudApiClientModel], Any], + Callable[[List[CloudApiClientModel]], Any]], + model_class: Type[CloudApiClientModel]) -> None: + if "data" in response: + data = response["data"] + if isinstance(data, list): + results = [model_class(**c) for c in data] # type: List[CloudApiClientModel] + on_finished_list = cast(Callable[[List[CloudApiClientModel]], Any], on_finished) + on_finished_list(results) + else: + result = model_class(**data) # type: CloudApiClientModel + on_finished_item = cast(Callable[[CloudApiClientModel], Any], on_finished) + on_finished_item(result) + elif "errors" in response: + self._on_error([CloudError(**error) for error in response["errors"]]) + else: + Logger.log("e", "Cannot find data or errors in the cloud response: %s", response) + + ## Creates a callback function so that it includes the parsing of the response into the correct model. + # The callback is added to the 'finished' signal of the reply. + # \param reply: The reply that should be listened to. + # \param on_finished: The callback in case the response is successful. Depending on the endpoint it will be either + # a list or a single item. + # \param model: The type of the model to convert the response to. + def _addCallback(self, + reply: QNetworkReply, + on_finished: Union[Callable[[CloudApiClientModel], Any], + Callable[[List[CloudApiClientModel]], Any]], + model: Type[CloudApiClientModel], + ) -> None: + def parse() -> None: + status_code, response = self._parseReply(reply) + self._anti_gc_callbacks.remove(parse) + return self._parseModels(response, on_finished, model) + + self._anti_gc_callbacks.append(parse) + reply.finished.connect(parse) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py new file mode 100644 index 0000000000..bd56ef3185 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputController.py @@ -0,0 +1,22 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController + +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from .CloudOutputDevice import CloudOutputDevice + + +class CloudOutputController(PrinterOutputController): + def __init__(self, output_device: "CloudOutputDevice") -> None: + super().__init__(output_device) + + # The cloud connection only supports fetching the printer and queue status and adding a job to the queue. + # To let the UI know this we mark all features below as False. + self.can_pause = False + self.can_abort = False + self.can_pre_heat_bed = False + self.can_pre_heat_hotends = False + self.can_send_raw_gcode = False + self.can_control_manually = False + self.can_update_firmware = False diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py new file mode 100644 index 0000000000..33968beb6d --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py @@ -0,0 +1,424 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import os + +from time import time +from typing import Dict, List, Optional, Set, cast + +from PyQt5.QtCore import QObject, QUrl, pyqtProperty, pyqtSignal, pyqtSlot + +from UM import i18nCatalog +from UM.Backend.Backend import BackendState +from UM.FileHandler.FileHandler import FileHandler +from UM.Logger import Logger +from UM.Message import Message +from UM.Qt.Duration import Duration, DurationFormat +from UM.Scene.SceneNode import SceneNode +from cura.CuraApplication import CuraApplication +from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState, NetworkedPrinterOutputDevice +from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel +from cura.PrinterOutputDevice import ConnectionType + +from .CloudOutputController import CloudOutputController +from ..MeshFormatHandler import MeshFormatHandler +from ..UM3PrintJobOutputModel import UM3PrintJobOutputModel +from .CloudProgressMessage import CloudProgressMessage +from .CloudApiClient import CloudApiClient +from .Models.CloudClusterResponse import CloudClusterResponse +from .Models.CloudClusterStatus import CloudClusterStatus +from .Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from .Models.CloudPrintResponse import CloudPrintResponse +from .Models.CloudPrintJobResponse import CloudPrintJobResponse +from .Models.CloudClusterPrinterStatus import CloudClusterPrinterStatus +from .Models.CloudClusterPrintJobStatus import CloudClusterPrintJobStatus +from .Utils import findChanges, formatDateCompleted, formatTimeCompleted + + +I18N_CATALOG = i18nCatalog("cura") + + +## The cloud output device is a network output device that works remotely but has limited functionality. +# Currently it only supports viewing the printer and print job status and adding a new job to the queue. +# As such, those methods have been implemented here. +# Note that this device represents a single remote cluster, not a list of multiple clusters. +class CloudOutputDevice(NetworkedPrinterOutputDevice): + + # The interval with which the remote clusters are checked + CHECK_CLUSTER_INTERVAL = 10.0 # seconds + + # Signal triggered when the print jobs in the queue were changed. + printJobsChanged = pyqtSignal() + + # Signal triggered when the selected printer in the UI should be changed. + activePrinterChanged = pyqtSignal() + + # Notify can only use signals that are defined by the class that they are in, not inherited ones. + # Therefore we create a private signal used to trigger the printersChanged signal. + _clusterPrintersChanged = pyqtSignal() + + ## Creates a new cloud output device + # \param api_client: The client that will run the API calls + # \param cluster: The device response received from the cloud API. + # \param parent: The optional parent of this output device. + def __init__(self, api_client: CloudApiClient, cluster: CloudClusterResponse, parent: QObject = None) -> None: + super().__init__(device_id = cluster.cluster_id, address = "", + connection_type = ConnectionType.CloudConnection, properties = {}, parent = parent) + self._api = api_client + self._cluster = cluster + + self._setInterfaceElements() + + self._account = api_client.account + + # We use the Cura Connect monitor tab to get most functionality right away. + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), + "../../resources/qml/MonitorStage.qml") + + # Trigger the printersChanged signal when the private signal is triggered. + self.printersChanged.connect(self._clusterPrintersChanged) + + # We keep track of which printer is visible in the monitor page. + self._active_printer = None # type: Optional[PrinterOutputModel] + + # Properties to populate later on with received cloud data. + self._print_jobs = [] # type: List[UM3PrintJobOutputModel] + self._number_of_extruders = 2 # All networked printers are dual-extrusion Ultimaker machines. + + # We only allow a single upload at a time. + self._progress = CloudProgressMessage() + + # Keep server string of the last generated time to avoid updating models more than once for the same response + self._received_printers = None # type: Optional[List[CloudClusterPrinterStatus]] + self._received_print_jobs = None # type: Optional[List[CloudClusterPrintJobStatus]] + + # A set of the user's job IDs that have finished + self._finished_jobs = set() # type: Set[str] + + # Reference to the uploaded print job / mesh + self._tool_path = None # type: Optional[bytes] + self._uploaded_print_job = None # type: Optional[CloudPrintJobResponse] + + ## Connects this device. + def connect(self) -> None: + if self.isConnected(): + return + super().connect() + Logger.log("i", "Connected to cluster %s", self.key) + CuraApplication.getInstance().getBackend().backendStateChange.connect(self._onBackendStateChange) + + ## Disconnects the device + def disconnect(self) -> None: + super().disconnect() + Logger.log("i", "Disconnected from cluster %s", self.key) + CuraApplication.getInstance().getBackend().backendStateChange.disconnect(self._onBackendStateChange) + + ## Resets the print job that was uploaded to force a new upload, runs whenever the user re-slices. + def _onBackendStateChange(self, _: BackendState) -> None: + self._tool_path = None + self._uploaded_print_job = None + + ## Gets the cluster response from which this device was created. + @property + def clusterData(self) -> CloudClusterResponse: + return self._cluster + + ## Updates the cluster data from the cloud. + @clusterData.setter + def clusterData(self, value: CloudClusterResponse) -> None: + self._cluster = value + + ## Checks whether the given network key is found in the cloud's host name + def matchesNetworkKey(self, network_key: str) -> bool: + # A network key looks like "ultimakersystem-aabbccdd0011._ultimaker._tcp.local." + # the host name should then be "ultimakersystem-aabbccdd0011" + return network_key.startswith(self.clusterData.host_name) + + ## Set all the interface elements and texts for this output device. + def _setInterfaceElements(self) -> None: + self.setPriority(2) # Make sure we end up below the local networking and above 'save to file' + self.setName(self._id) + self.setShortDescription(I18N_CATALOG.i18nc("@action:button", "Print via Cloud")) + self.setDescription(I18N_CATALOG.i18nc("@properties:tooltip", "Print via Cloud")) + self.setConnectionText(I18N_CATALOG.i18nc("@info:status", "Connected via Cloud")) + + ## Called when Cura requests an output device to receive a (G-code) file. + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + + # Show an error message if we're already sending a job. + if self._progress.visible: + message = Message( + text = I18N_CATALOG.i18nc("@info:status", "Sending new jobs (temporarily) blocked, still sending the previous print job."), + title = I18N_CATALOG.i18nc("@info:title", "Cloud error"), + lifetime = 10 + ) + message.show() + return + + if self._uploaded_print_job: + # The mesh didn't change, let's not upload it again + self._api.requestPrint(self.key, self._uploaded_print_job.job_id, self._onPrintUploadCompleted) + return + + # Indicate we have started sending a job. + self.writeStarted.emit(self) + + mesh_format = MeshFormatHandler(file_handler, self.firmwareVersion) + if not mesh_format.is_valid: + Logger.log("e", "Missing file or mesh writer!") + return self._onUploadError(I18N_CATALOG.i18nc("@info:status", "Could not export print job.")) + + mesh = mesh_format.getBytes(nodes) + + self._tool_path = mesh + request = CloudPrintJobUploadRequest( + job_name = file_name or mesh_format.file_extension, + file_size = len(mesh), + content_type = mesh_format.mime_type, + ) + self._api.requestUpload(request, self._onPrintJobCreated) + + ## Called when the network data should be updated. + def _update(self) -> None: + super()._update() + if self._last_request_time and time() - self._last_request_time < self.CHECK_CLUSTER_INTERVAL: + return # Avoid calling the cloud too often + + Logger.log("d", "Updating: %s - %s >= %s", time(), self._last_request_time, self.CHECK_CLUSTER_INTERVAL) + if self._account.isLoggedIn: + self.setAuthenticationState(AuthState.Authenticated) + self._last_request_time = time() + self._api.getClusterStatus(self.key, self._onStatusCallFinished) + else: + self.setAuthenticationState(AuthState.NotAuthenticated) + + ## Method called when HTTP request to status endpoint is finished. + # Contains both printers and print jobs statuses in a single response. + def _onStatusCallFinished(self, status: CloudClusterStatus) -> None: + # Update all data from the cluster. + self._last_response_time = time() + if self._received_printers != status.printers: + self._received_printers = status.printers + self._updatePrinters(status.printers) + + if status.print_jobs != self._received_print_jobs: + self._received_print_jobs = status.print_jobs + self._updatePrintJobs(status.print_jobs) + + ## Updates the local list of printers with the list received from the cloud. + # \param jobs: The printers received from the cloud. + def _updatePrinters(self, printers: List[CloudClusterPrinterStatus]) -> None: + previous = {p.key: p for p in self._printers} # type: Dict[str, PrinterOutputModel] + received = {p.uuid: p for p in printers} # type: Dict[str, CloudClusterPrinterStatus] + + removed_printers, added_printers, updated_printers = findChanges(previous, received) + + for removed_printer in removed_printers: + if self._active_printer == removed_printer: + self.setActivePrinter(None) + self._printers.remove(removed_printer) + + for added_printer in added_printers: + self._printers.append(added_printer.createOutputModel(CloudOutputController(self))) + + for model, printer in updated_printers: + printer.updateOutputModel(model) + + # Always have an active printer + if self._printers and not self._active_printer: + self.setActivePrinter(self._printers[0]) + + if added_printers or removed_printers: + self.printersChanged.emit() + + ## Updates the local list of print jobs with the list received from the cloud. + # \param jobs: The print jobs received from the cloud. + def _updatePrintJobs(self, jobs: List[CloudClusterPrintJobStatus]) -> None: + received = {j.uuid: j for j in jobs} # type: Dict[str, CloudClusterPrintJobStatus] + previous = {j.key: j for j in self._print_jobs} # type: Dict[str, UM3PrintJobOutputModel] + + removed_jobs, added_jobs, updated_jobs = findChanges(previous, received) + + for removed_job in removed_jobs: + if removed_job.assignedPrinter: + removed_job.assignedPrinter.updateActivePrintJob(None) + removed_job.stateChanged.disconnect(self._onPrintJobStateChanged) + self._print_jobs.remove(removed_job) + + for added_job in added_jobs: + self._addPrintJob(added_job) + + for model, job in updated_jobs: + job.updateOutputModel(model) + if job.printer_uuid: + self._updateAssignedPrinter(model, job.printer_uuid) + + # We only have to update when jobs are added or removed + # updated jobs push their changes via their output model + if added_jobs or removed_jobs: + self.printJobsChanged.emit() + + ## Registers a new print job received via the cloud API. + # \param job: The print job received. + def _addPrintJob(self, job: CloudClusterPrintJobStatus) -> None: + model = job.createOutputModel(CloudOutputController(self)) + model.stateChanged.connect(self._onPrintJobStateChanged) + if job.printer_uuid: + self._updateAssignedPrinter(model, job.printer_uuid) + self._print_jobs.append(model) + + ## Handles the event of a change in a print job state + def _onPrintJobStateChanged(self) -> None: + user_name = self._getUserName() + # TODO: confirm that notifications in Cura are still required + for job in self._print_jobs: + if job.state == "wait_cleanup" and job.key not in self._finished_jobs and job.owner == user_name: + self._finished_jobs.add(job.key) + Message( + title = I18N_CATALOG.i18nc("@info:status", "Print finished"), + text = (I18N_CATALOG.i18nc("@info:status", "Printer '{printer_name}' has finished printing '{job_name}'.").format( + printer_name = job.assignedPrinter.name, + job_name = job.name + ) if job.assignedPrinter else + I18N_CATALOG.i18nc("@info:status", "The print job '{job_name}' was finished.").format( + job_name = job.name + )), + ).show() + + ## Updates the printer assignment for the given print job model. + def _updateAssignedPrinter(self, model: UM3PrintJobOutputModel, printer_uuid: str) -> None: + printer = next((p for p in self._printers if printer_uuid == p.key), None) + if not printer: + Logger.log("w", "Missing printer %s for job %s in %s", model.assignedPrinter, model.key, + [p.key for p in self._printers]) + return + + printer.updateActivePrintJob(model) + model.updateAssignedPrinter(printer) + + ## Uploads the mesh when the print job was registered with the cloud API. + # \param job_response: The response received from the cloud API. + def _onPrintJobCreated(self, job_response: CloudPrintJobResponse) -> None: + self._progress.show() + self._uploaded_print_job = job_response + tool_path = cast(bytes, self._tool_path) + self._api.uploadToolPath(job_response, tool_path, self._onPrintJobUploaded, self._progress.update, self._onUploadError) + + ## Requests the print to be sent to the printer when we finished uploading the mesh. + def _onPrintJobUploaded(self) -> None: + self._progress.update(100) + print_job = cast(CloudPrintJobResponse, self._uploaded_print_job) + self._api.requestPrint(self.key, print_job.job_id, self._onPrintUploadCompleted) + + ## Displays the given message if uploading the mesh has failed + # \param message: The message to display. + def _onUploadError(self, message: str = None) -> None: + self._progress.hide() + self._uploaded_print_job = None + Message( + text = message or I18N_CATALOG.i18nc("@info:text", "Could not upload the data to the printer."), + title = I18N_CATALOG.i18nc("@info:title", "Cloud error"), + lifetime = 10 + ).show() + self.writeError.emit() + + ## Shows a message when the upload has succeeded + # \param response: The response from the cloud API. + def _onPrintUploadCompleted(self, response: CloudPrintResponse) -> None: + Logger.log("d", "The cluster will be printing this print job with the ID %s", response.cluster_job_id) + self._progress.hide() + Message( + text = I18N_CATALOG.i18nc("@info:status", "Print job was successfully sent to the printer."), + title = I18N_CATALOG.i18nc("@info:title", "Data Sent"), + lifetime = 5 + ).show() + self.writeFinished.emit() + + ## Gets the remote printers. + @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) + def printers(self) -> List[PrinterOutputModel]: + return self._printers + + ## Get the active printer in the UI (monitor page). + @pyqtProperty(QObject, notify = activePrinterChanged) + def activePrinter(self) -> Optional[PrinterOutputModel]: + return self._active_printer + + ## Set the active printer in the UI (monitor page). + @pyqtSlot(QObject) + def setActivePrinter(self, printer: Optional[PrinterOutputModel] = None) -> None: + if printer != self._active_printer: + self._active_printer = printer + self.activePrinterChanged.emit() + + @pyqtProperty(int, notify = _clusterPrintersChanged) + def clusterSize(self) -> int: + return len(self._printers) + + ## Get remote print jobs. + @pyqtProperty("QVariantList", notify = printJobsChanged) + def printJobs(self) -> List[UM3PrintJobOutputModel]: + return self._print_jobs + + ## Get remote print jobs that are still in the print queue. + @pyqtProperty("QVariantList", notify = printJobsChanged) + def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]: + return [print_job for print_job in self._print_jobs + if print_job.state == "queued" or print_job.state == "error"] + + ## Get remote print jobs that are assigned to a printer. + @pyqtProperty("QVariantList", notify = printJobsChanged) + def activePrintJobs(self) -> List[UM3PrintJobOutputModel]: + return [print_job for print_job in self._print_jobs if + print_job.assignedPrinter is not None and print_job.state != "queued"] + + @pyqtSlot(int, result = str) + def formatDuration(self, seconds: int) -> str: + return Duration(seconds).getDisplayString(DurationFormat.Format.Short) + + @pyqtSlot(int, result = str) + def getTimeCompleted(self, time_remaining: int) -> str: + return formatTimeCompleted(time_remaining) + + @pyqtSlot(int, result = str) + def getDateCompleted(self, time_remaining: int) -> str: + return formatDateCompleted(time_remaining) + + ## TODO: The following methods are required by the monitor page QML, but are not actually available using cloud. + # TODO: We fake the methods here to not break the monitor page. + + @pyqtProperty(QUrl, notify = _clusterPrintersChanged) + def activeCameraUrl(self) -> "QUrl": + return QUrl() + + @pyqtSlot(QUrl) + def setActiveCameraUrl(self, camera_url: "QUrl") -> None: + pass + + @pyqtProperty(bool, notify = printJobsChanged) + def receivedPrintJobs(self) -> bool: + return bool(self._print_jobs) + + @pyqtSlot() + def openPrintJobControlPanel(self) -> None: + pass + + @pyqtSlot() + def openPrinterControlPanel(self) -> None: + pass + + @pyqtSlot(str) + def sendJobToTop(self, print_job_uuid: str) -> None: + pass + + @pyqtSlot(str) + def deleteJobFromQueue(self, print_job_uuid: str) -> None: + pass + + @pyqtSlot(str) + def forceSendJob(self, print_job_uuid: str) -> None: + pass + + @pyqtProperty("QVariantList", notify = _clusterPrintersChanged) + def connectedPrintersTypeCount(self) -> List[Dict[str, str]]: + return [] diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py new file mode 100644 index 0000000000..f9a0a59c81 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -0,0 +1,170 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Dict, List + +from PyQt5.QtCore import QTimer + +from UM import i18nCatalog +from UM.Logger import Logger +from UM.Message import Message +from cura.API import Account +from cura.CuraApplication import CuraApplication +from cura.Settings.GlobalStack import GlobalStack +from .CloudApiClient import CloudApiClient +from .CloudOutputDevice import CloudOutputDevice +from .Models.CloudClusterResponse import CloudClusterResponse +from .Models.CloudError import CloudError +from .Utils import findChanges + + +## The cloud output device manager is responsible for using the Ultimaker Cloud APIs to manage remote clusters. +# Keeping all cloud related logic in this class instead of the UM3OutputDevicePlugin results in more readable code. +# +# API spec is available on https://api.ultimaker.com/docs/connect/spec/. +# +class CloudOutputDeviceManager: + META_CLUSTER_ID = "um_cloud_cluster_id" + + # The interval with which the remote clusters are checked + CHECK_CLUSTER_INTERVAL = 30.0 # seconds + + # The translation catalog for this device. + I18N_CATALOG = i18nCatalog("cura") + + def __init__(self) -> None: + # Persistent dict containing the remote clusters for the authenticated user. + self._remote_clusters = {} # type: Dict[str, CloudOutputDevice] + + application = CuraApplication.getInstance() + self._output_device_manager = application.getOutputDeviceManager() + + self._account = application.getCuraAPI().account # type: Account + self._api = CloudApiClient(self._account, self._onApiError) + + # Create a timer to update the remote cluster list + self._update_timer = QTimer() + self._update_timer.setInterval(int(self.CHECK_CLUSTER_INTERVAL * 1000)) + self._update_timer.setSingleShot(False) + + self._running = False + + # Called when the uses logs in or out + def _onLoginStateChanged(self, is_logged_in: bool) -> None: + Logger.log("d", "Log in state changed to %s", is_logged_in) + if is_logged_in: + if not self._update_timer.isActive(): + self._update_timer.start() + self._getRemoteClusters() + else: + if self._update_timer.isActive(): + self._update_timer.stop() + + # Notify that all clusters have disappeared + self._onGetRemoteClustersFinished([]) + + ## Gets all remote clusters from the API. + def _getRemoteClusters(self) -> None: + Logger.log("d", "Retrieving remote clusters") + self._api.getClusters(self._onGetRemoteClustersFinished) + + ## Callback for when the request for getting the clusters. is finished. + def _onGetRemoteClustersFinished(self, clusters: List[CloudClusterResponse]) -> None: + online_clusters = {c.cluster_id: c for c in clusters if c.is_online} # type: Dict[str, CloudClusterResponse] + + removed_devices, added_clusters, updates = findChanges(self._remote_clusters, online_clusters) + + Logger.log("d", "Parsed remote clusters to %s", [cluster.toDict() for cluster in online_clusters.values()]) + Logger.log("d", "Removed: %s, added: %s, updates: %s", len(removed_devices), len(added_clusters), len(updates)) + + # Remove output devices that are gone + for removed_cluster in removed_devices: + if removed_cluster.isConnected(): + removed_cluster.disconnect() + removed_cluster.close() + self._output_device_manager.removeOutputDevice(removed_cluster.key) + del self._remote_clusters[removed_cluster.key] + + # Add an output device for each new remote cluster. + # We only add when is_online as we don't want the option in the drop down if the cluster is not online. + for added_cluster in added_clusters: + device = CloudOutputDevice(self._api, added_cluster) + self._remote_clusters[added_cluster.cluster_id] = device + + for device, cluster in updates: + device.clusterData = cluster + + self._connectToActiveMachine() + + ## Callback for when the active machine was changed by the user or a new remote cluster was found. + def _connectToActiveMachine(self) -> None: + active_machine = CuraApplication.getInstance().getGlobalContainerStack() + if not active_machine: + return + + # Remove all output devices that we have registered. + # This is needed because when we switch machines we can only leave + # output devices that are meant for that machine. + for stored_cluster_id in self._remote_clusters: + self._output_device_manager.removeOutputDevice(stored_cluster_id) + + # Check if the stored cluster_id for the active machine is in our list of remote clusters. + stored_cluster_id = active_machine.getMetaDataEntry(self.META_CLUSTER_ID) + if stored_cluster_id in self._remote_clusters: + device = self._remote_clusters[stored_cluster_id] + self._connectToOutputDevice(device) + Logger.log("d", "Device connected by metadata cluster ID %s", stored_cluster_id) + else: + self._connectByNetworkKey(active_machine) + + ## Tries to match the local network key to the cloud cluster host name. + def _connectByNetworkKey(self, active_machine: GlobalStack) -> None: + # Check if the active printer has a local network connection and match this key to the remote cluster. + local_network_key = active_machine.getMetaDataEntry("um_network_key") + if not local_network_key: + return + + device = next((c for c in self._remote_clusters.values() if c.matchesNetworkKey(local_network_key)), None) + if not device: + return + + Logger.log("i", "Found cluster %s with network key %s", device, local_network_key) + active_machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) + self._connectToOutputDevice(device) + + ## Connects to an output device and makes sure it is registered in the output device manager. + def _connectToOutputDevice(self, device: CloudOutputDevice) -> None: + device.connect() + self._output_device_manager.addOutputDevice(device) + + ## Handles an API error received from the cloud. + # \param errors: The errors received + def _onApiError(self, errors: List[CloudError]) -> None: + text = ". ".join(e.title for e in errors) # TODO: translate errors + message = Message( + text = text, + title = self.I18N_CATALOG.i18nc("@info:title", "Error"), + lifetime = 10 + ) + message.show() + + ## Starts running the cloud output device manager, thus periodically requesting cloud data. + def start(self): + if self._running: + return + application = CuraApplication.getInstance() + self._account.loginStateChanged.connect(self._onLoginStateChanged) + # When switching machines we check if we have to activate a remote cluster. + application.globalContainerStackChanged.connect(self._connectToActiveMachine) + self._update_timer.timeout.connect(self._getRemoteClusters) + self._onLoginStateChanged(is_logged_in = self._account.isLoggedIn) + + ## Stops running the cloud output device manager. + def stop(self): + if not self._running: + return + application = CuraApplication.getInstance() + self._account.loginStateChanged.disconnect(self._onLoginStateChanged) + # When switching machines we check if we have to activate a remote cluster. + application.globalContainerStackChanged.disconnect(self._connectToActiveMachine) + self._update_timer.timeout.disconnect(self._getRemoteClusters) + self._onLoginStateChanged(is_logged_in = False) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py new file mode 100644 index 0000000000..d85f49c1a0 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudProgressMessage.py @@ -0,0 +1,32 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from UM import i18nCatalog +from UM.Message import Message + + +I18N_CATALOG = i18nCatalog("cura") + + +## Class responsible for showing a progress message while a mesh is being uploaded to the cloud. +class CloudProgressMessage(Message): + def __init__(self): + super().__init__( + text = I18N_CATALOG.i18nc("@info:status", "Sending data to remote cluster"), + title = I18N_CATALOG.i18nc("@info:status", "Sending data to remote cluster"), + progress = -1, + lifetime = 0, + dismissable = False, + use_inactivity_timer = False + ) + + ## Shows the progress message. + def show(self): + self.setProgress(0) + super().show() + + ## Updates the percentage of the uploaded. + # \param percentage: The percentage amount (0-100). + def update(self, percentage: int) -> None: + if not self._visible: + super().show() + self.setProgress(percentage) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py new file mode 100644 index 0000000000..18a8cb5cba --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/BaseCloudModel.py @@ -0,0 +1,55 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime, timezone +from typing import Dict, Union, TypeVar, Type, List, Any + +from ...Models import BaseModel + + +## Base class for the models used in the interface with the Ultimaker cloud APIs. +class BaseCloudModel(BaseModel): + ## Checks whether the two models are equal. + # \param other: The other model. + # \return True if they are equal, False if they are different. + def __eq__(self, other): + return type(self) == type(other) and self.toDict() == other.toDict() + + ## Checks whether the two models are different. + # \param other: The other model. + # \return True if they are different, False if they are the same. + def __ne__(self, other) -> bool: + return type(self) != type(other) or self.toDict() != other.toDict() + + ## Converts the model into a serializable dictionary + def toDict(self) -> Dict[str, Any]: + return self.__dict__ + + # Type variable used in the parse methods below, which should be a subclass of BaseModel. + T = TypeVar("T", bound=BaseModel) + + ## Parses a single model. + # \param model_class: The model class. + # \param values: The value of the model, which is usually a dictionary, but may also be already parsed. + # \return An instance of the model_class given. + @staticmethod + def parseModel(model_class: Type[T], values: Union[T, Dict[str, Any]]) -> T: + if isinstance(values, dict): + return model_class(**values) + return values + + ## Parses a list of models. + # \param model_class: The model class. + # \param values: The value of the list. Each value is usually a dictionary, but may also be already parsed. + # \return A list of instances of the model_class given. + @classmethod + def parseModels(cls, model_class: Type[T], values: List[Union[T, Dict[str, Any]]]) -> List[T]: + return [cls.parseModel(model_class, value) for value in values] + + ## Parses the given date string. + # \param date: The date to parse. + # \return The parsed date. + @staticmethod + def parseDate(date: Union[str, datetime]) -> datetime: + if isinstance(date, datetime): + return date + return datetime.strptime(date, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=timezone.utc) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py new file mode 100644 index 0000000000..4386bbb435 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterBuildPlate.py @@ -0,0 +1,13 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cluster printer +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterBuildPlate(BaseCloudModel): + ## Create a new build plate + # \param type: The type of buildplate glass or aluminium + def __init__(self, type: str = "glass", **kwargs) -> None: + self.type = type + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py new file mode 100644 index 0000000000..7454401d09 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintCoreConfiguration.py @@ -0,0 +1,52 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Union, Dict, Optional, Any + +from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel +from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel +from .CloudClusterPrinterConfigurationMaterial import CloudClusterPrinterConfigurationMaterial +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud cluster printer configuration +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintCoreConfiguration(BaseCloudModel): + ## Creates a new cloud cluster printer configuration object + # \param extruder_index: The position of the extruder on the machine as list index. Numbered from left to right. + # \param material: The material of a configuration object in a cluster printer. May be in a dict or an object. + # \param nozzle_diameter: The diameter of the print core at this position in millimeters, e.g. '0.4'. + # \param print_core_id: The type of print core inserted at this position, e.g. 'AA 0.4'. + def __init__(self, extruder_index: int, + material: Union[None, Dict[str, Any], CloudClusterPrinterConfigurationMaterial], + print_core_id: Optional[str] = None, **kwargs) -> None: + self.extruder_index = extruder_index + self.material = self.parseModel(CloudClusterPrinterConfigurationMaterial, material) if material else None + self.print_core_id = print_core_id + super().__init__(**kwargs) + + ## Updates the given output model. + # \param model - The output model to update. + def updateOutputModel(self, model: ExtruderOutputModel) -> None: + if self.print_core_id is not None: + model.updateHotendID(self.print_core_id) + + if self.material: + active_material = model.activeMaterial + if active_material is None or active_material.guid != self.material.guid: + material = self.material.createOutputModel() + model.updateActiveMaterial(material) + else: + model.updateActiveMaterial(None) + + ## Creates a configuration model + def createConfigurationModel(self) -> ExtruderConfigurationModel: + model = ExtruderConfigurationModel(position = self.extruder_index) + self.updateConfigurationModel(model) + return model + + ## Creates a configuration model + def updateConfigurationModel(self, model: ExtruderConfigurationModel) -> ExtruderConfigurationModel: + model.setHotendID(self.print_core_id) + if self.material: + model.setMaterial(self.material.createOutputModel()) + return model diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py new file mode 100644 index 0000000000..9ff4154666 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConfigurationChange.py @@ -0,0 +1,27 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +## Model for the types of changes that are needed before a print job can start +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobConfigurationChange(BaseCloudModel): + ## Creates a new print job constraint. + # \param type_of_change: The type of configuration change, one of: "material", "print_core_change" + # \param index: The hotend slot or extruder index to change + # \param target_id: Target material guid or hotend id + # \param origin_id: Original/current material guid or hotend id + # \param target_name: Target material name or hotend id + # \param origin_name: Original/current material name or hotend id + def __init__(self, type_of_change: str, target_id: str, origin_id: str, + index: Optional[int] = None, target_name: Optional[str] = None, origin_name: Optional[str] = None, + **kwargs) -> None: + self.type_of_change = type_of_change + self.index = index + self.target_id = target_id + self.origin_id = origin_id + self.target_name = target_name + self.origin_name = origin_name + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py new file mode 100644 index 0000000000..8236ec06b9 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobConstraint.py @@ -0,0 +1,16 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud cluster print job constraint +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobConstraints(BaseCloudModel): + ## Creates a new print job constraint. + # \param require_printer_name: Unique name of the printer that this job should be printed on. + # Should be one of the unique_name field values in the cluster, e.g. 'ultimakersystem-ccbdd30044ec' + def __init__(self, require_printer_name: Optional[str] = None, **kwargs) -> None: + self.require_printer_name = require_printer_name + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py new file mode 100644 index 0000000000..12b67996c1 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobImpediment.py @@ -0,0 +1,15 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from .BaseCloudModel import BaseCloudModel + + +## Class representing the reasons that prevent this job from being printed on the associated printer +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobImpediment(BaseCloudModel): + ## Creates a new print job constraint. + # \param translation_key: A string indicating a reason the print cannot be printed, such as 'does_not_fit_in_build_volume' + # \param severity: A number indicating the severity of the problem, with higher being more severe + def __init__(self, translation_key: str, severity: int, **kwargs) -> None: + self.translation_key = translation_key + self.severity = severity + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py new file mode 100644 index 0000000000..45b7d838a5 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrintJobStatus.py @@ -0,0 +1,134 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import List, Optional, Union, Dict, Any + +from cura.PrinterOutput.ConfigurationModel import ConfigurationModel +from ...UM3PrintJobOutputModel import UM3PrintJobOutputModel +from ...ConfigurationChangeModel import ConfigurationChangeModel +from ..CloudOutputController import CloudOutputController +from .BaseCloudModel import BaseCloudModel +from .CloudClusterBuildPlate import CloudClusterBuildPlate +from .CloudClusterPrintJobConfigurationChange import CloudClusterPrintJobConfigurationChange +from .CloudClusterPrintJobImpediment import CloudClusterPrintJobImpediment +from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration +from .CloudClusterPrintJobConstraint import CloudClusterPrintJobConstraints + + +## Model for the status of a single print job in a cluster. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrintJobStatus(BaseCloudModel): + ## Creates a new cloud print job status model. + # \param assigned_to: The name of the printer this job is assigned to while being queued. + # \param configuration: The required print core configurations of this print job. + # \param constraints: Print job constraints object. + # \param created_at: The timestamp when the job was created in Cura Connect. + # \param force: Allow this job to be printed despite of mismatching configurations. + # \param last_seen: The number of seconds since this job was checked. + # \param machine_variant: The machine type that this job should be printed on.Coincides with the machine_type field + # of the printer object. + # \param name: The name of the print job. Usually the name of the .gcode file. + # \param network_error_count: The number of errors encountered when requesting data for this print job. + # \param owner: The name of the user who added the print job to Cura Connect. + # \param printer_uuid: UUID of the printer that the job is currently printing on or assigned to. + # \param started: Whether the job has started printing or not. + # \param status: The status of the print job. + # \param time_elapsed: The remaining printing time in seconds. + # \param time_total: The total printing time in seconds. + # \param uuid: UUID of this print job. Should be used for identification purposes. + # \param deleted_at: The time when this print job was deleted. + # \param printed_on_uuid: UUID of the printer used to print this job. + # \param configuration_changes_required: List of configuration changes the printer this job is associated with + # needs to make in order to be able to print this job + # \param build_plate: The build plate (type) this job needs to be printed on. + # \param compatible_machine_families: Family names of machines suitable for this print job + # \param impediments_to_printing: A list of reasons that prevent this job from being printed on the associated + # printer + def __init__(self, created_at: str, force: bool, machine_variant: str, name: str, started: bool, status: str, + time_total: int, uuid: str, + configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]], + constraints: List[Union[Dict[str, Any], CloudClusterPrintJobConstraints]], + last_seen: Optional[float] = None, network_error_count: Optional[int] = None, + owner: Optional[str] = None, printer_uuid: Optional[str] = None, time_elapsed: Optional[int] = None, + assigned_to: Optional[str] = None, deleted_at: Optional[str] = None, + printed_on_uuid: Optional[str] = None, + configuration_changes_required: List[ + Union[Dict[str, Any], CloudClusterPrintJobConfigurationChange]] = None, + build_plate: Union[Dict[str, Any], CloudClusterBuildPlate] = None, + compatible_machine_families: List[str] = None, + impediments_to_printing: List[Union[Dict[str, Any], CloudClusterPrintJobImpediment]] = None, + **kwargs) -> None: + self.assigned_to = assigned_to + self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration) + self.constraints = self.parseModels(CloudClusterPrintJobConstraints, constraints) + self.created_at = created_at + self.force = force + self.last_seen = last_seen + self.machine_variant = machine_variant + self.name = name + self.network_error_count = network_error_count + self.owner = owner + self.printer_uuid = printer_uuid + self.started = started + self.status = status + self.time_elapsed = time_elapsed + self.time_total = time_total + self.uuid = uuid + self.deleted_at = deleted_at + self.printed_on_uuid = printed_on_uuid + + self.configuration_changes_required = self.parseModels(CloudClusterPrintJobConfigurationChange, + configuration_changes_required) \ + if configuration_changes_required else [] + self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate) if build_plate else None + self.compatible_machine_families = compatible_machine_families if compatible_machine_families else [] + self.impediments_to_printing = self.parseModels(CloudClusterPrintJobImpediment, impediments_to_printing) \ + if impediments_to_printing else [] + + super().__init__(**kwargs) + + ## Creates an UM3 print job output model based on this cloud cluster print job. + # \param printer: The output model of the printer + def createOutputModel(self, controller: CloudOutputController) -> UM3PrintJobOutputModel: + model = UM3PrintJobOutputModel(controller, self.uuid, self.name) + self.updateOutputModel(model) + + return model + + ## Creates a new configuration model + def _createConfigurationModel(self) -> ConfigurationModel: + extruders = [extruder.createConfigurationModel() for extruder in self.configuration or ()] + configuration = ConfigurationModel() + configuration.setExtruderConfigurations(extruders) + return configuration + + ## Updates an UM3 print job output model based on this cloud cluster print job. + # \param model: The model to update. + def updateOutputModel(self, model: UM3PrintJobOutputModel) -> None: + model.updateConfiguration(self._createConfigurationModel()) + model.updateTimeTotal(self.time_total) + model.updateTimeElapsed(self.time_elapsed) + model.updateOwner(self.owner) + model.updateState(self.status) + model.setCompatibleMachineFamilies(self.compatible_machine_families) + model.updateTimeTotal(self.time_total) + model.updateTimeElapsed(self.time_elapsed) + model.updateOwner(self.owner) + + status_set_by_impediment = False + for impediment in self.impediments_to_printing: + # TODO: impediment.severity is defined as int, this will not work, is there a translation? + if impediment.severity == "UNFIXABLE": + status_set_by_impediment = True + model.updateState("error") + break + + if not status_set_by_impediment: + model.updateState(self.status) + + model.updateConfigurationChanges( + [ConfigurationChangeModel( + type_of_change = change.type_of_change, + index = change.index if change.index else 0, + target_name = change.target_name if change.target_name else "", + origin_name = change.origin_name if change.origin_name else "") + for change in self.configuration_changes_required]) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py new file mode 100644 index 0000000000..652cbdabda --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterConfigurationMaterial.py @@ -0,0 +1,55 @@ +from typing import Optional + +from UM.Logger import Logger +from cura.CuraApplication import CuraApplication +from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud cluster printer configuration +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrinterConfigurationMaterial(BaseCloudModel): + ## Creates a new material configuration model. + # \param brand: The brand of material in this print core, e.g. 'Ultimaker'. + # \param color: The color of material in this print core, e.g. 'Blue'. + # \param guid: he GUID of the material in this print core, e.g. '506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9'. + # \param material: The type of material in this print core, e.g. 'PLA'. + def __init__(self, brand: Optional[str] = None, color: Optional[str] = None, guid: Optional[str] = None, + material: Optional[str] = None, **kwargs) -> None: + self.guid = guid + self.brand = brand + self.color = color + self.material = material + super().__init__(**kwargs) + + ## Creates a material output model based on this cloud printer material. + def createOutputModel(self) -> MaterialOutputModel: + material_manager = CuraApplication.getInstance().getMaterialManager() + material_group_list = material_manager.getMaterialGroupListByGUID(self.guid) or [] + + # Sort the material groups by "is_read_only = True" first, and then the name alphabetically. + read_only_material_group_list = list(filter(lambda x: x.is_read_only, material_group_list)) + non_read_only_material_group_list = list(filter(lambda x: not x.is_read_only, material_group_list)) + material_group = None + if read_only_material_group_list: + read_only_material_group_list = sorted(read_only_material_group_list, key = lambda x: x.name) + material_group = read_only_material_group_list[0] + elif non_read_only_material_group_list: + non_read_only_material_group_list = sorted(non_read_only_material_group_list, key = lambda x: x.name) + material_group = non_read_only_material_group_list[0] + + if material_group: + container = material_group.root_material_node.getContainer() + color = container.getMetaDataEntry("color_code") + brand = container.getMetaDataEntry("brand") + material_type = container.getMetaDataEntry("material") + name = container.getName() + else: + Logger.log("w", "Unable to find material with guid {guid}. Using data as provided by cluster" + .format(guid = self.guid)) + color = self.color + brand = self.brand + material_type = self.material + name = "Empty" if self.material == "empty" else "Unknown" + + return MaterialOutputModel(guid = self.guid, type = material_type, brand = brand, color = color, name = name) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py new file mode 100644 index 0000000000..a8165ff69c --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterPrinterStatus.py @@ -0,0 +1,72 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import List, Union, Dict, Optional, Any + +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController +from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel +from .CloudClusterBuildPlate import CloudClusterBuildPlate +from .CloudClusterPrintCoreConfiguration import CloudClusterPrintCoreConfiguration +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cluster printer +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterPrinterStatus(BaseCloudModel): + ## Creates a new cluster printer status + # \param enabled: A printer can be disabled if it should not receive new jobs. By default every printer is enabled. + # \param firmware_version: Firmware version installed on the printer. Can differ for each printer in a cluster. + # \param friendly_name: Human readable name of the printer. Can be used for identification purposes. + # \param ip_address: The IP address of the printer in the local network. + # \param machine_variant: The type of printer. Can be 'Ultimaker 3' or 'Ultimaker 3ext'. + # \param status: The status of the printer. + # \param unique_name: The unique name of the printer in the network. + # \param uuid: The unique ID of the printer, also known as GUID. + # \param configuration: The active print core configurations of this printer. + # \param reserved_by: A printer can be claimed by a specific print job. + # \param maintenance_required: Indicates if maintenance is necessary + # \param firmware_update_status: Whether the printer's firmware is up-to-date, value is one of: "up_to_date", + # "pending_update", "update_available", "update_in_progress", "update_failed", "update_impossible" + # \param latest_available_firmware: The version of the latest firmware that is available + # \param build_plate: The build plate that is on the printer + def __init__(self, enabled: bool, firmware_version: str, friendly_name: str, ip_address: str, machine_variant: str, + status: str, unique_name: str, uuid: str, + configuration: List[Union[Dict[str, Any], CloudClusterPrintCoreConfiguration]], + reserved_by: Optional[str] = None, maintenance_required: Optional[bool] = None, + firmware_update_status: Optional[str] = None, latest_available_firmware: Optional[str] = None, + build_plate: Union[Dict[str, Any], CloudClusterBuildPlate] = None, **kwargs) -> None: + + self.configuration = self.parseModels(CloudClusterPrintCoreConfiguration, configuration) + self.enabled = enabled + self.firmware_version = firmware_version + self.friendly_name = friendly_name + self.ip_address = ip_address + self.machine_variant = machine_variant + self.status = status + self.unique_name = unique_name + self.uuid = uuid + self.reserved_by = reserved_by + self.maintenance_required = maintenance_required + self.firmware_update_status = firmware_update_status + self.latest_available_firmware = latest_available_firmware + self.build_plate = self.parseModel(CloudClusterBuildPlate, build_plate) if build_plate else None + super().__init__(**kwargs) + + ## Creates a new output model. + # \param controller - The controller of the model. + def createOutputModel(self, controller: PrinterOutputController) -> PrinterOutputModel: + model = PrinterOutputModel(controller, len(self.configuration), firmware_version = self.firmware_version) + self.updateOutputModel(model) + return model + + ## Updates the given output model. + # \param model - The output model to update. + def updateOutputModel(self, model: PrinterOutputModel) -> None: + model.updateKey(self.uuid) + model.updateName(self.friendly_name) + model.updateType(self.machine_variant) + model.updateState(self.status if self.enabled else "disabled") + + for configuration, extruder_output, extruder_config in \ + zip(self.configuration, model.extruders, model.printerConfiguration.extruderConfigurations): + configuration.updateOutputModel(extruder_output) + configuration.updateConfigurationModel(extruder_config) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py new file mode 100644 index 0000000000..9c0853e7c9 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterResponse.py @@ -0,0 +1,32 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +## Class representing a cloud connected cluster. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterResponse(BaseCloudModel): + ## Creates a new cluster response object. + # \param cluster_id: The secret unique ID, e.g. 'kBEeZWEifXbrXviO8mRYLx45P8k5lHVGs43XKvRniPg='. + # \param host_guid: The unique identifier of the print cluster host, e.g. 'e90ae0ac-1257-4403-91ee-a44c9b7e8050'. + # \param host_name: The name of the printer as configured during the Wi-Fi setup. Used as identifier for end users. + # \param is_online: Whether this cluster is currently connected to the cloud. + # \param status: The status of the cluster authentication (active or inactive). + # \param host_version: The firmware version of the cluster host. This is where the Stardust client is running on. + def __init__(self, cluster_id: str, host_guid: str, host_name: str, is_online: bool, status: str, + host_version: Optional[str] = None, **kwargs) -> None: + self.cluster_id = cluster_id + self.host_guid = host_guid + self.host_name = host_name + self.status = status + self.is_online = is_online + self.host_version = host_version + super().__init__(**kwargs) + + # Validates the model, raising an exception if the model is invalid. + def validate(self) -> None: + super().validate() + if not self.cluster_id: + raise ValueError("cluster_id is required on CloudCluster") diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py new file mode 100644 index 0000000000..b0250c2ebb --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudClusterStatus.py @@ -0,0 +1,26 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime +from typing import List, Dict, Union, Any + +from .CloudClusterPrinterStatus import CloudClusterPrinterStatus +from .CloudClusterPrintJobStatus import CloudClusterPrintJobStatus +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the status of the cluster for the cloud +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudClusterStatus(BaseCloudModel): + ## Creates a new cluster status model object. + # \param printers: The latest status of each printer in the cluster. + # \param print_jobs: The latest status of each print job in the cluster. + # \param generated_time: The datetime when the object was generated on the server-side. + def __init__(self, + printers: List[Union[CloudClusterPrinterStatus, Dict[str, Any]]], + print_jobs: List[Union[CloudClusterPrintJobStatus, Dict[str, Any]]], + generated_time: Union[str, datetime], + **kwargs) -> None: + self.generated_time = self.parseDate(generated_time) + self.printers = self.parseModels(CloudClusterPrinterStatus, printers) + self.print_jobs = self.parseModels(CloudClusterPrintJobStatus, print_jobs) + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py new file mode 100644 index 0000000000..b53361022e --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudError.py @@ -0,0 +1,28 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Dict, Optional, Any + +from .BaseCloudModel import BaseCloudModel + + +## Class representing errors generated by the cloud servers, according to the JSON-API standard. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudError(BaseCloudModel): + ## Creates a new error object. + # \param id: Unique identifier for this particular occurrence of the problem. + # \param title: A short, human-readable summary of the problem that SHOULD NOT change from occurrence to occurrence + # of the problem, except for purposes of localization. + # \param code: An application-specific error code, expressed as a string value. + # \param detail: A human-readable explanation specific to this occurrence of the problem. Like title, this field's + # value can be localized. + # \param http_status: The HTTP status code applicable to this problem, converted to string. + # \param meta: Non-standard meta-information about the error, depending on the error code. + def __init__(self, id: str, code: str, title: str, http_status: str, detail: Optional[str] = None, + meta: Optional[Dict[str, Any]] = None, **kwargs) -> None: + self.id = id + self.code = code + self.http_status = http_status + self.title = title + self.detail = detail + self.meta = meta + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py new file mode 100644 index 0000000000..79196ee38c --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobResponse.py @@ -0,0 +1,33 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import Optional + +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the response received from the cloud after requesting to upload a print job +# Spec: https://api-staging.ultimaker.com/cura/v1/spec +class CloudPrintJobResponse(BaseCloudModel): + ## Creates a new print job response model. + # \param job_id: The job unique ID, e.g. 'kBEeZWEifXbrXviO8mRYLx45P8k5lHVGs43XKvRniPg='. + # \param status: The status of the print job. + # \param status_description: Contains more details about the status, e.g. the cause of failures. + # \param download_url: A signed URL to download the resulting status. Only available when the job is finished. + # \param job_name: The name of the print job. + # \param slicing_details: Model for slice information. + # \param upload_url: The one-time use URL where the toolpath must be uploaded to (only if status is uploading). + # \param content_type: The content type of the print job (e.g. text/plain or application/gzip) + # \param generated_time: The datetime when the object was generated on the server-side. + def __init__(self, job_id: str, status: str, download_url: Optional[str] = None, job_name: Optional[str] = None, + upload_url: Optional[str] = None, content_type: Optional[str] = None, + status_description: Optional[str] = None, slicing_details: Optional[dict] = None, **kwargs) -> None: + self.job_id = job_id + self.status = status + self.download_url = download_url + self.job_name = job_name + self.upload_url = upload_url + self.content_type = content_type + self.status_description = status_description + # TODO: Implement slicing details + self.slicing_details = slicing_details + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py new file mode 100644 index 0000000000..e59c571558 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintJobUploadRequest.py @@ -0,0 +1,17 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the request to upload a print job to the cloud +# Spec: https://api-staging.ultimaker.com/cura/v1/spec +class CloudPrintJobUploadRequest(BaseCloudModel): + ## Creates a new print job upload request. + # \param job_name: The name of the print job. + # \param file_size: The size of the file in bytes. + # \param content_type: The content type of the print job (e.g. text/plain or application/gzip) + def __init__(self, job_name: str, file_size: int, content_type: str, **kwargs) -> None: + self.job_name = job_name + self.file_size = file_size + self.content_type = content_type + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py new file mode 100644 index 0000000000..919d1b3c3a --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/CloudPrintResponse.py @@ -0,0 +1,23 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from datetime import datetime +from typing import Optional, Union + +from .BaseCloudModel import BaseCloudModel + + +# Model that represents the responses received from the cloud after requesting a job to be printed. +# Spec: https://api-staging.ultimaker.com/connect/v1/spec +class CloudPrintResponse(BaseCloudModel): + ## Creates a new print response object. + # \param job_id: The unique ID of a print job inside of the cluster. This ID is generated by Cura Connect. + # \param status: The status of the print request (queued or failed). + # \param generated_time: The datetime when the object was generated on the server-side. + # \param cluster_job_id: The unique ID of a print job inside of the cluster. This ID is generated by Cura Connect. + def __init__(self, job_id: str, status: str, generated_time: Union[str, datetime], + cluster_job_id: Optional[str] = None, **kwargs) -> None: + self.job_id = job_id + self.status = status + self.cluster_job_id = cluster_job_id + self.generated_time = self.parseDate(generated_time) + super().__init__(**kwargs) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py b/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Models/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py new file mode 100644 index 0000000000..176b7e6ab7 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py @@ -0,0 +1,148 @@ +# Copyright (c) 2018 Ultimaker B.V. +# !/usr/bin/env python +# -*- coding: utf-8 -*- +from PyQt5.QtCore import QUrl +from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager +from typing import Optional, Callable, Any, Tuple, cast + +from UM.Logger import Logger +from .Models.CloudPrintJobResponse import CloudPrintJobResponse + + +## Class responsible for uploading meshes to the cloud in separate requests. +class ToolPathUploader: + + # The maximum amount of times to retry if the server returns one of the RETRY_HTTP_CODES + MAX_RETRIES = 10 + + # The HTTP codes that should trigger a retry. + RETRY_HTTP_CODES = {500, 502, 503, 504} + + # The amount of bytes to send per request + BYTES_PER_REQUEST = 256 * 1024 + + ## Creates a mesh upload object. + # \param manager: The network access manager that will handle the HTTP requests. + # \param print_job: The print job response that was returned by the cloud after registering the upload. + # \param data: The mesh bytes to be uploaded. + # \param on_finished: The method to be called when done. + # \param on_progress: The method to be called when the progress changes (receives a percentage 0-100). + # \param on_error: The method to be called when an error occurs. + def __init__(self, manager: QNetworkAccessManager, print_job: CloudPrintJobResponse, data: bytes, + on_finished: Callable[[], Any], on_progress: Callable[[int], Any], on_error: Callable[[], Any] + ) -> None: + self._manager = manager + self._print_job = print_job + self._data = data + + self._on_finished = on_finished + self._on_progress = on_progress + self._on_error = on_error + + self._sent_bytes = 0 + self._retries = 0 + self._finished = False + self._reply = None # type: Optional[QNetworkReply] + + ## Returns the print job for which this object was created. + @property + def printJob(self): + return self._print_job + + ## Creates a network request to the print job upload URL, adding the needed content range header. + def _createRequest(self) -> QNetworkRequest: + request = QNetworkRequest(QUrl(self._print_job.upload_url)) + request.setHeader(QNetworkRequest.ContentTypeHeader, self._print_job.content_type) + + first_byte, last_byte = self._chunkRange() + content_range = "bytes {}-{}/{}".format(first_byte, last_byte - 1, len(self._data)) + request.setRawHeader(b"Content-Range", content_range.encode()) + Logger.log("i", "Uploading %s to %s", content_range, self._print_job.upload_url) + + return request + + ## Determines the bytes that should be uploaded next. + # \return: A tuple with the first and the last byte to upload. + def _chunkRange(self) -> Tuple[int, int]: + last_byte = min(len(self._data), self._sent_bytes + self.BYTES_PER_REQUEST) + return self._sent_bytes, last_byte + + ## Starts uploading the mesh. + def start(self) -> None: + if self._finished: + # reset state. + self._sent_bytes = 0 + self._retries = 0 + self._finished = False + self._uploadChunk() + + ## Stops uploading the mesh, marking it as finished. + def stop(self): + Logger.log("i", "Stopped uploading") + self._finished = True + + ## Uploads a chunk of the mesh to the cloud. + def _uploadChunk(self) -> None: + if self._finished: + raise ValueError("The upload is already finished") + + first_byte, last_byte = self._chunkRange() + request = self._createRequest() + + # now send the reply and subscribe to the results + self._reply = self._manager.put(request, self._data[first_byte:last_byte]) + self._reply.finished.connect(self._finishedCallback) + self._reply.uploadProgress.connect(self._progressCallback) + self._reply.error.connect(self._errorCallback) + + ## Handles an update to the upload progress + # \param bytes_sent: The amount of bytes sent in the current request. + # \param bytes_total: The amount of bytes to send in the current request. + def _progressCallback(self, bytes_sent: int, bytes_total: int) -> None: + Logger.log("i", "Progress callback %s / %s", bytes_sent, bytes_total) + if bytes_total: + total_sent = self._sent_bytes + bytes_sent + self._on_progress(int(total_sent / len(self._data) * 100)) + + ## Handles an error uploading. + def _errorCallback(self) -> None: + reply = cast(QNetworkReply, self._reply) + body = bytes(reply.readAll()).decode() + Logger.log("e", "Received error while uploading: %s", body) + self.stop() + self._on_error() + + ## Checks whether a chunk of data was uploaded successfully, starting the next chunk if needed. + def _finishedCallback(self) -> None: + reply = cast(QNetworkReply, self._reply) + Logger.log("i", "Finished callback %s %s", + reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url().toString()) + + status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) # type: int + + # check if we should retry the last chunk + if self._retries < self.MAX_RETRIES and status_code in self.RETRY_HTTP_CODES: + self._retries += 1 + Logger.log("i", "Retrying %s/%s request %s", self._retries, self.MAX_RETRIES, reply.url().toString()) + self._uploadChunk() + return + + # Http codes that are not to be retried are assumed to be errors. + if status_code > 308: + self._errorCallback() + return + + Logger.log("d", "status_code: %s, Headers: %s, body: %s", status_code, + [bytes(header).decode() for header in reply.rawHeaderList()], bytes(reply.readAll()).decode()) + self._chunkUploaded() + + ## Handles a chunk of data being uploaded, starting the next chunk if needed. + def _chunkUploaded(self) -> None: + # We got a successful response. Let's start the next chunk or report the upload is finished. + first_byte, last_byte = self._chunkRange() + self._sent_bytes += last_byte - first_byte + if self._sent_bytes >= len(self._data): + self.stop() + self._on_finished() + else: + self._uploadChunk() diff --git a/plugins/UM3NetworkPrinting/src/Cloud/Utils.py b/plugins/UM3NetworkPrinting/src/Cloud/Utils.py new file mode 100644 index 0000000000..5136e0e7db --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/Utils.py @@ -0,0 +1,54 @@ +from datetime import datetime, timedelta +from typing import TypeVar, Dict, Tuple, List + +from UM import i18nCatalog + +T = TypeVar("T") +U = TypeVar("U") + + +## Splits the given dictionaries into three lists (in a tuple): +# - `removed`: Items that were in the first argument but removed in the second one. +# - `added`: Items that were not in the first argument but were included in the second one. +# - `updated`: Items that were in both dictionaries. Both values are given in a tuple. +# \param previous: The previous items +# \param received: The received items +# \return: The tuple (removed, added, updated) as explained above. +def findChanges(previous: Dict[str, T], received: Dict[str, U]) -> Tuple[List[T], List[U], List[Tuple[T, U]]]: + previous_ids = set(previous) + received_ids = set(received) + + removed_ids = previous_ids.difference(received_ids) + new_ids = received_ids.difference(previous_ids) + updated_ids = received_ids.intersection(previous_ids) + + removed = [previous[removed_id] for removed_id in removed_ids] + added = [received[new_id] for new_id in new_ids] + updated = [(previous[updated_id], received[updated_id]) for updated_id in updated_ids] + + return removed, added, updated + + +def formatTimeCompleted(seconds_remaining: int) -> str: + completed = datetime.now() + timedelta(seconds=seconds_remaining) + return "{hour:02d}:{minute:02d}".format(hour = completed.hour, minute = completed.minute) + + +def formatDateCompleted(seconds_remaining: int) -> str: + now = datetime.now() + completed = now + timedelta(seconds=seconds_remaining) + days = (completed.date() - now.date()).days + i18n = i18nCatalog("cura") + + # If finishing date is more than 7 days out, using "Mon Dec 3 at HH:MM" format + if days >= 7: + return completed.strftime("%a %b ") + "{day}".format(day = completed.day) + # If finishing date is within the next week, use "Monday at HH:MM" format + elif days >= 2: + return completed.strftime("%a") + # If finishing tomorrow, use "tomorrow at HH:MM" format + elif days >= 1: + return i18n.i18nc("@info:status", "tomorrow") + # If finishing today, use "today at HH:MM" format + else: + return i18n.i18nc("@info:status", "today") diff --git a/plugins/UM3NetworkPrinting/src/Cloud/__init__.py b/plugins/UM3NetworkPrinting/src/Cloud/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Cloud/__init__.py diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py index 8314b0f089..b48f9380e1 100644 --- a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py @@ -1,45 +1,41 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Any, cast, Optional, Set, Tuple, Union +from typing import Any, cast, Tuple, Union, Optional, Dict, List +from time import time + +import io # To create the correct buffers for sending data to the printer. +import json +import os from UM.FileHandler.FileHandler import FileHandler -from UM.FileHandler.FileWriter import FileWriter # To choose based on the output file mode (text vs. binary). from UM.FileHandler.WriteFileJob import WriteFileJob # To call the file writer asynchronously. from UM.Logger import Logger from UM.Settings.ContainerRegistry import ContainerRegistry from UM.i18n import i18nCatalog from UM.Message import Message -from UM.Qt.Duration import Duration, DurationFormat -from UM.OutputDevice import OutputDeviceError # To show that something went wrong when writing. from UM.Scene.SceneNode import SceneNode # For typing. -from UM.Version import Version # To check against firmware versions for support. from cura.CuraApplication import CuraApplication from cura.PrinterOutput.ConfigurationModel import ConfigurationModel from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel -from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState +from cura.PrinterOutput.NetworkedPrinterOutputDevice import AuthState, NetworkedPrinterOutputDevice from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel +from cura.PrinterOutputDevice import ConnectionType +from .Cloud.Utils import formatTimeCompleted, formatDateCompleted from .ClusterUM3PrinterOutputController import ClusterUM3PrinterOutputController -from .SendMaterialJob import SendMaterialJob from .ConfigurationChangeModel import ConfigurationChangeModel +from .MeshFormatHandler import MeshFormatHandler +from .SendMaterialJob import SendMaterialJob from .UM3PrintJobOutputModel import UM3PrintJobOutputModel from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply from PyQt5.QtGui import QDesktopServices, QImage from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject -from time import time -from datetime import datetime -from typing import Optional, Dict, List - -import io # To create the correct buffers for sending data to the printer. -import json -import os - i18n_catalog = i18nCatalog("cura") @@ -49,26 +45,27 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): activeCameraUrlChanged = pyqtSignal() receivedPrintJobsChanged = pyqtSignal() - # This is a bit of a hack, as the notify can only use signals that are defined by the class that they are in. - # Inheritance doesn't seem to work. Tying them together does work, but i'm open for better suggestions. - clusterPrintersChanged = pyqtSignal() + # Notify can only use signals that are defined by the class that they are in, not inherited ones. + # Therefore we create a private signal used to trigger the printersChanged signal. + _clusterPrintersChanged = pyqtSignal() def __init__(self, device_id, address, properties, parent = None) -> None: - super().__init__(device_id = device_id, address = address, properties=properties, parent = parent) + super().__init__(device_id = device_id, address = address, properties=properties, connection_type = ConnectionType.NetworkConnection, parent = parent) self._api_prefix = "/cluster-api/v1/" self._number_of_extruders = 2 - self._dummy_lambdas = ("", {}, io.BytesIO()) #type: Tuple[str, Dict, Union[io.StringIO, io.BytesIO]] + self._dummy_lambdas = ( + "", {}, io.BytesIO() + ) # type: Tuple[Optional[str], Dict[str, Union[str, int, bool]], Union[io.StringIO, io.BytesIO]] self._print_jobs = [] # type: List[UM3PrintJobOutputModel] self._received_print_jobs = False # type: bool - self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterMonitorItem.qml") - self._control_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterControlItem.qml") + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/MonitorStage.qml") - # See comments about this hack with the clusterPrintersChanged signal - self.printersChanged.connect(self.clusterPrintersChanged) + # Trigger the printersChanged signal when the private signal is triggered + self.printersChanged.connect(self._clusterPrintersChanged) self._accepts_commands = True # type: bool @@ -101,53 +98,19 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._active_camera_url = QUrl() # type: QUrl - def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: + def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, + file_handler: Optional[FileHandler] = None, **kwargs: str) -> None: self.writeStarted.emit(self) self.sendMaterialProfiles() - # Formats supported by this application (file types that we can actually write). - if file_handler: - file_formats = file_handler.getSupportedFileTypesWrite() - else: - file_formats = CuraApplication.getInstance().getMeshFileHandler().getSupportedFileTypesWrite() - - global_stack = CuraApplication.getInstance().getGlobalContainerStack() - # Create a list from the supported file formats string. - if not global_stack: - Logger.log("e", "Missing global stack!") - return - - machine_file_formats = global_stack.getMetaDataEntry("file_formats").split(";") - machine_file_formats = [file_type.strip() for file_type in machine_file_formats] - # Exception for UM3 firmware version >=4.4: UFP is now supported and should be the preferred file format. - if "application/x-ufp" not in machine_file_formats and Version(self.firmwareVersion) >= Version("4.4"): - machine_file_formats = ["application/x-ufp"] + machine_file_formats - - # Take the intersection between file_formats and machine_file_formats. - format_by_mimetype = {format["mime_type"]: format for format in file_formats} - file_formats = [format_by_mimetype[mimetype] for mimetype in machine_file_formats] #Keep them ordered according to the preference in machine_file_formats. - - if len(file_formats) == 0: - Logger.log("e", "There are no file formats available to write with!") - raise OutputDeviceError.WriteRequestFailedError(i18n_catalog.i18nc("@info:status", "There are no file formats available to write with!")) - preferred_format = file_formats[0] - - # Just take the first file format available. - if file_handler is not None: - writer = file_handler.getWriterByMimeType(cast(str, preferred_format["mime_type"])) - else: - writer = CuraApplication.getInstance().getMeshFileHandler().getWriterByMimeType(cast(str, preferred_format["mime_type"])) - - if not writer: - Logger.log("e", "Unexpected error when trying to get the FileWriter") - return + mesh_format = MeshFormatHandler(file_handler, self.firmwareVersion) # This function pauses with the yield, waiting on instructions on which printer it needs to print with. - if not writer: + if not mesh_format.is_valid: Logger.log("e", "Missing file or mesh writer!") return - self._sending_job = self._sendPrintJob(writer, preferred_format, nodes) + self._sending_job = self._sendPrintJob(mesh_format, nodes) if self._sending_job is not None: self._sending_job.send(None) # Start the generator. @@ -187,11 +150,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # greenlet in order to optionally wait for selectPrinter() to select a # printer. # The greenlet yields exactly three times: First time None, - # \param writer The file writer to use to create the data. - # \param preferred_format A dictionary containing some information about - # what format to write to. This is necessary to create the correct buffer - # types and file extension and such. - def _sendPrintJob(self, writer: FileWriter, preferred_format: Dict, nodes: List[SceneNode]): + # \param mesh_format Object responsible for choosing the right kind of format to write with. + def _sendPrintJob(self, mesh_format: MeshFormatHandler, nodes: List[SceneNode]): Logger.log("i", "Sending print job to printer.") if self._sending_gcode: self._error_message = Message( @@ -205,35 +165,37 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): self._sending_gcode = True - target_printer = yield #Potentially wait on the user to select a target printer. + # Potentially wait on the user to select a target printer. + target_printer = yield # type: Optional[str] # Using buffering greatly reduces the write time for many lines of gcode - stream = io.BytesIO() # type: Union[io.BytesIO, io.StringIO]# Binary mode. - if preferred_format["mode"] == FileWriter.OutputMode.TextMode: - stream = io.StringIO() + stream = mesh_format.createStream() - job = WriteFileJob(writer, stream, nodes, preferred_format["mode"]) + job = WriteFileJob(mesh_format.writer, stream, nodes, mesh_format.file_mode) - self._write_job_progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), lifetime = 0, dismissable = False, progress = -1, - title = i18n_catalog.i18nc("@info:title", "Sending Data"), use_inactivity_timer = False) + self._write_job_progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), + lifetime = 0, dismissable = False, progress = -1, + title = i18n_catalog.i18nc("@info:title", "Sending Data"), + use_inactivity_timer = False) self._write_job_progress_message.show() - self._dummy_lambdas = (target_printer, preferred_format, stream) - job.finished.connect(self._sendPrintJobWaitOnWriteJobFinished) - - job.start() - - yield True # Return that we had success! - yield # To prevent having to catch the StopIteration exception. + if mesh_format.preferred_format is not None: + self._dummy_lambdas = (target_printer, mesh_format.preferred_format, stream) + job.finished.connect(self._sendPrintJobWaitOnWriteJobFinished) + job.start() + yield True # Return that we had success! + yield # To prevent having to catch the StopIteration exception. def _sendPrintJobWaitOnWriteJobFinished(self, job: WriteFileJob) -> None: if self._write_job_progress_message: self._write_job_progress_message.hide() - self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), lifetime = 0, dismissable = False, progress = -1, + self._progress_message = Message(i18n_catalog.i18nc("@info:status", "Sending data to printer"), lifetime = 0, + dismissable = False, progress = -1, title = i18n_catalog.i18nc("@info:title", "Sending Data")) - self._progress_message.addAction("Abort", i18n_catalog.i18nc("@action:button", "Cancel"), icon = None, description = "") + self._progress_message.addAction("Abort", i18n_catalog.i18nc("@action:button", "Cancel"), icon = None, + description = "") self._progress_message.actionTriggered.connect(self._progressMessageActionTriggered) self._progress_message.show() parts = [] @@ -257,7 +219,9 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): parts.append(self._createFormPart("name=\"file\"; filename=\"%s\"" % file_name, output)) - self._latest_reply_handler = self.postFormWithParts("print_jobs/", parts, on_finished = self._onPostPrintJobFinished, on_progress = self._onUploadPrintJobProgress) + self._latest_reply_handler = self.postFormWithParts("print_jobs/", parts, + on_finished = self._onPostPrintJobFinished, + on_progress = self._onUploadPrintJobProgress) @pyqtProperty(QObject, notify = activePrinterChanged) def activePrinter(self) -> Optional[PrinterOutputModel]: @@ -291,7 +255,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): # Treat upload progress as response. Uploading can take more than 10 seconds, so if we don't, we can get # timeout responses if this happens. self._last_response_time = time() - if self._progress_message and new_progress > self._progress_message.getProgress(): + if self._progress_message is not None and new_progress > self._progress_message.getProgress(): self._progress_message.show() # Ensure that the message is visible. self._progress_message.setProgress(bytes_sent / bytes_total * 100) @@ -357,7 +321,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def activePrintJobs(self) -> List[UM3PrintJobOutputModel]: return [print_job for print_job in self._print_jobs if print_job.assignedPrinter is not None and print_job.state != "queued"] - @pyqtProperty("QVariantList", notify = clusterPrintersChanged) + @pyqtProperty("QVariantList", notify = _clusterPrintersChanged) def connectedPrintersTypeCount(self) -> List[Dict[str, str]]: printer_count = {} # type: Dict[str, int] for printer in self._printers: @@ -370,25 +334,17 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): result.append({"machine_type": machine_type, "count": str(printer_count[machine_type])}) return result - @pyqtProperty("QVariantList", notify=clusterPrintersChanged) + @pyqtProperty("QVariantList", notify=_clusterPrintersChanged) def printers(self): return self._printers @pyqtSlot(int, result = str) - def formatDuration(self, seconds: int) -> str: - return Duration(seconds).getDisplayString(DurationFormat.Format.Short) - - @pyqtSlot(int, result = str) def getTimeCompleted(self, time_remaining: int) -> str: - current_time = time() - datetime_completed = datetime.fromtimestamp(current_time + time_remaining) - return "{hour:02d}:{minute:02d}".format(hour=datetime_completed.hour, minute=datetime_completed.minute) + return formatTimeCompleted(time_remaining) @pyqtSlot(int, result = str) def getDateCompleted(self, time_remaining: int) -> str: - current_time = time() - datetime_completed = datetime.fromtimestamp(current_time + time_remaining) - return (datetime_completed.strftime("%a %b ") + "{day}".format(day=datetime_completed.day)).upper() + return formatDateCompleted(time_remaining) @pyqtSlot(str) def sendJobToTop(self, print_job_uuid: str) -> None: @@ -592,7 +548,25 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): def _createMaterialOutputModel(self, material_data: Dict[str, Any]) -> "MaterialOutputModel": material_manager = CuraApplication.getInstance().getMaterialManager() - material_group_list = material_manager.getMaterialGroupListByGUID(material_data["guid"]) + material_group_list = None + + # Avoid crashing if there is no "guid" field in the metadata + material_guid = material_data.get("guid") + if material_guid: + material_group_list = material_manager.getMaterialGroupListByGUID(material_guid) + + # This can happen if the connected machine has no material in one or more extruders (if GUID is empty), or the + # material is unknown to Cura, so we should return an "empty" or "unknown" material model. + if material_group_list is None: + material_name = i18n_catalog.i18nc("@label:material", "Empty") if len(material_data.get("guid", "")) == 0 \ + else i18n_catalog.i18nc("@label:material", "Unknown") + + return MaterialOutputModel(guid = material_data.get("guid", ""), + type = material_data.get("material", ""), + color = material_data.get("color", ""), + brand = material_data.get("brand", ""), + name = material_data.get("name", material_name) + ) # Sort the material groups by "is_read_only = True" first, and then the name alphabetically. read_only_material_group_list = list(filter(lambda x: x.is_read_only, material_group_list)) @@ -618,9 +592,10 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice): color = material_data["color"] brand = material_data["brand"] material_type = material_data["material"] - name = "Empty" if material_data["material"] == "empty" else "Unknown" - return MaterialOutputModel(guid=material_data["guid"], type=material_type, - brand=brand, color=color, name=name) + name = i18n_catalog.i18nc("@label:material", "Empty") if material_data["material"] == "empty" \ + else i18n_catalog.i18nc("@label:material", "Unknown") + return MaterialOutputModel(guid = material_data["guid"], type = material_type, + brand = brand, color = color, name = name) def _updatePrinter(self, printer: PrinterOutputModel, data: Dict[str, Any]) -> None: # For some unknown reason the cluster wants UUID for everything, except for sending a job directly to a printer. diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py b/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py index fcced0b883..fc6798386a 100644 --- a/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py +++ b/plugins/UM3NetworkPrinting/src/ClusterUM3PrinterOutputController.py @@ -18,4 +18,3 @@ class ClusterUM3PrinterOutputController(PrinterOutputController): def setJobState(self, job: "PrintJobOutputModel", state: str): data = "{\"action\": \"%s\"}" % state self._output_device.put("print_jobs/%s/action" % job.key, data, on_finished=None) - diff --git a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py index be83e04585..b688ee9d7d 100644 --- a/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py +++ b/plugins/UM3NetworkPrinting/src/DiscoverUM3Action.py @@ -3,7 +3,7 @@ import os.path import time -from typing import cast, Optional +from typing import Optional, TYPE_CHECKING from PyQt5.QtCore import pyqtSignal, pyqtProperty, pyqtSlot, QObject @@ -16,6 +16,9 @@ from cura.MachineAction import MachineAction from .UM3OutputDevicePlugin import UM3OutputDevicePlugin +if TYPE_CHECKING: + from cura.PrinterOutputDevice import PrinterOutputDevice + catalog = i18nCatalog("cura") @@ -116,22 +119,37 @@ class DiscoverUM3Action(MachineAction): # Ensure that the connection states are refreshed. self._network_plugin.reCheckConnections() - @pyqtSlot(str) - def setKey(self, key: str) -> None: - Logger.log("d", "Attempting to set the network key of the active machine to %s", key) + # Associates the currently active machine with the given printer device. The network connection information will be + # stored into the metadata of the currently active machine. + @pyqtSlot(QObject) + def associateActiveMachineWithPrinterDevice(self, printer_device: Optional["PrinterOutputDevice"]) -> None: + if not printer_device: + return + + Logger.log("d", "Attempting to set the network key of the active machine to %s", printer_device.key) + global_container_stack = CuraApplication.getInstance().getGlobalContainerStack() - if global_container_stack: - meta_data = global_container_stack.getMetaData() - if "um_network_key" in meta_data: - previous_network_key= meta_data["um_network_key"] - global_container_stack.setMetaDataEntry("um_network_key", key) - # Delete old authentication data. - Logger.log("d", "Removing old authentication id %s for device %s", global_container_stack.getMetaDataEntry("network_authentication_id", None), key) - global_container_stack.removeMetaDataEntry("network_authentication_id") - global_container_stack.removeMetaDataEntry("network_authentication_key") - CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "um_network_key", value = previous_network_key, new_value = key) - else: - global_container_stack.setMetaDataEntry("um_network_key", key) + if not global_container_stack: + return + + meta_data = global_container_stack.getMetaData() + if "um_network_key" in meta_data: + previous_network_key = meta_data["um_network_key"] + global_container_stack.setMetaDataEntry("um_network_key", printer_device.key) + # Delete old authentication data. + Logger.log("d", "Removing old authentication id %s for device %s", + global_container_stack.getMetaDataEntry("network_authentication_id", None), printer_device.key) + global_container_stack.removeMetaDataEntry("network_authentication_id") + global_container_stack.removeMetaDataEntry("network_authentication_key") + CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "um_network_key", value = previous_network_key, new_value = printer_device.key) + + if "connection_type" in meta_data: + previous_connection_type = meta_data["connection_type"] + global_container_stack.setMetaDataEntry("connection_type", printer_device.connectionType.value) + CuraApplication.getInstance().getMachineManager().replaceContainersMetadata(key = "connection_type", value = previous_connection_type, new_value = printer_device.connectionType.value) + else: + global_container_stack.setMetaDataEntry("um_network_key", printer_device.key) + global_container_stack.setMetaDataEntry("connection_type", printer_device.connectionType.value) if self._network_plugin: # Ensure that the connection states are refreshed. @@ -182,4 +200,3 @@ class DiscoverUM3Action(MachineAction): # Create extra components CuraApplication.getInstance().addAdditionalComponent("monitorButtons", self.__additional_components_view.findChild(QObject, "networkPrinterConnectButton")) - CuraApplication.getInstance().addAdditionalComponent("machinesDetailPane", self.__additional_components_view.findChild(QObject, "networkPrinterConnectionInfo")) diff --git a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py index 18af22e72f..3ce0460d6b 100644 --- a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py @@ -7,6 +7,7 @@ from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutp from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel +from cura.PrinterOutputDevice import ConnectionType from cura.Settings.ContainerManager import ContainerManager from cura.Settings.ExtruderManager import ExtruderManager @@ -43,7 +44,7 @@ i18n_catalog = i18nCatalog("cura") # 5. As a final step, we verify the authentication, as this forces the QT manager to setup the authenticator. class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice): def __init__(self, device_id, address: str, properties, parent = None) -> None: - super().__init__(device_id = device_id, address = address, properties = properties, parent = parent) + super().__init__(device_id = device_id, address = address, properties = properties, connection_type = ConnectionType.NetworkConnection, parent = parent) self._api_prefix = "/api/v1/" self._number_of_extruders = 2 diff --git a/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py new file mode 100644 index 0000000000..c3cd82a86d --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/MeshFormatHandler.py @@ -0,0 +1,115 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import io +from typing import Optional, Dict, Union, List, cast + +from UM.FileHandler.FileHandler import FileHandler +from UM.FileHandler.FileWriter import FileWriter +from UM.Logger import Logger +from UM.OutputDevice import OutputDeviceError # To show that something went wrong when writing. +from UM.Scene.SceneNode import SceneNode +from UM.Version import Version # To check against firmware versions for support. +from UM.i18n import i18nCatalog +from cura.CuraApplication import CuraApplication + + +I18N_CATALOG = i18nCatalog("cura") + + +## This class is responsible for choosing the formats used by the connected clusters. +class MeshFormatHandler: + + def __init__(self, file_handler: Optional[FileHandler], firmware_version: str) -> None: + self._file_handler = file_handler or CuraApplication.getInstance().getMeshFileHandler() + self._preferred_format = self._getPreferredFormat(firmware_version) + self._writer = self._getWriter(self.mime_type) if self._preferred_format else None + + @property + def is_valid(self) -> bool: + return bool(self._writer) + + ## Chooses the preferred file format. + # \return A dict with the file format details, with the following keys: + # {id: str, extension: str, description: str, mime_type: str, mode: int, hide_in_file_dialog: bool} + @property + def preferred_format(self) -> Optional[Dict[str, Union[str, int, bool]]]: + return self._preferred_format + + ## Gets the file writer for the given file handler and mime type. + # \return A file writer. + @property + def writer(self) -> Optional[FileWriter]: + return self._writer + + @property + def mime_type(self) -> str: + return cast(str, self._preferred_format["mime_type"]) + + ## Gets the file mode (FileWriter.OutputMode.TextMode or FileWriter.OutputMode.BinaryMode) + @property + def file_mode(self) -> int: + return cast(int, self._preferred_format["mode"]) + + ## Gets the file extension + @property + def file_extension(self) -> str: + return cast(str, self._preferred_format["extension"]) + + ## Creates the right kind of stream based on the preferred format. + def createStream(self) -> Union[io.BytesIO, io.StringIO]: + if self.file_mode == FileWriter.OutputMode.TextMode: + return io.StringIO() + else: + return io.BytesIO() + + ## Writes the mesh and returns its value. + def getBytes(self, nodes: List[SceneNode]) -> bytes: + if self.writer is None: + raise ValueError("There is no writer for the mesh format handler.") + stream = self.createStream() + self.writer.write(stream, nodes) + value = stream.getvalue() + if isinstance(value, str): + value = value.encode() + return value + + ## Chooses the preferred file format for the given file handler. + # \param firmware_version: The version of the firmware. + # \return A dict with the file format details. + def _getPreferredFormat(self, firmware_version: str) -> Dict[str, Union[str, int, bool]]: + # Formats supported by this application (file types that we can actually write). + application = CuraApplication.getInstance() + + file_formats = self._file_handler.getSupportedFileTypesWrite() + + global_stack = application.getGlobalContainerStack() + # Create a list from the supported file formats string. + if not global_stack: + Logger.log("e", "Missing global stack!") + return {} + + machine_file_formats = global_stack.getMetaDataEntry("file_formats").split(";") + machine_file_formats = [file_type.strip() for file_type in machine_file_formats] + # Exception for UM3 firmware version >=4.4: UFP is now supported and should be the preferred file format. + if "application/x-ufp" not in machine_file_formats and Version(firmware_version) >= Version("4.4"): + machine_file_formats = ["application/x-ufp"] + machine_file_formats + + # Take the intersection between file_formats and machine_file_formats. + format_by_mimetype = {f["mime_type"]: f for f in file_formats} + + # Keep them ordered according to the preference in machine_file_formats. + file_formats = [format_by_mimetype[mimetype] for mimetype in machine_file_formats] + + if len(file_formats) == 0: + Logger.log("e", "There are no file formats available to write with!") + raise OutputDeviceError.WriteRequestFailedError( + I18N_CATALOG.i18nc("@info:status", "There are no file formats available to write with!") + ) + return file_formats[0] + + ## Gets the file writer for the given file handler and mime type. + # \param mime_type: The mine type. + # \return A file writer. + def _getWriter(self, mime_type: str) -> Optional[FileWriter]: + # Just take the first file format available. + return self._file_handler.getWriterByMimeType(mime_type) diff --git a/plugins/UM3NetworkPrinting/src/Models.py b/plugins/UM3NetworkPrinting/src/Models.py new file mode 100644 index 0000000000..c5b9b16665 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/Models.py @@ -0,0 +1,46 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + + +## Base model that maps kwargs to instance attributes. +class BaseModel: + def __init__(self, **kwargs) -> None: + self.__dict__.update(kwargs) + self.validate() + + # Validates the model, raising an exception if the model is invalid. + def validate(self) -> None: + pass + + +## Class representing a material that was fetched from the cluster API. +class ClusterMaterial(BaseModel): + def __init__(self, guid: str, version: int, **kwargs) -> None: + self.guid = guid # type: str + self.version = version # type: int + super().__init__(**kwargs) + + def validate(self) -> None: + if not self.guid: + raise ValueError("guid is required on ClusterMaterial") + if not self.version: + raise ValueError("version is required on ClusterMaterial") + + +## Class representing a local material that was fetched from the container registry. +class LocalMaterial(BaseModel): + def __init__(self, GUID: str, id: str, version: int, **kwargs) -> None: + self.GUID = GUID # type: str + self.id = id # type: str + self.version = version # type: int + super().__init__(**kwargs) + + # + def validate(self) -> None: + super().validate() + if not self.GUID: + raise ValueError("guid is required on LocalMaterial") + if not self.version: + raise ValueError("version is required on LocalMaterial") + if not self.id: + raise ValueError("id is required on LocalMaterial") diff --git a/plugins/UM3NetworkPrinting/src/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/SendMaterialJob.py index 8491e79c29..8cdd647a25 100644 --- a/plugins/UM3NetworkPrinting/src/SendMaterialJob.py +++ b/plugins/UM3NetworkPrinting/src/SendMaterialJob.py @@ -1,99 +1,197 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import json +import os +from typing import Dict, TYPE_CHECKING, Set, Optional -import json #To understand the list of materials from the printer reply. -import os #To walk over material files. -import os.path #To filter on material files. -from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest #To listen to the reply from the printer. -from typing import Any, Dict, Set, TYPE_CHECKING -import urllib.parse #For getting material IDs from their file names. +from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest -from UM.Job import Job #The interface we're implementing. +from UM.Application import Application +from UM.Job import Job from UM.Logger import Logger -from UM.MimeTypeDatabase import MimeTypeDatabase #To strip the extensions of the material profile files. -from UM.Resources import Resources -from UM.Settings.ContainerRegistry import ContainerRegistry #To find the GUIDs of materials. -from cura.CuraApplication import CuraApplication #For the resource types. +# Absolute imports don't work in plugins +from .Models import ClusterMaterial, LocalMaterial if TYPE_CHECKING: from .ClusterUM3OutputDevice import ClusterUM3OutputDevice + ## Asynchronous job to send material profiles to the printer. # # This way it won't freeze up the interface while sending those materials. class SendMaterialJob(Job): + def __init__(self, device: "ClusterUM3OutputDevice") -> None: super().__init__() - self.device = device #type: ClusterUM3OutputDevice + self.device = device # type: ClusterUM3OutputDevice + ## Send the request to the printer and register a callback def run(self) -> None: - self.device.get("materials/", on_finished = self.sendMissingMaterials) + self.device.get("materials/", on_finished = self._onGetRemoteMaterials) - def sendMissingMaterials(self, reply: QNetworkReply) -> None: - if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: #Got an error from the HTTP request. - Logger.log("e", "Couldn't request current material storage on printer. Not syncing materials.") + ## Process the materials reply from the printer. + # + # \param reply The reply from the printer, a json file. + def _onGetRemoteMaterials(self, reply: QNetworkReply) -> None: + # Got an error from the HTTP request. If we did not receive a 200 something happened. + if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: + Logger.log("e", "Error fetching materials from printer: %s", reply.errorString()) return - remote_materials_list = reply.readAll().data().decode("utf-8") - try: - remote_materials_list = json.loads(remote_materials_list) - except json.JSONDecodeError: - Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") + # Collect materials from the printer's reply and send the missing ones if needed. + remote_materials_by_guid = self._parseReply(reply) + if remote_materials_by_guid: + self._sendMissingMaterials(remote_materials_by_guid) + + ## Determine which materials should be updated and send them to the printer. + # + # \param remote_materials_by_guid The remote materials by GUID. + def _sendMissingMaterials(self, remote_materials_by_guid: Dict[str, ClusterMaterial]) -> None: + # Collect local materials + local_materials_by_guid = self._getLocalMaterials() + if len(local_materials_by_guid) == 0: + Logger.log("d", "There are no local materials to synchronize with the printer.") return - try: - remote_materials_by_guid = {material["guid"]: material for material in remote_materials_list} #Index by GUID. - except KeyError: - Logger.log("e", "Request material storage on printer: Printer's answer was missing GUIDs.") + + # Find out what materials are new or updated and must be sent to the printer + material_ids_to_send = self._determineMaterialsToSend(local_materials_by_guid, remote_materials_by_guid) + if len(material_ids_to_send) == 0: + Logger.log("d", "There are no remote materials to update.") return - container_registry = ContainerRegistry.getInstance() - local_materials_list = filter(lambda material: ("GUID" in material and "version" in material and "id" in material), container_registry.findContainersMetadata(type = "material")) - local_materials_by_guid = {material["GUID"]: material for material in local_materials_list if material["id"] == material["base_file"]} - for material in local_materials_list: #For each GUID get the material with the highest version number. - try: - if int(material["version"]) > local_materials_by_guid[material["GUID"]]["version"]: - local_materials_by_guid[material["GUID"]] = material - except ValueError: - Logger.log("e", "Material {material_id} has invalid version number {number}.".format(material_id = material["id"], number = material["version"])) - continue + # Send materials to the printer + self._sendMaterials(material_ids_to_send) + + ## From the local and remote materials, determine which ones should be synchronized. + # + # Makes a Set of id's containing only the id's of the materials that are not on the printer yet or the ones that + # are newer in Cura. + # + # \param local_materials The local materials by GUID. + # \param remote_materials The remote materials by GUID. + @staticmethod + def _determineMaterialsToSend(local_materials: Dict[str, LocalMaterial], + remote_materials: Dict[str, ClusterMaterial]) -> Set[str]: + return { + material.id + for guid, material in local_materials.items() + if guid not in remote_materials or material.version > remote_materials[guid].version + } + + ## Send the materials to the printer. + # + # The given materials will be loaded from disk en sent to to printer. + # The given id's will be matched with filenames of the locally stored materials. + # + # \param materials_to_send A set with id's of materials that must be sent. + def _sendMaterials(self, materials_to_send: Set[str]) -> None: + container_registry = Application.getInstance().getContainerRegistry() + material_manager = Application.getInstance().getMaterialManager() + material_group_dict = material_manager.getAllMaterialGroups() - materials_to_send = set() #type: Set[Dict[str, Any]] - for guid, material in local_materials_by_guid.items(): - if guid not in remote_materials_by_guid: - materials_to_send.add(material["id"]) + for root_material_id in material_group_dict: + if root_material_id not in materials_to_send: + # If the material does not have to be sent we skip it. continue - try: - if int(material["version"]) > remote_materials_by_guid[guid]["version"]: - materials_to_send.add(material["id"]) - continue - except KeyError: - Logger.log("e", "Current material storage on printer was an invalid reply (missing version).") - return - for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.MaterialInstanceContainer): - try: - mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path) - except MimeTypeDatabase.MimeTypeNotFoundError: - continue #Not the sort of file we'd like to send then. - _, file_name = os.path.split(file_path) - material_id = urllib.parse.unquote_plus(mime_type.stripExtension(file_name)) - if material_id not in materials_to_send: + file_path = container_registry.getContainerFilePathById(root_material_id) + if not file_path: + Logger.log("w", "Cannot get file path for material container [%s]", root_material_id) continue - parts = [] - with open(file_path, "rb") as f: - parts.append(self.device._createFormPart("name=\"file\"; filename=\"{file_name}\"".format(file_name = file_name), f.read())) - signature_file_path = file_path + ".sig" - if os.path.exists(signature_file_path): - _, signature_file_name = os.path.split(signature_file_path) - with open(signature_file_path, "rb") as f: - parts.append(self.device._createFormPart("name=\"signature_file\"; filename=\"{file_name}\"".format(file_name = signature_file_name), f.read())) + file_name = os.path.basename(file_path) + self._sendMaterialFile(file_path, file_name, root_material_id) + + ## Send a single material file to the printer. + # + # Also add the material signature file if that is available. + # + # \param file_path The path of the material file. + # \param file_name The name of the material file. + # \param material_id The ID of the material in the file. + def _sendMaterialFile(self, file_path: str, file_name: str, material_id: str) -> None: + parts = [] - Logger.log("d", "Syncing material {material_id} with cluster.".format(material_id = material_id)) - self.device.postFormWithParts(target = "materials/", parts = parts, on_finished = self.sendingFinished) + # Add the material file. + with open(file_path, "rb") as f: + parts.append(self.device.createFormPart("name=\"file\"; filename=\"{file_name}\"" + .format(file_name = file_name), f.read())) - def sendingFinished(self, reply: QNetworkReply): + # Add the material signature file if needed. + signature_file_path = "{}.sig".format(file_path) + if os.path.exists(signature_file_path): + signature_file_name = os.path.basename(signature_file_path) + with open(signature_file_path, "rb") as f: + parts.append(self.device.createFormPart("name=\"signature_file\"; filename=\"{file_name}\"" + .format(file_name = signature_file_name), f.read())) + + Logger.log("d", "Syncing material {material_id} with cluster.".format(material_id = material_id)) + self.device.postFormWithParts(target = "materials/", parts = parts, on_finished = self.sendingFinished) + + ## Check a reply from an upload to the printer and log an error when the call failed + @staticmethod + def sendingFinished(reply: QNetworkReply) -> None: if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200: - Logger.log("e", "Received error code from printer when syncing material: {code}".format(code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute))) - Logger.log("e", reply.readAll().data().decode("utf-8"))
\ No newline at end of file + Logger.log("e", "Received error code from printer when syncing material: {code}, {text}".format( + code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), + text = reply.errorString() + )) + + ## Parse the reply from the printer + # + # Parses the reply to a "/materials" request to the printer + # + # \return a dictionary of ClusterMaterial objects by GUID + # \throw KeyError Raised when on of the materials does not include a valid guid + @classmethod + def _parseReply(cls, reply: QNetworkReply) -> Optional[Dict[str, ClusterMaterial]]: + try: + remote_materials = json.loads(reply.readAll().data().decode("utf-8")) + return {material["guid"]: ClusterMaterial(**material) for material in remote_materials} + except UnicodeDecodeError: + Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") + except json.JSONDecodeError: + Logger.log("e", "Request material storage on printer: I didn't understand the printer's answer.") + except ValueError: + Logger.log("e", "Request material storage on printer: Printer's answer had an incorrect value.") + except TypeError: + Logger.log("e", "Request material storage on printer: Printer's answer was missing a required value.") + return None + + ## Retrieves a list of local materials + # + # Only the new newest version of the local materials is returned + # + # \return a dictionary of LocalMaterial objects by GUID + def _getLocalMaterials(self) -> Dict[str, LocalMaterial]: + result = {} # type: Dict[str, LocalMaterial] + material_manager = Application.getInstance().getMaterialManager() + + material_group_dict = material_manager.getAllMaterialGroups() + + # Find the latest version of all material containers in the registry. + for root_material_id, material_group in material_group_dict.items(): + material_metadata = material_group.root_material_node.getMetadata() + + try: + # material version must be an int + material_metadata["version"] = int(material_metadata["version"]) + + # Create a new local material + local_material = LocalMaterial(**material_metadata) + local_material.id = root_material_id + + if local_material.GUID not in result or \ + local_material.GUID not in result or \ + local_material.version > result[local_material.GUID].version: + result[local_material.GUID] = local_material + + except KeyError: + Logger.logException("w", "Local material {} has missing values.".format(material_metadata["id"])) + except ValueError: + Logger.logException("w", "Local material {} has invalid values.".format(material_metadata["id"])) + except TypeError: + Logger.logException("w", "Local material {} has invalid values.".format(material_metadata["id"])) + + return result diff --git a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py index 9c070f2de2..4a510903dd 100644 --- a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py +++ b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py @@ -1,23 +1,22 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import json +from queue import Queue +from threading import Event, Thread +from time import time + +from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo +from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager +from PyQt5.QtCore import QUrl +from UM.Application import Application from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin from UM.Logger import Logger -from UM.Application import Application from UM.Signal import Signal, signalemitter from UM.Version import Version from . import ClusterUM3OutputDevice, LegacyUM3OutputDevice - -from PyQt5.QtNetwork import QNetworkRequest, QNetworkAccessManager -from PyQt5.QtCore import QUrl - -from zeroconf import Zeroconf, ServiceBrowser, ServiceStateChange, ServiceInfo -from queue import Queue -from threading import Event, Thread -from time import time - -import json +from .Cloud.CloudOutputDeviceManager import CloudOutputDeviceManager ## This plugin handles the connection detection & creation of output device objects for the UM3 printer. @@ -31,9 +30,13 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): def __init__(self): super().__init__() + self._zero_conf = None self._zero_conf_browser = None + # Create a cloud output device manager that abstracts all cloud connection logic away. + self._cloud_output_device_manager = CloudOutputDeviceManager() + # Because the model needs to be created in the same thread as the QMLEngine, we use a signal. self.addDeviceSignal.connect(self._onAddDevice) self.removeDeviceSignal.connect(self._onRemoveDevice) @@ -83,6 +86,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): ## Start looking for devices on network. def start(self): self.startDiscovery() + self._cloud_output_device_manager.start() def startDiscovery(self): self.stop() @@ -114,6 +118,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): if key == um_network_key: if not self._discovered_devices[key].isConnected(): Logger.log("d", "Attempting to connect with [%s]" % key) + active_machine.setMetaDataEntry("connection_type", self._discovered_devices[key].connectionType.value) self._discovered_devices[key].connect() self._discovered_devices[key].connectionStateChanged.connect(self._onDeviceConnectionStateChanged) else: @@ -139,6 +144,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): if self._zero_conf is not None: Logger.log("d", "zeroconf close...") self._zero_conf.close() + self._cloud_output_device_manager.stop() def removeManualDevice(self, key, address = None): if key in self._discovered_devices: @@ -283,6 +289,7 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): global_container_stack = Application.getInstance().getGlobalContainerStack() if global_container_stack and device.getId() == global_container_stack.getMetaDataEntry("um_network_key"): + global_container_stack.setMetaDataEntry("connection_type", device.connectionType.value) device.connect() device.connectionStateChanged.connect(self._onDeviceConnectionStateChanged) @@ -325,13 +332,12 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): ## Handler for zeroConf detection. # Return True or False indicating if the process succeeded. - # Note that this function can take over 3 seconds to complete. Be carefull calling it from the main thread. + # Note that this function can take over 3 seconds to complete. Be careful + # calling it from the main thread. def _onServiceChanged(self, zero_conf, service_type, name, state_change): if state_change == ServiceStateChange.Added: - Logger.log("d", "Bonjour service added: %s" % name) - # First try getting info from zero-conf cache - info = ServiceInfo(service_type, name, properties={}) + info = ServiceInfo(service_type, name, properties = {}) for record in zero_conf.cache.entries_with_name(name.lower()): info.update_record(zero_conf, time(), record) @@ -342,7 +348,6 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): # Request more data if info is not complete if not info.address: - Logger.log("d", "Trying to get address of %s", name) info = zero_conf.get_service_info(service_type, name) if info: @@ -362,4 +367,4 @@ class UM3OutputDevicePlugin(OutputDevicePlugin): Logger.log("d", "Bonjour service removed: %s" % name) self.removeDeviceSignal.emit(str(name)) - return True
\ No newline at end of file + return True diff --git a/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py b/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py index 2ac3e6ba4f..4f44ca4af8 100644 --- a/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py +++ b/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py @@ -1,13 +1,12 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot -from typing import Optional, TYPE_CHECKING, List -from PyQt5.QtCore import QUrl -from PyQt5.QtGui import QImage +from typing import List -from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel +from PyQt5.QtCore import pyqtProperty, pyqtSignal +from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel +from cura.PrinterOutput.PrinterOutputController import PrinterOutputController from .ConfigurationChangeModel import ConfigurationChangeModel diff --git a/plugins/UM3NetworkPrinting/src/__init__.py b/plugins/UM3NetworkPrinting/src/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/plugins/UM3NetworkPrinting/src/__init__.py diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py new file mode 100644 index 0000000000..777afc92c2 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/__init__.py @@ -0,0 +1,12 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +import os + + +def readFixture(fixture_name: str) -> bytes: + with open("{}/{}.json".format(os.path.dirname(__file__), fixture_name), "rb") as f: + return f.read() + +def parseFixture(fixture_name: str) -> dict: + return json.loads(readFixture(fixture_name).decode()) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json new file mode 100644 index 0000000000..4f9f47fc75 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusterStatusResponse.json @@ -0,0 +1,95 @@ +{ + "data": { + "generated_time": "2018-12-10T08:23:55.110Z", + "printers": [ + { + "configuration": [ + { + "extruder_index": 0, + "material": { + "material": "empty" + }, + "print_core_id": "AA 0.4" + }, + { + "extruder_index": 1, + "material": { + "material": "empty" + }, + "print_core_id": "AA 0.4" + } + ], + "enabled": true, + "firmware_version": "5.1.2.20180807", + "friendly_name": "Master-Luke", + "ip_address": "10.183.1.140", + "machine_variant": "Ultimaker 3", + "status": "maintenance", + "unique_name": "ultimakersystem-ccbdd30044ec", + "uuid": "b3a47ea3-1eeb-4323-9626-6f9c3c888f9e" + }, + { + "configuration": [ + { + "extruder_index": 0, + "material": { + "brand": "Generic", + "color": "Generic", + "guid": "506c9f0d-e3aa-4bd4-b2d2-23e2425b1aa9", + "material": "PLA" + }, + "print_core_id": "AA 0.4" + }, + { + "extruder_index": 1, + "material": { + "brand": "Ultimaker", + "color": "Red", + "guid": "9cfe5bf1-bdc5-4beb-871a-52c70777842d", + "material": "PLA" + }, + "print_core_id": "AA 0.4" + } + ], + "enabled": true, + "firmware_version": "4.3.3.20180529", + "friendly_name": "UM-Marijn", + "ip_address": "10.183.1.166", + "machine_variant": "Ultimaker 3", + "status": "idle", + "unique_name": "ultimakersystem-ccbdd30058ab", + "uuid": "6e62c40a-4601-4b0e-9fec-c7c02c59c30a" + } + ], + "print_jobs": [ + { + "assigned_to": "6e62c40a-4601-4b0e-9fec-c7c02c59c30a", + "configuration": [ + { + "extruder_index": 0, + "material": { + "brand": "Ultimaker", + "color": "Black", + "guid": "3ee70a86-77d8-4b87-8005-e4a1bc57d2ce", + "material": "PLA" + }, + "print_core_id": "AA 0.4" + } + ], + "constraints": {}, + "created_at": "2018-12-10T08:28:04.108Z", + "force": false, + "last_seen": 500165.109491861, + "machine_variant": "Ultimaker 3", + "name": "UM3_dragon", + "network_error_count": 0, + "owner": "Daniel Testing", + "started": false, + "status": "queued", + "time_elapsed": 0, + "time_total": 14145, + "uuid": "d1c8bd52-5e9f-486a-8c25-a123cc8c7702" + } + ] + } +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json new file mode 100644 index 0000000000..5200e3b971 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/getClusters.json @@ -0,0 +1,17 @@ +{ + "data": [{ + "cluster_id": "RIZ6cZbWA_Ua7RZVJhrdVfVpf0z-MqaSHQE4v8aRTtYq", + "host_guid": "e90ae0ac-1257-4403-91ee-a44c9b7e8050", + "host_name": "ultimakersystem-ccbdd30044ec", + "host_version": "5.0.0.20170101", + "is_online": true, + "status": "active" + }, { + "cluster_id": "NWKV6vJP_LdYsXgXqAcaNCR0YcLJwar1ugh0ikEZsZs8", + "host_guid": "e0ace90a-91ee-1257-4403-e8050a44c9b7", + "host_name": "ultimakersystem-30044ecccbdd", + "host_version": "5.1.2.20180807", + "is_online": true, + "status": "active" + }] +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json new file mode 100644 index 0000000000..caedcd8732 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/postJobPrintResponse.json @@ -0,0 +1,8 @@ +{ + "data": { + "cluster_job_id": "9a59d8e9-91d3-4ff6-b4cb-9db91c4094dd", + "job_id": "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=", + "status": "queued", + "generated_time": "2018-12-10T08:23:55.110Z" + } +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json new file mode 100644 index 0000000000..1304f3a9f6 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Fixtures/putJobUploadResponse.json @@ -0,0 +1,9 @@ +{ + "data": { + "content_type": "text/plain", + "job_id": "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=", + "job_name": "Ultimaker Robot v3.0", + "status": "uploading", + "upload_url": "https://api.ultimaker.com/print-job-upload" + } +} diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/Models/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py b/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py new file mode 100644 index 0000000000..e504509d67 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/NetworkManagerMock.py @@ -0,0 +1,105 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +from typing import Dict, Tuple, Union, Optional, Any +from unittest.mock import MagicMock + +from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest + +from UM.Logger import Logger +from UM.Signal import Signal + + +class FakeSignal: + def __init__(self): + self._callbacks = [] + + def connect(self, callback): + self._callbacks.append(callback) + + def disconnect(self, callback): + self._callbacks.remove(callback) + + def emit(self, *args, **kwargs): + for callback in self._callbacks: + callback(*args, **kwargs) + + +## This class can be used to mock the QNetworkManager class and test the code using it. +# After patching the QNetworkManager class, requests are prepared before they can be executed. +# Any requests not prepared beforehand will cause KeyErrors. +class NetworkManagerMock: + + # An enumeration of the supported operations and their code for the network access manager. + _OPERATIONS = { + "GET": QNetworkAccessManager.GetOperation, + "POST": QNetworkAccessManager.PostOperation, + "PUT": QNetworkAccessManager.PutOperation, + "DELETE": QNetworkAccessManager.DeleteOperation, + "HEAD": QNetworkAccessManager.HeadOperation, + } # type: Dict[str, int] + + ## Initializes the network manager mock. + def __init__(self) -> None: + # A dict with the prepared replies, using the format {(http_method, url): reply} + self.replies = {} # type: Dict[Tuple[str, str], MagicMock] + self.request_bodies = {} # type: Dict[Tuple[str, str], bytes] + + # Signals used in the network manager. + self.finished = Signal() + self.authenticationRequired = Signal() + + ## Mock implementation of the get, post, put, delete and head methods from the network manager. + # Since the methods are very simple and the same it didn't make sense to repeat the code. + # \param method: The method being called. + # \return The mocked function, if the method name is known. Defaults to the standard getattr function. + def __getattr__(self, method: str) -> Any: + ## This mock implementation will simply return the reply from the prepared ones. + # it raises a KeyError if requests are done without being prepared. + def doRequest(request: QNetworkRequest, body: Optional[bytes] = None, *_): + key = method.upper(), request.url().toString() + if body: + self.request_bodies[key] = body + return self.replies[key] + + operation = self._OPERATIONS.get(method.upper()) + if operation: + return doRequest + + # the attribute is not one of the implemented methods, default to the standard implementation. + return getattr(super(), method) + + ## Prepares a server reply for the given parameters. + # \param method: The HTTP method. + # \param url: The URL being requested. + # \param status_code: The HTTP status code for the response. + # \param response: The response body from the server (generally json-encoded). + def prepareReply(self, method: str, url: str, status_code: int, response: Union[bytes, dict]) -> None: + reply_mock = MagicMock() + reply_mock.url().toString.return_value = url + reply_mock.operation.return_value = self._OPERATIONS[method] + reply_mock.attribute.return_value = status_code + reply_mock.finished = FakeSignal() + reply_mock.isFinished.return_value = False + reply_mock.readAll.return_value = response if isinstance(response, bytes) else json.dumps(response).encode() + self.replies[method, url] = reply_mock + Logger.log("i", "Prepared mock {}-response to {} {}", status_code, method, url) + + ## Gets the request that was sent to the network manager for the given method and URL. + # \param method: The HTTP method. + # \param url: The URL. + def getRequestBody(self, method: str, url: str) -> Optional[bytes]: + return self.request_bodies.get((method.upper(), url)) + + ## Emits the signal that the reply is ready to all prepared replies. + def flushReplies(self) -> None: + for key, reply in self.replies.items(): + Logger.log("i", "Flushing reply to {} {}", *key) + reply.isFinished.return_value = True + reply.finished.emit() + self.finished.emit(reply) + self.reset() + + ## Deletes all prepared replies + def reset(self) -> None: + self.replies.clear() diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py new file mode 100644 index 0000000000..b79d009c31 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudApiClient.py @@ -0,0 +1,117 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from typing import List +from unittest import TestCase +from unittest.mock import patch, MagicMock + +from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot +from ...src.Cloud import CloudApiClient +from ...src.Cloud.Models.CloudClusterResponse import CloudClusterResponse +from ...src.Cloud.Models.CloudClusterStatus import CloudClusterStatus +from ...src.Cloud.Models.CloudPrintJobResponse import CloudPrintJobResponse +from ...src.Cloud.Models.CloudPrintJobUploadRequest import CloudPrintJobUploadRequest +from ...src.Cloud.Models.CloudError import CloudError +from .Fixtures import readFixture, parseFixture +from .NetworkManagerMock import NetworkManagerMock + + +class TestCloudApiClient(TestCase): + maxDiff = None + + def _errorHandler(self, errors: List[CloudError]): + raise Exception("Received unexpected error: {}".format(errors)) + + def setUp(self): + super().setUp() + self.account = MagicMock() + self.account.isLoggedIn.return_value = True + + self.network = NetworkManagerMock() + with patch.object(CloudApiClient, 'QNetworkAccessManager', return_value = self.network): + self.api = CloudApiClient.CloudApiClient(self.account, self._errorHandler) + + def test_getClusters(self): + result = [] + + response = readFixture("getClusters") + data = parseFixture("getClusters")["data"] + + self.network.prepareReply("GET", CuraCloudAPIRoot + "/connect/v1/clusters", 200, response) + # The callback is a function that adds the result of the call to getClusters to the result list + self.api.getClusters(lambda clusters: result.extend(clusters)) + + self.network.flushReplies() + + self.assertEqual([CloudClusterResponse(**data[0]), CloudClusterResponse(**data[1])], result) + + def test_getClusterStatus(self): + result = [] + + response = readFixture("getClusterStatusResponse") + data = parseFixture("getClusterStatusResponse")["data"] + + url = CuraCloudAPIRoot + "/connect/v1/clusters/R0YcLJwar1ugh0ikEZsZs8NWKV6vJP_LdYsXgXqAcaNC/status" + self.network.prepareReply("GET", url, 200, response) + self.api.getClusterStatus("R0YcLJwar1ugh0ikEZsZs8NWKV6vJP_LdYsXgXqAcaNC", lambda s: result.append(s)) + + self.network.flushReplies() + + self.assertEqual([CloudClusterStatus(**data)], result) + + def test_requestUpload(self): + + results = [] + + response = readFixture("putJobUploadResponse") + + self.network.prepareReply("PUT", CuraCloudAPIRoot + "/cura/v1/jobs/upload", 200, response) + request = CloudPrintJobUploadRequest(job_name = "job name", file_size = 143234, content_type = "text/plain") + self.api.requestUpload(request, lambda r: results.append(r)) + self.network.flushReplies() + + self.assertEqual(["text/plain"], [r.content_type for r in results]) + self.assertEqual(["uploading"], [r.status for r in results]) + + def test_uploadToolPath(self): + + results = [] + progress = MagicMock() + + data = parseFixture("putJobUploadResponse")["data"] + upload_response = CloudPrintJobResponse(**data) + + # Network client doesn't look into the reply + self.network.prepareReply("PUT", upload_response.upload_url, 200, b'{}') + + mesh = ("1234" * 100000).encode() + self.api.uploadToolPath(upload_response, mesh, lambda: results.append("sent"), progress.advance, progress.error) + + for _ in range(10): + self.network.flushReplies() + self.network.prepareReply("PUT", upload_response.upload_url, 200, b'{}') + + self.assertEqual(["sent"], results) + + def test_requestPrint(self): + + results = [] + + response = readFixture("postJobPrintResponse") + + cluster_id = "NWKV6vJP_LdYsXgXqAcaNCR0YcLJwar1ugh0ikEZsZs8" + cluster_job_id = "9a59d8e9-91d3-4ff6-b4cb-9db91c4094dd" + job_id = "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=" + + self.network.prepareReply("POST", + CuraCloudAPIRoot + "/connect/v1/clusters/{}/print/{}" + .format(cluster_id, job_id), + 200, response) + + self.api.requestPrint(cluster_id, job_id, lambda r: results.append(r)) + + self.network.flushReplies() + + self.assertEqual([job_id], [r.job_id for r in results]) + self.assertEqual([cluster_job_id], [r.cluster_job_id for r in results]) + self.assertEqual(["queued"], [r.status for r in results]) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py new file mode 100644 index 0000000000..14b1f4feba --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDevice.py @@ -0,0 +1,146 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import json +from unittest import TestCase +from unittest.mock import patch, MagicMock + +from UM.Scene.SceneNode import SceneNode +from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot +from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel +from ...src.Cloud import CloudApiClient +from ...src.Cloud.CloudOutputDevice import CloudOutputDevice +from ...src.Cloud.Models.CloudClusterResponse import CloudClusterResponse +from .Fixtures import readFixture, parseFixture +from .NetworkManagerMock import NetworkManagerMock + + +class TestCloudOutputDevice(TestCase): + maxDiff = None + + CLUSTER_ID = "RIZ6cZbWA_Ua7RZVJhrdVfVpf0z-MqaSHQE4v8aRTtYq" + JOB_ID = "ABCDefGHIjKlMNOpQrSTUvYxWZ0-1234567890abcDE=" + HOST_NAME = "ultimakersystem-ccbdd30044ec" + HOST_GUID = "e90ae0ac-1257-4403-91ee-a44c9b7e8050" + + STATUS_URL = "{}/connect/v1/clusters/{}/status".format(CuraCloudAPIRoot, CLUSTER_ID) + PRINT_URL = "{}/connect/v1/clusters/{}/print/{}".format(CuraCloudAPIRoot, CLUSTER_ID, JOB_ID) + REQUEST_UPLOAD_URL = "{}/cura/v1/jobs/upload".format(CuraCloudAPIRoot) + + def setUp(self): + super().setUp() + self.app = MagicMock() + + self.patches = [patch("UM.Qt.QtApplication.QtApplication.getInstance", return_value=self.app), + patch("UM.Application.Application.getInstance", return_value=self.app)] + for patched_method in self.patches: + patched_method.start() + + self.cluster = CloudClusterResponse(self.CLUSTER_ID, self.HOST_GUID, self.HOST_NAME, is_online=True, + status="active") + + self.network = NetworkManagerMock() + self.account = MagicMock(isLoggedIn=True, accessToken="TestAccessToken") + self.onError = MagicMock() + with patch.object(CloudApiClient, "QNetworkAccessManager", return_value = self.network): + self._api = CloudApiClient.CloudApiClient(self.account, self.onError) + + self.device = CloudOutputDevice(self._api, self.cluster) + self.cluster_status = parseFixture("getClusterStatusResponse") + self.network.prepareReply("GET", self.STATUS_URL, 200, readFixture("getClusterStatusResponse")) + + def tearDown(self): + try: + super().tearDown() + self.network.flushReplies() + finally: + for patched_method in self.patches: + patched_method.stop() + + def test_status(self): + self.device._update() + self.network.flushReplies() + + self.assertEqual([PrinterOutputModel, PrinterOutputModel], [type(printer) for printer in self.device.printers]) + + controller_fields = { + "_output_device": self.device, + "can_abort": False, + "can_control_manually": False, + "can_pause": False, + "can_pre_heat_bed": False, + "can_pre_heat_hotends": False, + "can_send_raw_gcode": False, + "can_update_firmware": False, + } + + self.assertEqual({printer["uuid"] for printer in self.cluster_status["data"]["printers"]}, + {printer.key for printer in self.device.printers}) + self.assertEqual([controller_fields, controller_fields], + [printer.getController().__dict__ for printer in self.device.printers]) + + self.assertEqual(["UM3PrintJobOutputModel"], [type(printer).__name__ for printer in self.device.printJobs]) + self.assertEqual({job["uuid"] for job in self.cluster_status["data"]["print_jobs"]}, + {job.key for job in self.device.printJobs}) + self.assertEqual({job["owner"] for job in self.cluster_status["data"]["print_jobs"]}, + {job.owner for job in self.device.printJobs}) + self.assertEqual({job["name"] for job in self.cluster_status["data"]["print_jobs"]}, + {job.name for job in self.device.printJobs}) + + def test_remove_print_job(self): + self.device._update() + self.network.flushReplies() + self.assertEqual(1, len(self.device.printJobs)) + + self.cluster_status["data"]["print_jobs"].clear() + self.network.prepareReply("GET", self.STATUS_URL, 200, self.cluster_status) + + self.device._last_request_time = None + self.device._update() + self.network.flushReplies() + self.assertEqual([], self.device.printJobs) + + def test_remove_printers(self): + self.device._update() + self.network.flushReplies() + self.assertEqual(2, len(self.device.printers)) + + self.cluster_status["data"]["printers"].clear() + self.network.prepareReply("GET", self.STATUS_URL, 200, self.cluster_status) + + self.device._last_request_time = None + self.device._update() + self.network.flushReplies() + self.assertEqual([], self.device.printers) + + def test_print_to_cloud(self): + active_machine_mock = self.app.getGlobalContainerStack.return_value + active_machine_mock.getMetaDataEntry.side_effect = {"file_formats": "application/gzip"}.get + + request_upload_response = parseFixture("putJobUploadResponse") + request_print_response = parseFixture("postJobPrintResponse") + self.network.prepareReply("PUT", self.REQUEST_UPLOAD_URL, 201, request_upload_response) + self.network.prepareReply("PUT", request_upload_response["data"]["upload_url"], 201, b"{}") + self.network.prepareReply("POST", self.PRINT_URL, 200, request_print_response) + + file_handler = MagicMock() + file_handler.getSupportedFileTypesWrite.return_value = [{ + "extension": "gcode.gz", + "mime_type": "application/gzip", + "mode": 2, + }] + file_handler.getWriterByMimeType.return_value.write.side_effect = \ + lambda stream, nodes: stream.write(str(nodes).encode()) + + scene_nodes = [SceneNode()] + expected_mesh = str(scene_nodes).encode() + self.device.requestWrite(scene_nodes, file_handler=file_handler, file_name="FileName") + + self.network.flushReplies() + self.assertEqual( + {"data": {"content_type": "application/gzip", "file_size": len(expected_mesh), "job_name": "FileName"}}, + json.loads(self.network.getRequestBody("PUT", self.REQUEST_UPLOAD_URL).decode()) + ) + self.assertEqual(expected_mesh, + self.network.getRequestBody("PUT", request_upload_response["data"]["upload_url"])) + + self.assertIsNone(self.network.getRequestBody("POST", self.PRINT_URL)) diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py new file mode 100644 index 0000000000..e24ca1694e --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/TestCloudOutputDeviceManager.py @@ -0,0 +1,123 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +from unittest import TestCase +from unittest.mock import patch, MagicMock + +from UM.OutputDevice.OutputDeviceManager import OutputDeviceManager +from cura.UltimakerCloudAuthentication import CuraCloudAPIRoot +from ...src.Cloud import CloudApiClient +from ...src.Cloud import CloudOutputDeviceManager +from .Fixtures import parseFixture, readFixture +from .NetworkManagerMock import NetworkManagerMock, FakeSignal + + +class TestCloudOutputDeviceManager(TestCase): + maxDiff = None + + URL = CuraCloudAPIRoot + "/connect/v1/clusters" + + def setUp(self): + super().setUp() + self.app = MagicMock() + self.device_manager = OutputDeviceManager() + self.app.getOutputDeviceManager.return_value = self.device_manager + + self.patches = [patch("UM.Qt.QtApplication.QtApplication.getInstance", return_value=self.app), + patch("UM.Application.Application.getInstance", return_value=self.app)] + for patched_method in self.patches: + patched_method.start() + + self.network = NetworkManagerMock() + self.timer = MagicMock(timeout = FakeSignal()) + with patch.object(CloudApiClient, "QNetworkAccessManager", return_value = self.network), \ + patch.object(CloudOutputDeviceManager, "QTimer", return_value = self.timer): + self.manager = CloudOutputDeviceManager.CloudOutputDeviceManager() + self.clusters_response = parseFixture("getClusters") + self.network.prepareReply("GET", self.URL, 200, readFixture("getClusters")) + + def tearDown(self): + try: + self._beforeTearDown() + + self.network.flushReplies() + self.manager.stop() + for patched_method in self.patches: + patched_method.stop() + finally: + super().tearDown() + + ## Before tear down method we check whether the state of the output device manager is what we expect based on the + # mocked API response. + def _beforeTearDown(self): + # let the network send replies + self.network.flushReplies() + # get the created devices + devices = self.device_manager.getOutputDevices() + # TODO: Check active device + + response_clusters = self.clusters_response.get("data", []) + manager_clusters = sorted([device.clusterData.toDict() for device in self.manager._remote_clusters.values()], + key=lambda cluster: cluster['cluster_id'], reverse=True) + self.assertEqual(response_clusters, manager_clusters) + + ## Runs the initial request to retrieve the clusters. + def _loadData(self): + self.manager.start() + self.network.flushReplies() + + def test_device_is_created(self): + # just create the cluster, it is checked at tearDown + self._loadData() + + def test_device_is_updated(self): + self._loadData() + + # update the cluster from member variable, which is checked at tearDown + self.clusters_response["data"][0]["host_name"] = "New host name" + self.network.prepareReply("GET", self.URL, 200, self.clusters_response) + + self.manager._update_timer.timeout.emit() + + def test_device_is_removed(self): + self._loadData() + + # delete the cluster from member variable, which is checked at tearDown + del self.clusters_response["data"][1] + self.network.prepareReply("GET", self.URL, 200, self.clusters_response) + + self.manager._update_timer.timeout.emit() + + def test_device_connects_by_cluster_id(self): + active_machine_mock = self.app.getGlobalContainerStack.return_value + cluster1, cluster2 = self.clusters_response["data"] + cluster_id = cluster1["cluster_id"] + active_machine_mock.getMetaDataEntry.side_effect = {"um_cloud_cluster_id": cluster_id}.get + + self._loadData() + + self.assertTrue(self.device_manager.getOutputDevice(cluster1["cluster_id"]).isConnected()) + self.assertIsNone(self.device_manager.getOutputDevice(cluster2["cluster_id"])) + self.assertEquals([], active_machine_mock.setMetaDataEntry.mock_calls) + + def test_device_connects_by_network_key(self): + active_machine_mock = self.app.getGlobalContainerStack.return_value + + cluster1, cluster2 = self.clusters_response["data"] + network_key = cluster2["host_name"] + ".ultimaker.local" + active_machine_mock.getMetaDataEntry.side_effect = {"um_network_key": network_key}.get + + self._loadData() + + self.assertIsNone(self.device_manager.getOutputDevice(cluster1["cluster_id"])) + self.assertTrue(self.device_manager.getOutputDevice(cluster2["cluster_id"]).isConnected()) + + active_machine_mock.setMetaDataEntry.assert_called_with("um_cloud_cluster_id", cluster2["cluster_id"]) + + @patch.object(CloudOutputDeviceManager, "Message") + def test_api_error(self, message_mock): + self.clusters_response = { + "errors": [{"id": "notFound", "title": "Not found!", "http_status": "404", "code": "notFound"}] + } + self.network.prepareReply("GET", self.URL, 200, self.clusters_response) + self._loadData() + message_mock.return_value.show.assert_called_once_with() diff --git a/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py b/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/Cloud/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py b/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py new file mode 100644 index 0000000000..952d38dcf4 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/TestSendMaterialJob.py @@ -0,0 +1,244 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. +import io +import json +from unittest import TestCase, mock +from unittest.mock import patch, call, MagicMock + +from PyQt5.QtCore import QByteArray + +from UM.Application import Application + +from cura.Machines.MaterialGroup import MaterialGroup +from cura.Machines.MaterialNode import MaterialNode + +from ..src.SendMaterialJob import SendMaterialJob + +_FILES_MAP = {"generic_pla_white": "/materials/generic_pla_white.xml.fdm_material", + "generic_pla_black": "/materials/generic_pla_black.xml.fdm_material", + } + + +@patch("builtins.open", lambda _, __: io.StringIO("<xml></xml>")) +class TestSendMaterialJob(TestCase): + # version 1 + _LOCAL_MATERIAL_WHITE = {"type": "material", "status": "unknown", "id": "generic_pla_white", + "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", + "brand": "Generic", "material": "PLA", "color_name": "White", + "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "1", "color_code": "#ffffff", + "description": "Test PLA White", "adhesion_info": "Use glue.", "approximate_diameter": "3", + "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + # version 2 + _LOCAL_MATERIAL_WHITE_NEWER = {"type": "material", "status": "unknown", "id": "generic_pla_white", + "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", + "brand": "Generic", "material": "PLA", "color_name": "White", + "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "2", + "color_code": "#ffffff", + "description": "Test PLA White", "adhesion_info": "Use glue.", + "approximate_diameter": "3", + "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + # invalid version: "one" + _LOCAL_MATERIAL_WHITE_INVALID_VERSION = {"type": "material", "status": "unknown", "id": "generic_pla_white", + "base_file": "generic_pla_white", "setting_version": "5", "name": "White PLA", + "brand": "Generic", "material": "PLA", "color_name": "White", + "GUID": "badb0ee7-87c8-4f3f-9398-938587b67dce", "version": "one", + "color_code": "#ffffff", + "description": "Test PLA White", "adhesion_info": "Use glue.", + "approximate_diameter": "3", + "properties": {"density": "1.00", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + _LOCAL_MATERIAL_WHITE_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", + MaterialNode(_LOCAL_MATERIAL_WHITE))} + + _LOCAL_MATERIAL_WHITE_NEWER_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", + MaterialNode(_LOCAL_MATERIAL_WHITE_NEWER))} + + _LOCAL_MATERIAL_WHITE_INVALID_VERSION_ALL_RESULT = {"generic_pla_white": MaterialGroup("generic_pla_white", + MaterialNode(_LOCAL_MATERIAL_WHITE_INVALID_VERSION))} + + _LOCAL_MATERIAL_BLACK = {"type": "material", "status": "unknown", "id": "generic_pla_black", + "base_file": "generic_pla_black", "setting_version": "5", "name": "Yellow CPE", + "brand": "Ultimaker", "material": "CPE", "color_name": "Black", + "GUID": "5fbb362a-41f9-4818-bb43-15ea6df34aa4", "version": "1", "color_code": "#000000", + "description": "Test PLA Black", "adhesion_info": "Use glue.", "approximate_diameter": "3", + "properties": {"density": "1.01", "diameter": "2.85", "weight": "750"}, + "definition": "fdmprinter", "compatible": True} + + _LOCAL_MATERIAL_BLACK_ALL_RESULT = {"generic_pla_black": MaterialGroup("generic_pla_black", + MaterialNode(_LOCAL_MATERIAL_BLACK))} + + _REMOTE_MATERIAL_WHITE = { + "guid": "badb0ee7-87c8-4f3f-9398-938587b67dce", + "material": "PLA", + "brand": "Generic", + "version": 1, + "color": "White", + "density": 1.00 + } + + _REMOTE_MATERIAL_BLACK = { + "guid": "5fbb362a-41f9-4818-bb43-15ea6df34aa4", + "material": "PLA", + "brand": "Generic", + "version": 2, + "color": "Black", + "density": 1.00 + } + + def test_run(self): + device_mock = MagicMock() + job = SendMaterialJob(device_mock) + job.run() + + # We expect the materials endpoint to be called when the job runs. + device_mock.get.assert_called_with("materials/", on_finished = job._onGetRemoteMaterials) + + def test__onGetRemoteMaterials_withFailedRequest(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 404 + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # We expect the device not to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + def test__onGetRemoteMaterials_withWrongEncoding(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("cp500")) + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # Given that the parsing fails we do no expect the device to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + def test__onGetRemoteMaterials_withBadJsonAnswer(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(b"Six sick hicks nick six slick bricks with picks and sticks.") + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # Given that the parsing fails we do no expect the device to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + def test__onGetRemoteMaterials_withMissingGuidInRemoteMaterial(self): + reply_mock = MagicMock() + device_mock = MagicMock() + reply_mock.attribute.return_value = 200 + remote_material_without_guid = self._REMOTE_MATERIAL_WHITE.copy() + del remote_material_without_guid["guid"] + reply_mock.readAll.return_value = QByteArray(json.dumps([remote_material_without_guid]).encode("ascii")) + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + # Given that parsing fails we do not expect the device to be called for any follow up. + self.assertEqual(0, device_mock.createFormPart.call_count) + + @patch("cura.Machines.MaterialManager.MaterialManager") + @patch("cura.Settings.CuraContainerRegistry") + @patch("UM.Application") + def test__onGetRemoteMaterials_withInvalidVersionInLocalMaterial(self, application_mock, container_registry_mock, + material_manager_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + application_mock.getContainerRegistry.return_value = container_registry_mock + application_mock.getMaterialManager.return_value = material_manager_mock + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) + + material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_INVALID_VERSION_ALL_RESULT.copy() + + with mock.patch.object(Application, "getInstance", new = lambda: application_mock): + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(0, device_mock.createFormPart.call_count) + + @patch("UM.Application.Application.getInstance") + def test__onGetRemoteMaterials_withNoUpdate(self, application_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + container_registry_mock = application_mock.getContainerRegistry.return_value + material_manager_mock = application_mock.getMaterialManager.return_value + + device_mock.createFormPart.return_value = "_xXx_" + + material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_ALL_RESULT.copy() + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) + + with mock.patch.object(Application, "getInstance", new = lambda: application_mock): + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(0, device_mock.createFormPart.call_count) + self.assertEqual(0, device_mock.postFormWithParts.call_count) + + @patch("UM.Application.Application.getInstance") + def test__onGetRemoteMaterials_withUpdatedMaterial(self, get_instance_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + application_mock = get_instance_mock.return_value + container_registry_mock = application_mock.getContainerRegistry.return_value + material_manager_mock = application_mock.getMaterialManager.return_value + + container_registry_mock.getContainerFilePathById = lambda x: _FILES_MAP.get(x) + + device_mock.createFormPart.return_value = "_xXx_" + + material_manager_mock.getAllMaterialGroups.return_value = self._LOCAL_MATERIAL_WHITE_NEWER_ALL_RESULT.copy() + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_WHITE]).encode("ascii")) + + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(1, device_mock.createFormPart.call_count) + self.assertEqual(1, device_mock.postFormWithParts.call_count) + self.assertEquals( + [call.createFormPart("name=\"file\"; filename=\"generic_pla_white.xml.fdm_material\"", "<xml></xml>"), + call.postFormWithParts(target = "materials/", parts = ["_xXx_"], on_finished = job.sendingFinished)], + device_mock.method_calls) + + @patch("UM.Application.Application.getInstance") + def test__onGetRemoteMaterials_withNewMaterial(self, application_mock): + reply_mock = MagicMock() + device_mock = MagicMock() + container_registry_mock = application_mock.getContainerRegistry.return_value + material_manager_mock = application_mock.getMaterialManager.return_value + + container_registry_mock.getContainerFilePathById = lambda x: _FILES_MAP.get(x) + + device_mock.createFormPart.return_value = "_xXx_" + + all_results = self._LOCAL_MATERIAL_WHITE_ALL_RESULT.copy() + for key, value in self._LOCAL_MATERIAL_BLACK_ALL_RESULT.items(): + all_results[key] = value + material_manager_mock.getAllMaterialGroups.return_value = all_results + + reply_mock.attribute.return_value = 200 + reply_mock.readAll.return_value = QByteArray(json.dumps([self._REMOTE_MATERIAL_BLACK]).encode("ascii")) + + with mock.patch.object(Application, "getInstance", new = lambda: application_mock): + job = SendMaterialJob(device_mock) + job._onGetRemoteMaterials(reply_mock) + + self.assertEqual(1, device_mock.createFormPart.call_count) + self.assertEqual(1, device_mock.postFormWithParts.call_count) + self.assertEquals( + [call.createFormPart("name=\"file\"; filename=\"generic_pla_white.xml.fdm_material\"", "<xml></xml>"), + call.postFormWithParts(target = "materials/", parts = ["_xXx_"], on_finished = job.sendingFinished)], + device_mock.method_calls) diff --git a/plugins/UM3NetworkPrinting/tests/__init__.py b/plugins/UM3NetworkPrinting/tests/__init__.py new file mode 100644 index 0000000000..f3f6970c54 --- /dev/null +++ b/plugins/UM3NetworkPrinting/tests/__init__.py @@ -0,0 +1,2 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. diff --git a/plugins/USBPrinting/AutoDetectBaudJob.py b/plugins/USBPrinting/AutoDetectBaudJob.py index 8b37c4b29d..2fa0af1795 100644 --- a/plugins/USBPrinting/AutoDetectBaudJob.py +++ b/plugins/USBPrinting/AutoDetectBaudJob.py @@ -4,6 +4,7 @@ from UM.Job import Job from UM.Logger import Logger +from .avr_isp import ispBase from .avr_isp.stk500v2 import Stk500v2 from time import time, sleep @@ -14,12 +15,12 @@ from serial import Serial, SerialException # It tries a pre-set list of baud rates. All these baud rates are validated by requesting the temperature a few times # and checking if the results make sense. If getResult() is not None, it was able to find a correct baud rate. class AutoDetectBaudJob(Job): - def __init__(self, serial_port): + def __init__(self, serial_port: int) -> None: super().__init__() self._serial_port = serial_port - self._all_baud_rates = [115200, 250000, 230400, 57600, 38400, 19200, 9600] + self._all_baud_rates = [115200, 250000, 500000, 230400, 57600, 38400, 19200, 9600] - def run(self): + def run(self) -> None: Logger.log("d", "Auto detect baud rate started.") wait_response_timeouts = [3, 15, 30] wait_bootloader_times = [1.5, 5, 15] @@ -32,7 +33,7 @@ class AutoDetectBaudJob(Job): try: programmer.connect(self._serial_port) serial = programmer.leaveISP() - except: + except ispBase.IspError: programmer.close() for retry in range(tries): @@ -58,7 +59,7 @@ class AutoDetectBaudJob(Job): # We already have a serial connection, just change the baud rate. try: serial.baudrate = baud_rate - except: + except ValueError: continue sleep(wait_bootloader) # Ensure that we are not talking to the boot loader. 1.5 seconds seems to be the magic number successful_responses = 0 @@ -81,5 +82,5 @@ class AutoDetectBaudJob(Job): return serial.write(b"M105\n") - sleep(15) # Give the printer some time to init and try again. + sleep(15) # Give the printer some time to init and try again. self.setResult(None) # Unable to detect the correct baudrate. diff --git a/plugins/USBPrinting/MonitorItem.qml b/plugins/USBPrinting/MonitorItem.qml new file mode 100644 index 0000000000..c86353f814 --- /dev/null +++ b/plugins/USBPrinting/MonitorItem.qml @@ -0,0 +1,48 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.10 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura +Component +{ + Item + { + Rectangle + { + color: UM.Theme.getColor("main_background") + + anchors.right: parent.right + width: parent.width * 0.3 + anchors.top: parent.top + anchors.bottom: parent.bottom + + Cura.PrintMonitor + { + anchors.fill: parent + } + + Rectangle + { + id: footerSeparator + width: parent.width + height: UM.Theme.getSize("wide_lining").height + color: UM.Theme.getColor("wide_lining") + anchors.bottom: monitorButton.top + anchors.bottomMargin: UM.Theme.getSize("thick_margin").height + } + + // MonitorButton is actually the bottom footer panel. + Cura.MonitorButton + { + id: monitorButton + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + } + } + } +}
\ No newline at end of file diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py index e1c39ff8fa..89903b06f4 100644 --- a/plugins/USBPrinting/USBPrinterOutputDevice.py +++ b/plugins/USBPrinting/USBPrinterOutputDevice.py @@ -1,12 +1,13 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import os from UM.Logger import Logger from UM.i18n import i18nCatalog from UM.Qt.Duration import DurationFormat from cura.CuraApplication import CuraApplication -from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState +from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.GenericOutputController import GenericOutputController @@ -28,7 +29,7 @@ catalog = i18nCatalog("cura") class USBPrinterOutputDevice(PrinterOutputDevice): def __init__(self, serial_port: str, baud_rate: Optional[int] = None) -> None: - super().__init__(serial_port) + super().__init__(serial_port, connection_type = ConnectionType.UsbConnection) self.setName(catalog.i18nc("@item:inmenu", "USB printing")) self.setShortDescription(catalog.i18nc("@action:button Preceded by 'Ready to'.", "Print via USB")) self.setDescription(catalog.i18nc("@info:tooltip", "Print via USB")) @@ -48,7 +49,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._baud_rate = baud_rate - self._all_baud_rates = [115200, 250000, 230400, 57600, 38400, 19200, 9600] + self._all_baud_rates = [115200, 250000, 500000, 230400, 57600, 38400, 19200, 9600] # Instead of using a timer, we really need the update to be as a thread, as reading from serial can block. self._update_thread = Thread(target = self._update, daemon = True) @@ -64,7 +65,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._accepts_commands = True self._paused = False - self._printer_busy = False # when printer is preheating and waiting (M190/M109), or when waiting for action on the printer + self._printer_busy = False # When printer is preheating and waiting (M190/M109), or when waiting for action on the printer self.setConnectionText(catalog.i18nc("@info:status", "Connected via USB")) @@ -77,6 +78,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._firmware_name_requested = False self._firmware_updater = AvrFirmwareUpdater(self) + self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "MonitorItem.qml") + CuraApplication.getInstance().getOnExitCallbackManager().addCallback(self._checkActivePrintingUponAppExit) # This is a callback function that checks if there is any printing in progress via USB when the application tries @@ -176,7 +179,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): return CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) self._onGlobalContainerStackChanged() - self.setConnectionState(ConnectionState.connected) + self.setConnectionState(ConnectionState.Connected) self._update_thread.start() def _onGlobalContainerStackChanged(self): @@ -205,7 +208,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._sendCommand(command) def _sendCommand(self, command: Union[str, bytes]): - if self._serial is None or self._connection_state != ConnectionState.connected: + if self._serial is None or self._connection_state != ConnectionState.Connected: return new_command = cast(bytes, command) if type(command) is bytes else cast(str, command).encode() # type: bytes @@ -219,7 +222,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice): self._command_received.set() def _update(self): - while self._connection_state == ConnectionState.connected and self._serial is not None: + while self._connection_state == ConnectionState.Connected and self._serial is not None: try: line = self._serial.readline() except: diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py index bd207d9d96..d4c0d1828e 100644 --- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py +++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py @@ -66,7 +66,7 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin): return changed_device = self._usb_output_devices[serial_port] - if changed_device.connectionState == ConnectionState.connected: + if changed_device.connectionState == ConnectionState.Connected: self.getOutputDeviceManager().addOutputDevice(changed_device) else: self.getOutputDeviceManager().removeOutputDevice(serial_port) diff --git a/plugins/USBPrinting/plugin.json b/plugins/USBPrinting/plugin.json index 3484c8a48a..45971d858b 100644 --- a/plugins/USBPrinting/plugin.json +++ b/plugins/USBPrinting/plugin.json @@ -1,8 +1,8 @@ { "name": "USB printing", "author": "Ultimaker B.V.", - "version": "1.0.0", - "api": 5, + "version": "1.0.2", + "api": "6.0", "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", "i18n-catalog": "cura" } diff --git a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml index 4a1d42e248..2a01cfaa40 100644 --- a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml +++ b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml @@ -19,7 +19,7 @@ Cura.MachineAction property bool heatupBedStarted: false property bool printerConnected: Cura.MachineManager.printerConnected - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog { id: catalog; name: "cura"} Label { id: pageTitle diff --git a/plugins/UltimakerMachineActions/plugin.json b/plugins/UltimakerMachineActions/plugin.json index b60c7df88e..3e3e0af9b0 100644 --- a/plugins/UltimakerMachineActions/plugin.json +++ b/plugins/UltimakerMachineActions/plugin.json @@ -1,8 +1,8 @@ { "name": "Ultimaker machine actions", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/UserAgreement/UserAgreement.qml b/plugins/UserAgreement/UserAgreement.qml index 4ee03f4ad5..2e5893fc41 100644 --- a/plugins/UserAgreement/UserAgreement.qml +++ b/plugins/UserAgreement/UserAgreement.qml @@ -36,7 +36,7 @@ UM.Dialog width: parent.width anchors.bottomMargin: UM.Theme.getSize("default_margin").height - UM.I18nCatalog { id: catalog; name:"cura" } + UM.I18nCatalog { id: catalog; name: "cura" } Button { diff --git a/plugins/UserAgreement/plugin.json b/plugins/UserAgreement/plugin.json index 50a2aa0441..b172d1f9a2 100644 --- a/plugins/UserAgreement/plugin.json +++ b/plugins/UserAgreement/plugin.json @@ -1,8 +1,8 @@ { "name": "UserAgreement", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Ask the user once if he/she agrees with our license.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py index 37b6989add..ff5c33517d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py @@ -1,14 +1,16 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -import UM.VersionUpgrade #To indicate that a file is of incorrect format. -import UM.VersionUpgradeManager #To schedule more files to be upgraded. -from UM.Resources import Resources #To get the config storage path. - import configparser #To read config files. import io #To write config files to strings as if they were files. import os.path #To get the path to write new user profiles to. +from typing import Dict, List, Optional, Set, Tuple import urllib #To serialise the user container file name properly. +import urllib.parse + +import UM.VersionUpgrade #To indicate that a file is of incorrect format. +import UM.VersionUpgradeManager #To schedule more files to be upgraded. +from UM.Resources import Resources #To get the config storage path. ## Creates a new machine instance instance by parsing a serialised machine # instance in version 1 of the file format. @@ -18,7 +20,7 @@ import urllib #To serialise the user container file name properly. # extension. # \return A machine instance instance, or None if the file format is # incorrect. -def importFrom(serialised, filename): +def importFrom(serialised: str, filename: str) -> Optional["MachineInstance"]: try: return MachineInstance(serialised, filename) except (configparser.Error, UM.VersionUpgrade.FormatException, UM.VersionUpgrade.InvalidVersionException): @@ -32,7 +34,7 @@ class MachineInstance: # \param serialised A string with the contents of a machine instance file, # without extension. # \param filename The supposed file name of this machine instance. - def __init__(self, serialised, filename): + def __init__(self, serialised: str, filename: str) -> None: self._filename = filename config = configparser.ConfigParser(interpolation = None) @@ -53,11 +55,11 @@ class MachineInstance: self._type_name = config.get("general", "type") self._variant_name = config.get("general", "variant", fallback = "empty_variant") self._name = config.get("general", "name", fallback = "") - self._key = config.get("general", "key", fallback = None) + self._key = config.get("general", "key", fallback = "") self._active_profile_name = config.get("general", "active_profile", fallback = "empty_quality") self._active_material_name = config.get("general", "material", fallback = "empty_material") - self._machine_setting_overrides = {} + self._machine_setting_overrides = {} # type: Dict[str, str] for key, value in config["machine_settings"].items(): self._machine_setting_overrides[key] = value @@ -67,7 +69,7 @@ class MachineInstance: # # \return A tuple containing the new filename and a serialised form of # this machine instance, serialised in version 2 of the file format. - def export(self): + def export(self) -> Tuple[List[str], List[str]]: config = configparser.ConfigParser(interpolation = None) # Build a config file in the form of version 2. config.add_section("general") @@ -108,7 +110,7 @@ class MachineInstance: version_upgrade_manager = UM.VersionUpgradeManager.VersionUpgradeManager.getInstance() user_version_to_paths_dict = version_upgrade_manager.getStoragePaths("user") - paths_set = set() + paths_set = set() # type: Set[str] for paths in user_version_to_paths_dict.values(): paths_set |= paths diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py index 842499da86..953837b863 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Preferences.py @@ -1,8 +1,9 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To read config files. import io #To output config files to string. +from typing import List, Optional, Tuple import UM.VersionUpgrade #To indicate that a file is of the wrong format. @@ -14,7 +15,7 @@ import UM.VersionUpgrade #To indicate that a file is of the wrong format. # extension. # \return A representation of those preferences, or None if the file format is # incorrect. -def importFrom(serialised, filename): +def importFrom(serialised: str, filename: str) -> Optional["Preferences"]: try: return Preferences(serialised, filename) except (configparser.Error, UM.VersionUpgrade.FormatException, UM.VersionUpgrade.InvalidVersionException): @@ -28,7 +29,7 @@ class Preferences: # \param serialised A serialised version 2 preferences file. # \param filename The supposed filename of the preferences file, without # extension. - def __init__(self, serialised, filename): + def __init__(self, serialised: str, filename: str) -> None: self._filename = filename self._config = configparser.ConfigParser(interpolation = None) @@ -50,7 +51,7 @@ class Preferences: # # \return A tuple containing the new filename and a serialised version of # a preferences file in version 3. - def export(self): + def export(self) -> Tuple[List[str], List[str]]: #Reset the cura/categories_expanded property since it works differently now. if self._config.has_section("cura") and self._config.has_option("cura", "categories_expanded"): self._config.remove_option("cura", "categories_expanded") @@ -58,11 +59,11 @@ class Preferences: #Translate the setting names in the visible settings. if self._config.has_section("machines") and self._config.has_option("machines", "setting_visibility"): visible_settings = self._config.get("machines", "setting_visibility") - visible_settings = visible_settings.split(",") + visible_settings_list = visible_settings.split(",") import VersionUpgrade21to22 #Import here to prevent a circular dependency. - visible_settings = [VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettingName(setting_name) - for setting_name in visible_settings] - visible_settings = ",".join(visible_settings) + visible_settings_list = [VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettingName(setting_name) + for setting_name in visible_settings_list] + visible_settings = ",".join(visible_settings_list) self._config.set("machines", "setting_visibility", value = visible_settings) #Translate the active_instance key. diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py index 161edcb67c..af9635d384 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py @@ -1,10 +1,9 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To read config files. import io #To write config files to strings as if they were files. -from typing import Dict -from typing import List +from typing import Dict, List, Optional, Tuple import UM.VersionUpgrade from UM.Logger import Logger @@ -15,7 +14,7 @@ from UM.Logger import Logger # \param serialised The serialised form of a profile in version 1. # \param filename The supposed filename of the profile, without extension. # \return A profile instance, or None if the file format is incorrect. -def importFrom(serialised, filename): +def importFrom(serialised: str, filename: str) -> Optional["Profile"]: try: return Profile(serialised, filename) except (configparser.Error, UM.VersionUpgrade.FormatException, UM.VersionUpgrade.InvalidVersionException): @@ -77,11 +76,11 @@ class Profile: # # \return A tuple containing the new filename and a serialised form of # this profile, serialised in version 2 of the file format. - def export(self): + def export(self) -> Optional[Tuple[List[str], List[str]]]: import VersionUpgrade21to22 # Import here to prevent circular dependencies. if self._name == "Current settings": - return None, None #Can't upgrade these, because the new current profile needs to specify the definition ID and the old file only had the machine instance, not the definition. + return None #Can't upgrade these, because the new current profile needs to specify the definition ID and the old file only had the machine instance, not the definition. config = configparser.ConfigParser(interpolation = None) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py index d8036491bf..536385b19d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/VersionUpgrade21to22.py @@ -1,7 +1,8 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To get version numbers from config files. +from typing import Dict, Iterable, List, Optional, Set, Tuple from UM.VersionUpgrade import VersionUpgrade # Superclass of the plugin. @@ -30,7 +31,7 @@ _machines_with_machine_quality = { "materials": { "generic_abs", "generic_cpe", "generic_pla", "generic_pva", "generic_cpe_plus", "generic_nylon", "generic_pc", "generic_tpu" }, "variants": { "0.25 mm", "0.4 mm", "0.6 mm", "0.8 mm" } } -} +} # type: Dict[str, Dict[str, Set[str]]] ## How to translate material names from the old version to the new. _material_translations = { @@ -41,7 +42,7 @@ _material_translations = { "Nylon": "generic_nylon", "PC": "generic_pc", "TPU": "generic_tpu", -} +} # type: Dict[str, str] ## How to translate material names for in the profile names. _material_translations_profiles = { @@ -52,17 +53,17 @@ _material_translations_profiles = { "Nylon": "nylon", "PC": "pc", "TPU": "tpu", -} +} # type: Dict[str, str] ## How to translate printer names from the old version to the new. _printer_translations = { "ultimaker2plus": "ultimaker2_plus" -} +} # type: Dict[str, str] _printer_translations_profiles = { "ultimaker2plus": "um2p", #Does NOT get included in PLA profiles! "ultimaker2_extended_plus": "um2ep" #Has no profiles for CPE+, Nylon, PC and TPU! -} +} # type: Dict[str, str] ## How to translate profile names from the old version to the new. # @@ -116,13 +117,13 @@ _profile_translations = { "tpu_0.25_high": "um2p_tpu_0.25_high", "tpu_0.4_normal": "um2p_tpu_0.4_normal", "tpu_0.6_fast": "um2p_tpu_0.6_fast" -} +} # type: Dict[str, str] ## Settings that are no longer in the new version. _removed_settings = { "fill_perimeter_gaps", "support_area_smoothing" -} +} # type: Set[str] ## How to translate setting names from the old version to the new. _setting_name_translations = { @@ -142,7 +143,7 @@ _setting_name_translations = { "support_roof_line_distance": "support_interface_line_distance", "support_roof_line_width": "support_interface_line_width", "support_roof_pattern": "support_interface_pattern" -} +} # type: Dict[str, str] ## Custom profiles become quality_changes. This dictates which quality to base # the quality_changes profile on. @@ -190,7 +191,7 @@ _quality_fallbacks = { #No TPU. } } -} +} # type: Dict[str, Dict[str, Dict[str, str]]] ## How to translate variants of specific machines from the old version to the # new. @@ -207,7 +208,7 @@ _variant_translations = { "0.6 mm": "ultimaker2_extended_plus_0.6", "0.8 mm": "ultimaker2_extended_plus_0.8" } -} +} # type: Dict[str, Dict[str, str]] ## How to translate variant names for in the profile names. _variant_translations_profiles = { @@ -215,7 +216,7 @@ _variant_translations_profiles = { "0.4 mm": "0.4", "0.6 mm": "0.6", "0.8 mm": "0.8" -} +} # type: Dict[str, str] ## Cura 2.2's material profiles use a different naming scheme for variants. # @@ -233,7 +234,7 @@ _variant_translations_materials = { "0.6 mm": "ultimaker2_plus_0.6_mm", "0.8 mm": "ultimaker2_plus_0.8_mm" } -} +} # type: Dict[str, Dict[str, str]] ## Converts configuration from Cura 2.1's file formats to Cura 2.2's. # @@ -245,12 +246,12 @@ class VersionUpgrade21to22(VersionUpgrade): # number is stored in general/version, so get the data from that key. # # \param serialised The contents of a config file. - # \return \type{int} The version number of that config file. - def getCfgVersion(self, serialised): + # \return The version number of that config file. + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Gets the fallback quality to use for a specific machine-variant-material @@ -263,7 +264,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param variant The variant ID of the user's configuration in 2.2. # \param material The material ID of the user's configuration in 2.2. @staticmethod - def getQualityFallback(machine, variant, material): + def getQualityFallback(machine: str, variant: str, material: str) -> str: if machine not in _quality_fallbacks: return "normal" if variant not in _quality_fallbacks[machine]: @@ -277,14 +278,14 @@ class VersionUpgrade21to22(VersionUpgrade): # This is required to test if profiles should be converted to a quality # profile or a quality-changes profile. @staticmethod - def builtInProfiles(): + def builtInProfiles() -> Iterable[str]: return _profile_translations.keys() ## Gets a set of the machines which now have per-material quality profiles. # # \return A set of machine identifiers. @staticmethod - def machinesWithMachineQuality(): + def machinesWithMachineQuality() -> Dict[str, Dict[str, Set[str]]]: return _machines_with_machine_quality ## Converts machine instances from format version 1 to version 2. @@ -295,10 +296,10 @@ class VersionUpgrade21to22(VersionUpgrade): # \return A tuple containing the new filename and the serialised machine # instance in version 2, or None if the input was not of the correct # format. - def upgradeMachineInstance(self, serialised, filename): + def upgradeMachineInstance(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]: machine_instance = MachineInstance.importFrom(serialised, filename) if not machine_instance: #Invalid file format. - return filename, None + return None return machine_instance.export() ## Converts preferences from format version 2 to version 3. @@ -309,10 +310,10 @@ class VersionUpgrade21to22(VersionUpgrade): # \return A tuple containing the new filename and the serialised # preferences in version 3, or None if the input was not of the correct # format. - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]: preferences = Preferences.importFrom(serialised, filename) if not preferences: #Invalid file format. - return filename, None + return None return preferences.export() ## Converts profiles from format version 1 to version 2. @@ -322,10 +323,10 @@ class VersionUpgrade21to22(VersionUpgrade): # extension. # \return A tuple containing the new filename and the serialised profile # in version 2, or None if the input was not of the correct format. - def upgradeProfile(self, serialised, filename): + def upgradeProfile(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]: profile = Profile.importFrom(serialised, filename) if not profile: # Invalid file format. - return filename, None + return None return profile.export() ## Translates a material name for the change from Cura 2.1 to 2.2. @@ -333,7 +334,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param material A material name in Cura 2.1. # \return The name of the corresponding material in Cura 2.2. @staticmethod - def translateMaterial(material): + def translateMaterial(material: str) -> str: if material in _material_translations: return _material_translations[material] return material @@ -345,7 +346,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \return The name of the corresponding material in the quality profiles # in Cura 2.2. @staticmethod - def translateMaterialForProfiles(material): + def translateMaterialForProfiles(material: str) -> str: if material in _material_translations_profiles: return _material_translations_profiles[material] return material @@ -356,7 +357,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param printer A printer name in Cura 2.1. # \return The name of the corresponding printer in Cura 2.2. @staticmethod - def translatePrinter(printer): + def translatePrinter(printer: str) -> str: if printer in _printer_translations: return _printer_translations[printer] return printer #Doesn't need to be translated. @@ -367,7 +368,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param printer A printer name in 2.1. # \return The name of the corresponding printer in Cura 2.2. @staticmethod - def translatePrinterForProfile(printer): + def translatePrinterForProfile(printer: str) -> str: if printer in _printer_translations_profiles: return _printer_translations_profiles[printer] return printer @@ -378,7 +379,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param profile A profile name in the old version. # \return The corresponding profile name in the new version. @staticmethod - def translateProfile(profile): + def translateProfile(profile: str) -> str: if profile in _profile_translations: return _profile_translations[profile] return profile #Doesn't need to be translated. @@ -392,7 +393,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param settings A dictionary of settings (as key-value pairs) to update. # \return The same dictionary. @staticmethod - def translateSettings(settings): + def translateSettings(settings: Dict[str, str]) -> Dict[str, str]: new_settings = {} for key, value in settings.items(): if key in _removed_settings: @@ -414,7 +415,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \param setting The name of a setting in Cura 2.1. # \return The name of the corresponding setting in Cura 2.2. @staticmethod - def translateSettingName(setting): + def translateSettingName(setting: str) -> str: if setting in _setting_name_translations: return _setting_name_translations[setting] return setting #Doesn't need to be translated. @@ -426,7 +427,7 @@ class VersionUpgrade21to22(VersionUpgrade): # 2.2's naming. # \return The name of the corresponding variant in Cura 2.2. @staticmethod - def translateVariant(variant, machine): + def translateVariant(variant: str, machine: str) -> str: if machine in _variant_translations and variant in _variant_translations[machine]: return _variant_translations[machine][variant] return variant @@ -440,7 +441,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \return The name of the corresponding variant for in material profiles # in Cura 2.2. @staticmethod - def translateVariantForMaterials(variant, machine): + def translateVariantForMaterials(variant: str, machine: str) -> str: if machine in _variant_translations_materials and variant in _variant_translations_materials[machine]: return _variant_translations_materials[machine][variant] return variant @@ -452,7 +453,7 @@ class VersionUpgrade21to22(VersionUpgrade): # \return The name of the corresponding variant for in quality profiles in # Cura 2.2. @staticmethod - def translateVariantForProfiles(variant): + def translateVariantForProfiles(variant: str) -> str: if variant in _variant_translations_profiles: return _variant_translations_profiles[variant] return variant
\ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py index 609781ebfe..67530b9d45 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2016 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade21to22 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade21to22.VersionUpgrade21to22() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -33,5 +38,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json index 463fcdc941..cad94c2eb5 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.1 to 2.2", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.1 to Cura 2.2.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index a56f1f807b..ded892d137 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -1,18 +1,18 @@ -# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import configparser #To get version numbers from config files.
+import io
import os
import os.path
-import io
+from typing import Dict, List, Optional, Tuple
from UM.Resources import Resources
from UM.VersionUpgrade import VersionUpgrade # Superclass of the plugin.
import UM.VersionUpgrade
class VersionUpgrade22to24(VersionUpgrade):
-
- def upgradeMachineInstance(self, serialised, filename):
+ def upgradeMachineInstance(self, serialised: str, filename: str) -> Optional[Tuple[List[str], List[str]]]:
# All of this is needed to upgrade custom variant machines from old Cura to 2.4 where
# `definition_changes` instance container has been introduced. Variant files which
# look like the the handy work of the old machine settings plugin are converted directly
@@ -22,11 +22,11 @@ class VersionUpgrade22to24(VersionUpgrade): config.read_string(serialised) # Read the input string as config file.
if config.get("metadata", "type") == "definition_changes":
# This is not a container stack, don't upgrade it here
- return
+ return None
config.set("general", "version", "3")
- container_list = []
+ container_list = [] # type: List[str]
if config.has_section("containers"):
for index, container_id in config.items("containers"):
container_list.append(container_id)
@@ -37,14 +37,14 @@ class VersionUpgrade22to24(VersionUpgrade): user_variants = self.__getUserVariants()
name_path_dict = {}
for variant in user_variants:
- name_path_dict[variant.get("name")] = variant.get("path")
+ name_path_dict[variant["name"]] = variant["path"]
user_variant_names = set(container_list).intersection(name_path_dict.keys())
if len(user_variant_names):
# One of the user defined variants appears in the list of containers in the stack.
for variant_name in user_variant_names: # really there should just be one variant to convert.
- config_name = self.__convertVariant(name_path_dict.get(variant_name))
+ config_name = self.__convertVariant(name_path_dict[variant_name])
# Change the name of variant and insert empty_variant into the stack.
new_container_list = []
@@ -64,14 +64,14 @@ class VersionUpgrade22to24(VersionUpgrade): config.remove_option("general", "containers")
- for index in range(len(container_list)):
- config.set("containers", str(index), container_list[index])
+ for idx in range(len(container_list)):
+ config.set("containers", str(idx), container_list[idx])
output = io.StringIO()
config.write(output)
return [filename], [output.getvalue()]
- def __convertVariant(self, variant_path):
+ def __convertVariant(self, variant_path: str) -> str:
# Copy the variant to the machine_instances/*_settings.inst.cfg
variant_config = configparser.ConfigParser(interpolation = None)
with open(variant_path, "r", encoding = "utf-8") as fhandle:
@@ -99,7 +99,7 @@ class VersionUpgrade22to24(VersionUpgrade): return config_name
- def __getUserVariants(self):
+ def __getUserVariants(self) -> List[Dict[str, str]]:
resource_path = Resources.getDataStoragePath()
variants_dir = os.path.join(resource_path, "variants")
@@ -113,7 +113,7 @@ class VersionUpgrade22to24(VersionUpgrade): result.append( { "path": entry.path, "name": config.get("general", "name") } )
return result
- def upgradeExtruderTrain(self, serialised, filename):
+ def upgradeExtruderTrain(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]:
config = configparser.ConfigParser(interpolation = None)
config.read_string(serialised) # Read the input string as config file.
config.set("general", "version", "3") # Just bump the version number. That is all we need for now.
@@ -122,7 +122,7 @@ class VersionUpgrade22to24(VersionUpgrade): config.write(output)
return [filename], [output.getvalue()]
- def upgradePreferences(self, serialised, filename):
+ def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]:
config = configparser.ConfigParser(interpolation = None)
config.read_string(serialised)
@@ -142,7 +142,7 @@ class VersionUpgrade22to24(VersionUpgrade): config.write(output)
return [filename], [output.getvalue()]
- def upgradeQuality(self, serialised, filename):
+ def upgradeQuality(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]:
config = configparser.ConfigParser(interpolation = None)
config.read_string(serialised) # Read the input string as config file.
config.set("metadata", "type", "quality_changes") # Update metadata/type to quality_changes
@@ -152,9 +152,9 @@ class VersionUpgrade22to24(VersionUpgrade): config.write(output)
return [filename], [output.getvalue()]
- def getCfgVersion(self, serialised):
+ def getCfgVersion(self, serialised: str) -> int:
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialised)
format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised.
- setting_version = int(parser.get("metadata", "setting_version", fallback = 0))
+ setting_version = int(parser.get("metadata", "setting_version", fallback = "0"))
return format_version * 1000000 + setting_version
diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py index 278b660ec1..fe79333544 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2016 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from typing import Any, Dict, TYPE_CHECKING
+
from . import VersionUpgrade
+if TYPE_CHECKING:
+ from UM.Application import Application
+
upgrade = VersionUpgrade.VersionUpgrade22to24()
-def getMetaData():
+def getMetaData() -> Dict[str, Any]:
return {
"version_upgrade": {
# From To Upgrade function
@@ -26,5 +31,5 @@ def getMetaData(): }
}
-def register(app):
+def register(app: "Application"):
return { "version_upgrade": upgrade }
diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json index e7a0b1c559..7da1e7a56d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.2 to 2.4", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.2 to Cura 2.4.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index 6643edb765..6dbcfebc46 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -4,6 +4,7 @@ import configparser #To parse the files we need to upgrade and write the new files. import io #To serialise configparser output to a string. import os +from typing import Dict, List, Set, Tuple from urllib.parse import quote_plus from UM.Resources import Resources @@ -12,19 +13,18 @@ from UM.VersionUpgrade import VersionUpgrade _removed_settings = { #Settings that were removed in 2.5. "start_layers_at_same_position", "sub_div_rad_mult" -} +} # type: Set[str] _split_settings = { #These settings should be copied to all settings it was split into. "support_interface_line_distance": {"support_roof_line_distance", "support_bottom_line_distance"} -} +} # type: Dict[str, Set[str]] ## A collection of functions that convert the configuration of the user in Cura # 2.5 to a configuration for Cura 2.6. # # All of these methods are essentially stateless. class VersionUpgrade25to26(VersionUpgrade): - - def __init__(self): + def __init__(self) -> None: super().__init__() self._current_fdm_printer_count = 2 @@ -39,18 +39,18 @@ class VersionUpgrade25to26(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades the preferences file from version 2.5 to 2.6. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -86,7 +86,7 @@ class VersionUpgrade25to26(VersionUpgrade): # # \param serialised The serialised form of a quality profile. # \param filename The name of the file to upgrade. - def upgradeInstanceContainer(self, serialised, filename): + def upgradeInstanceContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -116,7 +116,7 @@ class VersionUpgrade25to26(VersionUpgrade): # # \param serialised The serialised form of a quality profile. # \param filename The name of the file to upgrade. - def upgradeMachineStack(self, serialised, filename): + def upgradeMachineStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -149,7 +149,7 @@ class VersionUpgrade25to26(VersionUpgrade): return [filename], [output.getvalue()] ## Acquires the next unique extruder stack index number for the Custom FDM Printer. - def _acquireNextUniqueCustomFdmPrinterExtruderStackIdIndex(self): + def _acquireNextUniqueCustomFdmPrinterExtruderStackIdIndex(self) -> int: extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") file_name_list = os.listdir(extruder_stack_dir) file_name_list = [os.path.basename(file_name) for file_name in file_name_list] @@ -169,7 +169,7 @@ class VersionUpgrade25to26(VersionUpgrade): return self._current_fdm_printer_count - def _checkCustomFdmPrinterHasExtruderStack(self, machine_id): + def _checkCustomFdmPrinterHasExtruderStack(self, machine_id: str) -> bool: # go through all extruders and make sure that this custom FDM printer has extruder stacks. extruder_stack_dir = os.path.join(Resources.getDataStoragePath(), "extruders") has_extruders = False @@ -197,7 +197,7 @@ class VersionUpgrade25to26(VersionUpgrade): return has_extruders - def _createCustomFdmPrinterExtruderStack(self, machine_id: str, position: int, quality_id: str, material_id: str): + def _createCustomFdmPrinterExtruderStack(self, machine_id: str, position: int, quality_id: str, material_id: str) -> None: stack_id = "custom_extruder_%s" % (position + 1) if self._current_fdm_printer_count > 1: stack_id += " #%s" % self._current_fdm_printer_count @@ -256,7 +256,7 @@ class VersionUpgrade25to26(VersionUpgrade): ## Creates a definition changes container which doesn't contain anything for the Custom FDM Printers. # The container ID will be automatically generated according to the given stack name. - def _getCustomFdmPrinterDefinitionChanges(self, stack_id: str): + def _getCustomFdmPrinterDefinitionChanges(self, stack_id: str) -> configparser.ConfigParser: # In 2.5, there is no definition_changes container for the Custom FDM printer, so it should be safe to use the # default name unless some one names the printer as something like "Custom FDM Printer_settings". definition_changes_id = stack_id + "_settings" @@ -277,7 +277,7 @@ class VersionUpgrade25to26(VersionUpgrade): ## Creates a user settings container which doesn't contain anything for the Custom FDM Printers. # The container ID will be automatically generated according to the given stack name. - def _getCustomFdmPrinterUserSettings(self, stack_id: str): + def _getCustomFdmPrinterUserSettings(self, stack_id: str) -> configparser.ConfigParser: # For the extruder stacks created in the upgrade, also create user_settings containers so the user changes # will be saved. user_settings_id = stack_id + "_user" diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py index 67aa73233f..c74b3218b6 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade25to26 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade25to26.VersionUpgrade25to26() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -41,5 +46,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json index 3029539887..e1f0a47685 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.5 to 2.6", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.5 to Cura 2.6.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py index dfa436e5bd..39e3dea4ed 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/VersionUpgrade26to27.py @@ -3,6 +3,7 @@ import configparser #To parse the files we need to upgrade and write the new files. import io #To serialise configparser output to a string. +from typing import Dict, List, Tuple from UM.VersionUpgrade import VersionUpgrade @@ -61,7 +62,7 @@ _renamed_quality_profiles = { "um3_bb0.8_TPU_Not_Supported_Quality": "um3_bb0.8_TPU_Fast_print", "um3_bb0.8_TPU_Not_Supported_Superdraft_Quality": "um3_bb0.8_TPU_Superdraft_Print", -} +} # type: Dict[str, str] ## A collection of functions that convert the configuration of the user in Cura # 2.6 to a configuration for Cura 2.7. @@ -79,19 +80,19 @@ class VersionUpgrade26to27(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 2.6 to 2.7. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update version numbers @@ -117,8 +118,8 @@ class VersionUpgrade26to27(VersionUpgrade): # # \param serialised The serialised form of a container file. # \param filename The name of the file to upgrade. - def upgradeOtherContainer(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeOtherContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update version numbers @@ -139,7 +140,7 @@ class VersionUpgrade26to27(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialised, filename): + def upgradeStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py index 0e26ca8bbf..1952c9ceff 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade26to27 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade26to27.VersionUpgrade26to27() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -59,5 +64,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json index 225da67235..6cdbd64cbb 100644 --- a/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade26to27/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.6 to 2.7", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.6 to Cura 2.7.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py index 5a141f1558..b594c3c6c4 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/VersionUpgrade27to30.py @@ -1,9 +1,10 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse preference files. import io #To serialise the preference files afterwards. import os +from typing import Dict, List, Tuple import urllib.parse import re @@ -11,7 +12,7 @@ from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. _renamed_themes = { "cura": "cura-light" -} +} # type: Dict[str, str] _renamed_i18n = { "7s": "en_7S", "de": "de_DE", @@ -28,7 +29,7 @@ _renamed_i18n = { "ptbr": "pt_BR", "ru": "ru_RU", "tr": "tr_TR" -} +} # type: Dict[str, str] class VersionUpgrade27to30(VersionUpgrade): @@ -43,19 +44,19 @@ class VersionUpgrade27to30(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 2.7 to 3.0. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update version numbers @@ -100,8 +101,8 @@ class VersionUpgrade27to30(VersionUpgrade): # # \param serialised The serialised form of the container file. # \param filename The name of the file to upgrade. - def upgradeQualityChangesContainer(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeQualityChangesContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update the skin pre-shrink settings: @@ -156,8 +157,8 @@ class VersionUpgrade27to30(VersionUpgrade): # # \param serialised The serialised form of the container file. # \param filename The name of the file to upgrade. - def upgradeOtherContainer(self, serialised, filename): - parser = configparser.ConfigParser(interpolation=None) + def upgradeOtherContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) # Update the skin pre-shrink settings: @@ -185,7 +186,7 @@ class VersionUpgrade27to30(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialised, filename): + def upgradeStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation=None) parser.read_string(serialised) diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py index 4da7257b1c..bddc71a1e0 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade27to30 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade27to30.VersionUpgrade27to30() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -51,5 +56,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json index 9a139851ec..885d741a8c 100644 --- a/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade27to30/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 2.7 to 3.0", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py index 399eb18b5d..f0b2e939b9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py @@ -1,14 +1,15 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import configparser #To parse preference files. import io #To serialise the preference files afterwards. +from typing import Dict, List, Set, Tuple from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. # a list of all legacy "Not Supported" quality profiles -_OLD_NOT_SUPPORTED_PROFILES = [ +_OLD_NOT_SUPPORTED_PROFILES = { "um2p_pp_0.25_normal", "um2p_tpu_0.8_normal", "um3_bb0.4_ABS_Fast_Print", @@ -42,7 +43,7 @@ _OLD_NOT_SUPPORTED_PROFILES = [ "um3_bb0.8_PP_Superdraft_Print", "um3_bb0.8_TPU_Fast_print", "um3_bb0.8_TPU_Superdraft_Print", -] +} # type: Set[str] # Some containers have their specific empty containers, those need to be set correctly. @@ -51,13 +52,13 @@ _EMPTY_CONTAINER_DICT = { "2": "empty_quality", "3": "empty_material", "4": "empty_variant", -} +} # type: Dict[str, str] # Renamed definition files _RENAMED_DEFINITION_DICT = { "jellybox": "imade3d_jellybox", -} +} # type: Dict[str, str] class VersionUpgrade30to31(VersionUpgrade): @@ -72,18 +73,18 @@ class VersionUpgrade30to31(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 3.0 to 3.1. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -104,7 +105,7 @@ class VersionUpgrade30to31(VersionUpgrade): # # \param serialised The serialised form of the container file. # \param filename The name of the file to upgrade. - def upgradeInstanceContainer(self, serialised, filename): + def upgradeInstanceContainer(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -129,7 +130,7 @@ class VersionUpgrade30to31(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialised, filename): + def upgradeStack(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py b/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py index 7b2c213a31..c5cc851d6a 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/__init__.py @@ -1,11 +1,16 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade30to31 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade30to31.VersionUpgrade30to31() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -55,5 +60,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json index cf42b3f6cd..d5f22649c1 100644 --- a/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade30to31/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 3.0 to 3.1", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py b/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py index 18851b82c7..83cb15c864 100644 --- a/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py +++ b/plugins/VersionUpgrade/VersionUpgrade32to33/VersionUpgrade32to33.py @@ -3,6 +3,7 @@ import configparser #To parse preference files. import io #To serialise the preference files afterwards. +from typing import Dict, List, Tuple from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. @@ -51,22 +52,22 @@ _EXTRUDER_TO_POSITION = { "ultimaker_original_dual_2nd": 1, "vertex_k8400_dual_1st": 0, "vertex_k8400_dual_2nd": 1 -} +} # type: Dict[str, int] _RENAMED_QUALITY_PROFILES = { "low": "fast", "um2_low": "um2_fast" -} +} # type: Dict[str, str] _RENAMED_QUALITY_TYPES = { "low": "fast" -} +} # type: Dict[str, str] ## Upgrades configurations from the state they were in at version 3.2 to the # state they should be in at version 3.3. class VersionUpgrade32to33(VersionUpgrade): - temporary_group_name_counter = 1 + ## Gets the version number from a CFG file in Uranium's 3.2 format. # # Since the format may change, this is implemented for the 3.2 format only @@ -78,18 +79,18 @@ class VersionUpgrade32to33(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades a preferences file from version 3.2 to 3.3. # # \param serialised The serialised form of a preferences file. # \param filename The name of the file to upgrade. - def upgradePreferences(self, serialised, filename): + def upgradePreferences(self, serialised: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) @@ -117,7 +118,7 @@ class VersionUpgrade32to33(VersionUpgrade): # # \param serialised The serialised form of a container stack. # \param filename The name of the file to upgrade. - def upgradeStack(self, serialized, filename): + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -141,7 +142,7 @@ class VersionUpgrade32to33(VersionUpgrade): ## Upgrades non-quality-changes instance containers to have the new version # number. - def upgradeInstanceContainer(self, serialized, filename): + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -153,7 +154,7 @@ class VersionUpgrade32to33(VersionUpgrade): return [filename], [result.getvalue()] ## Upgrades a quality changes container to the new format. - def upgradeQualityChanges(self, serialized, filename): + def upgradeQualityChanges(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -182,7 +183,7 @@ class VersionUpgrade32to33(VersionUpgrade): return [filename], [result.getvalue()] ## Upgrades a variant container to the new format. - def upgradeVariants(self, serialized, filename): + def upgradeVariants(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py b/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py index 5073be772d..b55ea5ebaf 100644 --- a/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade32to33/__init__.py @@ -1,11 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade32to33 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade32to33.VersionUpgrade32to33() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -42,7 +47,7 @@ def getMetaData(): }, "user": { "get_version": upgrade.getCfgVersion, - "location": {"./user"} + "location": {"./user", "./materials/*"} }, "variant": { "get_version": upgrade.getCfgVersion, @@ -51,5 +56,5 @@ def getMetaData(): } } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade }
\ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json index f9cc968dae..eb489169e0 100644 --- a/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade32to33/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 3.2 to 3.3", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 3.2 to Cura 3.3.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py b/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py index e2241fd195..704ede02d6 100644 --- a/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py +++ b/plugins/VersionUpgrade/VersionUpgrade33to34/VersionUpgrade33to34.py @@ -3,17 +3,17 @@ import configparser #To parse preference files. import io #To serialise the preference files afterwards. +from typing import Dict, List, Tuple from UM.VersionUpgrade import VersionUpgrade #We're inheriting from this. _renamed_settings = { "infill_hollow": "infill_support_enabled" -} +} # type: Dict[str, str] ## Upgrades configurations from the state they were in at version 3.3 to the # state they should be in at version 3.4. class VersionUpgrade33to34(VersionUpgrade): - ## Gets the version number from a CFG file in Uranium's 3.3 format. # # Since the format may change, this is implemented for the 3.3 format only @@ -25,16 +25,16 @@ class VersionUpgrade33to34(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades instance containers to have the new version # number. - def upgradeInstanceContainer(self, serialized, filename): + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py b/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py index 1130c1e9e2..5fd757f843 100644 --- a/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py @@ -1,11 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade33to34 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade33to34.VersionUpgrade33to34() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -35,5 +40,5 @@ def getMetaData(): } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json index f5ba7235d1..9649010643 100644 --- a/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade33to34/plugin.json @@ -1,8 +1,8 @@ { "name": "Version Upgrade 3.3 to 3.4", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 3.3 to Cura 3.4.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py b/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py index 9d59133036..8e45d7cf73 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/VersionUpgrade34to35.py @@ -3,13 +3,14 @@ import configparser import io +from typing import Dict, List, Set, Tuple from UM.VersionUpgrade import VersionUpgrade -deleted_settings = {"prime_tower_wall_thickness", "dual_pre_wipe", "prime_tower_purge_volume"} +deleted_settings = {"prime_tower_wall_thickness", "dual_pre_wipe", "prime_tower_purge_volume"} # type: Set[str] -changed_settings = {'retraction_combing': 'noskin'} -updated_settings = {'retraction_combing': 'infill'} +changed_settings = {"retraction_combing": "noskin"} # type: Dict[str, str] +updated_settings = {"retraction_combing": "infill"} # type: Dict[str, str] _RENAMED_MATERIAL_PROFILES = { "dsm_arnitel2045_175_cartesio_0.25_mm": "dsm_arnitel2045_175_cartesio_0.25mm_thermoplastic_extruder", @@ -57,15 +58,14 @@ _RENAMED_MATERIAL_PROFILES = { "ultimaker_pva_cartesio_0.25_mm": "ultimaker_pva_cartesio_0.25mm_thermoplastic_extruder", "ultimaker_pva_cartesio_0.4_mm": "ultimaker_pva_cartesio_0.4mm_thermoplastic_extruder", "ultimaker_pva_cartesio_0.8_mm": "ultimaker_pva_cartesio_0.8mm_thermoplastic_extruder" -} +} # type: Dict[str, str] ## Upgrades configurations from the state they were in at version 3.4 to the # state they should be in at version 3.5. class VersionUpgrade34to35(VersionUpgrade): - - ## Gets the version number from a CFG file in Uranium's 3.3 format. + ## Gets the version number from a CFG file in Uranium's 3.4 format. # - # Since the format may change, this is implemented for the 3.3 format only + # Since the format may change, this is implemented for the 3.4 format only # and needs to be included in the version upgrade system rather than # globally in Uranium. # @@ -74,15 +74,15 @@ class VersionUpgrade34to35(VersionUpgrade): # \raises ValueError The format of the version number in the file is # incorrect. # \raises KeyError The format of the file is incorrect. - def getCfgVersion(self, serialised): + def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialised) format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. - setting_version = int(parser.get("metadata", "setting_version", fallback = 0)) + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) return format_version * 1000000 + setting_version ## Upgrades Preferences to have the new version number. - def upgradePreferences(self, serialized, filename): + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -103,7 +103,7 @@ class VersionUpgrade34to35(VersionUpgrade): return [filename], [result.getvalue()] ## Upgrades stacks to have the new version number. - def upgradeStack(self, serialized, filename): + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -121,7 +121,7 @@ class VersionUpgrade34to35(VersionUpgrade): ## Upgrades instance containers to have the new version # number. - def upgradeInstanceContainer(self, serialized, filename): + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) @@ -147,7 +147,7 @@ class VersionUpgrade34to35(VersionUpgrade): parser.write(result) return [filename], [result.getvalue()] - def _resetConcentric3DInfillPattern(self, parser): + def _resetConcentric3DInfillPattern(self, parser: configparser.ConfigParser) -> None: if "values" not in parser: return @@ -161,5 +161,4 @@ class VersionUpgrade34to35(VersionUpgrade): if key not in parser["values"]: continue if parser["values"][key] == "concentric_3d": - del parser["values"][key] - + del parser["values"][key]
\ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py index 2ea74f6194..332bc827b9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py @@ -1,11 +1,16 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Any, Dict, TYPE_CHECKING + from . import VersionUpgrade34to35 +if TYPE_CHECKING: + from UM.Application import Application + upgrade = VersionUpgrade34to35.VersionUpgrade34to35() -def getMetaData(): +def getMetaData() -> Dict[str, Any]: return { "version_upgrade": { # From To Upgrade function @@ -52,5 +57,5 @@ def getMetaData(): } -def register(app): +def register(app: "Application") -> Dict[str, Any]: return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json index b73001b683..71b13ee5a9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json +++ b/plugins/VersionUpgrade/VersionUpgrade34to35/plugin.json @@ -1,8 +1,8 @@ - { +{ "name": "Version Upgrade 3.4 to 3.5", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Upgrades configurations from Cura 3.4 to Cura 3.5.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/VersionUpgrade/VersionUpgrade35to40/VersionUpgrade35to40.py b/plugins/VersionUpgrade/VersionUpgrade35to40/VersionUpgrade35to40.py new file mode 100644 index 0000000000..52cd7cf3cb --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade35to40/VersionUpgrade35to40.py @@ -0,0 +1,68 @@ +import configparser +from typing import Tuple, List, Set +import io +from UM.VersionUpgrade import VersionUpgrade +from cura.PrinterOutputDevice import ConnectionType +deleted_settings = {"bridge_wall_max_overhang"} # type: Set[str] + + +class VersionUpgrade35to40(VersionUpgrade): + # Upgrades stacks to have the new version number. + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "6" + + if parser["metadata"].get("um_network_key") is not None or parser["metadata"].get("octoprint_api_key") is not None: + # Set the connection type if um_network_key or the octoprint key is set. + parser["metadata"]["connection_type"] = str(ConnectionType.NetworkConnection.value) + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + pass + + def getCfgVersion(self, serialised: str) -> int: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) + return format_version * 1000000 + setting_version + + ## Upgrades Preferences to have the new version number. + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + if "metadata" not in parser: + parser["metadata"] = {} + parser["general"]["version"] = "6" + parser["metadata"]["setting_version"] = "6" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades instance containers to have the new version + # number. + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation=None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "6" + + #self._resetConcentric3DInfillPattern(parser) + if "values" in parser: + for deleted_setting in deleted_settings: + if deleted_setting not in parser["values"]: + continue + del parser["values"][deleted_setting] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()]
\ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade35to40/__init__.py b/plugins/VersionUpgrade/VersionUpgrade35to40/__init__.py new file mode 100644 index 0000000000..2ad1dddbf2 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade35to40/__init__.py @@ -0,0 +1,56 @@ +from typing import Dict, Any + +from . import VersionUpgrade35to40 + +upgrade = VersionUpgrade35to40.VersionUpgrade35to40() + + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000005): ("preferences", 6000006, upgrade.upgradePreferences), + + ("definition_changes", 4000005): ("definition_changes", 4000006, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000005): ("quality_changes", 4000006, upgrade.upgradeInstanceContainer), + ("quality", 4000005): ("quality", 4000006, upgrade.upgradeInstanceContainer), + ("user", 4000005): ("user", 4000006, upgrade.upgradeInstanceContainer), + + ("machine_stack", 4000005): ("machine_stack", 4000006, upgrade.upgradeStack), + ("extruder_train", 4000005): ("extruder_train", 4000006, upgrade.upgradeStack), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality_changes"} + }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + } + } + } + + +def register(app) -> Dict[str, Any]: + return {"version_upgrade": upgrade}
\ No newline at end of file diff --git a/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json b/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json new file mode 100644 index 0000000000..578594fb6d --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade35to40/plugin.json @@ -0,0 +1,8 @@ + { + "name": "Version Upgrade 3.5 to 4.0", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 3.5 to Cura 4.0.", + "api": "6.0", + "i18n-catalog": "cura" +} diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py b/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py new file mode 100644 index 0000000000..d80e0007aa --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/VersionUpgrade40to41.py @@ -0,0 +1,86 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser +import io +from typing import Dict, List, Tuple + +from UM.VersionUpgrade import VersionUpgrade + +_renamed_quality_profiles = { + "gmax15plus_pla_dual_normal": "gmax15plus_global_dual_normal", + "gmax15plus_pla_dual_thick": "gmax15plus_global_dual_thick", + "gmax15plus_pla_dual_thin": "gmax15plus_global_dual_thin", + "gmax15plus_pla_dual_very_thick": "gmax15plus_global_dual_very_thick", + "gmax15plus_pla_normal": "gmax15plus_global_normal", + "gmax15plus_pla_thick": "gmax15plus_global_thick", + "gmax15plus_pla_thin": "gmax15plus_global_thin", + "gmax15plus_pla_very_thick": "gmax15plus_global_very_thick" +} # type: Dict[str, str] + +## Upgrades configurations from the state they were in at version 4.0 to the +# state they should be in at version 4.1. +class VersionUpgrade40to41(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 4.0 format. + # + # Since the format may change, this is implemented for the 4.0 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised: str) -> int: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) + return format_version * 1000000 + setting_version + + ## Upgrades instance containers to have the new version + # number. + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "7" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades Preferences to have the new version number. + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "6" + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "7" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades stacks to have the new version number. + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "7" + + #Update the name of the quality profile. + if parser["containers"]["4"] in _renamed_quality_profiles: + parser["containers"]["4"] = _renamed_quality_profiles[parser["containers"]["4"]] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py b/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py new file mode 100644 index 0000000000..7f39bb9d39 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/__init__.py @@ -0,0 +1,59 @@ +# Copyright (c) 2018 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Any, Dict, TYPE_CHECKING + +from . import VersionUpgrade40to41 + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade40to41.VersionUpgrade40to41() + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000006): ("preferences", 6000007, upgrade.upgradePreferences), + ("machine_stack", 4000006): ("machine_stack", 4000007, upgrade.upgradeStack), + ("extruder_train", 4000006): ("extruder_train", 4000007, upgrade.upgradeStack), + ("definition_changes", 4000006): ("definition_changes", 4000007, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000006): ("quality_changes", 4000007, upgrade.upgradeInstanceContainer), + ("quality", 4000006): ("quality", 4000007, upgrade.upgradeInstanceContainer), + ("user", 4000006): ("user", 4000007, upgrade.upgradeInstanceContainer), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality_changes"} + }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + } + } + } + + +def register(app: "Application") -> Dict[str, Any]: + return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json b/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json new file mode 100644 index 0000000000..b1c6d75669 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade40to41/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.0 to 4.1", + "author": "Ultimaker B.V.", + "version": "1.0.1", + "description": "Upgrades configurations from Cura 4.0 to Cura 4.1.", + "api": "6.0", + "i18n-catalog": "cura" +} diff --git a/plugins/X3DReader/plugin.json b/plugins/X3DReader/plugin.json index 9ee09e43df..1fc14104ed 100644 --- a/plugins/X3DReader/plugin.json +++ b/plugins/X3DReader/plugin.json @@ -1,8 +1,8 @@ { "name": "X3D Reader", "author": "Seva Alekseyev", - "version": "0.5.0", + "version": "1.0.1", "description": "Provides support for reading X3D files.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/XRayView/XRayView.py b/plugins/XRayView/XRayView.py index 0c4035c62d..86533fe51c 100644 --- a/plugins/XRayView/XRayView.py +++ b/plugins/XRayView/XRayView.py @@ -17,6 +17,7 @@ from UM.View.RenderBatch import RenderBatch from UM.View.GL.OpenGL import OpenGL from cura.CuraApplication import CuraApplication +from cura.Scene.ConvexHullNode import ConvexHullNode from . import XRayPass @@ -41,6 +42,10 @@ class XRayView(View): self._xray_shader.setUniformValue("u_color", Color(*Application.getInstance().getTheme().getColor("xray").getRgb())) for node in BreadthFirstIterator(scene.getRoot()): + # We do not want to render ConvexHullNode as it conflicts with the bottom of the X-Ray (z-fighting). + if type(node) is ConvexHullNode: + continue + if not node.render(renderer): if node.getMeshData() and node.isVisible(): renderer.queueNode(node, diff --git a/plugins/XRayView/plugin.json b/plugins/XRayView/plugin.json index 576dec4656..71cc165b6c 100644 --- a/plugins/XRayView/plugin.json +++ b/plugins/XRayView/plugin.json @@ -1,8 +1,8 @@ { "name": "X-Ray View", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides the X-Ray view.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/plugins/XmlMaterialProfile/__init__.py b/plugins/XmlMaterialProfile/__init__.py index e8bde78424..b3810c97dc 100644 --- a/plugins/XmlMaterialProfile/__init__.py +++ b/plugins/XmlMaterialProfile/__init__.py @@ -16,7 +16,7 @@ def getMetaData(): "mimetype": "application/x-ultimaker-material-profile" }, "version_upgrade": { - ("materials", 1000000): ("materials", 1000004, upgrader.upgradeMaterial), + ("materials", 1000000): ("materials", 1000007, upgrader.upgradeMaterial), }, "sources": { "materials": { diff --git a/plugins/XmlMaterialProfile/plugin.json b/plugins/XmlMaterialProfile/plugin.json index 4b2901c375..bb1db82fa4 100644 --- a/plugins/XmlMaterialProfile/plugin.json +++ b/plugins/XmlMaterialProfile/plugin.json @@ -1,8 +1,8 @@ { "name": "Material Profiles", "author": "Ultimaker B.V.", - "version": "1.0.0", + "version": "1.0.1", "description": "Provides capabilities to read and write XML-based material profiles.", - "api": 5, + "api": "6.0", "i18n-catalog": "cura" } diff --git a/resources/bundled_packages/cura.json b/resources/bundled_packages/cura.json index ee82b17a75..21da1d9fdb 100644 --- a/resources/bundled_packages/cura.json +++ b/resources/bundled_packages/cura.json @@ -5,8 +5,8 @@ "package_type": "plugin", "display_name": "3MF Reader", "description": "Provides support for reading 3MF files.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -22,8 +22,8 @@ "package_type": "plugin", "display_name": "3MF Writer", "description": "Provides support for writing 3MF files.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -39,8 +39,25 @@ "package_type": "plugin", "display_name": "Change Log", "description": "Shows changes since latest checked version.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "CuraDrive": { + "package_info": { + "package_id": "CuraDrive", + "package_type": "plugin", + "display_name": "Cura Backups", + "description": "Backup and restore your configuration.", + "package_version": "1.2.0", + "sdk_version": 6, "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -56,8 +73,8 @@ "package_type": "plugin", "display_name": "CuraEngine Backend", "description": "Provides the link to the CuraEngine slicing backend.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -73,8 +90,8 @@ "package_type": "plugin", "display_name": "Cura Profile Reader", "description": "Provides support for importing Cura profiles.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -90,8 +107,8 @@ "package_type": "plugin", "display_name": "Cura Profile Writer", "description": "Provides support for exporting Cura profiles.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -107,8 +124,8 @@ "package_type": "plugin", "display_name": "Firmware Update Checker", "description": "Checks for firmware updates.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -124,8 +141,8 @@ "package_type": "plugin", "display_name": "Firmware Updater", "description": "Provides a machine actions for updating firmware.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -141,8 +158,8 @@ "package_type": "plugin", "display_name": "Compressed G-code Reader", "description": "Reads g-code from a compressed archive.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -158,8 +175,8 @@ "package_type": "plugin", "display_name": "Compressed G-code Writer", "description": "Writes g-code to a compressed archive.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -175,8 +192,8 @@ "package_type": "plugin", "display_name": "G-Code Profile Reader", "description": "Provides support for importing profiles from g-code files.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -192,8 +209,8 @@ "package_type": "plugin", "display_name": "G-Code Reader", "description": "Allows loading and displaying G-code files.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "VictorLarchenko", @@ -209,8 +226,8 @@ "package_type": "plugin", "display_name": "G-Code Writer", "description": "Writes g-code to a file.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -226,8 +243,8 @@ "package_type": "plugin", "display_name": "Image Reader", "description": "Enables ability to generate printable geometry from 2D image files.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -243,8 +260,8 @@ "package_type": "plugin", "display_name": "Legacy Cura Profile Reader", "description": "Provides support for importing profiles from legacy Cura versions.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -260,8 +277,8 @@ "package_type": "plugin", "display_name": "Machine Settings Action", "description": "Provides a way to change machine settings (such as build volume, nozzle size, etc.).", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "fieldOfView", @@ -277,8 +294,8 @@ "package_type": "plugin", "display_name": "Model Checker", "description": "Checks models and print configuration for possible printing issues and give suggestions.", - "package_version": "0.1.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -294,8 +311,8 @@ "package_type": "plugin", "display_name": "Monitor Stage", "description": "Provides a monitor stage in Cura.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -311,8 +328,8 @@ "package_type": "plugin", "display_name": "Per-Object Settings Tool", "description": "Provides the per-model settings.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -328,8 +345,8 @@ "package_type": "plugin", "display_name": "Post Processing", "description": "Extension that allows for user created scripts for post processing.", - "package_version": "2.2.0", - "sdk_version": 5, + "package_version": "2.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -345,8 +362,25 @@ "package_type": "plugin", "display_name": "Prepare Stage", "description": "Provides a prepare stage in Cura.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "PreviewStage": { + "package_info": { + "package_id": "PreviewStage", + "package_type": "plugin", + "display_name": "Preview Stage", + "description": "Provides a preview stage in Cura.", + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -362,8 +396,8 @@ "package_type": "plugin", "display_name": "Removable Drive Output Device", "description": "Provides removable drive hotplugging and writing support.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -379,8 +413,8 @@ "package_type": "plugin", "display_name": "Simulation View", "description": "Provides the Simulation view.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -396,8 +430,8 @@ "package_type": "plugin", "display_name": "Slice Info", "description": "Submits anonymous slice info. Can be disabled through preferences.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -413,8 +447,8 @@ "package_type": "plugin", "display_name": "Solid View", "description": "Provides a normal solid mesh view.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -430,8 +464,8 @@ "package_type": "plugin", "display_name": "Support Eraser Tool", "description": "Creates an eraser mesh to block the printing of support in certain places.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -447,8 +481,8 @@ "package_type": "plugin", "display_name": "Toolbox", "description": "Find, manage and install new Cura packages.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -464,8 +498,8 @@ "package_type": "plugin", "display_name": "UFP Writer", "description": "Provides support for writing Ultimaker Format Packages.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -481,8 +515,8 @@ "package_type": "plugin", "display_name": "Ultimaker Machine Actions", "description": "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.).", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -498,8 +532,8 @@ "package_type": "plugin", "display_name": "UM3 Network Printing", "description": "Manages network connections to Ultimaker 3 printers.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -515,8 +549,8 @@ "package_type": "plugin", "display_name": "USB Printing", "description": "Accepts G-Code and sends them to a printer. Plugin can also update firmware.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.2", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -532,8 +566,8 @@ "package_type": "plugin", "display_name": "User Agreement", "description": "Ask the user once if he/she agrees with our license.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -549,8 +583,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.1 to 2.2", "description": "Upgrades configurations from Cura 2.1 to Cura 2.2.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -566,8 +600,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.2 to 2.4", "description": "Upgrades configurations from Cura 2.2 to Cura 2.4.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -583,8 +617,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.5 to 2.6", "description": "Upgrades configurations from Cura 2.5 to Cura 2.6.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -600,8 +634,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.6 to 2.7", "description": "Upgrades configurations from Cura 2.6 to Cura 2.7.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -617,8 +651,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 2.7 to 3.0", "description": "Upgrades configurations from Cura 2.7 to Cura 3.0.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -634,8 +668,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 3.0 to 3.1", "description": "Upgrades configurations from Cura 3.0 to Cura 3.1.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -651,8 +685,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 3.2 to 3.3", "description": "Upgrades configurations from Cura 3.2 to Cura 3.3.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -668,8 +702,8 @@ "package_type": "plugin", "display_name": "Version Upgrade 3.3 to 3.4", "description": "Upgrades configurations from Cura 3.3 to Cura 3.4.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -685,8 +719,42 @@ "package_type": "plugin", "display_name": "Version Upgrade 3.4 to 3.5", "description": "Upgrades configurations from Cura 3.4 to Cura 3.5.", + "package_version": "1.0.1", + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade35to40": { + "package_info": { + "package_id": "VersionUpgrade35to40", + "package_type": "plugin", + "display_name": "Version Upgrade 3.5 to 4.0", + "description": "Upgrades configurations from Cura 3.5 to Cura 4.0.", "package_version": "1.0.0", - "sdk_version": 5, + "sdk_version": "6.0", + "website": "https://ultimaker.com", + "author": { + "author_id": "UltimakerPackages", + "display_name": "Ultimaker B.V.", + "email": "plugins@ultimaker.com", + "website": "https://ultimaker.com" + } + } + }, + "VersionUpgrade40to41": { + "package_info": { + "package_id": "VersionUpgrade40to41", + "package_type": "plugin", + "display_name": "Version Upgrade 4.0 to 4.1", + "description": "Upgrades configurations from Cura 4.0 to Cura 4.1.", + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -702,8 +770,8 @@ "package_type": "plugin", "display_name": "X3D Reader", "description": "Provides support for reading X3D files.", - "package_version": "0.5.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "SevaAlekseyev", @@ -719,8 +787,8 @@ "package_type": "plugin", "display_name": "XML Material Profiles", "description": "Provides capabilities to read and write XML-based material profiles.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -736,8 +804,8 @@ "package_type": "plugin", "display_name": "X-Ray View", "description": "Provides the X-Ray view.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://ultimaker.com", "author": { "author_id": "UltimakerPackages", @@ -753,8 +821,8 @@ "package_type": "material", "display_name": "Generic ABS", "description": "The generic ABS profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -771,8 +839,8 @@ "package_type": "material", "display_name": "Generic BAM", "description": "The generic BAM profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -789,8 +857,8 @@ "package_type": "material", "display_name": "Generic CFF CPE", "description": "The generic CFF CPE profile which other profiles can be based upon.", - "package_version": "1.1.0", - "sdk_version": 5, + "package_version": "1.1.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -807,8 +875,8 @@ "package_type": "material", "display_name": "Generic CFF PA", "description": "The generic CFF PA profile which other profiles can be based upon.", - "package_version": "1.1.0", - "sdk_version": 5, + "package_version": "1.1.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -825,8 +893,8 @@ "package_type": "material", "display_name": "Generic CPE", "description": "The generic CPE profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -843,8 +911,8 @@ "package_type": "material", "display_name": "Generic CPE+", "description": "The generic CPE+ profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -861,8 +929,8 @@ "package_type": "material", "display_name": "Generic GFF CPE", "description": "The generic GFF CPE profile which other profiles can be based upon.", - "package_version": "1.1.0", - "sdk_version": 5, + "package_version": "1.1.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -879,8 +947,8 @@ "package_type": "material", "display_name": "Generic GFF PA", "description": "The generic GFF PA profile which other profiles can be based upon.", - "package_version": "1.1.0", - "sdk_version": 5, + "package_version": "1.1.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -897,8 +965,8 @@ "package_type": "material", "display_name": "Generic HIPS", "description": "The generic HIPS profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -915,8 +983,8 @@ "package_type": "material", "display_name": "Generic Nylon", "description": "The generic Nylon profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -933,8 +1001,8 @@ "package_type": "material", "display_name": "Generic PC", "description": "The generic PC profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -951,8 +1019,8 @@ "package_type": "material", "display_name": "Generic PETG", "description": "The generic PETG profile which other profiles can be based upon.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -969,8 +1037,8 @@ "package_type": "material", "display_name": "Generic PLA", "description": "The generic PLA profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -987,8 +1055,8 @@ "package_type": "material", "display_name": "Generic PP", "description": "The generic PP profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1005,8 +1073,8 @@ "package_type": "material", "display_name": "Generic PVA", "description": "The generic PVA profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1023,8 +1091,8 @@ "package_type": "material", "display_name": "Generic Tough PLA", "description": "The generic Tough PLA profile which other profiles can be based upon.", - "package_version": "1.0.1", - "sdk_version": 5, + "package_version": "1.0.2", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1041,8 +1109,8 @@ "package_type": "material", "display_name": "Generic TPU", "description": "The generic TPU profile which other profiles can be based upon.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://github.com/Ultimaker/fdm_materials", "author": { "author_id": "Generic", @@ -1059,8 +1127,8 @@ "package_type": "material", "display_name": "Dagoma Chromatik PLA", "description": "Filament testé et approuvé pour les imprimantes 3D Dagoma. Chromatik est l'idéal pour débuter et suivre les tutoriels premiers pas. Il vous offre qualité et résistance pour chacune de vos impressions.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://dagoma.fr/boutique/filaments.html", "author": { "author_id": "Dagoma", @@ -1076,8 +1144,8 @@ "package_type": "material", "display_name": "FABtotum ABS", "description": "This material is easy to be extruded but it is not the simplest to use. It is one of the most used in 3D printing to get very well finished objects. It is not sustainable and its smoke can be dangerous if inhaled. The reason to prefer this filament to PLA is mainly because of its precision and mechanical specs. ABS (for plastic) stands for Acrylonitrile Butadiene Styrene and it is a thermoplastic which is widely used in everyday objects. It can be printed with any FFF 3D printer which can get to high temperatures as it must be extruded in a range between 220° and 245°, so it’s compatible with all versions of the FABtotum Personal fabricator.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=40", "author": { "author_id": "FABtotum", @@ -1093,8 +1161,8 @@ "package_type": "material", "display_name": "FABtotum Nylon", "description": "When 3D printing started this material was not listed among the extrudable filaments. It is flexible as well as resistant to tractions. It is well known for its uses in textile but also in industries which require a strong and flexible material. There are different kinds of Nylon: 3D printing mostly uses Nylon 6 and Nylon 6.6, which are the most common. It requires higher temperatures to be printed, so a 3D printer must be able to reach them (around 240°C): the FABtotum, of course, can.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=53", "author": { "author_id": "FABtotum", @@ -1110,8 +1178,8 @@ "package_type": "material", "display_name": "FABtotum PLA", "description": "It is the most common filament used for 3D printing. It is studied to be bio-degradable as it comes from corn starch’s sugar mainly. It is completely made of renewable sources and has no footprint on polluting. PLA stands for PolyLactic Acid and it is a thermoplastic that today is still considered the easiest material to be 3D printed. It can be extruded at lower temperatures: the standard range of FABtotum’s one is between 185° and 195°.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=39", "author": { "author_id": "FABtotum", @@ -1127,8 +1195,8 @@ "package_type": "material", "display_name": "FABtotum TPU Shore 98A", "description": "", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://store.fabtotum.com/eu/products/filaments.html?filament_type=66", "author": { "author_id": "FABtotum", @@ -1144,8 +1212,8 @@ "package_type": "material", "display_name": "Fiberlogy HD PLA", "description": "With our HD PLA you have many more options. You can use this material in two ways. Choose the one you like best. You can use it as a normal PLA and get prints characterized by a very good adhesion between the layers and high precision. You can also make your prints acquire similar properties to that of ABS – better impact resistance and high temperature resistance. All you need is an oven. Yes, an oven! By annealing our HD PLA in an oven, in accordance with the manual, you will avoid all the inconveniences of printing with ABS, such as unpleasant odour or hazardous fumes.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://fiberlogy.com/en/fiberlogy-filaments/filament-hd-pla/", "author": { "author_id": "Fiberlogy", @@ -1161,8 +1229,8 @@ "package_type": "material", "display_name": "Filo3D PLA", "description": "Fast, safe and reliable printing. PLA is ideal for the fast and reliable printing of parts and prototypes with a great surface quality.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://dagoma.fr", "author": { "author_id": "Dagoma", @@ -1178,8 +1246,8 @@ "package_type": "material", "display_name": "IMADE3D JellyBOX PETG", "description": "", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1195,8 +1263,8 @@ "package_type": "material", "display_name": "IMADE3D JellyBOX PLA", "description": "", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://shop.imade3d.com/filament.html", "author": { "author_id": "IMADE3D", @@ -1212,8 +1280,8 @@ "package_type": "material", "display_name": "Octofiber PLA", "description": "PLA material from Octofiber.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://nl.octofiber.com/3d-printing-filament/pla.html", "author": { "author_id": "Octofiber", @@ -1229,8 +1297,8 @@ "package_type": "material", "display_name": "PolyFlex™ PLA", "description": "PolyFlex™ is a highly flexible yet easy to print 3D printing material. Featuring good elasticity and a large strain-to- failure, PolyFlex™ opens up a completely new realm of applications.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polyflex/", "author": { "author_id": "Polymaker", @@ -1246,8 +1314,8 @@ "package_type": "material", "display_name": "PolyMax™ PLA", "description": "PolyMax™ PLA is a 3D printing material with excellent mechanical properties and printing quality. PolyMax™ PLA has an impact resistance of up to nine times that of regular PLA, and better overall mechanical properties than ABS.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polymax/", "author": { "author_id": "Polymaker", @@ -1263,8 +1331,8 @@ "package_type": "material", "display_name": "PolyPlus™ PLA True Colour", "description": "PolyPlus™ PLA is a premium PLA designed for all desktop FDM/FFF 3D printers. It is produced with our patented Jam-Free™ technology that ensures consistent extrusion and prevents jams.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polyplus-true-colour/", "author": { "author_id": "Polymaker", @@ -1280,8 +1348,8 @@ "package_type": "material", "display_name": "PolyWood™ PLA", "description": "PolyWood™ is a wood mimic printing material that contains no actual wood ensuring a clean Jam-Free™ printing experience.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "http://www.polymaker.com/shop/polywood/", "author": { "author_id": "Polymaker", @@ -1297,8 +1365,8 @@ "package_type": "material", "display_name": "Ultimaker ABS", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1316,8 +1384,8 @@ "package_type": "material", "display_name": "Ultimaker Breakaway", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/breakaway", "author": { "author_id": "UltimakerPackages", @@ -1335,8 +1403,8 @@ "package_type": "material", "display_name": "Ultimaker CPE", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1354,8 +1422,8 @@ "package_type": "material", "display_name": "Ultimaker CPE+", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/cpe", "author": { "author_id": "UltimakerPackages", @@ -1373,8 +1441,8 @@ "package_type": "material", "display_name": "Ultimaker Nylon", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1392,8 +1460,8 @@ "package_type": "material", "display_name": "Ultimaker PC", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.2", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/pc", "author": { "author_id": "UltimakerPackages", @@ -1411,8 +1479,8 @@ "package_type": "material", "display_name": "Ultimaker PLA", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1430,8 +1498,8 @@ "package_type": "material", "display_name": "Ultimaker PP", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/pp", "author": { "author_id": "UltimakerPackages", @@ -1449,8 +1517,8 @@ "package_type": "material", "display_name": "Ultimaker PVA", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/abs", "author": { "author_id": "UltimakerPackages", @@ -1468,8 +1536,8 @@ "package_type": "material", "display_name": "Ultimaker TPU 95A", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.2.0", - "sdk_version": 5, + "package_version": "1.2.1", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/tpu-95a", "author": { "author_id": "UltimakerPackages", @@ -1487,8 +1555,8 @@ "package_type": "material", "display_name": "Ultimaker Tough PLA", "description": "Example package for material and quality profiles for Ultimaker materials.", - "package_version": "1.0.2", - "sdk_version": 5, + "package_version": "1.0.3", + "sdk_version": "6.0", "website": "https://ultimaker.com/products/materials/tough-pla", "author": { "author_id": "UltimakerPackages", @@ -1506,8 +1574,8 @@ "package_type": "material", "display_name": "Vertex Delta ABS", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1523,8 +1591,8 @@ "package_type": "material", "display_name": "Vertex Delta PET", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1540,8 +1608,8 @@ "package_type": "material", "display_name": "Vertex Delta PLA", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1557,8 +1625,8 @@ "package_type": "material", "display_name": "Vertex Delta TPU", "description": "ABS material and quality files for the Delta Vertex K8800.", - "package_version": "1.0.0", - "sdk_version": 5, + "package_version": "1.0.1", + "sdk_version": "6.0", "website": "https://vertex3dprinter.eu", "author": { "author_id": "Velleman", @@ -1568,4 +1636,4 @@ } } } -} +}
\ No newline at end of file diff --git a/resources/definitions/alfawise_u20.def.json b/resources/definitions/alfawise_u20.def.json new file mode 100644 index 0000000000..8a6badeca6 --- /dev/null +++ b/resources/definitions/alfawise_u20.def.json @@ -0,0 +1,93 @@ +{ + "name": "Alfawise U20", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "Alfawise", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "alfawise_u20_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Alfawise U20" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 Y60.0 Z0 E9.0 F1000.0;intro line\nG1 Y100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 400 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 210 + }, + "material_bed_temperature": { + "default_value": 50 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 45 + } + } +} diff --git a/resources/definitions/alfawise_u30.def.json b/resources/definitions/alfawise_u30.def.json new file mode 100644 index 0000000000..65f6adcfe0 --- /dev/null +++ b/resources/definitions/alfawise_u30.def.json @@ -0,0 +1,93 @@ +{ + "name": "Alfawise U30", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Nicolas Nussbaum", + "manufacturer": "Alfawise", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "alfawise_u30_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Alfawise U30" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z1 F1000 ;move up slightly\nG1 Y60.0 Z0 E9.0 F1000.0;intro line\nG1 Y100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\nG1 F80\n;Put printing message on LCD screen\nM117 Printing...\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F80 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ;turn the fan off; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 220 + }, + "machine_height": { + "default_value": 250 + }, + "machine_depth": { + "default_value": 220 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 210 + }, + "material_bed_temperature": { + "default_value": 50 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 45 + } + } +} diff --git a/resources/definitions/bibo2_dual.def.json b/resources/definitions/bibo2_dual.def.json new file mode 100644 index 0000000000..2036290ebd --- /dev/null +++ b/resources/definitions/bibo2_dual.def.json @@ -0,0 +1,92 @@ +{
+ "id": "BIBO2 dual",
+ "version": 2,
+ "name": "BIBO2 dual",
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "author": "na",
+ "manufacturer": "BIBO",
+ "category": "Other",
+ "file_formats": "text/x-gcode",
+ "has_materials": true,
+ "machine_extruder_trains": {
+ "0": "bibo2_dual_extruder_0",
+ "1": "bibo2_dual_extruder_1"
+ },
+ "first_start_actions": [
+ "MachineSettingsAction"
+ ]
+ },
+ "overrides": {
+ "machine_name": {
+ "default_value": "BIBO2 dual"
+ },
+ "machine_width": {
+ "default_value": 214
+ },
+ "machine_height": {
+ "default_value": 160
+ },
+ "machine_depth": {
+ "default_value": 186
+ },
+ "machine_center_is_zero": {
+ "default_value": true
+ },
+ "machine_heated_bed": {
+ "default_value": true
+ },
+ "machine_nozzle_heat_up_speed": {
+ "default_value": 2
+ },
+ "machine_nozzle_cool_down_speed": {
+ "default_value": 2
+ },
+ "machine_head_with_fans_polygon": {
+ "default_value": [
+ [
+ -68.18,
+ 64.63
+ ],
+ [
+ -68.18,
+ -47.38
+ ],
+ [
+ 35.18,
+ 64.63
+ ],
+ [
+ 35.18,
+ -47.38
+ ]
+ ]
+ },
+ "gantry_height": {
+ "default_value": 12
+ },
+ "machine_use_extruder_offset_to_offset_coords": {
+ "default_value": true
+ },
+ "machine_gcode_flavor": {
+ "default_value": "RepRap (Marlin/Sprinter)"
+ },
+ "machine_start_gcode": {
+ "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z2.0 F400 ;move the platform down 15mm\nT0\nG92 E0\nG28\nG1 Y0 F1200 E0\nG92 E0\nM117 BIBO Printing..."
+ },
+ "machine_end_gcode": {
+ "default_value": ";End GCode\nM104 T0 S0 ;extruder heater off\nM104 T1 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91\nG1 Z1 F100 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-2 X-20 Y-20 F300 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning"
+ },
+ "machine_extruder_count": {
+ "default_value": 2
+ },
+ "prime_tower_position_x": {
+ "default_value": 50
+ },
+ "prime_tower_position_y": {
+ "default_value": 50
+ }
+ }
+}
+
diff --git a/resources/definitions/cocoon_create_modelmaker.def.json b/resources/definitions/cocoon_create_modelmaker.def.json new file mode 100644 index 0000000000..22aa75d09e --- /dev/null +++ b/resources/definitions/cocoon_create_modelmaker.def.json @@ -0,0 +1,96 @@ +{ + "name": "Cocoon Create ModelMaker", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "Cocoon Create", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fine", + "machine_extruder_trains": + { + "0": "cocoon_create_modelmaker_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "Cocoon Create ModelMaker" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 Y0 ;move to the XY-axis origin (Home)\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 120 + }, + "machine_height": { + "default_value": 100 + }, + "machine_depth": { + "default_value": 135 + }, + "machine_heated_bed": { + "default_value": false + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 220 + }, + "layer_height": { + "default_value": 0.10 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "top_bottom_thickness": { + "default_value": 0.6 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 70 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 7 + }, + "retraction_speed": { + "default_value": 40 + } + } +} diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json index 19c9e92d18..0af1e68075 100644 --- a/resources/definitions/fdmextruder.def.json +++ b/resources/definitions/fdmextruder.def.json @@ -78,7 +78,7 @@ "machine_extruder_start_code": { "label": "Extruder Start G-Code", - "description": "Start g-code to execute whenever turning the extruder on.", + "description": "Start g-code to execute when switching to this extruder.", "type": "str", "default_value": "", "settable_per_mesh": false, @@ -124,7 +124,7 @@ "machine_extruder_end_code": { "label": "Extruder End G-Code", - "description": "End g-code to execute whenever turning the extruder off.", + "description": "End g-code to execute when switching away from this extruder.", "type": "str", "default_value": "", "settable_per_mesh": false, @@ -189,7 +189,7 @@ "settable_per_mesh": false, "settable_per_extruder": true, "settable_per_meshgroup": false, - "setttable_globally": false + "settable_globally": false } } }, diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 5c446e0b6f..f39e267354 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2406,7 +2406,7 @@ "switch_extruder_retraction_amount": { "label": "Nozzle Switch Retraction Distance", - "description": "The amount of retraction: Set at 0 for no retraction at all. This should generally be the same as the length of the heat zone.", + "description": "The amount of retraction when switching extruders. Set to 0 for no retraction at all. This should generally be the same as the length of the heat zone.", "type": "float", "unit": "mm", "enabled": "retraction_enable", @@ -3385,7 +3385,7 @@ "retraction_combing": { "label": "Combing Mode", - "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases.", + "description": "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas or to only comb within the infill.", "type": "enum", "options": { @@ -4139,6 +4139,20 @@ "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false }, + "minimum_support_area": + { + "label": "Minimum Support Area", + "description": "Minimum area size for support polygons. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 0.0, + "minimum_value": "0", + "enabled": "support_enable", + "limit_to_extruder": "support_infill_extruder_nr", + "settable_per_mesh": true, + "fabricate_enabled": true, + "intermediate_enabled": true + }, "support_interface_enable": { "label": "Enable Support Interface", @@ -4378,6 +4392,50 @@ } } }, + "minimum_interface_area": + { + "label": "Minimum Support Interface Area", + "description": "Minimum area size for support interface polygons. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 1.0, + "minimum_value": "0", + "minimum_value_warning": "minimum_support_area", + "limit_to_extruder": "support_interface_extruder_nr", + "enabled": "support_interface_enable and support_enable", + "settable_per_mesh": true, + "children": + { + "minimum_roof_area": + { + "label": "Minimum Support Roof Area", + "description": "Minimum area size for the roofs of the support. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 1.0, + "value": "extruderValue(support_roof_extruder_nr, 'minimum_interface_area')", + "minimum_value": "0", + "minimum_value_warning": "minimum_support_area", + "limit_to_extruder": "support_roof_extruder_nr", + "enabled": "support_roof_enable and support_enable", + "settable_per_mesh": true + }, + "minimum_bottom_area": + { + "label": "Minimum Support Floor Area", + "description": "Minimum area size for the floors of the support. Polygons which have an area smaller than this value will not be generated.", + "unit": "mm²", + "type": "float", + "default_value": 1.0, + "value": "extruderValue(support_bottom_extruder_nr, 'minimum_interface_area')", + "minimum_value": "0", + "minimum_value_warning": "minimum_support_area", + "limit_to_extruder": "support_bottom_extruder_nr", + "enabled": "support_bottom_enable and support_enable", + "settable_per_mesh": true + } + } + }, "support_interface_offset": { "label": "Support Interface Horizontal Expansion", @@ -4398,7 +4456,6 @@ "description": "Amount of offset applied to the roofs of the support.", "unit": "mm", "type": "float", - "minimum_value": "0", "default_value": 0.0, "value": "extruderValue(support_roof_extruder_nr, 'support_interface_offset')", "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", @@ -4413,7 +4470,6 @@ "description": "Amount of offset applied to the floors of the support.", "unit": "mm", "type": "float", - "minimum_value": "0", "default_value": 0.0, "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_offset')", "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", diff --git a/resources/definitions/gmax15plus.def.json b/resources/definitions/gmax15plus.def.json index 16695714f4..069b8be999 100644 --- a/resources/definitions/gmax15plus.def.json +++ b/resources/definitions/gmax15plus.def.json @@ -14,19 +14,24 @@ "has_variants": true, "variants_name": "Hotend", "preferred_variant_name": "0.5mm E3D (Default)", + "preferred_quality_type": "gmax15plus_global_normal", "machine_extruder_trains": { "0": "gmax15plus_extruder_0" } + + }, "overrides": { - "machine_extruder_count": { "default_value": 1 }, + "machine_extruder_count": { "default_value": 1 }, "machine_name": { "default_value": "gMax 1.5 Plus" }, "machine_heated_bed": { "default_value": false }, "machine_width": { "default_value": 406 }, "machine_depth": { "default_value": 406 }, "machine_height": { "default_value": 533 }, "machine_center_is_zero": { "default_value": false }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_size": { "default_value": 0.5 }, "layer_height": { "default_value": 0.2 }, "layer_height_0": { "default_value": 0.3 }, "retraction_amount": { "default_value": 1 }, @@ -43,10 +48,10 @@ "machine_max_jerk_z": { "default_value": 0.4 }, "machine_max_jerk_e": { "default_value": 5.0 }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, - "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 ;Home X/Y/Z\nG29 ; Bed level\nM104 S{material_print_temperature} ; Preheat\nM109 S{material_print_temperature} ; Preheat\nG91 ;relative positioning\nG90 ;absolute positioning\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, + "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} ; Preheat\nM109 S{material_print_temperature} ; Preheat\nG91 ;relative positioning\nG90 ;absolute positioning\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, "machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" }, - "material_print_temperature": { "default_value": 202 }, - "wall_thickness": { "default_value": 1 }, + "material_print_temperature": { "default_value": 202 }, + "wall_thickness": { "default_value": 1 }, "top_bottom_thickness": { "default_value": 1 }, "bottom_thickness": { "default_value": 1 } } diff --git a/resources/definitions/gmax15plus_dual.def.json b/resources/definitions/gmax15plus_dual.def.json index 5972061933..0264ef5977 100644 --- a/resources/definitions/gmax15plus_dual.def.json +++ b/resources/definitions/gmax15plus_dual.def.json @@ -10,24 +10,26 @@ "category": "Other", "file_formats": "text/x-gcode", "platform": "gmax_1-5_xt-plus_s3d_full model_150707.stl", - "has_variants": true, - "has_machine_quality": true, - "variants_name": "Hotend", - "preferred_variant_name": "0.5mm E3D (Default)", - "machine_extruder_trains": { - "0": "gmax15plus_dual_extruder_0", - "1": "gmax15plus_dual_extruder_1" - } + "has_variants": true, + "variants_name": "Hotend", + "preferred_variant_name": "0.5mm E3D (Default)", + "preferred_quality_type": "gmax15plus_global_dual_normal", + "machine_extruder_trains": { + "0": "gmax15plus_dual_extruder_0", + "1": "gmax15plus_dual_extruder_1" + } }, "overrides": { "machine_name": { "default_value": "gMax 1.5 Plus Dual Extruder" }, - "machine_extruder_count": { "default_value": 2 }, + "machine_extruder_count": { "default_value": 2 }, "machine_heated_bed": { "default_value": false }, "machine_width": { "default_value": 406 }, "machine_depth": { "default_value": 406 }, "machine_height": { "default_value": 533 }, "machine_center_is_zero": { "default_value": false }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_size": { "default_value": 0.5 }, "layer_height": { "default_value": 0.2 }, "layer_height_0": { "default_value": 0.3 }, "retraction_amount": { "default_value": 1 }, @@ -44,10 +46,10 @@ "machine_max_jerk_z": { "default_value": 0.4 }, "machine_max_jerk_e": { "default_value": 5.0 }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, - "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 ;Home X/Y/Z\nG29 ; Bed level\nM104 S{material_print_temperature} T0 ; Preheat Left Extruder\nM104 S{material_print_temperature} T1 ; Preheat Right Extruder\nM109 S{material_print_temperature} T0 ; Preheat Left Extruder\nM109 S{material_print_temperature} T1 ; Preheat Right Extruder\nG91 ;relative positioning\nG90 ;absolute positioning\nM218 T1 X34.3 Y0; Set 2nd extruder offset. This can be changed later if needed\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, + "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home X/Y/Z\nM104 S{material_print_temperature} T0 ; Preheat Left Extruder\nM104 S{material_print_temperature} T1 ; Preheat Right Extruder\nM109 S{material_print_temperature} T0 ; Preheat Left Extruder\nM109 S{material_print_temperature} T1 ; Preheat Right Extruder\nG91 ;relative positioning\nG90 ;absolute positioning\nM218 T1 X34.3 Y0; Set 2nd extruder offset. This can be changed later if needed\nG1 Z25.0 F9000 ;raise nozzle 25mm\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, "machine_end_gcode": { "default_value": "M104 S0 T0;Left extruder off\nM104 S0 T1; Right extruder off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning" }, - "material_print_temperature": { "default_value": 202 }, - "wall_thickness": { "default_value": 1 }, + "material_print_temperature": { "default_value": 202 }, + "wall_thickness": { "default_value": 1 }, "top_bottom_thickness": { "default_value": 1 }, "bottom_thickness": { "default_value": 1 } } diff --git a/resources/definitions/jgaurora_a1.def.json b/resources/definitions/jgaurora_a1.def.json new file mode 100644 index 0000000000..b9a921c311 --- /dev/null +++ b/resources/definitions/jgaurora_a1.def.json @@ -0,0 +1,93 @@ +{ + "name": "JGAurora A1", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "JGAurora", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "jgaurora_a1_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "JGAurora A1" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nM420 S1 ;turn on mesh bed levelling if enabled in firmware\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 300 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 215 + }, + "material_bed_temperature": { + "default_value": 67 + }, + "layer_height_0": { + "default_value": 0.12 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 12 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 6 + }, + "retraction_speed": { + "default_value": 40 + } + } +} diff --git a/resources/definitions/jgaurora_a5.def.json b/resources/definitions/jgaurora_a5.def.json new file mode 100644 index 0000000000..d84a8440e6 --- /dev/null +++ b/resources/definitions/jgaurora_a5.def.json @@ -0,0 +1,95 @@ +{ + "name": "JGAurora A5 & A5S", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "JGAurora", + "file_formats": "text/x-gcode", + "platform": "jgaurora_a5.stl", + "platform_offset": [-242, -101, 273], + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "jgaurora_a5_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "JGAurora A5 & A5S" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nM420 S1 ;turn on mesh bed levelling if enabled in firmware\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 300 + }, + "machine_height": { + "default_value": 320 + }, + "machine_depth": { + "default_value": 300 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 215 + }, + "material_bed_temperature": { + "default_value": 67 + }, + "layer_height_0": { + "default_value": 0.12 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 40 + }, + "speed_infill": { + "default_value": 40 + }, + "speed_wall": { + "default_value": 35 + }, + "speed_topbottom": { + "default_value": 35 + }, + "speed_travel": { + "default_value": 120 + }, + "speed_layer_0": { + "default_value": 12 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 8 + }, + "retraction_speed": { + "default_value": 45 + } + } +} diff --git a/resources/definitions/jgaurora_z_603s.def.json b/resources/definitions/jgaurora_z_603s.def.json new file mode 100644 index 0000000000..3a78585240 --- /dev/null +++ b/resources/definitions/jgaurora_z_603s.def.json @@ -0,0 +1,93 @@ +{ + "name": "JGAurora Z-603S", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Samuel Pinches", + "manufacturer": "JGAurora", + "file_formats": "text/x-gcode", + "preferred_quality_type": "fast", + "machine_extruder_trains": + { + "0": "jgaurora_z_603s_extruder_0" + } + }, + "overrides": { + "machine_name": { + "default_value": "JGAurora Z-603S" + }, + "machine_start_gcode": { + "default_value": "; -- START GCODE --\nG21 ;set units to millimetres\nG90 ;set to absolute positioning\nM106 S0 ;set fan speed to zero (turned off)\nG28 ;home all axis\nM420 S1 ;turn on mesh bed levelling if enabled in firmware\nG92 E0 ;zero the extruded length\nG1 Z1 F1000 ;move up slightly\nG1 X60.0 Z0 E9.0 F1000.0;intro line\nG1 X100.0 E21.5 F1000.0 ;continue line\nG92 E0 ;zero the extruded length again\n; -- end of START GCODE --" + }, + "machine_end_gcode": { + "default_value": "; -- END GCODE --\nM104 S0 ;turn off nozzle heater\nM140 S0 ;turn off bed heater\nG91 ;set to relative positioning\nG1 E-10 F300 ;retract the filament slightly\nG90 ;set to absolute positioning\nG28 X0 ;move to the X-axis origin (Home)\nG0 Y280 F600 ;bring the bed to the front for easy print removal\nM84 ;turn off stepper motors\n; -- end of END GCODE --" + }, + "machine_width": { + "default_value": 280 + }, + "machine_height": { + "default_value": 175 + }, + "machine_depth": { + "default_value": 180 + }, + "machine_heated_bed": { + "default_value": true + }, + "machine_center_is_zero": { + "default_value": false + }, + "gantry_height": { + "default_value": 10 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (Marlin/Sprinter)" + }, + "material_diameter": { + "default_value": 1.75 + }, + "material_print_temperature": { + "default_value": 210 + }, + "material_bed_temperature": { + "default_value": 55 + }, + "layer_height_0": { + "default_value": 0.2 + }, + "wall_thickness": { + "default_value": 1.2 + }, + "speed_print": { + "default_value": 60 + }, + "speed_infill": { + "default_value": 60 + }, + "speed_wall": { + "default_value": 30 + }, + "speed_topbottom": { + "default_value": 45 + }, + "speed_travel": { + "default_value": 125 + }, + "speed_layer_0": { + "default_value": 20 + }, + "support_enable": { + "default_value": true + }, + "retraction_enable": { + "default_value": true + }, + "retraction_amount": { + "default_value": 5 + }, + "retraction_speed": { + "default_value": 50 + } + } +} diff --git a/resources/definitions/monoprice_ultimate.def.json b/resources/definitions/monoprice_ultimate.def.json new file mode 100644 index 0000000000..48290f0941 --- /dev/null +++ b/resources/definitions/monoprice_ultimate.def.json @@ -0,0 +1,52 @@ +{ + "version": 2, + "name": "Monoprice Ultimate", + "inherits": "wanhao_d6", + "metadata": { + "visible": true, + "author": "Danny Tuppeny", + "manufacturer": "monoprice", + "file_formats": "text/x-gcode", + "icon": "wanhao-icon.png", + "has_materials": true, + "platform": "wanhao_200_200_platform.obj", + "platform_texture": "Wanhaobackplate.png", + "machine_extruder_trains": { + "0": "wanhao_d6_extruder_0" + }, + "platform_offset": [ + 0, + -28, + 0 + ] + }, + "overrides": { + "machine_name": { + "default_value": "Monoprice Ultimate" + }, + "machine_max_acceleration_x": { + "default_value": 3000 + }, + "machine_max_acceleration_y": { + "default_value": 3000 + }, + "machine_max_acceleration_z": { + "default_value": 100 + }, + "machine_max_acceleration_e": { + "default_value": 500 + }, + "machine_acceleration": { + "default_value": 800 + }, + "machine_max_jerk_xy": { + "default_value": 10.0 + }, + "machine_max_jerk_z": { + "default_value": 0.4 + }, + "machine_max_jerk_e": { + "default_value": 1.0 + } + } +} diff --git a/resources/definitions/nwa3d_a5.def.json b/resources/definitions/nwa3d_a5.def.json new file mode 100644 index 0000000000..3deb0027fd --- /dev/null +++ b/resources/definitions/nwa3d_a5.def.json @@ -0,0 +1,64 @@ +{ + "name": "NWA3D A5", + "version": 2, + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "DragonJe", + "manufacturer": "NWA 3D LLC", + "file_formats": "text/x-gcode", + "platform_offset": [0, 0, 0], + "has_materials": true, + "has_variants": false, + "has_machine_materials": true, + "has_variant_materials": false, + "preferred_quality_type": "normal", + "has_machine_quality": true, + "preferred_material": "generic_pla", + "machine_extruder_trains": + { + "0": "nwa3d_a5_extruder_0" + } + }, + + "overrides": { + "machine_name": { + "default_value": "NWA3D A5" + }, + "machine_width": { + "default_value": 125 + }, + "machine_height": { + "default_value": 100 + }, + "machine_depth": { + "default_value": 150 + }, + "machine_head_polygon": { + "default_value": [ + [-30, 34], + [-30, -32], + [30, -32], + [30, 34] + ] + }, + "gantry_height": { + "default_value": 30 + }, + "machine_heated_bed": { + "default_value": false + }, + "material_diameter": { + "default_value": 1.75 + }, + "machine_gcode_flavor": { + "default_value": "RepRap (RepRap)" + }, + "machine_start_gcode": { + "default_value": "G28 ; Home\nG1 Z15.0 F6000 ; Move Z axis up 15mm\n ; Prime the extruder\nG92 E0\nG1 F200 E3\nG92 E0" + }, + "machine_end_gcode": { + "default_value": "M104 S0\nM140 S0\n ; Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84" + } + } +} diff --git a/resources/definitions/tevo_tarantula.def.json b/resources/definitions/tevo_tarantula.def.json index 570ae24a3d..ec4ae667d5 100644 --- a/resources/definitions/tevo_tarantula.def.json +++ b/resources/definitions/tevo_tarantula.def.json @@ -42,7 +42,7 @@ "machine_max_feedrate_x": { "default_value": 255 }, "machine_max_feedrate_y": { "default_value": 225 }, "machine_max_feedrate_z": { "default_value": 3 }, - "machine_max_acceleration_x": { "default_value": 2620 }, + "machine_max_acceleration_x": { "default_value": 2650 }, "machine_max_acceleration_y": { "default_value": 2650 }, "acceleration_print": { "default_value": 2650 }, "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..." }, diff --git a/resources/definitions/ultimaker_original_plus.def.json b/resources/definitions/ultimaker_original_plus.def.json index 5ad7ae66e8..bdb8a3d788 100644 --- a/resources/definitions/ultimaker_original_plus.def.json +++ b/resources/definitions/ultimaker_original_plus.def.json @@ -16,7 +16,8 @@ { "0": "ultimaker_original_plus_extruder_0" }, - "firmware_file": "MarlinUltimaker-UMOP-{baudrate}.hex" + "firmware_file": "MarlinUltimaker-UMOP-{baudrate}.hex", + "firmware_hbk_file": "MarlinUltimaker-UMOP-{baudrate}.hex" }, "overrides": { diff --git a/resources/definitions/wanhao_d4s.def.json b/resources/definitions/wanhao_d4s.def.json index 8788353e92..c1807923c6 100644 --- a/resources/definitions/wanhao_d4s.def.json +++ b/resources/definitions/wanhao_d4s.def.json @@ -39,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_d6.def.json b/resources/definitions/wanhao_d6.def.json index 7ca3031124..c8a690d02c 100644 --- a/resources/definitions/wanhao_d6.def.json +++ b/resources/definitions/wanhao_d6.def.json @@ -42,10 +42,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_d6_plus.def.json b/resources/definitions/wanhao_d6_plus.def.json index f17b58db85..b3b5ed9b0a 100644 --- a/resources/definitions/wanhao_d6_plus.def.json +++ b/resources/definitions/wanhao_d6_plus.def.json @@ -39,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_d9.def.json b/resources/definitions/wanhao_d9.def.json new file mode 100644 index 0000000000..4e368f970f --- /dev/null +++ b/resources/definitions/wanhao_d9.def.json @@ -0,0 +1,41 @@ +{
+ "version": 2,
+ "name": "Wanhao Duplicator 9",
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "manufacturer": "Wanhao",
+ "file_formats": "text/x-gcode",
+ "has_materials": true,
+ "platform": "wanhao_300_300_platform.obj",
+ "platform_texture": "Wanhaobackplate.png",
+ "machine_extruder_trains": {
+ "0": "wanhao_d9_extruder_0"
+ },
+ "platform_offset": [ 0, -55, 0]
+ },
+
+ "overrides": {
+ "machine_name": { "default_value": "Wanhao Duplicator 9" },
+ "machine_width": { "default_value": 300 },
+ "machine_height": { "default_value": 400 },
+ "machine_depth": { "default_value": 300 },
+ "machine_heated_bed": { "default_value": true },
+ "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
+ "machine_start_gcode": {
+ "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..."
+ },
+ "machine_end_gcode": {
+ "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning"
+ },
+ "support_angle": { "default_value": 60 },
+ "support_enable": { "default_value": true },
+ "layer_height_0": { "default_value": 0.15 },
+ "top_thickness": { "default_value": 0.6 },
+ "material_print_temperature": { "default_value": 190 },
+ "layer_height": { "default_value": 0.2 },
+ "speed_print": { "default_value": 30 },
+ "adhesion_type": { "default_value": "raft" },
+ "support_z_distance": { "default_value": 0.22 }
+ }
+}
diff --git a/resources/definitions/wanhao_duplicator5S.def.json b/resources/definitions/wanhao_duplicator5S.def.json index 1d29b90249..b27a13fda8 100644 --- a/resources/definitions/wanhao_duplicator5S.def.json +++ b/resources/definitions/wanhao_duplicator5S.def.json @@ -42,10 +42,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_duplicator5Smini.def.json b/resources/definitions/wanhao_duplicator5Smini.def.json index e7f9359cf1..e3ef0b92fe 100644 --- a/resources/definitions/wanhao_duplicator5Smini.def.json +++ b/resources/definitions/wanhao_duplicator5Smini.def.json @@ -39,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_i3.def.json b/resources/definitions/wanhao_i3.def.json index 15121f8b8b..42b19c8748 100644 --- a/resources/definitions/wanhao_i3.def.json +++ b/resources/definitions/wanhao_i3.def.json @@ -39,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_i3mini.def.json b/resources/definitions/wanhao_i3mini.def.json index 057fca81a6..0c70391c27 100644 --- a/resources/definitions/wanhao_i3mini.def.json +++ b/resources/definitions/wanhao_i3mini.def.json @@ -39,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/definitions/wanhao_i3plus.def.json b/resources/definitions/wanhao_i3plus.def.json index 2b705c6ff5..e454a40ae1 100644 --- a/resources/definitions/wanhao_i3plus.def.json +++ b/resources/definitions/wanhao_i3plus.def.json @@ -39,10 +39,10 @@ "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{travel_speed} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{travel_speed} \n ;Put printing message on LCD screen\n M117 Printing..." + "default_value": "G21 ;metric values\n G90 ;absolute positioning\n M82 ;set extruder to absolute mode\n M107 ;start with the fan off\n G28 X0 Y0 ;move X/Y to min endstops\n G28 Z0 ;move Z to min endstops\n G1 Z15.0 F{speed_travel} ;move the platform down 15mm\n G92 E0 ;zero the extruded length\n G1 F200 E6 ;extrude 6 mm of feed stock\n G92 E0 ;zero the extruded length again\n G1 F{speed_travel} \n ;Put printing message on LCD screen\n M117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{travel_speed} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" + "default_value": "M104 S0 ;extruder heater off \n G91 ;relative positioning\n G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n G1 Z+0.5 E-5 X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\n G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n M84 ;steppers off\n G90 ;absolute positioning" } } } diff --git a/resources/extruders/alfawise_u20_extruder_0.def.json b/resources/extruders/alfawise_u20_extruder_0.def.json new file mode 100644 index 0000000000..2fbe3f1772 --- /dev/null +++ b/resources/extruders/alfawise_u20_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "alfawise_u20_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "alfawise_u20", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +}
\ No newline at end of file diff --git a/resources/extruders/alfawise_u30_extruder_0.def.json b/resources/extruders/alfawise_u30_extruder_0.def.json new file mode 100644 index 0000000000..37f59eb567 --- /dev/null +++ b/resources/extruders/alfawise_u30_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "alfawise_u30_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "alfawise_u30", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/bibo2_dual_extruder_0.def.json b/resources/extruders/bibo2_dual_extruder_0.def.json new file mode 100644 index 0000000000..f83801fa0c --- /dev/null +++ b/resources/extruders/bibo2_dual_extruder_0.def.json @@ -0,0 +1,46 @@ +{
+ "id": "BIBO1",
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "BIBO2 dual",
+ "position": "0"
+ },
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 0,
+ "maximum_value": "1"
+ },
+ "material_diameter": {
+ "default_value": 1.75
+ },
+ "machine_nozzle_size": {
+ "default_value": 0.4
+ },
+ "machine_nozzle_offset_x": {
+ "default_value": 0.0
+ },
+ "machine_nozzle_offset_y": {
+ "default_value": 0.0
+ },
+ "machine_extruder_start_pos_abs": {
+ "default_value": true
+ },
+ "machine_extruder_start_pos_x": {
+ "value": "prime_tower_position_x"
+ },
+ "machine_extruder_start_pos_y": {
+ "value": "prime_tower_position_y"
+ },
+ "machine_extruder_end_pos_abs": {
+ "default_value": true
+ },
+ "machine_extruder_end_pos_x": {
+ "value": "prime_tower_position_x"
+ },
+ "machine_extruder_end_pos_y": {
+ "value": "prime_tower_position_y"
+ }
+ }
+}
diff --git a/resources/extruders/bibo2_dual_extruder_1.def.json b/resources/extruders/bibo2_dual_extruder_1.def.json new file mode 100644 index 0000000000..5f479ba54b --- /dev/null +++ b/resources/extruders/bibo2_dual_extruder_1.def.json @@ -0,0 +1,46 @@ +{
+ "id": "BIBO2",
+ "version": 2,
+ "name": "Extruder 2",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "BIBO2 dual",
+ "position": "1"
+ },
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 1,
+ "maximum_value": "1"
+ },
+ "material_diameter": {
+ "default_value": 1.75
+ },
+ "machine_nozzle_size": {
+ "default_value": 0.4
+ },
+ "machine_nozzle_offset_x": {
+ "default_value": 0.0
+ },
+ "machine_nozzle_offset_y": {
+ "default_value": 0.0
+ },
+ "machine_extruder_start_pos_abs": {
+ "default_value": true
+ },
+ "machine_extruder_start_pos_x": {
+ "value": "prime_tower_position_x"
+ },
+ "machine_extruder_start_pos_y": {
+ "value": "prime_tower_position_y"
+ },
+ "machine_extruder_end_pos_abs": {
+ "default_value": true
+ },
+ "machine_extruder_end_pos_x": {
+ "value": "prime_tower_position_x"
+ },
+ "machine_extruder_end_pos_y": {
+ "value": "prime_tower_position_y"
+ }
+ }
+}
diff --git a/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json b/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json new file mode 100644 index 0000000000..26d847483d --- /dev/null +++ b/resources/extruders/cocoon_create_modelmaker_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "cocoon_create_modelmaker_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "cocoon_create_modelmaker", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/gmax15plus_dual_extruder_0.def.json b/resources/extruders/gmax15plus_dual_extruder_0.def.json index b490f4a40e..d3146a0576 100644 --- a/resources/extruders/gmax15plus_dual_extruder_0.def.json +++ b/resources/extruders/gmax15plus_dual_extruder_0.def.json @@ -15,10 +15,10 @@ }, "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, - "machine_nozzle_size": { "default_value": 0.5 }, + "machine_nozzle_size": { "default_value": 0.5 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": 40 }, "machine_extruder_start_pos_y": { "value": 210 }, "machine_extruder_end_pos_abs": { "default_value": true }, diff --git a/resources/extruders/gmax15plus_dual_extruder_1.def.json b/resources/extruders/gmax15plus_dual_extruder_1.def.json index ad3c628d6f..7b7354d794 100644 --- a/resources/extruders/gmax15plus_dual_extruder_1.def.json +++ b/resources/extruders/gmax15plus_dual_extruder_1.def.json @@ -15,10 +15,10 @@ }, "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, - "machine_nozzle_size": { "default_value": 0.5 }, + "machine_nozzle_size": { "default_value": 0.5 }, "material_diameter": { "default_value": 1.75 }, - - "machine_extruder_start_pos_abs": { "default_value": true }, + + "machine_extruder_start_pos_abs": { "default_value": true }, "machine_extruder_start_pos_x": { "value": 40 }, "machine_extruder_start_pos_y": { "value": 210 }, "machine_extruder_end_pos_abs": { "default_value": true }, diff --git a/resources/extruders/jgaurora_a1_extruder_0.def.json b/resources/extruders/jgaurora_a1_extruder_0.def.json new file mode 100644 index 0000000000..71742b734a --- /dev/null +++ b/resources/extruders/jgaurora_a1_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "jgaurora_a1_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "jgaurora_a1", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/jgaurora_a5_extruder_0.def.json b/resources/extruders/jgaurora_a5_extruder_0.def.json new file mode 100644 index 0000000000..fbc6ba77e6 --- /dev/null +++ b/resources/extruders/jgaurora_a5_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "jgaurora_a5_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "jgaurora_a5", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/jgaurora_z_603s_extruder_0.def.json b/resources/extruders/jgaurora_z_603s_extruder_0.def.json new file mode 100644 index 0000000000..987425b28a --- /dev/null +++ b/resources/extruders/jgaurora_z_603s_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "jgaurora_z_603s_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "jgaurora_z_603s", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/nwa3d_a5_extruder_0.def.json b/resources/extruders/nwa3d_a5_extruder_0.def.json new file mode 100644 index 0000000000..5c3cc6a127 --- /dev/null +++ b/resources/extruders/nwa3d_a5_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "id": "nwa3d_a5_extruder_0", + "version": 2, + "name": "Regular 0.4mm Nozzle", + "inherits": "fdmextruder", + "metadata": { + "machine": "nwa3d_a5", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/wanhao_d9_extruder_0.def.json b/resources/extruders/wanhao_d9_extruder_0.def.json new file mode 100644 index 0000000000..00ae0e3b2a --- /dev/null +++ b/resources/extruders/wanhao_d9_extruder_0.def.json @@ -0,0 +1,16 @@ +{
+ "id": "wanhao_d9_extruder_0",
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "wanhao_d9",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": { "default_value": 0 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
diff --git a/resources/meshes/jgaurora_a5.stl b/resources/meshes/jgaurora_a5.stl Binary files differnew file mode 100644 index 0000000000..c525b03649 --- /dev/null +++ b/resources/meshes/jgaurora_a5.stl diff --git a/resources/meshes/wanhao_300_300_platform.obj b/resources/meshes/wanhao_300_300_platform.obj new file mode 100644 index 0000000000..d36fa4027d --- /dev/null +++ b/resources/meshes/wanhao_300_300_platform.obj @@ -0,0 +1,40925 @@ +####
+#
+# OBJ File Generated by Meshlab
+#
+####
+# Object Wanhao_300_300.obj
+#
+# Vertices: 10222
+# Faces: 20456
+#
+####
+mtllib ./Wanhao_300_300.obj.mtl
+
+vn -0.393291 -0.630494 -0.669178
+v -130.035583 215.793518 15.199996 0.749020 0.749020 0.749020
+vn -0.051719 -0.728959 -0.682601
+v -129.391830 215.606537 15.199996 0.749020 0.749020 0.749020
+vn -0.207049 -0.715068 -0.667689
+v -129.725296 215.653976 15.199996 0.749020 0.749020 0.749020
+vn -0.544071 -0.503412 -0.671240
+v -130.302078 216.015366 15.199996 0.749020 0.749020 0.749020
+vn -0.580426 0.569359 -0.582183
+v -130.679321 218.494888 15.199996 0.749020 0.749020 0.749020
+vn 0.053255 -0.729269 -0.682151
+v 129.391830 215.606537 15.199996 0.749020 0.749020 0.749020
+vn -0.729738 -0.090231 -0.677747
+v -130.679321 217.003281 15.199996 0.749020 0.749020 0.749020
+vn -0.680964 -0.312870 -0.662118
+v -130.506790 216.305603 15.199996 0.749020 0.749020 0.749020
+vn 0.580429 0.569355 -0.582183
+v 130.679321 218.494888 15.199996 0.749020 0.749020 0.749020
+vn 0.680964 -0.312870 -0.662118
+v 130.506790 216.305603 15.199996 0.749020 0.749020 0.749020
+vn 0.544071 -0.503412 -0.671240
+v 130.302078 216.015366 15.199996 0.749020 0.749020 0.749020
+vn -0.726515 0.683644 -0.069329
+v -130.126984 220.890671 113.548996 0.749020 0.749020 0.749020
+vn 0.726471 0.683697 -0.069274
+v 130.126984 220.892075 113.548996 0.749020 0.749020 0.749020
+vn 0.729739 -0.090229 -0.677746
+v 130.679321 217.003281 15.199996 0.749020 0.749020 0.749020
+vn 0.992475 -0.122036 0.010024
+v 130.125702 219.401840 113.636200 0.749020 0.749020 0.749020
+vn 0.649937 0.730775 -0.208683
+v 130.081924 223.917160 121.446198 0.749020 0.749020 0.749020
+vn 0.748066 0.661094 0.057892
+v 130.069046 223.917160 123.872597 0.749020 0.749020 0.749020
+vn 0.751737 0.614921 -0.238251
+v 130.101242 221.748810 118.013794 0.749020 0.749020 0.749020
+vn 0.788179 0.584583 0.192449
+v 130.005966 223.917160 124.540398 0.749020 0.749020 0.749020
+vn 0.882308 -0.417950 0.216448
+v 129.913269 220.543243 121.067398 0.749020 0.749020 0.749020
+vn 0.991714 -0.114562 0.058125
+v 130.088364 221.097168 120.467400 0.749020 0.749020 0.749020
+vn 0.991549 -0.126987 0.026564
+v 130.120560 219.461838 114.714798 0.749020 0.749020 0.749020
+vn -0.751844 0.614714 -0.238449
+v -130.101242 221.748810 118.013794 0.749020 0.749020 0.749020
+vn -0.649959 0.730757 -0.208681
+v -130.081924 223.917160 121.446198 0.749020 0.749020 0.749020
+vn -0.043265 0.347512 0.936677
+v -128.778992 223.917160 126.066002 0.749020 0.749020 0.749020
+vn -0.152839 -0.739284 0.655819
+v -128.794449 221.041367 122.842796 0.749020 0.749020 0.749020
+vn 0.116109 0.334526 0.935206
+v 128.778992 223.917160 126.066002 0.749020 0.749020 0.749020
+vn 0.160321 -0.736734 0.656902
+v 128.794449 221.041367 122.842796 0.749020 0.749020 0.749020
+vn 0.152749 -0.862867 0.481796
+v 128.800888 219.985092 121.658401 0.749020 0.749020 0.749020
+vn -0.240252 0.330881 0.912577
+v -128.924484 223.917160 126.052200 0.749020 0.749020 0.749020
+vn -0.152750 -0.862868 0.481796
+v -128.800888 219.985092 121.658401 0.749020 0.749020 0.749020
+vn 0.141015 -0.952070 0.271437
+v 128.815048 219.122787 118.625000 0.749020 0.749020 0.749020
+vn -0.140808 -0.952119 0.271372
+v -128.815048 219.122787 118.625000 0.749020 0.749020 0.749020
+vn 0.139042 -0.976592 0.164119
+v 128.833069 218.077667 114.946999 0.749020 0.749020 0.749020
+vn 0.139953 -0.989294 0.041351
+v 128.839508 218.006516 113.688599 0.749020 0.749020 0.749020
+vn -0.140384 -0.976322 0.164586
+v -128.833069 218.076279 114.946999 0.749020 0.749020 0.749020
+vn -0.140747 -0.989226 0.040289
+v -128.839508 218.006516 113.688599 0.749020 0.749020 0.749020
+vn 0.519482 -0.842140 0.144702
+v 129.475525 218.263260 114.922195 0.749020 0.749020 0.749020
+vn 0.542742 -0.735115 0.406248
+v 129.442047 220.135788 121.502998 0.749020 0.749020 0.749020
+vn 0.525233 -0.850133 0.037484
+v 129.481964 218.193497 113.688004 0.749020 0.749020 0.749020
+vn 0.873925 -0.478520 0.085282
+v 129.946747 218.769760 114.837204 0.749020 0.749020 0.749020
+vn 0.879593 -0.475122 0.024002
+v 129.953171 218.704178 113.668800 0.749020 0.749020 0.749020
+vn 0.665525 0.408507 0.624659
+v 129.533463 223.917160 125.652802 0.749020 0.749020 0.749020
+vn 0.587814 0.409034 0.697973
+v 129.413727 223.917160 125.755798 0.749020 0.749020 0.749020
+vn 0.783587 0.572843 0.240504
+v 129.878494 223.917160 124.967400 0.749020 0.749020 0.749020
+vn 0.780364 0.490775 0.387521
+v 129.816711 223.917160 125.175201 0.749020 0.749020 0.749020
+vn 0.413693 0.336027 0.846135
+v 129.179398 223.917160 125.958397 0.749020 0.749020 0.749020
+vn 0.392286 -0.631539 -0.668783
+v 130.035583 215.793518 15.199996 0.749020 0.749020 0.749020
+vn 0.206974 -0.714327 -0.668505
+v 129.725296 215.655380 15.199996 0.749020 0.749020 0.749020
+vn -0.749441 0.658736 0.066375
+v -130.069046 223.917160 123.872597 0.749020 0.749020 0.749020
+vn -0.991794 -0.114456 0.056967
+v -130.088364 221.097168 120.467400 0.749020 0.749020 0.749020
+vn -0.991550 -0.126993 0.026486
+v -130.120560 219.461838 114.714798 0.749020 0.749020 0.749020
+vn -0.793714 0.558733 0.240491
+v -129.978928 223.917160 124.673798 0.749020 0.749020 0.749020
+vn -0.881932 -0.419880 0.214236
+v -129.913269 220.541840 121.067398 0.749020 0.749020 0.749020
+vn -0.992431 -0.122381 0.010204
+v -130.125702 219.400467 113.636200 0.749020 0.749020 0.749020
+vn -0.873962 -0.478489 0.085077
+v -129.946747 218.769760 114.837204 0.749020 0.749020 0.749020
+vn -0.879536 -0.475220 0.024147
+v -129.953171 218.704178 113.668800 0.749020 0.749020 0.749020
+vn -0.520263 -0.841666 0.144654
+v -129.475525 218.263260 114.922195 0.749020 0.749020 0.749020
+vn -0.525377 -0.850052 0.037302
+v -129.481964 218.193497 113.688004 0.749020 0.749020 0.749020
+vn -0.540978 -0.737047 0.405098
+v -129.442047 220.135788 121.502998 0.749020 0.749020 0.749020
+vn -0.744458 0.452776 0.490689
+v -129.716278 223.917160 125.380196 0.749020 0.749020 0.749020
+vn -0.774052 0.563892 0.287871
+v -129.873352 223.917160 124.958000 0.749020 0.749020 0.749020
+vn -0.690487 0.461347 0.557124
+v -129.412430 223.917160 125.758202 0.749020 0.749020 0.749020
+vn -0.535741 0.359825 0.763877
+v -129.339050 223.917160 125.848999 0.749020 0.749020 0.749020
+vn -0.317177 0.586780 0.745043
+v -1.949426 168.818207 18.567398 1.000000 1.000000 1.000000
+vn -0.481548 0.703595 0.522557
+v -2.745052 168.705185 18.162399 1.000000 1.000000 1.000000
+vn -0.515217 0.361340 0.777164
+v -3.835522 167.520538 18.371597 1.000000 1.000000 1.000000
+vn -0.193702 0.239788 0.951305
+v -1.870144 168.592148 18.707798 1.000000 1.000000 1.000000
+vn -0.132051 0.611438 0.780197
+v -0.458452 169.186569 18.709599 1.000000 1.000000 1.000000
+vn -0.306161 0.284964 0.908329
+v -3.128578 167.852631 18.575798 1.000000 1.000000 1.000000
+vn -0.250685 0.831658 0.495482
+v -1.277980 169.306564 18.299000 1.000000 1.000000 1.000000
+vn -0.371458 0.803421 0.465332
+v -2.033358 169.058197 18.229597 1.000000 1.000000 1.000000
+vn -0.550038 0.650807 0.523362
+v -3.401654 168.254486 18.097397 1.000000 1.000000 1.000000
+vn -0.679893 0.576501 0.453202
+v -4.000666 167.704727 18.033798 1.000000 1.000000 1.000000
+vn -0.652215 0.228506 0.722773
+v -4.930602 165.889404 18.222397 1.000000 1.000000 1.000000
+vn -0.511068 0.845446 0.155019
+v -2.817562 168.848907 17.694199 1.000000 1.000000 1.000000
+vn -0.621257 0.767112 0.159932
+v -3.491532 168.385651 17.629200 1.000000 1.000000 1.000000
+vn -0.725101 0.440044 0.529707
+v -4.751256 166.732178 17.942799 1.000000 1.000000 1.000000
+vn -0.766304 0.611678 0.196540
+v -4.383680 167.509384 17.534599 1.000000 1.000000 1.000000
+vn -0.601353 0.775598 -0.191892
+v -3.483910 168.374481 16.813599 1.000000 1.000000 1.000000
+vn -0.722364 0.691498 -0.004449
+v -4.130548 167.848450 17.155399 1.000000 1.000000 1.000000
+vn -0.838124 0.507294 0.200499
+v -4.876798 166.824265 17.474598 1.000000 1.000000 1.000000
+vn -0.843550 0.530938 -0.080796
+v -4.905496 166.845200 17.064598 1.000000 1.000000 1.000000
+vn -0.830792 0.314286 0.459357
+v -5.142908 166.002426 17.884598 1.000000 1.000000 1.000000
+vn -0.903895 0.400742 0.149600
+v -5.278788 166.074982 17.416397 1.000000 1.000000 1.000000
+vn -0.695815 0.674249 -0.247447
+v -4.097420 167.812164 16.750000 1.000000 1.000000 1.000000
+vn -0.634381 0.277877 -0.721349
+v -5.325858 165.833588 16.327400 1.000000 1.000000 1.000000
+vn -0.486937 0.392306 -0.780377
+v -4.275068 167.403336 16.326797 1.000000 1.000000 1.000000
+vn -0.328254 0.504471 -0.798598
+v -3.104632 168.441467 16.326797 1.000000 1.000000 1.000000
+vn -0.459126 0.866936 -0.193972
+v -2.811420 168.837738 16.878597 1.000000 1.000000 1.000000
+vn -0.177473 0.573042 -0.800079
+v -1.746108 169.060989 16.330997 1.000000 1.000000 1.000000
+vn -0.386429 0.911794 0.138941
+v -2.087058 169.211685 17.761398 1.000000 1.000000 1.000000
+vn -0.234592 0.950266 -0.204843
+v -1.308866 169.453079 17.015198 1.000000 1.000000 1.000000
+vn -0.042781 0.863410 -0.502686
+v -0.478650 169.448898 16.695000 1.000000 1.000000 1.000000
+vn 0.033255 0.419414 -0.907186
+v -0.029486 169.132156 16.326797 1.000000 1.000000 1.000000
+vn -0.075452 0.980416 -0.181910
+v -0.489720 169.592621 17.087997 1.000000 1.000000 1.000000
+vn -0.250643 0.955283 0.156883
+v -1.311724 169.465637 17.830597 1.000000 1.000000 1.000000
+vn 0.116437 0.867663 -0.483325
+v 0.308926 169.462845 16.767998 1.000000 1.000000 1.000000
+vn 0.100318 0.976827 -0.189067
+v 0.316086 169.606567 17.161198 1.000000 1.000000 1.000000
+vn 0.042064 0.986439 0.158650
+v 0.316784 169.620514 17.976597 1.000000 1.000000 1.000000
+vn -0.105670 0.981706 0.158390
+v -0.490790 169.606567 17.903599 1.000000 1.000000 1.000000
+vn -0.123464 0.874056 0.469875
+v -0.478168 169.441910 18.371799 1.000000 1.000000 1.000000
+vn 0.015800 0.845241 0.534152
+v 0.308612 169.455872 18.445000 1.000000 1.000000 1.000000
+vn 0.188353 0.971973 0.140681
+v 1.105114 169.515869 18.050598 1.000000 1.000000 1.000000
+vn 0.107402 0.839901 0.532006
+v 1.076648 169.354019 18.518997 1.000000 1.000000 1.000000
+vn 0.331975 0.924163 -0.188983
+v 1.876916 169.280060 17.312000 1.000000 1.000000 1.000000
+vn 0.327167 0.931847 0.156917
+v 1.881022 169.292618 18.127399 1.000000 1.000000 1.000000
+vn 0.133052 0.610384 0.780851
+v 1.756896 168.893555 18.933399 1.000000 1.000000 1.000000
+vn 0.262205 0.843801 0.468240
+v 1.832574 169.137741 18.595798 1.000000 1.000000 1.000000
+vn -0.048745 0.407678 0.911824
+v 0.283790 168.957733 18.923199 1.000000 1.000000 1.000000
+vn 0.128764 0.397690 0.908440
+v 2.370858 168.353561 19.154999 1.000000 1.000000 1.000000
+vn 0.194000 0.283968 0.939003
+v 4.064848 166.891251 19.404400 1.000000 1.000000 1.000000
+vn 0.373988 0.511537 0.773604
+v 3.720394 167.636353 19.179199 1.000000 1.000000 1.000000
+vn -0.257852 -0.062115 0.964186
+v 3.880918 166.726593 19.407997 1.000000 1.000000 1.000000
+vn -0.207463 -0.146310 0.967240
+v 2.263558 168.121933 19.158798 1.000000 1.000000 1.000000
+vn 0.451769 0.719611 0.527318
+v 3.260366 168.360535 18.758198 1.000000 1.000000 1.000000
+vn 0.536646 0.395121 0.745581
+v 4.673594 166.386139 19.349998 1.000000 1.000000 1.000000
+vn 0.665670 0.568889 0.482958
+v 4.419754 167.209381 18.925999 1.000000 1.000000 1.000000
+vn 0.592077 0.662217 0.459254
+v 3.880636 167.826126 18.841400 1.000000 1.000000 1.000000
+vn 0.237716 0.217631 0.946640
+v 4.822388 165.561493 19.579597 1.000000 1.000000 1.000000
+vn 0.609308 0.280344 0.741722
+v 5.167368 165.282425 19.483797 1.000000 1.000000 1.000000
+vn 0.294572 0.132647 0.946379
+v 5.261394 163.652679 19.811199 1.000000 1.000000 1.000000
+vn -0.253228 0.103357 0.961869
+v 5.023300 163.634537 19.814999 1.000000 1.000000 1.000000
+vn -0.275747 0.019058 0.961041
+v 4.604174 165.456848 19.583397 1.000000 1.000000 1.000000
+vn 0.676737 0.127106 0.725169
+v 5.484528 163.669418 19.670597 1.000000 1.000000 1.000000
+vn 0.852887 0.218907 0.473987
+v 5.611048 164.534531 19.238998 1.000000 1.000000 1.000000
+vn -0.214046 0.172974 0.961387
+v 4.930486 162.142929 20.007797 1.000000 1.000000 1.000000
+vn -0.698655 0.040713 0.714299
+v 4.777442 163.615005 19.660397 1.000000 1.000000 1.000000
+vn -0.658679 0.228392 0.716923
+v 4.689160 162.197342 19.853201 1.000000 1.000000 1.000000
+vn -0.141620 0.231524 0.962466
+v 4.457826 160.709915 20.211998 1.000000 1.000000 1.000000
+vn 0.323453 0.058858 0.944412
+v 5.164164 162.089905 20.003998 1.000000 1.000000 1.000000
+vn -0.909714 0.125339 0.395868
+v 4.542980 162.922913 19.407799 1.000000 1.000000 1.000000
+vn -0.914010 -0.018316 0.405277
+v 4.542156 163.596863 19.312798 1.000000 1.000000 1.000000
+vn -0.887700 0.221701 0.403531
+v 4.458224 162.248978 19.505600 1.000000 1.000000 1.000000
+vn -0.567676 0.403002 0.717867
+v 4.239636 160.834106 20.057400 1.000000 1.000000 1.000000
+vn -0.844463 0.355960 0.400219
+v 4.284582 161.577805 19.607597 1.000000 1.000000 1.000000
+vn -0.041728 0.196538 0.979608
+v 3.137128 158.979706 20.529198 1.000000 1.000000 1.000000
+vn 0.332181 -0.021430 0.942972
+v 4.669102 160.589920 20.208199 1.000000 1.000000 1.000000
+vn -0.572654 0.569500 0.589692
+v 3.473624 159.675980 20.266197 1.000000 1.000000 1.000000
+vn -0.718940 0.561436 0.409775
+v 3.702912 160.377838 19.812798 1.000000 1.000000 1.000000
+vn -0.774477 0.457569 0.436825
+v 4.030832 160.952698 19.709797 1.000000 1.000000 1.000000
+vn -0.180530 0.632799 0.752977
+v 2.228346 158.653198 20.524799 1.000000 1.000000 1.000000
+vn -0.527741 0.742417 0.412682
+v 2.836630 159.388535 20.026997 1.000000 1.000000 1.000000
+vn -0.576211 0.636796 0.512319
+v 3.302544 159.851776 19.918598 1.000000 1.000000 1.000000
+vn -0.897119 0.434727 0.078680
+v 3.874262 161.042007 18.885399 1.000000 1.000000 1.000000
+vn -0.952431 0.304687 -0.006353
+v 4.118150 161.643402 18.783199 1.000000 1.000000 1.000000
+vn -0.344814 0.813093 0.469024
+v 2.118588 158.879242 20.177200 1.000000 1.000000 1.000000
+vn -0.547195 0.801518 0.241137
+v 2.755016 159.498764 19.633198 1.000000 1.000000 1.000000
+vn -0.784392 0.619209 -0.036182
+v 3.174258 159.984344 19.094398 1.000000 1.000000 1.000000
+vn -0.454697 0.872550 0.178628
+v 2.057640 159.004822 19.783398 1.000000 1.000000 1.000000
+vn -0.095418 0.878101 0.468865
+v 0.930262 158.417374 20.403999 1.000000 1.000000 1.000000
+vn -0.017281 0.662290 0.749049
+v 0.978472 158.166214 20.751598 1.000000 1.000000 1.000000
+vn -0.651527 0.758624 -0.001641
+v 2.726434 159.537842 19.202599 1.000000 1.000000 1.000000
+vn -0.333700 0.942193 0.030276
+v 1.482006 158.784348 19.465199 1.000000 1.000000 1.000000
+vn -0.504657 0.841482 -0.192948
+v 2.060136 159.000626 18.897999 1.000000 1.000000 1.000000
+vn 0.123251 0.881452 0.455908
+v -0.291722 158.323898 20.625198 1.000000 1.000000 1.000000
+vn 0.168921 0.648260 0.742446
+v -0.306798 158.068542 20.972797 1.000000 1.000000 1.000000
+vn 0.105997 0.253898 0.961405
+v 1.028852 157.905304 20.906197 1.000000 1.000000 1.000000
+vn 0.175164 0.217975 0.960106
+v -0.322564 157.802048 21.127399 1.000000 1.000000 1.000000
+vn 0.279419 0.861366 0.424232
+v -0.926454 158.417374 20.740597 1.000000 1.000000 1.000000
+vn 0.361103 0.578066 0.731741
+v -1.629050 158.367157 21.204597 1.000000 1.000000 1.000000
+vn 0.231976 0.163609 0.958863
+v -1.712852 158.115997 21.359200 1.000000 1.000000 1.000000
+vn -0.123491 0.992334 0.004830
+v 0.340036 158.519241 19.684599 1.000000 1.000000 1.000000
+vn 0.092286 0.995607 0.015821
+v -0.280416 158.515060 19.800800 1.000000 1.000000 1.000000
+vn 0.391255 0.817163 0.423277
+v -1.548866 158.607147 20.856998 1.000000 1.000000 1.000000
+vn -0.255271 0.935065 -0.245949
+v 0.904586 158.549942 19.124798 1.000000 1.000000 1.000000
+vn 0.039166 0.971820 -0.232447
+v -0.283696 158.459244 19.345997 1.000000 1.000000 1.000000
+vn 0.344229 0.937542 0.050208
+v -1.488728 158.787140 20.032597 1.000000 1.000000 1.000000
+vn 0.527719 0.741742 0.413922
+v -2.138494 158.890411 20.973198 1.000000 1.000000 1.000000
+vn 0.650761 0.613409 0.447480
+v -2.680330 159.258774 21.088398 1.000000 1.000000 1.000000
+vn 0.511005 0.858908 0.033932
+v -2.055464 159.060638 20.148800 1.000000 1.000000 1.000000
+vn 0.305821 0.923563 -0.231313
+v -1.506160 158.735519 19.577797 1.000000 1.000000 1.000000
+vn 0.533863 0.430592 0.727723
+v -2.819120 159.052261 21.435999 1.000000 1.000000 1.000000
+vn 0.764870 0.564480 0.310381
+v -3.550808 160.157364 21.305199 1.000000 1.000000 1.000000
+vn 0.664160 0.231693 0.710782
+v -4.120144 160.599686 21.768799 1.000000 1.000000 1.000000
+vn 0.283875 -0.016840 0.958713
+v -4.332130 160.464340 21.923397 1.000000 1.000000 1.000000
+vn 0.274203 0.088989 0.957546
+v -2.964154 158.835983 21.590599 1.000000 1.000000 1.000000
+vn 0.828829 0.383818 0.407096
+v -3.917290 160.730850 21.421200 1.000000 1.000000 1.000000
+vn 0.904822 0.248492 0.345758
+v -4.203650 161.350372 21.536400 1.000000 1.000000 1.000000
+vn 0.680222 0.731875 -0.040706
+v -2.989300 159.783417 20.364397 1.000000 1.000000 1.000000
+vn 0.887260 0.459898 0.035550
+v -3.765174 160.828522 20.596798 1.000000 1.000000 1.000000
+vn 0.926600 0.195071 0.321496
+v -4.409300 162.013168 21.652599 1.000000 1.000000 1.000000
+vn 0.964196 0.261356 0.044927
+v -4.238090 162.060593 20.828197 1.000000 1.000000 1.000000
+vn 0.880803 0.424414 -0.209900
+v -3.809270 160.800613 20.141998 1.000000 1.000000 1.000000
+vn 0.680619 0.610710 -0.404712
+v -3.561288 160.149002 19.628799 1.000000 1.000000 1.000000
+vn 0.558493 0.794785 -0.237491
+v -2.606416 159.369003 19.809200 1.000000 1.000000 1.000000
+vn 0.472238 0.743187 -0.473988
+v -2.688234 159.247604 19.411797 1.000000 1.000000 1.000000
+vn 0.203788 0.803051 -0.559981
+v -1.553436 158.593185 19.180399 1.000000 1.000000 1.000000
+vn -0.024675 0.374040 -0.927084
+v -1.708834 158.127151 18.709797 1.000000 1.000000 1.000000
+vn 0.448197 0.572690 -0.686401
+v -3.281802 159.444351 19.177399 1.000000 1.000000 1.000000
+vn -0.027597 0.880999 -0.472312
+v -0.292586 158.308548 18.948595 1.000000 1.000000 1.000000
+vn -0.222662 0.602170 -0.766690
+v 0.373374 158.056000 18.497597 1.000000 1.000000 1.000000
+vn -0.298727 0.850798 -0.432326
+v 0.933012 158.403442 18.727398 1.000000 1.000000 1.000000
+vn -0.488484 0.725988 -0.484072
+v 2.124846 158.866684 18.500599 1.000000 1.000000 1.000000
+vn -0.387262 0.419062 -0.821228
+v 2.235634 158.637848 18.165798 1.000000 1.000000 1.000000
+vn -0.612955 0.746919 -0.257678
+v 2.758376 159.494583 18.747799 1.000000 1.000000 1.000000
+vn -0.634339 0.648626 -0.420592
+v 2.845010 159.377380 18.350401 1.000000 1.000000 1.000000
+vn -0.715324 0.493296 -0.494945
+v 3.484980 159.664810 17.907200 1.000000 1.000000 1.000000
+vn -0.831960 0.507839 -0.223478
+v 3.600750 160.455978 18.533798 1.000000 1.000000 1.000000
+vn -0.685001 0.497325 -0.532393
+v 3.312302 159.842026 18.241997 1.000000 1.000000 1.000000
+vn -0.984478 0.169180 0.046709
+v 4.285058 162.288040 18.681400 1.000000 1.000000 1.000000
+vn -0.967373 0.135091 -0.214334
+v 4.335244 162.276886 18.226597 1.000000 1.000000 1.000000
+vn -0.806286 0.345209 -0.480347
+v 4.042742 160.945724 18.033199 1.000000 1.000000 1.000000
+vn -0.842273 0.012762 -0.538899
+v 4.471396 162.246185 17.828999 1.000000 1.000000 1.000000
+vn -0.968676 -0.075383 -0.236611
+v 4.416858 163.587097 18.033600 1.000000 1.000000 1.000000
+vn -0.996617 -0.061199 0.054856
+v 4.365732 163.582916 18.488400 1.000000 1.000000 1.000000
+vn -0.882851 -0.091202 -0.460713
+v 4.555584 163.598267 17.636200 1.000000 1.000000 1.000000
+vn -0.553718 -0.617100 -0.559092
+v 4.704506 162.193161 17.494198 1.000000 1.000000 1.000000
+vn -0.670334 -0.135479 -0.729588
+v 4.793072 163.616409 17.301399 1.000000 1.000000 1.000000
+vn -0.672583 0.366675 -0.642792
+v 3.907454 160.218750 17.801598 1.000000 1.000000 1.000000
+vn 0.064210 -0.185756 -0.980496
+v 5.147336 162.094086 17.353397 1.000000 1.000000 1.000000
+vn -0.293523 0.009908 -0.955901
+v 4.447346 160.715500 17.562599 1.000000 1.000000 1.000000
+vn 0.188918 -0.240646 -0.952050
+v 4.653896 160.598297 17.557400 1.000000 1.000000 1.000000
+vn -0.022482 -0.252477 -0.967342
+v 2.446110 158.203888 18.024799 1.000000 1.000000 1.000000
+vn 0.093668 -0.286432 -0.953511
+v 3.275120 158.791336 17.874599 1.000000 1.000000 1.000000
+vn -0.102140 -0.227132 -0.968493
+v 1.074124 157.670883 18.251598 1.000000 1.000000 1.000000
+vn 0.749113 0.466257 -0.470568
+v -3.928852 160.723862 19.744598 1.000000 1.000000 1.000000
+vn 0.529094 0.419344 -0.737706
+v -4.133626 160.591324 19.409798 1.000000 1.000000 1.000000
+vn 0.722739 0.277869 -0.632802
+v -4.422330 162.008972 19.975998 1.000000 1.000000 1.000000
+vn 0.706158 0.300263 -0.641236
+v -4.652814 161.944778 19.641197 1.000000 1.000000 1.000000
+vn 0.917922 0.128133 -0.375500
+v -4.539722 162.695480 20.091599 1.000000 1.000000 1.000000
+vn 0.195102 0.162752 -0.967185
+v -4.993932 162.639664 19.620998 1.000000 1.000000 1.000000
+vn 0.143683 0.253390 -0.956634
+v -4.321944 160.469925 19.273998 1.000000 1.000000 1.000000
+vn 0.279207 0.073643 -0.957403
+v -4.783160 164.918243 19.967999 1.000000 1.000000 1.000000
+vn 0.773657 0.012960 -0.633473
+v -4.736758 164.127090 19.987400 1.000000 1.000000 1.000000
+vn -0.021392 0.245635 -0.969126
+v -2.957190 158.847153 18.941200 1.000000 1.000000 1.000000
+vn -0.326958 -0.000835 -0.945039
+v -4.522624 160.341553 19.268997 1.000000 1.000000 1.000000
+vn -0.298863 -0.129521 -0.945466
+v -3.094474 158.642029 18.935999 1.000000 1.000000 1.000000
+vn -0.548263 -0.311556 -0.776106
+v -4.291560 159.512726 19.303999 1.000000 1.000000 1.000000
+vn -0.509861 -0.452172 -0.731835
+v -3.239456 158.425766 19.086998 1.000000 1.000000 1.000000
+vn -0.297504 0.122331 -0.946851
+v -5.225808 162.611755 19.615799 1.000000 1.000000 1.000000
+vn -0.652401 -0.220895 -0.724968
+v -4.734518 160.204819 19.419998 1.000000 1.000000 1.000000
+vn -0.689764 0.046529 -0.722537
+v -5.470662 162.582458 19.766800 1.000000 1.000000 1.000000
+vn -0.218661 0.213430 -0.952174
+v -5.005250 164.996384 19.962997 1.000000 1.000000 1.000000
+vn -0.626314 -0.064027 -0.776937
+v -5.329180 161.755020 19.651199 1.000000 1.000000 1.000000
+vn -0.600826 0.179131 -0.779051
+v -5.425342 164.255463 19.997597 1.000000 1.000000 1.000000
+vn -0.153348 0.269514 -0.950708
+v -4.357660 166.437759 20.194395 1.000000 1.000000 1.000000
+vn -0.620021 0.300498 -0.724758
+v -5.239752 165.077316 20.113998 1.000000 1.000000 1.000000
+vn -0.875872 0.085277 -0.474949
+v -5.739280 163.428024 20.226801 1.000000 1.000000 1.000000
+vn -0.895097 -0.035006 -0.444496
+v -5.706282 162.553162 20.111397 1.000000 1.000000 1.000000
+vn -0.872759 0.197656 -0.446345
+v -5.659032 164.298721 20.341999 1.000000 1.000000 1.000000
+vn -0.838260 0.310134 -0.448484
+v -5.465446 165.156845 20.458599 1.000000 1.000000 1.000000
+vn -0.771242 0.415981 -0.481815
+v -5.162078 165.974503 20.574799 1.000000 1.000000 1.000000
+vn -0.504606 0.455666 -0.733308
+v -4.561816 166.587067 20.345398 1.000000 1.000000 1.000000
+vn -0.884439 0.434708 -0.169696
+v -5.281570 166.037308 20.967800 1.000000 1.000000 1.000000
+vn -0.726812 0.541864 -0.422052
+v -4.758310 166.730774 20.689800 1.000000 1.000000 1.000000
+vn -0.938002 0.301675 -0.170720
+v -5.591968 165.201492 20.851597 1.000000 1.000000 1.000000
+vn -0.363330 0.501937 -0.784889
+v -3.588094 167.773102 20.564198 1.000000 1.000000 1.000000
+vn -0.017462 0.306129 -0.951830
+v -2.831146 168.050766 20.528999 1.000000 1.000000 1.000000
+vn -0.564855 0.678829 -0.469181
+v -3.742616 167.968445 20.908600 1.000000 1.000000 1.000000
+vn -0.267375 0.612258 -0.744077
+v -2.963782 168.275421 20.680000 1.000000 1.000000 1.000000
+vn 0.120483 0.285844 -0.950672
+v -0.766560 168.886581 20.875000 1.000000 1.000000 1.000000
+vn 0.254974 -0.079436 -0.963679
+v -2.705538 167.837280 20.533997 1.000000 1.000000 1.000000
+vn 0.291393 -0.007035 -0.956577
+v -4.164292 166.295441 20.199398 1.000000 1.000000 1.000000
+vn 0.620139 -0.396088 -0.677157
+v -3.617384 166.677765 20.437399 1.000000 1.000000 1.000000
+vn 0.676571 -0.178134 -0.714507
+v -4.320812 165.530792 20.220200 1.000000 1.000000 1.000000
+vn 0.197498 -0.218224 -0.955705
+v -0.732564 168.636810 20.880199 1.000000 1.000000 1.000000
+vn -0.096558 0.599682 -0.794391
+v -1.554080 168.971695 20.911400 1.000000 1.000000 1.000000
+vn 0.026722 0.663957 -0.747293
+v -0.802452 169.151688 21.025997 1.000000 1.000000 1.000000
+vn -0.321027 0.805724 -0.497746
+v -2.382972 168.908905 21.139797 1.000000 1.000000 1.000000
+vn -0.205242 0.857579 -0.471630
+v -1.621002 169.217270 21.255798 1.000000 1.000000 1.000000
+vn 0.065670 0.863306 -0.500390
+v -0.031842 169.471222 21.486000 1.000000 1.000000 1.000000
+vn 0.179059 0.580962 -0.793990
+v 0.741950 169.158676 21.256798 1.000000 1.000000 1.000000
+vn -0.073179 0.878830 -0.471490
+v -0.836988 169.405640 21.370598 1.000000 1.000000 1.000000
+vn -0.276039 0.943783 -0.181868
+v -1.658520 169.356796 21.648998 1.000000 1.000000 1.000000
+vn -0.412511 0.892959 -0.180162
+v -2.438128 169.040070 21.532799 1.000000 1.000000 1.000000
+vn -0.129360 0.974846 -0.181496
+v -0.856360 169.547958 21.763599 1.000000 1.000000 1.000000
+vn 0.020016 0.983211 -0.181374
+v -0.032570 169.614944 21.878998 1.000000 1.000000 1.000000
+vn 0.194676 0.860388 -0.470992
+v 0.773934 169.414017 21.601200 1.000000 1.000000 1.000000
+vn -0.026944 0.986979 0.158576
+v -0.032638 169.628891 22.694599 1.000000 1.000000 1.000000
+vn -0.176409 0.971519 0.158211
+v -0.858226 169.561905 22.579197 1.000000 1.000000 1.000000
+vn 0.168278 0.968967 -0.181067
+v 0.791870 169.556335 21.994400 1.000000 1.000000 1.000000
+vn 0.122572 0.979701 0.158624
+v 0.793598 169.570297 22.809799 1.000000 1.000000 1.000000
+vn 0.321379 0.822728 -0.468866
+v 1.572066 169.232620 21.717800 1.000000 1.000000 1.000000
+vn 0.310861 0.597804 -0.738915
+v 1.507112 168.985641 21.373199 1.000000 1.000000 1.000000
+vn 0.225323 0.212583 -0.950809
+v 1.439636 168.728897 21.222198 1.000000 1.000000 1.000000
+vn 0.438353 0.750665 -0.494317
+v 2.336560 168.932617 21.834000 1.000000 1.000000 1.000000
+vn 0.475996 0.484625 -0.733871
+v 2.921796 168.303314 21.604597 1.000000 1.000000 1.000000
+vn 0.289271 0.149450 -0.945509
+v 2.790988 168.077286 21.453598 1.000000 1.000000 1.000000
+vn 0.312523 0.932545 -0.180802
+v 1.608476 169.372162 22.110798 1.000000 1.000000 1.000000
+vn 0.409402 0.898857 0.156349
+v 2.395900 169.076340 23.042599 1.000000 1.000000 1.000000
+vn 0.459913 0.870337 -0.176053
+v 2.390660 169.063782 22.226997 1.000000 1.000000 1.000000
+vn 0.269523 0.949942 0.158009
+v 1.611990 169.384705 22.926399 1.000000 1.000000 1.000000
+vn 0.569034 0.702157 -0.427991
+v 3.047686 168.520996 21.948997 1.000000 1.000000 1.000000
+vn 0.658624 0.721552 -0.213490
+v 3.713288 168.180527 22.444395 1.000000 1.000000 1.000000
+vn 0.530331 0.830666 0.169536
+v 3.125076 168.654953 23.157799 1.000000 1.000000 1.000000
+vn 0.337964 0.813823 0.472729
+v 2.334190 168.927048 23.510799 1.000000 1.000000 1.000000
+vn 0.188174 0.846550 0.497939
+v 1.570470 169.227036 23.394600 1.000000 1.000000 1.000000
+vn 0.063572 0.880714 0.469362
+v 0.773158 169.407028 23.278198 1.000000 1.000000 1.000000
+vn 0.193096 0.625539 0.755920
+v 2.237810 168.692627 23.848598 1.000000 1.000000 1.000000
+vn -0.032566 0.624453 0.780383
+v 0.741214 169.153076 23.615999 1.000000 1.000000 1.000000
+vn 0.521430 0.713723 0.467665
+v 3.625572 168.064728 23.728201 1.000000 1.000000 1.000000
+vn 0.641356 0.751690 0.153704
+v 3.721400 168.191696 23.259998 1.000000 1.000000 1.000000
+vn 0.739240 0.655931 0.152576
+v 4.331008 167.570786 23.376400 1.000000 1.000000 1.000000
+vn 0.342486 0.540841 0.768241
+v 3.475864 167.865189 24.065998 1.000000 1.000000 1.000000
+vn 0.611862 0.589490 0.527377
+v 4.219500 167.459152 23.844801 1.000000 1.000000 1.000000
+vn 0.764337 0.620914 -0.173942
+v 4.321558 167.561005 22.560999 1.000000 1.000000 1.000000
+vn 0.823534 0.546839 0.150860
+v 4.849554 166.864731 23.492397 1.000000 1.000000 1.000000
+vn 0.670770 0.527285 0.521573
+v 4.724682 166.772644 23.960598 1.000000 1.000000 1.000000
+vn 0.890029 0.430579 0.149833
+v 5.268514 166.093109 23.607599 1.000000 1.000000 1.000000
+vn 0.843245 0.509156 -0.172330
+v 4.838958 166.857758 22.676800 1.000000 1.000000 1.000000
+vn 0.704532 0.538090 -0.462703
+v 4.223762 167.463333 22.167797 1.000000 1.000000 1.000000
+vn 0.784001 0.426686 -0.450867
+v 4.729458 166.775436 22.283798 1.000000 1.000000 1.000000
+vn 0.636152 0.261593 -0.725865
+v 4.534122 166.630325 21.939198 1.000000 1.000000 1.000000
+vn 0.525460 0.346096 -0.777245
+v 4.049294 167.288910 21.823399 1.000000 1.000000 1.000000
+vn 0.822739 0.308396 -0.477485
+v 5.138040 166.021957 22.398998 1.000000 1.000000 1.000000
+vn 0.904283 0.391188 -0.171010
+v 5.257016 166.086136 22.792000 1.000000 1.000000 1.000000
+vn 0.870847 0.206334 -0.446152
+v 5.448516 165.208481 22.515198 1.000000 1.000000 1.000000
+vn 0.948107 0.268901 -0.169661
+v 5.574664 165.253128 22.908199 1.000000 1.000000 1.000000
+vn 0.891056 0.091272 -0.444622
+v 5.647986 164.365692 22.629799 1.000000 1.000000 1.000000
+vn 0.975303 0.142102 -0.169087
+v 5.778756 164.390808 23.022999 1.000000 1.000000 1.000000
+vn 0.971984 0.182910 0.147619
+v 5.791398 164.393600 23.838398 1.000000 1.000000 1.000000
+vn 0.939331 0.309150 0.148605
+v 5.586856 165.257309 23.723799 1.000000 1.000000 1.000000
+vn 0.879673 -0.029907 -0.474637
+v 5.735946 163.494995 22.745197 1.000000 1.000000 1.000000
+vn 0.985509 0.013830 -0.169060
+v 5.868762 163.500595 23.138199 1.000000 1.000000 1.000000
+vn 0.987595 0.054471 0.147272
+v 5.881598 163.501984 23.953798 1.000000 1.000000 1.000000
+vn 0.876012 0.092834 0.473270
+v 5.730152 163.494995 24.421997 1.000000 1.000000 1.000000
+vn 0.872122 0.205456 0.444062
+v 5.642282 164.364288 24.306799 1.000000 1.000000 1.000000
+vn 0.654855 0.210456 0.725860
+v 5.409312 164.318253 24.644398 1.000000 1.000000 1.000000
+vn 0.819816 0.317137 0.476787
+v 5.443006 165.205688 24.191998 1.000000 1.000000 1.000000
+vn 0.533075 0.357750 0.766711
+v 4.920920 165.904755 24.413601 1.000000 1.000000 1.000000
+vn 0.785357 0.425796 0.449345
+v 5.132864 166.019165 24.075798 1.000000 1.000000 1.000000
+vn 0.271789 0.357472 0.893502
+v 4.345300 166.489395 24.438999 1.000000 1.000000 1.000000
+vn 0.059235 0.339575 0.938712
+v 2.800104 168.092636 24.104198 1.000000 1.000000 1.000000
+vn -0.045572 0.352322 0.934769
+v 1.444334 168.747040 23.872999 1.000000 1.000000 1.000000
+vn -0.189850 0.263695 0.945739
+v -0.769066 168.904724 23.525799 1.000000 1.000000 1.000000
+vn -0.074309 0.863614 0.498647
+v -0.031814 169.464233 23.162800 1.000000 1.000000 1.000000
+vn -0.210833 0.631946 0.745784
+v -0.801648 169.144714 23.385197 1.000000 1.000000 1.000000
+vn -0.369781 0.514741 0.773501
+v -2.282292 168.670288 23.154400 1.000000 1.000000 1.000000
+vn -0.309889 0.198997 0.929715
+v -2.840390 168.066116 23.179798 1.000000 1.000000 1.000000
+vn -0.203177 0.859721 0.468615
+v -0.836144 169.398666 23.047600 1.000000 1.000000 1.000000
+vn -0.329817 0.803963 0.494837
+v -1.619368 169.211685 22.932800 1.000000 1.000000 1.000000
+vn -0.448391 0.765049 0.462218
+v -2.380566 168.903320 22.816595 1.000000 1.000000 1.000000
+vn -0.549760 0.677698 0.488353
+v -3.088306 168.487503 22.701397 1.000000 1.000000 1.000000
+vn -0.514861 0.388822 0.764026
+v -3.584502 167.768906 22.923397 1.000000 1.000000 1.000000
+vn -0.572469 0.318311 0.755617
+v -4.139084 167.171707 22.806799 1.000000 1.000000 1.000000
+vn -0.650823 0.607417 0.455493
+v -3.738844 167.964264 22.585598 1.000000 1.000000 1.000000
+vn -0.455514 0.876513 0.155669
+v -2.443446 169.052612 22.348400 1.000000 1.000000 1.000000
+vn -0.578130 0.801270 0.154055
+v -3.169906 168.625641 22.233200 1.000000 1.000000 1.000000
+vn -0.321444 0.933771 0.157304
+v -1.662138 169.369370 22.464600 1.000000 1.000000 1.000000
+vn -0.539066 0.823187 -0.178245
+v -3.162980 168.614487 21.417599 1.000000 1.000000 1.000000
+vn -0.687960 0.709645 0.152035
+v -3.837634 168.088440 22.117199 1.000000 1.000000 1.000000
+vn -0.653207 0.736318 -0.176510
+v -3.829252 168.077286 21.301800 1.000000 1.000000 1.000000
+vn -0.448797 0.762449 -0.466104
+v -3.091434 168.493088 21.024597 1.000000 1.000000 1.000000
+vn -0.778756 0.608847 0.151143
+v -4.431380 167.449371 22.000797 1.000000 1.000000 1.000000
+vn -0.749574 0.626658 -0.213161
+v -4.421712 167.439621 21.185200 1.000000 1.000000 1.000000
+vn -0.738027 0.496082 0.457405
+v -4.317310 167.340546 22.468998 1.000000 1.000000 1.000000
+vn -0.850359 0.500106 0.163659
+v -4.879090 166.818695 21.898598 1.000000 1.000000 1.000000
+vn -0.909248 0.388798 0.148673
+v -5.293118 166.044281 21.783398 1.000000 1.000000 1.000000
+vn -0.829859 0.325411 0.453257
+v -5.156864 165.971725 22.251598 1.000000 1.000000 1.000000
+vn -0.953257 0.263430 0.148003
+v -5.604198 165.205688 21.667198 1.000000 1.000000 1.000000
+vn -0.859360 0.190168 0.474697
+v -5.459936 165.154053 22.135399 1.000000 1.000000 1.000000
+vn -0.969777 0.175528 -0.169476
+v -5.790034 164.322433 20.735197 1.000000 1.000000 1.000000
+vn -0.979716 0.135989 0.147188
+v -5.802690 164.325226 21.550598 1.000000 1.000000 1.000000
+vn -0.892930 0.082980 0.442483
+v -5.653316 164.297318 22.018997 1.000000 1.000000 1.000000
+vn -0.648702 0.190563 0.736799
+v -4.943978 165.858704 22.589397 1.000000 1.000000 1.000000
+vn -0.984407 0.048408 -0.169113
+v -5.872136 163.432220 20.619797 1.000000 1.000000 1.000000
+vn -0.989076 0.007994 0.147190
+v -5.884986 163.432220 21.435398 1.000000 1.000000 1.000000
+vn 0.272637 0.182316 0.944685
+v 5.189218 164.274994 24.784998 1.000000 1.000000 1.000000
+vn 0.621363 0.103194 -0.776697
+v 5.223478 165.127548 22.170597 1.000000 1.000000 1.000000
+vn 0.305731 -0.103550 -0.946470
+v 5.172312 164.270813 22.134197 1.000000 1.000000 1.000000
+vn 0.325998 0.021026 -0.945137
+v 4.331138 166.478226 21.788200 1.000000 1.000000 1.000000
+vn 0.691472 -0.003085 -0.722397
+v 5.414708 164.318253 22.285198 1.000000 1.000000 1.000000
+vn -0.230087 -0.190547 -0.954333
+v 4.942756 164.226166 22.139397 1.000000 1.000000 1.000000
+vn -0.076939 -0.239289 -0.967895
+v 4.138904 166.335907 21.793400 1.000000 1.000000 1.000000
+vn 0.002214 -0.271473 -0.962444
+v 2.667106 167.862396 21.458599 1.000000 1.000000 1.000000
+vn 0.089522 -0.257918 -0.962011
+v 1.375712 168.486115 21.227200 1.000000 1.000000 1.000000
+vn -0.237586 -0.203635 -0.949782
+v -1.788144 157.889954 18.704800 1.000000 1.000000 1.000000
+vn -0.070805 0.148284 -0.986407
+v -0.321808 157.814590 18.477997 1.000000 1.000000 1.000000
+vn -0.146965 -0.237599 -0.960181
+v -0.336718 157.562042 18.473000 1.000000 1.000000 1.000000
+vn 0.904388 0.009911 0.426595
+v -4.526358 162.696869 21.768200 1.000000 1.000000 1.000000
+vn 0.930899 -0.111678 0.347787
+v -4.552520 163.390350 21.883400 1.000000 1.000000 1.000000
+vn 0.996252 0.085288 0.014399
+v -4.350592 162.717804 20.943798 1.000000 1.000000 1.000000
+vn 0.967414 0.063608 -0.245081
+v -4.401524 162.712219 20.488998 1.000000 1.000000 1.000000
+vn 0.990483 -0.137342 0.008950
+v -4.314554 164.048950 21.174599 1.000000 1.000000 1.000000
+vn 0.905401 -0.042662 -0.422409
+v -4.502114 164.083832 20.322195 1.000000 1.000000 1.000000
+vn 0.875571 -0.201557 -0.439034
+v -4.348120 164.766159 20.438795 1.000000 1.000000 1.000000
+vn 0.706146 -0.041120 0.706871
+v -4.760756 162.668976 22.115799 1.000000 1.000000 1.000000
+vn 0.306107 -0.189601 0.932926
+v 3.285832 158.777374 20.525398 1.000000 1.000000 1.000000
+vn 0.776584 0.611428 0.151898
+v 4.536568 167.314026 18.457798 1.000000 1.000000 1.000000
+vn 0.685149 0.712090 0.153290
+v 3.983208 167.947510 18.373199 1.000000 1.000000 1.000000
+vn 0.859399 0.498291 0.114627
+v 5.003730 166.606598 18.543999 1.000000 1.000000 1.000000
+vn 0.804912 0.568494 -0.170091
+v 4.526654 167.305664 17.642197 1.000000 1.000000 1.000000
+vn 0.705723 0.686392 -0.175560
+v 3.974518 167.936356 17.557598 1.000000 1.000000 1.000000
+vn 0.577897 0.801271 0.154919
+v 3.346536 168.495880 18.289799 1.000000 1.000000 1.000000
+vn 0.601807 0.778778 -0.177009
+v 3.339236 168.484726 17.474400 1.000000 1.000000 1.000000
+vn 0.374319 0.759957 0.531366
+v 2.577872 168.798676 18.676800 1.000000 1.000000 1.000000
+vn 0.458568 0.874898 0.155787
+v 2.646006 168.945175 18.208599 1.000000 1.000000 1.000000
+vn 0.485120 0.856076 -0.178306
+v 2.640224 168.932617 17.392998 1.000000 1.000000 1.000000
+vn 0.658652 0.597297 -0.457618
+v 3.884574 167.830307 17.164600 1.000000 1.000000 1.000000
+vn 0.559756 0.668430 -0.489770
+v 3.263662 168.366119 17.081200 1.000000 1.000000 1.000000
+vn 0.462662 0.755013 -0.464650
+v 2.580486 168.804245 16.999798 1.000000 1.000000 1.000000
+vn 0.323618 0.809821 -0.489348
+v 1.834442 169.143311 16.918800 1.000000 1.000000 1.000000
+vn 0.389400 0.540270 -0.745973
+v 2.473882 168.575424 16.655399 1.000000 1.000000 1.000000
+vn 0.221652 0.661668 -0.716286
+v 1.033202 169.108429 16.497597 1.000000 1.000000 1.000000
+vn 0.237448 0.191796 -0.952278
+v 2.363120 168.336807 16.504398 1.000000 1.000000 1.000000
+vn 0.137683 0.227346 -0.964032
+v 0.986928 168.846115 16.346600 1.000000 1.000000 1.000000
+vn 0.475909 0.394828 -0.785890
+v 3.724116 167.641937 16.820000 1.000000 1.000000 1.000000
+vn 0.290798 0.078990 -0.953518
+v 4.051600 166.880081 16.753597 1.000000 1.000000 1.000000
+vn -0.017231 -0.265940 -0.963836
+v 2.258228 168.110779 16.509399 1.000000 1.000000 1.000000
+vn 0.029533 -0.239926 -0.970342
+v 0.943100 168.597748 16.351597 1.000000 1.000000 1.000000
+vn -0.112412 -0.231354 -0.966353
+v 3.871778 166.718231 16.758598 1.000000 1.000000 1.000000
+vn 0.595388 0.340432 -0.727749
+v 4.241490 167.050323 16.904598 1.000000 1.000000 1.000000
+vn 0.314471 0.002798 -0.949263
+v 4.806682 165.553131 16.928799 1.000000 1.000000 1.000000
+vn 0.664180 0.178088 -0.726051
+v 5.031926 165.661957 17.079800 1.000000 1.000000 1.000000
+vn 0.735616 0.502825 -0.453912
+v 4.424236 167.213562 17.249199 1.000000 1.000000 1.000000
+vn 0.821095 0.404618 -0.402601
+v 4.879810 166.524277 17.335400 1.000000 1.000000 1.000000
+vn 0.272374 -0.091776 -0.957805
+v 5.244244 163.651276 17.160397 1.000000 1.000000 1.000000
+vn 0.636207 0.060210 -0.769166
+v 5.384734 164.482895 17.217598 1.000000 1.000000 1.000000
+vn -0.243491 -0.115623 -0.962987
+v 5.011494 163.633148 17.165600 1.000000 1.000000 1.000000
+vn -0.720414 -0.355654 -0.595410
+v 4.515892 165.025681 17.114597 1.000000 1.000000 1.000000
+vn 0.690837 -0.049798 -0.721294
+v 5.490012 163.669418 17.311398 1.000000 1.000000 1.000000
+vn 0.853650 0.306710 -0.420964
+v 5.248712 165.765213 17.424400 1.000000 1.000000 1.000000
+vn 0.883268 0.132347 -0.449801
+v 5.616726 164.535919 17.562199 1.000000 1.000000 1.000000
+vn 0.921649 0.317475 -0.223097
+v 5.520294 165.420563 17.862198 1.000000 1.000000 1.000000
+vn 0.895545 0.009540 -0.444869
+v 5.726534 163.687561 17.655998 1.000000 1.000000 1.000000
+vn 0.942191 0.334799 -0.013652
+v 5.564944 165.438705 18.267799 1.000000 1.000000 1.000000
+vn 0.970781 0.162447 -0.176624
+v 5.746762 164.566620 17.955200 1.000000 1.000000 1.000000
+vn 0.966907 0.203291 0.154151
+v 5.759340 164.569412 18.770798 1.000000 1.000000 1.000000
+vn 0.897890 0.402658 0.177930
+v 5.382006 165.829407 18.632999 1.000000 1.000000 1.000000
+vn 0.753683 0.474852 0.454397
+v 4.874880 166.521484 19.012398 1.000000 1.000000 1.000000
+vn 0.834132 0.335484 0.437806
+v 5.389924 165.368942 19.146000 1.000000 1.000000 1.000000
+vn 0.985870 0.080011 0.147170
+v 5.871930 163.698730 18.864597 1.000000 1.000000 1.000000
+vn 0.890102 0.106536 0.443134
+v 5.720742 163.687561 19.333000 1.000000 1.000000 1.000000
+vn 0.985748 0.028183 -0.165854
+v 5.859120 163.698730 18.049198 1.000000 1.000000 1.000000
+vn -0.952898 0.297756 -0.057686
+v -5.615360 165.289398 16.950199 1.000000 1.000000 1.000000
+vn -0.702814 0.002025 -0.711371
+v -5.872432 163.388962 16.326797 1.000000 1.000000 1.000000
+vn -0.978329 0.185786 -0.091416
+v -5.818152 164.449417 16.896000 1.000000 1.000000 1.000000
+vn -0.933967 0.274802 0.228451
+v -5.582504 165.278244 17.360197 1.000000 1.000000 1.000000
+vn -0.830103 0.148289 0.537531
+v -5.635202 164.411743 17.774399 1.000000 1.000000 1.000000
+vn -0.968693 0.151444 0.196719
+v -5.784112 164.442429 17.306000 1.000000 1.000000 1.000000
+vn -0.999296 0.036580 0.008296
+v -5.914894 163.580124 16.843399 1.000000 1.000000 1.000000
+vn -0.630848 -0.049880 0.774302
+v -5.492394 163.556396 18.059399 1.000000 1.000000 1.000000
+vn -0.307964 0.077118 0.948268
+v -4.730038 165.781952 18.362997 1.000000 1.000000 1.000000
+vn -0.420786 0.026360 0.906777
+v -5.182806 164.318253 18.252598 1.000000 1.000000 1.000000
+vn 0.630173 0.261474 -0.731105
+v -4.658672 161.967117 24.793598 1.000000 1.000000 1.000000
+vn 0.814808 0.396415 -0.423017
+v -4.227354 161.374100 25.013599 1.000000 1.000000 1.000000
+vn 0.605822 0.435415 -0.665879
+v -4.145482 160.615036 24.562798 1.000000 1.000000 1.000000
+vn 0.765682 0.107373 -0.634194
+v -4.803026 163.419647 25.024199 1.000000 1.000000 1.000000
+vn 0.849984 0.248707 -0.464405
+v -4.427904 162.031296 25.128399 1.000000 1.000000 1.000000
+vn 0.695692 0.600929 -0.393569
+v -3.578102 160.171326 24.782398 1.000000 1.000000 1.000000
+vn 0.368213 0.622140 -0.690913
+v -2.777676 158.999237 24.214998 1.000000 1.000000 1.000000
+vn 0.215776 0.204872 -0.954708
+v -4.870926 161.908508 24.657799 1.000000 1.000000 1.000000
+vn 0.059137 0.243609 -0.968069
+v -3.936100 159.862946 24.311798 1.000000 1.000000 1.000000
+vn -0.022170 0.270678 -0.962415
+v -2.371552 158.448090 23.976999 1.000000 1.000000 1.000000
+vn 0.126031 0.661686 -0.739113
+v -1.652700 158.357376 23.997799 1.000000 1.000000 1.000000
+vn -0.108523 0.251541 -0.961743
+v -1.043924 157.922043 23.745598 1.000000 1.000000 1.000000
+vn -0.324165 -0.041811 -0.945076
+v -4.118844 159.706680 24.306599 1.000000 1.000000 1.000000
+vn -0.277508 -0.167307 -0.946043
+v -2.481646 158.226227 23.971998 1.000000 1.000000 1.000000
+vn -0.094103 0.740043 -0.665943
+v -0.322476 158.053207 23.764999 1.000000 1.000000 1.000000
+vn -0.209124 -0.226898 -0.951202
+v -1.092380 157.675064 23.740599 1.000000 1.000000 1.000000
+vn -0.212778 0.205070 -0.955339
+v 1.068920 157.927628 23.398598 1.000000 1.000000 1.000000
+vn -0.098915 -0.293460 -0.950840
+v 1.118582 157.680649 23.393398 1.000000 1.000000 1.000000
+vn -0.135538 -0.592051 -0.794421
+v -0.369272 157.298325 23.775198 1.000000 1.000000 1.000000
+vn 0.022017 -0.664441 -0.747016
+v 1.171026 157.419724 23.544399 1.000000 1.000000 1.000000
+vn -0.268616 0.605837 -0.748870
+v 1.022310 158.159241 23.534397 1.000000 1.000000 1.000000
+vn -0.455402 0.580288 -0.675185
+v 2.287146 158.669937 23.303600 1.000000 1.000000 1.000000
+vn -0.260243 0.063151 -0.963476
+v 2.986982 158.870865 23.052599 1.000000 1.000000 1.000000
+vn -0.253239 0.834428 -0.489490
+v 0.971624 158.411804 23.869198 1.000000 1.000000 1.000000
+vn -0.417955 0.794095 -0.441278
+v 1.584490 158.607147 23.754398 1.000000 1.000000 1.000000
+vn -0.629057 0.667877 -0.397778
+v 2.715220 159.268539 23.523197 1.000000 1.000000 1.000000
+vn -0.646144 0.354692 -0.675790
+v 3.823626 160.095978 22.955799 1.000000 1.000000 1.000000
+vn -0.290902 -0.011596 -0.956682
+v 4.345286 160.517365 22.717800 1.000000 1.000000 1.000000
+vn -0.820718 0.345484 -0.455042
+v 3.949966 160.765732 23.188400 1.000000 1.000000 1.000000
+vn -0.687218 0.134847 -0.713827
+v 4.453204 161.293167 22.738598 1.000000 1.000000 1.000000
+vn -0.644439 0.517507 -0.562925
+v 3.205802 159.723419 23.407200 1.000000 1.000000 1.000000
+vn -0.873741 0.426475 -0.233870
+v 3.829690 160.841080 23.585999 1.000000 1.000000 1.000000
+vn -0.951542 0.216701 -0.218195
+v 4.297406 162.092697 23.354597 1.000000 1.000000 1.000000
+vn -0.887028 0.145758 -0.438105
+v 4.432372 162.056412 22.957199 1.000000 1.000000 1.000000
+vn -0.771332 -0.058646 -0.633725
+v 4.779850 162.723389 22.505798 1.000000 1.000000 1.000000
+vn -0.906298 -0.014444 -0.422392
+v 4.543018 162.748505 22.840599 1.000000 1.000000 1.000000
+vn -0.931921 0.361198 0.032552
+v 4.056158 161.467590 23.925598 1.000000 1.000000 1.000000
+vn -0.976274 0.216468 0.005543
+v 4.247658 162.106644 23.809399 1.000000 1.000000 1.000000
+vn -0.997169 0.074662 0.008924
+v 4.353694 162.769424 23.692999 1.000000 1.000000 1.000000
+vn -0.864687 -0.194038 -0.463320
+v 4.493102 164.136856 22.609997 1.000000 1.000000 1.000000
+vn -0.959457 -0.171356 -0.223786
+v 4.356282 164.110352 23.007397 1.000000 1.000000 1.000000
+vn -0.647020 -0.220621 -0.729857
+v 4.727334 164.182907 22.275200 1.000000 1.000000 1.000000
+vn -0.272757 -0.091120 -0.957758
+v 4.875960 161.936417 22.486397 1.000000 1.000000 1.000000
+vn -0.987241 -0.152168 0.046903
+v 4.305850 164.099182 23.462200 1.000000 1.000000 1.000000
+vn -0.940400 0.114429 0.320240
+v 4.529642 162.749893 24.517199 1.000000 1.000000 1.000000
+vn -0.827088 0.390217 0.404544
+v 4.220092 161.395020 24.749798 1.000000 1.000000 1.000000
+vn -0.721806 0.529739 0.445390
+v 3.938340 160.772705 24.864998 1.000000 1.000000 1.000000
+vn -0.838157 0.545391 0.006467
+v 3.482714 160.376434 24.142998 1.000000 1.000000 1.000000
+vn -0.690909 0.652000 0.312316
+v 3.196364 159.733185 25.083799 1.000000 1.000000 1.000000
+vn -0.857464 0.282696 0.429929
+v 4.419316 162.059204 24.633598 1.000000 1.000000 1.000000
+vn -0.518597 0.446987 0.728876
+v 4.142342 160.644333 25.212599 1.000000 1.000000 1.000000
+vn -0.651487 0.252066 0.715561
+v 4.648232 161.997803 24.981398 1.000000 1.000000 1.000000
+vn -0.937266 0.057581 0.343827
+v 4.549636 163.444778 24.401798 1.000000 1.000000 1.000000
+vn -0.707381 -0.003500 0.706824
+v 4.711922 164.180115 24.634199 1.000000 1.000000 1.000000
+vn -0.198142 0.191759 0.961233
+v 4.887444 161.933624 25.135998 1.000000 1.000000 1.000000
+vn -0.124777 0.247623 0.960788
+v 4.355536 160.510376 25.367199 1.000000 1.000000 1.000000
+vn -0.260268 0.107566 0.959526
+v 4.954406 164.227554 24.788799 1.000000 1.000000 1.000000
+vn -0.007053 0.265995 0.963949
+v 2.994024 158.859711 25.701998 1.000000 1.000000 1.000000
+vn 0.363757 -0.040586 0.930609
+v 4.561956 160.380615 25.363598 1.000000 1.000000 1.000000
+vn -0.325790 0.601876 0.729113
+v 2.847458 159.074585 25.547398 1.000000 1.000000 1.000000
+vn 0.110325 0.243089 0.963710
+v 1.071436 157.915054 26.047998 1.000000 1.000000 1.000000
+vn -0.407693 0.847192 0.340664
+v 2.167396 158.908539 25.314798 1.000000 1.000000 1.000000
+vn -0.029675 0.679615 0.732968
+v 1.018970 158.175995 25.893398 1.000000 1.000000 1.000000
+vn -0.489022 0.747052 0.450300
+v 2.707224 159.281097 25.199799 1.000000 1.000000 1.000000
+vn -0.726881 0.686712 -0.008417
+v 3.072200 159.869919 24.259598 1.000000 1.000000 1.000000
+vn -0.524021 0.850123 0.051887
+v 2.083196 159.077377 24.490599 1.000000 1.000000 1.000000
+vn -0.290966 0.881378 0.372173
+v 1.579816 158.621109 25.430998 1.000000 1.000000 1.000000
+vn -0.140573 0.892564 0.428450
+v 0.968766 158.425766 25.545799 1.000000 1.000000 1.000000
+vn -0.213643 0.975605 0.050508
+v 0.931116 158.614136 24.721399 1.000000 1.000000 1.000000
+vn -0.350266 0.890227 -0.291220
+v 1.536222 158.748077 24.151999 1.000000 1.000000 1.000000
+vn -0.234108 0.942028 -0.240369
+v 0.942030 158.559708 24.266598 1.000000 1.000000 1.000000
+vn 0.031914 0.928138 0.370865
+v 0.334888 158.326691 25.660999 1.000000 1.000000 1.000000
+vn 0.100917 0.932555 0.346636
+v -0.305630 158.325302 25.776398 1.000000 1.000000 1.000000
+vn 0.050394 0.998680 0.009953
+v -0.293784 158.516449 24.952198 1.000000 1.000000 1.000000
+vn 0.257551 0.627756 0.734568
+v -0.995204 158.170410 26.240599 1.000000 1.000000 1.000000
+vn 0.290755 0.843396 0.451825
+v -0.946228 158.421570 25.892799 1.000000 1.000000 1.000000
+vn 0.409403 0.809019 0.421754
+v -1.566220 158.614136 26.008999 1.000000 1.000000 1.000000
+vn 0.467536 0.496615 0.731289
+v -2.260830 158.672729 26.471798 1.000000 1.000000 1.000000
+vn 0.258875 0.122812 0.958071
+v -2.377140 158.436920 26.626398 1.000000 1.000000 1.000000
+vn 0.198899 0.187582 0.961900
+v -1.046390 157.909485 26.395199 1.000000 1.000000 1.000000
+vn 0.216847 0.976188 0.005832
+v -0.909502 158.608536 25.068598 1.000000 1.000000 1.000000
+vn 0.558359 0.696109 0.451296
+v -2.149540 158.897385 26.124199 1.000000 1.000000 1.000000
+vn 0.626633 0.313853 0.713322
+v -3.752312 160.022018 26.806599 1.000000 1.000000 1.000000
+vn 0.283156 0.018798 0.958890
+v -3.945370 159.855972 26.961199 1.000000 1.000000 1.000000
+vn 0.381379 0.923817 0.033354
+v -1.505426 158.794128 25.184799 1.000000 1.000000 1.000000
+vn 0.681637 0.661761 0.312161
+v -3.133060 159.666214 26.342999 1.000000 1.000000 1.000000
+vn 0.217667 0.947503 -0.234220
+v -0.920148 158.554123 24.613798 1.000000 1.000000 1.000000
+vn 0.578674 0.815537 0.005998
+v -2.530118 159.377380 25.402199 1.000000 1.000000 1.000000
+vn 0.452024 0.858089 -0.243635
+v -2.090264 159.017380 24.845198 1.000000 1.000000 1.000000
+vn 0.771144 0.462615 0.437406
+v -3.567584 160.181076 26.458998 1.000000 1.000000 1.000000
+vn 0.719689 0.694242 -0.008668
+v -3.011392 159.805740 25.518799 1.000000 1.000000 1.000000
+vn 0.544895 0.618046 -0.566665
+v -3.142304 159.655045 24.666401 1.000000 1.000000 1.000000
+vn 0.358627 0.803000 -0.476002
+v -2.155874 158.884811 24.447599 1.000000 1.000000 1.000000
+vn 0.862666 0.388412 0.323951
+v -3.928530 160.753174 26.573999 1.000000 1.000000 1.000000
+vn 0.867692 0.494570 0.050118
+v -3.775976 160.849457 25.749798 1.000000 1.000000 1.000000
+vn 0.705686 0.048021 0.706895
+v -4.643494 161.971298 27.152599 1.000000 1.000000 1.000000
+vn 0.892861 0.283361 0.350007
+v -4.214916 161.379669 26.690199 1.000000 1.000000 1.000000
+vn 0.902904 0.150373 0.402681
+v -4.414862 162.034088 26.804998 1.000000 1.000000 1.000000
+vn 0.975565 0.214593 0.047143
+v -4.243422 162.081528 25.980598 1.000000 1.000000 1.000000
+vn 0.939087 0.001516 0.343676
+v -4.527916 162.717804 26.920198 1.000000 1.000000 1.000000
+vn 0.945779 -0.054909 0.320136
+v -4.551644 163.411285 27.035599 1.000000 1.000000 1.000000
+vn 0.999894 -0.011535 0.008887
+v -4.374898 163.404312 26.211399 1.000000 1.000000 1.000000
+vn 0.903523 0.071709 -0.422497
+v -4.565098 163.411285 25.358999 1.000000 1.000000 1.000000
+vn 0.946546 0.232113 -0.223997
+v -4.293118 162.067581 25.525799 1.000000 1.000000 1.000000
+vn 0.894791 -0.089230 -0.437478
+v -4.498316 164.110352 25.475599 1.000000 1.000000 1.000000
+vn 0.963511 -0.155893 -0.217589
+v -4.361380 164.085236 25.872999 1.000000 1.000000 1.000000
+vn 0.900916 0.335406 -0.275416
+v -4.098670 161.431305 25.411198 1.000000 1.000000 1.000000
+vn 0.695057 -0.091101 -0.713159
+v -4.567210 164.870804 25.256998 1.000000 1.000000 1.000000
+vn 0.841945 -0.292159 -0.453621
+v -4.098322 165.434509 25.706799 1.000000 1.000000 1.000000
+vn 0.265992 0.108094 -0.957896
+v -4.948382 164.196869 25.004799 1.000000 1.000000 1.000000
+vn 0.289170 0.029973 -0.956809
+v -4.508372 165.653595 25.236198 1.000000 1.000000 1.000000
+vn 0.133941 0.873704 -0.467655
+v -0.949018 158.406219 24.216398 1.000000 1.000000 1.000000
+vn -0.050552 0.891332 -0.450524
+v -0.306524 158.309952 24.099798 1.000000 1.000000 1.000000
+vn 0.039530 -0.303313 -0.952071
+v 3.125720 158.667145 23.047398 1.000000 1.000000 1.000000
+vn 0.172374 -0.258972 -0.950379
+v 4.547086 160.390381 22.712799 1.000000 1.000000 1.000000
+vn 0.140427 -0.591890 -0.793692
+v 1.909578 157.654144 23.429798 1.000000 1.000000 1.000000
+vn 0.311719 -0.592936 -0.742467
+v 3.272210 158.452271 23.198399 1.000000 1.000000 1.000000
+vn -0.312713 0.084197 -0.946109
+v -5.097086 161.847107 24.652599 1.000000 1.000000 1.000000
+vn -0.616486 -0.301616 -0.727306
+v -4.311826 159.540619 24.457598 1.000000 1.000000 1.000000
+vn -0.500526 -0.379850 -0.777938
+v -3.786648 158.918304 24.341799 1.000000 1.000000 1.000000
+vn -0.439740 -0.514380 -0.736235
+v -2.597904 157.990402 24.122999 1.000000 1.000000 1.000000
+vn -0.247102 0.183925 -0.951374
+v -5.178146 164.241516 24.999798 1.000000 1.000000 1.000000
+vn -0.656030 0.218792 -0.722326
+v -5.420758 164.287552 25.150799 1.000000 1.000000 1.000000
+vn -0.620272 0.101843 -0.777748
+v -5.501226 163.444778 25.034401 1.000000 1.000000 1.000000
+vn -0.190843 0.247580 -0.949886
+v -4.717704 165.765213 25.231199 1.000000 1.000000 1.000000
+vn -0.690257 -0.040673 -0.722420
+v -5.335900 161.781540 24.803598 1.000000 1.000000 1.000000
+vn -0.061439 0.299660 -0.952066
+v -3.408104 167.588913 25.565798 1.000000 1.000000 1.000000
+vn -0.564317 0.386070 -0.729723
+v -4.938726 165.882431 25.382198 1.000000 1.000000 1.000000
+vn 0.668973 -0.312080 -0.674597
+v -4.014442 166.111252 25.474199 1.000000 1.000000 1.000000
+vn 0.264234 -0.046461 -0.963339
+v -3.256902 167.396362 25.570999 1.000000 1.000000 1.000000
+vn -0.353667 0.570674 -0.741115
+v -3.567778 167.792633 25.716799 1.000000 1.000000 1.000000
+vn 0.076620 0.299819 -0.950914
+v -1.467768 168.721924 25.911798 1.000000 1.000000 1.000000
+vn -0.431497 0.448877 -0.782508
+v -4.123120 167.202408 25.600998 1.000000 1.000000 1.000000
+vn -0.793371 0.441548 -0.419044
+v -5.151444 165.995438 25.726599 1.000000 1.000000 1.000000
+vn -0.820002 0.313313 -0.478990
+v -5.456460 165.187546 25.611597 1.000000 1.000000 1.000000
+vn -0.654209 0.596517 -0.464949
+v -4.300702 167.372635 25.945398 1.000000 1.000000 1.000000
+vn -0.933438 0.316743 -0.168425
+v -5.582762 165.232193 26.004599 1.000000 1.000000 1.000000
+vn -0.826607 0.521517 -0.211523
+v -4.907080 166.748917 26.221998 1.000000 1.000000 1.000000
+vn -0.747582 0.640817 -0.174570
+v -4.400262 167.467514 26.338598 1.000000 1.000000 1.000000
+vn -0.553395 0.693686 -0.461035
+v -3.721438 167.987976 26.061398 1.000000 1.000000 1.000000
+vn -0.648865 0.740201 -0.176286
+v -3.807584 168.096817 26.454399 1.000000 1.000000 1.000000
+vn -0.433885 0.752885 -0.494882
+v -3.071942 168.505646 26.176598 1.000000 1.000000 1.000000
+vn -0.183262 0.580479 -0.793384
+v -2.258564 168.688431 25.948198 1.000000 1.000000 1.000000
+vn -0.535641 0.825485 -0.177943
+v -3.143050 168.627045 26.569599 1.000000 1.000000 1.000000
+vn -0.327325 0.820374 -0.468876
+v -2.355846 168.922852 26.292797 1.000000 1.000000 1.000000
+vn -0.575292 0.803365 0.153768
+v -3.149924 168.638214 27.385199 1.000000 1.000000 1.000000
+vn -0.683582 0.713739 0.152621
+v -3.815914 168.107971 27.269999 1.000000 1.000000 1.000000
+vn -0.409115 0.894531 -0.180109
+v -2.410370 169.054016 26.685799 1.000000 1.000000 1.000000
+vn -0.201483 0.859055 -0.470563
+v -1.602682 169.224243 26.407398 1.000000 1.000000 1.000000
+vn -0.071172 0.661463 -0.746594
+v -1.536518 168.977264 26.062798 1.000000 1.000000 1.000000
+vn 0.227245 -0.191470 -0.954829
+v -1.402660 168.477737 25.916998 1.000000 1.000000 1.000000
+vn 0.191799 0.240129 -0.951604
+v 0.737648 168.890762 26.258999 1.000000 1.000000 1.000000
+vn 0.091437 0.599099 -0.795437
+v -0.007522 169.213074 26.293598 1.000000 1.000000 1.000000
+vn -0.062791 0.863212 -0.500922
+v -0.813288 169.408432 26.522799 1.000000 1.000000 1.000000
+vn -0.271086 0.945377 -0.181037
+v -1.639774 169.362381 26.800598 1.000000 1.000000 1.000000
+vn -0.125371 0.975379 -0.181433
+v -0.832098 169.550751 26.915798 1.000000 1.000000 1.000000
+vn 0.065833 0.878745 -0.472729
+v -0.007816 169.471222 26.637999 1.000000 1.000000 1.000000
+vn 0.220826 0.633448 -0.741606
+v 0.772234 169.154480 26.409998 1.000000 1.000000 1.000000
+vn 0.023865 0.983139 -0.181297
+v -0.007984 169.614944 27.031199 1.000000 1.000000 1.000000
+vn 0.198614 0.859600 -0.470786
+v 0.805534 169.409836 26.754599 1.000000 1.000000 1.000000
+vn -0.023093 0.987083 0.158539
+v -0.008002 169.628891 27.846798 1.000000 1.000000 1.000000
+vn -0.171783 0.972376 0.158036
+v -0.833914 169.564713 27.731398 1.000000 1.000000 1.000000
+vn -0.316237 0.935692 0.156444
+v -1.643366 169.376343 27.615999 1.000000 1.000000 1.000000
+vn -0.200466 0.843967 0.497527
+v -0.812462 169.401459 28.199598 1.000000 1.000000 1.000000
+vn -0.326448 0.822234 0.466223
+v -1.601060 169.218674 28.084398 1.000000 1.000000 1.000000
+vn -0.442228 0.749526 0.492590
+v -2.353464 168.917267 27.969599 1.000000 1.000000 1.000000
+vn -0.452070 0.878337 0.155426
+v -2.415636 169.067963 27.501398 1.000000 1.000000 1.000000
+vn -0.552762 0.695304 0.459355
+v -3.068852 168.500076 27.853399 1.000000 1.000000 1.000000
+vn -0.300804 0.597157 0.743586
+v -1.534986 168.971695 28.421997 1.000000 1.000000 1.000000
+vn -0.439931 0.460434 0.771013
+v -2.942164 168.282394 28.191198 1.000000 1.000000 1.000000
+vn -0.227012 0.236477 0.944746
+v -1.472570 168.738663 28.562599 1.000000 1.000000 1.000000
+vn -0.124308 0.613906 0.779530
+v -0.007512 169.207504 28.652798 1.000000 1.000000 1.000000
+vn -0.335940 0.158127 0.928515
+v -3.419240 167.602859 28.216599 1.000000 1.000000 1.000000
+vn -0.639119 0.596823 0.485107
+v -3.717678 167.982407 27.738199 1.000000 1.000000 1.000000
+vn -0.564856 0.318656 0.761181
+v -4.119000 167.198212 27.960199 1.000000 1.000000 1.000000
+vn -0.728042 0.515456 0.451951
+v -4.296362 167.368454 27.622398 1.000000 1.000000 1.000000
+vn -0.611318 0.242461 0.753328
+v -4.593422 166.524277 27.843599 1.000000 1.000000 1.000000
+vn -0.798317 0.395607 0.454076
+v -4.791206 166.665207 27.505798 1.000000 1.000000 1.000000
+vn -0.777992 0.609891 0.150866
+v -4.409880 167.477295 27.154198 1.000000 1.000000 1.000000
+vn -0.852845 0.500175 0.149936
+v -4.917804 166.755905 27.037598 1.000000 1.000000 1.000000
+vn -0.669040 0.107068 0.735474
+v -5.225912 165.105209 27.626198 1.000000 1.000000 1.000000
+vn -0.865897 0.216803 0.450799
+v -5.450950 165.184753 27.288399 1.000000 1.000000 1.000000
+vn -0.908431 0.385026 0.162810
+v -5.282226 166.065216 26.935398 1.000000 1.000000 1.000000
+vn -0.951797 0.268718 0.147898
+v -5.594968 165.236374 26.820198 1.000000 1.000000 1.000000
+vn -0.877071 0.080220 0.473614
+v -5.648540 164.330811 27.172199 1.000000 1.000000 1.000000
+vn -0.968953 0.179874 -0.169633
+v -5.785128 164.357315 25.888399 1.000000 1.000000 1.000000
+vn -0.979074 0.140441 0.147277
+v -5.797798 164.360107 26.703999 1.000000 1.000000 1.000000
+vn -0.872212 0.200772 -0.446024
+v -5.654242 164.332214 25.495398 1.000000 1.000000 1.000000
+vn -0.984233 0.051832 -0.169111
+v -5.871016 163.458725 25.771999 1.000000 1.000000 1.000000
+vn -0.891307 0.085614 -0.445245
+v -5.738174 163.453140 25.378798 1.000000 1.000000 1.000000
+vn -0.989048 0.011387 0.147156
+v -5.883852 163.458725 26.587599 1.000000 1.000000 1.000000
+vn -0.982648 -0.076158 -0.169124
+v -5.840400 162.562912 25.656601 1.000000 1.000000 1.000000
+vn -0.879825 -0.025474 -0.474614
+v -5.708252 162.579666 25.263599 1.000000 1.000000 1.000000
+vn -0.096975 0.343375 0.934179
+v 0.740054 168.908905 28.909798 1.000000 1.000000 1.000000
+vn 0.008857 0.344683 0.938677
+v 2.165428 168.460999 29.141199 1.000000 1.000000 1.000000
+vn 0.099285 0.645968 0.756880
+v 1.533030 168.971695 28.885399 1.000000 1.000000 1.000000
+vn 0.061796 0.864044 0.499609
+v 0.804718 169.402847 28.431398 1.000000 1.000000 1.000000
+vn -0.067019 0.880294 0.469671
+v -0.007816 169.464233 28.314999 1.000000 1.000000 1.000000
+vn 0.414767 0.778916 0.470382
+v 2.986802 168.554474 28.764999 1.000000 1.000000 1.000000
+vn 0.216081 0.852641 0.475723
+v 1.599078 169.218674 28.547598 1.000000 1.000000 1.000000
+vn 0.261271 0.582217 0.769909
+v 2.863460 168.335419 29.102798 1.000000 1.000000 1.000000
+vn 0.217815 0.389618 0.894849
+v 3.897694 167.100540 29.475798 1.000000 1.000000 1.000000
+vn 0.477849 0.423605 0.769558
+v 4.541318 166.606598 29.450399 1.000000 1.000000 1.000000
+vn 0.591903 0.611561 0.525018
+v 4.238000 167.436829 28.997398 1.000000 1.000000 1.000000
+vn 0.523569 0.666610 0.530571
+v 3.651232 168.042404 28.881599 1.000000 1.000000 1.000000
+vn 0.720756 0.525082 0.452548
+v 4.736900 166.751709 29.112598 1.000000 1.000000 1.000000
+vn 0.770484 0.419738 0.479765
+v 5.146434 165.991257 29.228798 1.000000 1.000000 1.000000
+vn 0.620094 0.291983 0.728168
+v 5.224610 165.106613 29.681198 1.000000 1.000000 1.000000
+vn 0.244291 0.214963 0.945575
+v 5.012034 165.031265 29.821798 1.000000 1.000000 1.000000
+vn 0.891490 0.427678 0.149460
+v 5.282444 166.063812 28.760599 1.000000 1.000000 1.000000
+vn 0.825694 0.543542 0.150971
+v 4.862108 166.843811 28.644398 1.000000 1.000000 1.000000
+vn 0.940693 0.305000 0.148563
+v 5.593666 165.237778 28.875198 1.000000 1.000000 1.000000
+vn 0.837851 0.314526 0.446183
+v 5.449636 165.186157 29.343599 1.000000 1.000000 1.000000
+vn 0.856653 0.202541 0.474472
+v 5.645874 164.337784 29.458799 1.000000 1.000000 1.000000
+vn 0.634429 0.133252 0.761410
+v 5.494080 163.460129 29.911999 1.000000 1.000000 1.000000
+vn 0.972758 0.178624 0.147771
+v 5.795094 164.367081 28.990599 1.000000 1.000000 1.000000
+vn 0.949186 0.264866 -0.169977
+v 5.581448 165.233597 28.059799 1.000000 1.000000 1.000000
+vn 0.905680 0.388091 -0.170671
+v 5.270922 166.056839 27.944998 1.000000 1.000000 1.000000
+vn 0.836559 0.315359 -0.448015
+v 5.151636 165.994049 27.551998 1.000000 1.000000 1.000000
+vn 0.845310 0.505711 -0.172362
+v 4.851486 166.836838 27.828798 1.000000 1.000000 1.000000
+vn 0.871772 0.202959 -0.445895
+v 5.455146 165.187546 27.666599 1.000000 1.000000 1.000000
+vn 0.602105 0.180839 -0.777668
+v 4.938854 165.881027 27.207399 1.000000 1.000000 1.000000
+vn 0.774449 0.411505 -0.480512
+v 4.741702 166.754517 27.435799 1.000000 1.000000 1.000000
+vn 0.767638 0.616850 -0.173863
+v 4.340524 167.538681 27.713598 1.000000 1.000000 1.000000
+vn 0.594346 0.340664 -0.728492
+v 4.067062 167.267990 26.975998 1.000000 1.000000 1.000000
+vn 0.719372 0.525452 -0.454316
+v 4.242288 167.441010 27.320599 1.000000 1.000000 1.000000
+vn 0.686146 0.084371 -0.722554
+v 5.229838 165.108017 27.321999 1.000000 1.000000 1.000000
+vn 0.318372 -0.064474 -0.945771
+v 4.995710 165.024292 27.170998 1.000000 1.000000 1.000000
+vn 0.259670 -0.167899 -0.950990
+v 5.227378 162.642456 27.518198 1.000000 1.000000 1.000000
+vn -0.200277 -0.218250 -0.955121
+v 4.773992 164.946152 27.176197 1.000000 1.000000 1.000000
+vn -0.041007 -0.246831 -0.968190
+v 3.712568 166.917755 26.830198 1.000000 1.000000 1.000000
+vn 0.320823 0.062548 -0.945072
+v 3.884986 167.087997 26.824999 1.000000 1.000000 1.000000
+vn 0.625804 -0.062572 -0.777467
+v 5.499566 163.460129 27.552799 1.000000 1.000000 1.000000
+vn 0.207393 -0.234431 -0.949753
+v 4.863922 161.088058 27.749598 1.000000 1.000000 1.000000
+vn -0.257183 -0.124662 -0.958288
+v 4.995374 162.668976 27.523199 1.000000 1.000000 1.000000
+vn 0.669414 -0.176786 -0.721549
+v 5.472334 162.613159 27.669197 1.000000 1.000000 1.000000
+vn 0.895083 -0.029324 -0.444934
+v 5.736500 163.468491 27.897198 1.000000 1.000000 1.000000
+vn 0.876430 0.080925 -0.474680
+v 5.651590 164.339188 27.781998 1.000000 1.000000 1.000000
+vn -0.699894 0.047064 -0.712694
+v 4.657540 161.968506 27.775398 1.000000 1.000000 1.000000
+vn -0.756685 -0.155750 -0.634956
+v 4.801416 163.433609 27.542599 1.000000 1.000000 1.000000
+vn -0.286734 -0.048094 -0.956802
+v 4.648064 161.184326 27.754599 1.000000 1.000000 1.000000
+vn -0.689689 0.269310 -0.672162
+v 4.184172 160.688995 27.992798 1.000000 1.000000 1.000000
+vn -0.267210 0.029872 -0.963175
+v 3.509248 159.352264 28.089399 1.000000 1.000000 1.000000
+vn -0.859475 0.237717 -0.452542
+v 4.225204 161.371307 28.225199 1.000000 1.000000 1.000000
+vn -0.898734 0.032523 -0.437287
+v 4.540920 162.721985 27.993998 1.000000 1.000000 1.000000
+vn -0.709226 0.428288 -0.559971
+v 3.618890 160.229919 28.443998 1.000000 1.000000 1.000000
+vn -0.921690 0.310577 -0.232444
+v 4.096546 161.428513 28.622799 1.000000 1.000000 1.000000
+vn -0.971484 0.094673 -0.217382
+v 4.402644 162.737335 28.391399 1.000000 1.000000 1.000000
+vn -0.896957 -0.128544 -0.423018
+v 4.563502 163.423843 27.877398 1.000000 1.000000 1.000000
+vn -0.998644 -0.051306 0.008867
+v 4.373328 163.416855 28.729799 1.000000 1.000000 1.000000
+vn -0.970408 0.239259 0.032611
+v 4.242288 162.081528 28.962399 1.000000 1.000000 1.000000
+vn -0.995806 0.091329 0.005469
+v 4.351672 162.742920 28.846201 1.000000 1.000000 1.000000
+vn -0.871802 0.280667 0.401481
+v 4.413716 162.035492 29.786598 1.000000 1.000000 1.000000
+vn -0.787194 0.430872 0.441220
+v 4.212754 161.376892 29.901798 1.000000 1.000000 1.000000
+vn -0.902231 0.431203 0.006586
+v 3.811110 160.917816 29.179798 1.000000 1.000000 1.000000
+vn -0.773036 0.553670 0.309621
+v 3.608242 160.238297 30.120598 1.000000 1.000000 1.000000
+vn -0.715049 0.577147 -0.394470
+v 3.189978 159.706680 28.559998 1.000000 1.000000 1.000000
+vn -0.812892 0.582356 -0.008258
+v 3.468088 160.355499 29.296398 1.000000 1.000000 1.000000
+vn -0.589016 0.673122 0.447177
+v 3.180594 159.717834 30.236597 1.000000 1.000000 1.000000
+vn -0.526050 0.728903 -0.438145
+v 2.152978 158.883423 28.791199 1.000000 1.000000 1.000000
+vn -0.638374 0.768043 0.050882
+v 2.587862 159.424805 29.527399 1.000000 1.000000 1.000000
+vn -0.533633 0.515361 -0.670551
+v 2.841188 159.049469 28.340399 1.000000 1.000000 1.000000
+vn -0.371681 0.790868 -0.486190
+v 1.570302 158.600174 28.905998 1.000000 1.000000 1.000000
+vn -0.474590 0.831065 -0.289991
+v 2.087418 159.017380 29.188799 1.000000 1.000000 1.000000
+vn -0.353904 0.564628 -0.745619
+v 1.652186 158.358780 28.571199 1.000000 1.000000 1.000000
+vn -0.240298 0.176049 -0.954601
+v 1.727490 158.135529 28.435398 1.000000 1.000000 1.000000
+vn -0.201688 0.718990 -0.665114
+v 0.333338 158.054596 28.801798 1.000000 1.000000 1.000000
+vn -0.144584 0.235066 -0.961166
+v -0.364940 157.817383 28.782598 1.000000 1.000000 1.000000
+vn 0.003742 0.883696 -0.468047
+v -0.331796 158.311340 29.253199 1.000000 1.000000 1.000000
+vn -0.181138 0.874947 -0.449061
+v 0.316796 158.311340 29.136599 1.000000 1.000000 1.000000
+vn 0.027683 0.672217 -0.739836
+v -1.022814 158.159241 29.034599 1.000000 1.000000 1.000000
+vn -0.061566 0.265490 -0.962146
+v -1.746326 158.143890 29.013798 1.000000 1.000000 1.000000
+vn -0.250381 -0.201755 -0.946892
+v -1.827400 157.906693 29.008799 1.000000 1.000000 1.000000
+vn -0.173543 -0.250883 -0.952334
+v -0.381862 157.566223 28.777399 1.000000 1.000000 1.000000
+vn 0.274776 0.666055 -0.693447
+v -2.217866 158.629471 29.251799 1.000000 1.000000 1.000000
+vn 0.238333 0.844561 -0.479494
+v -1.587528 158.607147 29.484398 1.000000 1.000000 1.000000
+vn 0.605677 0.689505 -0.397162
+v -3.158126 159.671783 29.819199 1.000000 1.000000 1.000000
+vn 0.451278 0.686129 -0.570592
+v -2.661570 159.225281 29.703199 1.000000 1.000000 1.000000
+vn 0.022815 0.248970 -0.968242
+v -3.474100 159.314590 29.348598 1.000000 1.000000 1.000000
+vn 0.539595 0.511112 -0.669031
+v -3.775898 160.027588 29.599598 1.000000 1.000000 1.000000
+vn 0.323884 0.913448 -0.246396
+v -1.539210 158.749481 29.881998 1.000000 1.000000 1.000000
+vn 0.076423 0.969009 -0.234906
+v -0.321718 158.462036 29.650599 1.000000 1.000000 1.000000
+vn 0.457076 0.889407 0.006059
+v -2.020200 159.041107 30.438999 1.000000 1.000000 1.000000
+vn 0.243866 0.969225 0.033645
+v -0.931688 158.614136 30.221598 1.000000 1.000000 1.000000
+vn -0.096994 0.995228 0.010633
+v 0.303576 158.516449 29.988998 1.000000 1.000000 1.000000
+vn 0.072395 0.997356 0.006402
+v -0.317996 158.517853 30.105398 1.000000 1.000000 1.000000
+vn 0.454228 0.765471 0.455775
+v -1.582854 158.621109 31.160999 1.000000 1.000000 1.000000
+vn 0.583127 0.747936 0.317104
+v -2.653730 159.237839 31.379799 1.000000 1.000000 1.000000
+vn 0.288352 0.858074 0.424927
+v -0.969310 158.425766 31.045998 1.000000 1.000000 1.000000
+vn 0.577050 0.391646 0.716678
+v -3.311878 159.497375 31.843399 1.000000 1.000000 1.000000
+vn 0.391677 0.553528 0.734980
+v -1.664802 158.381104 31.508799 1.000000 1.000000 1.000000
+vn 0.701200 0.560052 0.441203
+v -3.148830 159.682953 31.495798 1.000000 1.000000 1.000000
+vn 0.693343 0.136340 0.707592
+v -4.439724 161.298752 32.189400 1.000000 1.000000 1.000000
+vn 0.277476 -0.055856 0.959108
+v -4.668162 161.198288 32.343998 1.000000 1.000000 1.000000
+vn 0.277392 0.053941 0.959241
+v -3.482276 159.304810 31.997999 1.000000 1.000000 1.000000
+vn 0.803710 0.497156 0.326935
+v -3.578296 160.196426 31.610798 1.000000 1.000000 1.000000
+vn 0.616367 0.787409 -0.008879
+v -2.550694 159.392731 30.555599 1.000000 1.000000 1.000000
+vn 0.848318 0.396035 0.351443
+v -3.940734 160.774109 31.726999 1.000000 1.000000 1.000000
+vn 0.794879 0.604697 0.050091
+v -3.439338 160.315033 30.786598 1.000000 1.000000 1.000000
+vn 0.931297 0.119762 0.344011
+v -4.418982 162.055023 31.957199 1.000000 1.000000 1.000000
+vn 0.690408 -0.124071 0.712702
+v -4.786970 163.448959 32.536598 1.000000 1.000000 1.000000
+vn 0.876011 0.263348 0.404046
+v -4.221136 161.393631 31.841799 1.000000 1.000000 1.000000
+vn 0.945151 0.064591 0.320183
+v -4.529654 162.738724 32.072399 1.000000 1.000000 1.000000
+vn 0.940284 0.337074 0.047411
+v -4.057226 161.466187 31.017399 1.000000 1.000000 1.000000
+vn 0.754382 0.499496 -0.425925
+v -3.952360 160.767136 30.050398 1.000000 1.000000 1.000000
+vn 0.849183 0.449088 -0.277864
+v -3.832058 160.842484 30.447998 1.000000 1.000000 1.000000
+vn 0.908923 0.350596 -0.225700
+v -4.104734 161.445267 30.562599 1.000000 1.000000 1.000000
+vn 0.809830 0.355316 -0.466825
+v -4.233610 161.388062 30.165199 1.000000 1.000000 1.000000
+vn 0.993431 0.114096 0.008788
+v -4.353746 162.758270 31.248198 1.000000 1.000000 1.000000
+vn 0.886724 0.185124 -0.423615
+v -4.543018 162.735947 30.395798 1.000000 1.000000 1.000000
+vn 0.588539 0.339735 -0.733622
+v -4.454260 161.291779 29.830399 1.000000 1.000000 1.000000
+vn 0.744605 0.203448 -0.635745
+v -4.779798 162.709427 30.060999 1.000000 1.000000 1.000000
+vn 0.975525 -0.033265 -0.217360
+v -4.425768 163.433609 30.909798 1.000000 1.000000 1.000000
+vn 0.898997 0.024172 -0.437287
+v -4.564724 163.439194 30.512398 1.000000 1.000000 1.000000
+vn 0.999584 -0.028307 0.005488
+v -4.374538 163.430817 31.364599 1.000000 1.000000 1.000000
+vn 0.888251 -0.224726 0.400634
+v -4.481064 164.134064 32.305199 1.000000 1.000000 1.000000
+vn 0.873371 -0.182519 -0.451565
+v -4.334742 164.809402 30.743599 1.000000 1.000000 1.000000
+vn 0.939784 -0.250961 -0.232001
+v -4.202788 164.761963 31.141199 1.000000 1.000000 1.000000
+vn 0.701467 -0.002874 -0.712697
+v -4.728518 164.182907 30.293798 1.000000 1.000000 1.000000
+vn 0.183502 0.230538 -0.955604
+v -4.657192 161.202469 29.694599 1.000000 1.000000 1.000000
+vn 0.247902 0.140621 -0.958525
+v -5.021432 163.458725 30.041798 1.000000 1.000000 1.000000
+vn -0.224227 0.221151 -0.949112
+v -4.989852 165.045212 30.267998 1.000000 1.000000 1.000000
+vn 0.282315 0.066128 -0.957040
+v -4.768444 164.965683 30.272999 1.000000 1.000000 1.000000
+vn -0.271102 0.151435 -0.950564
+v -5.254582 163.468491 30.036598 1.000000 1.000000 1.000000
+vn 0.706453 -0.224569 -0.671188
+v -4.336750 165.493118 30.511198 1.000000 1.000000 1.000000
+vn 0.268369 -0.012630 -0.963234
+v -3.747612 166.877289 30.607798 1.000000 1.000000 1.000000
+vn 0.568488 -0.478526 -0.669205
+v -3.100176 167.227524 30.858797 1.000000 1.000000 1.000000
+vn -0.680324 0.133879 -0.720580
+v -5.500788 163.478271 30.187599 1.000000 1.000000 1.000000
+vn -0.628911 0.023078 -0.777135
+v -5.474640 162.631302 30.071199 1.000000 1.000000 1.000000
+vn -0.679023 -0.127671 -0.722930
+v -5.101758 161.007126 29.840599 1.000000 1.000000 1.000000
+vn -0.322962 0.044156 -0.945381
+v -4.873424 161.107590 29.689398 1.000000 1.000000 1.000000
+vn -0.895201 -0.027242 -0.444830
+v -5.710454 162.604782 30.415798 1.000000 1.000000 1.000000
+vn -0.869329 -0.136125 -0.475118
+v -5.570930 161.742462 30.300398 1.000000 1.000000 1.000000
+vn -0.588488 -0.218672 -0.778373
+v -4.762830 160.257828 29.725798 1.000000 1.000000 1.000000
+vn -0.568772 -0.378164 -0.730404
+v -3.805704 158.939240 29.494398 1.000000 1.000000 1.000000
+vn -0.315971 -0.083167 -0.945117
+v -3.635396 159.131790 29.343399 1.000000 1.000000 1.000000
+vn -0.442043 -0.441849 -0.780620
+v -3.207308 158.400650 29.378599 1.000000 1.000000 1.000000
+vn -0.362183 -0.568563 -0.738621
+v -1.912990 157.655533 29.159798 1.000000 1.000000 1.000000
+vn -0.891217 0.088932 -0.444773
+v -5.737724 163.488022 30.532198 1.000000 1.000000 1.000000
+vn -0.854434 0.206483 -0.476767
+v -5.649184 164.364288 30.648399 1.000000 1.000000 1.000000
+vn -0.612889 0.310053 -0.726797
+v -5.223646 165.128937 30.418999 1.000000 1.000000 1.000000
+vn -0.982924 -0.072678 -0.169050
+v -5.842628 162.589432 30.808798 1.000000 1.000000 1.000000
+vn -0.983996 0.056109 -0.169125
+v -5.870540 163.493607 30.925198 1.000000 1.000000 1.000000
+vn -0.104294 0.288382 -0.951819
+v -3.921616 167.044739 30.602598 1.000000 1.000000 1.000000
+vn -0.431898 0.517890 -0.738413
+v -4.105352 167.223343 30.753599 1.000000 1.000000 1.000000
+vn 0.031883 0.305420 -0.951684
+v -2.141660 168.454025 30.948599 1.000000 1.000000 1.000000
+vn -0.490699 0.388496 -0.779927
+v -4.581386 166.556366 30.637798 1.000000 1.000000 1.000000
+vn 0.252839 -0.160996 -0.954019
+v -2.046658 168.222397 30.953798 1.000000 1.000000 1.000000
+vn 0.154259 0.260945 -0.952949
+v 0.021918 168.946579 31.295799 1.000000 1.000000 1.000000
+vn -0.266123 0.549513 -0.791968
+v -2.921024 168.304718 30.984999 1.000000 1.000000 1.000000
+vn -0.167383 0.644768 -0.745827
+v -2.241980 168.698212 31.099798 1.000000 1.000000 1.000000
+vn 0.161491 -0.225887 -0.960675
+v 0.020916 168.694016 31.300999 1.000000 1.000000 1.000000
+vn 0.125249 0.657054 -0.743366
+v 0.022968 169.214478 31.446798 1.000000 1.000000 1.000000
+vn 0.002002 0.606168 -0.795334
+v -0.756864 169.157272 31.330399 1.000000 1.000000 1.000000
+vn 0.235320 0.218701 -0.946992
+v 1.485534 168.714951 31.527199 1.000000 1.000000 1.000000
+vn 0.081244 -0.260896 -0.961942
+v 1.419590 168.472153 31.532198 1.000000 1.000000 1.000000
+vn 0.320108 0.591279 -0.740216
+v 1.555160 168.970291 31.678198 1.000000 1.000000 1.000000
+vn 0.309259 0.103144 -0.945368
+v 3.366466 167.625198 31.861799 1.000000 1.000000 1.000000
+vn -0.004683 -0.249944 -0.968249
+v 3.217054 167.431229 31.866999 1.000000 1.000000 1.000000
+vn 0.540811 0.414417 -0.731971
+v 3.524248 167.830307 32.012798 1.000000 1.000000 1.000000
+vn 0.325630 -0.023740 -0.945199
+v 4.726046 165.745682 32.207798 1.000000 1.000000 1.000000
+vn 0.409390 0.470037 -0.781963
+v 2.893342 168.322861 31.896999 1.000000 1.000000 1.000000
+vn 0.348764 0.830382 -0.434546
+v 1.622188 169.217270 32.022797 1.000000 1.000000 1.000000
+vn 0.204697 0.841755 -0.499548
+v 0.834982 169.405640 31.907598 1.000000 1.000000 1.000000
+vn 0.529860 0.705551 -0.470581
+v 3.017998 168.541931 32.241600 1.000000 1.000000 1.000000
+vn 0.431530 0.875705 -0.216616
+v 2.347838 169.083313 32.517998 1.000000 1.000000 1.000000
+vn 0.191122 0.965211 -0.178439
+v 0.854322 169.547958 32.300598 1.000000 1.000000 1.000000
+vn 0.028480 0.982991 -0.181430
+v 0.024550 169.614944 32.184399 1.000000 1.000000 1.000000
+vn 0.069193 0.879341 -0.471138
+v 0.023980 169.471222 31.791401 1.000000 1.000000 1.000000
+vn 0.272783 0.946634 0.171679
+v 1.663386 169.367966 33.231400 1.000000 1.000000 1.000000
+vn 0.133727 0.978236 0.158653
+v 0.856198 169.561905 33.116196 1.000000 1.000000 1.000000
+vn 0.088842 0.874303 0.477181
+v 0.834138 169.398666 33.584396 1.000000 1.000000 1.000000
+vn 0.298469 0.828906 0.473108
+v 2.292386 168.946579 33.801796 1.000000 1.000000 1.000000
+vn 0.406152 0.900429 0.155781
+v 2.352974 169.095871 33.333599 1.000000 1.000000 1.000000
+vn -0.066042 0.864038 0.499075
+v 0.023960 169.464233 33.468201 1.000000 1.000000 1.000000
+vn -0.018159 0.987222 0.158315
+v 0.024608 169.628891 33.000000 1.000000 1.000000 1.000000
+vn 0.003123 0.653595 0.756838
+v 0.799668 169.144714 33.922199 1.000000 1.000000 1.000000
+vn -0.195738 0.862159 0.467299
+v -0.788642 169.405640 33.351799 1.000000 1.000000 1.000000
+vn -0.213385 0.591485 0.777568
+v -0.756110 169.151688 33.689598 1.000000 1.000000 1.000000
+vn -0.167792 0.973208 0.157203
+v -0.809466 169.567505 32.883598 1.000000 1.000000 1.000000
+vn -0.321431 0.807205 0.495079
+v -1.577976 169.224243 33.236397 1.000000 1.000000 1.000000
+vn -0.384326 0.551546 0.740331
+v -2.239740 168.692627 33.458801 1.000000 1.000000 1.000000
+vn -0.146480 0.327834 0.933311
+v 0.021986 168.966110 33.946598 1.000000 1.000000 1.000000
+vn -0.259454 0.204569 0.943841
+v -2.148664 168.470764 33.599396 1.000000 1.000000 1.000000
+vn -0.442034 0.768569 0.462502
+v -2.336172 168.927048 33.121201 1.000000 1.000000 1.000000
+vn -0.311255 0.937212 0.157336
+v -1.619664 169.383316 32.768196 1.000000 1.000000 1.000000
+vn -0.544798 0.681864 0.488116
+v -3.043760 168.516815 33.006401 1.000000 1.000000 1.000000
+vn -0.505666 0.394567 0.767215
+v -3.547268 167.802399 33.227997 1.000000 1.000000 1.000000
+vn -0.448336 0.880274 0.155279
+v -2.397894 169.076340 32.652798 1.000000 1.000000 1.000000
+vn -0.265962 0.946840 -0.180994
+v -1.616136 169.369370 31.952599 1.000000 1.000000 1.000000
+vn -0.404835 0.896592 -0.179531
+v -2.392668 169.063782 31.837399 1.000000 1.000000 1.000000
+vn -0.532371 0.827425 -0.178740
+v -3.117352 168.645187 31.722601 1.000000 1.000000 1.000000
+vn -0.571934 0.805578 0.154713
+v -3.124176 168.656342 32.538200 1.000000 1.000000 1.000000
+vn -0.644218 0.614726 0.455077
+v -3.700014 167.997757 32.890198 1.000000 1.000000 1.000000
+vn -0.680882 0.716265 0.152856
+v -3.797760 168.123322 32.421997 1.000000 1.000000 1.000000
+vn -0.442282 0.765981 -0.466540
+v -3.046824 168.522400 31.329599 1.000000 1.000000 1.000000
+vn -0.645881 0.742712 -0.176685
+v -3.789482 168.113556 31.606398 1.000000 1.000000 1.000000
+vn -0.324516 0.821892 -0.468169
+v -2.338542 168.932617 31.444199 1.000000 1.000000 1.000000
+vn -0.188748 0.845576 -0.499375
+v -1.579584 169.231216 31.559599 1.000000 1.000000 1.000000
+vn -0.536475 0.685658 -0.492003
+v -3.703748 168.003326 31.213398 1.000000 1.000000 1.000000
+vn -0.743975 0.645052 -0.174383
+v -4.381284 167.489853 31.491398 1.000000 1.000000 1.000000
+vn -0.644624 0.612244 -0.457839
+v -4.282174 167.394974 31.098198 1.000000 1.000000 1.000000
+vn -0.774452 0.614434 0.150650
+v -4.390876 167.499619 32.306801 1.000000 1.000000 1.000000
+vn -0.826691 0.535164 -0.173726
+v -4.889324 166.779617 31.375399 1.000000 1.000000 1.000000
+vn -0.729808 0.503925 -0.461995
+v -4.778704 166.698700 30.982397 1.000000 1.000000 1.000000
+vn -0.845390 0.335273 -0.415823
+v -5.448632 165.209869 30.763599 1.000000 1.000000 1.000000
+vn -0.887971 0.409048 -0.210205
+v -5.301074 165.991257 31.258799 1.000000 1.000000 1.000000
+vn -0.910850 0.385084 0.148533
+v -5.312662 165.998245 32.074398 1.000000 1.000000 1.000000
+vn -0.852181 0.501333 0.149844
+v -4.900024 166.786591 32.190998 1.000000 1.000000 1.000000
+vn -0.950470 0.265441 0.161701
+v -5.586958 165.260101 31.972198 1.000000 1.000000 1.000000
+vn -0.966351 0.195183 -0.167542
+v -5.779952 164.389420 31.041401 1.000000 1.000000 1.000000
+vn -0.843937 0.289847 0.451396
+v -5.175892 165.927078 32.542599 1.000000 1.000000 1.000000
+vn -0.753771 0.401992 0.519839
+v -4.773876 166.695908 32.659199 1.000000 1.000000 1.000000
+vn -0.887044 0.105377 0.449497
+v -5.643480 164.362900 32.325199 1.000000 1.000000 1.000000
+vn -0.634757 0.172665 0.753174
+v -4.962222 165.816833 32.880398 1.000000 1.000000 1.000000
+vn -0.978319 0.145649 0.147239
+v -5.792596 164.392212 31.856998 1.000000 1.000000 1.000000
+vn -0.988988 0.015702 0.147164
+v -5.883376 163.493607 31.740799 1.000000 1.000000 1.000000
+vn -0.711768 0.475860 0.516666
+v -4.277848 167.390778 32.775200 1.000000 1.000000 1.000000
+vn -0.434465 0.155854 0.887102
+v -3.934426 167.057297 33.253399 1.000000 1.000000 1.000000
+vn -0.064289 0.879550 -0.471443
+v -0.789438 169.411224 31.674999 1.000000 1.000000 1.000000
+vn -0.120861 0.975958 -0.181380
+v -0.807708 169.553543 32.068001 1.000000 1.000000 1.000000
+vn -0.042060 0.342407 0.938610
+v 1.490388 168.731689 34.177998 1.000000 1.000000 1.000000
+vn 0.162527 0.616454 0.770434
+v 2.197704 168.710770 34.139599 1.000000 1.000000 1.000000
+vn 0.113160 0.335339 0.935277
+v 3.377474 167.639145 34.512596 1.000000 1.000000 1.000000
+vn 0.437556 0.770497 0.463550
+v 3.014958 168.536346 33.918396 1.000000 1.000000 1.000000
+vn 0.251169 0.579066 0.775626
+v 2.890460 168.318665 34.256199 1.000000 1.000000 1.000000
+vn 0.211424 0.243973 0.946455
+v 4.741484 165.754044 34.858597 1.000000 1.000000 1.000000
+vn 0.417265 0.477464 0.773252
+v 4.077104 167.245667 34.487198 1.000000 1.000000 1.000000
+vn 0.533446 0.688986 0.490647
+v 3.672372 168.022858 34.034401 1.000000 1.000000 1.000000
+vn 0.646224 0.747368 0.154386
+v 3.769422 168.149841 33.565998 1.000000 1.000000 1.000000
+vn 0.530666 0.833179 0.155583
+v 3.094654 168.675888 33.450199 1.000000 1.000000 1.000000
+vn 0.565916 0.805180 -0.177267
+v 3.087894 168.664719 32.634598 1.000000 1.000000 1.000000
+vn 0.745357 0.648998 0.152459
+v 4.365102 167.528915 33.681198 1.000000 1.000000 1.000000
+vn 0.676818 0.714969 -0.175317
+v 3.761196 168.138672 32.750599 1.000000 1.000000 1.000000
+vn 0.640340 0.616637 -0.457955
+v 3.676080 168.028442 32.357399 1.000000 1.000000 1.000000
+vn 0.770438 0.613384 -0.173738
+v 4.355574 167.519150 32.865601 1.000000 1.000000 1.000000
+vn 0.712193 0.509048 -0.483375
+v 4.257004 167.422867 32.472599 1.000000 1.000000 1.000000
+vn 0.787218 0.420314 -0.451248
+v 4.758788 166.727997 32.588799 1.000000 1.000000 1.000000
+vn 0.572114 0.255742 -0.779283
+v 4.562240 166.584274 32.244198 1.000000 1.000000 1.000000
+vn 0.847044 0.502786 -0.172401
+v 4.868970 166.808914 32.981796 1.000000 1.000000 1.000000
+vn 0.837683 0.312499 -0.447919
+v 5.160674 165.975906 32.703400 1.000000 1.000000 1.000000
+vn 0.668684 0.170535 -0.723727
+v 4.947518 165.862885 32.359001 1.000000 1.000000 1.000000
+vn 0.281390 -0.133988 -0.950193
+v 5.254944 163.419647 32.555000 1.000000 1.000000 1.000000
+vn 0.629132 0.016436 -0.777124
+v 5.421814 164.269409 32.589600 1.000000 1.000000 1.000000
+vn 0.858746 0.190864 -0.475528
+v 5.461920 165.163818 32.818798 1.000000 1.000000 1.000000
+vn 0.907300 0.384373 -0.170483
+v 5.280166 166.038696 33.096596 1.000000 1.000000 1.000000
+vn 0.950470 0.260393 -0.169712
+v 5.588388 165.207077 33.211800 1.000000 1.000000 1.000000
+vn 0.891634 0.083794 -0.444935
+v 5.655402 164.314072 32.934196 1.000000 1.000000 1.000000
+vn 0.976362 0.134626 -0.169096
+v 5.786338 164.337784 33.327198 1.000000 1.000000 1.000000
+vn 0.895213 -0.032502 -0.444451
+v 5.738212 163.434998 33.050598 1.000000 1.000000 1.000000
+vn 0.687864 -0.090706 -0.720150
+v 5.501214 163.426636 32.706001 1.000000 1.000000 1.000000
+vn 0.632866 -0.269997 -0.725660
+v 5.328678 161.759216 32.937401 1.000000 1.000000 1.000000
+vn 0.239264 -0.206332 -0.948778
+v 5.090146 161.826187 32.786400 1.000000 1.000000 1.000000
+vn 0.516740 -0.356103 -0.778569
+v 4.777802 160.287140 33.156197 1.000000 1.000000 1.000000
+vn 0.125311 -0.281590 -0.951317
+v 4.150336 159.751328 33.120998 1.000000 1.000000 1.000000
+vn -0.009354 -0.306646 -0.951778
+v 2.463222 158.215057 33.466999 1.000000 1.000000 1.000000
+vn -0.268850 -0.004290 -0.963173
+v 3.966136 159.906204 33.126198 1.000000 1.000000 1.000000
+vn -0.276771 -0.083805 -0.957274
+v 4.864232 161.888977 32.791397 1.000000 1.000000 1.000000
+vn -0.236858 -0.155961 -0.958945
+v 5.021716 163.411285 32.560196 1.000000 1.000000 1.000000
+vn -0.165850 -0.241763 -0.956057
+v 4.516290 165.635452 32.212997 1.000000 1.000000 1.000000
+vn -0.263837 0.144592 -0.953668
+v 2.353876 158.438309 33.472198 1.000000 1.000000 1.000000
+vn -0.134543 -0.270913 -0.953155
+v 0.335754 157.562042 33.814198 1.000000 1.000000 1.000000
+vn -0.177663 0.214653 -0.960396
+v 0.320824 157.814590 33.819397 1.000000 1.000000 1.000000
+vn -0.218359 -0.232787 -0.947697
+v -1.139114 157.686234 34.045601 1.000000 1.000000 1.000000
+vn -0.071740 0.668581 -0.740171
+v -0.373888 158.056000 34.071396 1.000000 1.000000 1.000000
+vn -0.304270 0.684876 -0.662091
+v 0.982932 158.152267 33.838799 1.000000 1.000000 1.000000
+vn -0.100226 0.254958 -0.961744
+v -1.088588 157.933197 34.050598 1.000000 1.000000 1.000000
+vn -0.301306 -0.122898 -0.945574
+v -3.084224 158.633667 34.380196 1.000000 1.000000 1.000000
+vn -0.013783 0.249728 -0.968218
+v -2.947378 158.838776 34.385399 1.000000 1.000000 1.000000
+vn 0.174184 0.696049 -0.696545
+v -1.616728 158.344833 34.288799 1.000000 1.000000 1.000000
+vn -0.326997 0.003032 -0.945020
+v -4.558996 160.408524 34.726196 1.000000 1.000000 1.000000
+vn -0.374656 -0.496526 -0.783004
+v -2.568242 157.972275 34.415398 1.000000 1.000000 1.000000
+vn -0.276231 -0.611954 -0.741086
+v -1.192462 157.425293 34.196598 1.000000 1.000000 1.000000
+vn 0.147777 0.251948 -0.956391
+v -4.356706 160.534103 34.731400 1.000000 1.000000 1.000000
+vn -0.655597 -0.212520 -0.724588
+v -4.772602 160.275970 34.877396 1.000000 1.000000 1.000000
+vn -0.290447 0.116095 -0.949822
+v -5.233160 162.689896 35.073399 1.000000 1.000000 1.000000
+vn -0.552919 -0.291737 -0.780493
+v -4.342738 159.583893 34.762596 1.000000 1.000000 1.000000
+vn -0.510588 -0.449066 -0.733239
+v -3.228718 158.417374 34.531197 1.000000 1.000000 1.000000
+vn 0.225213 0.170620 -0.959254
+v -5.000950 162.715012 35.078598 1.000000 1.000000 1.000000
+vn -0.626830 -0.056053 -0.777137
+v -5.346072 161.828964 35.107998 1.000000 1.000000 1.000000
+vn -0.692611 0.047067 -0.719774
+v -5.478348 162.664780 35.224396 1.000000 1.000000 1.000000
+vn -0.253543 0.190943 -0.948292
+v -5.169068 164.291733 35.304798 1.000000 1.000000 1.000000
+vn 0.270056 0.101090 -0.957523
+v -4.939716 164.245697 35.309799 1.000000 1.000000 1.000000
+vn -0.650175 0.228996 -0.724454
+v -5.411256 164.340576 35.455799 1.000000 1.000000 1.000000
+vn -0.145137 0.272472 -0.951154
+v -4.362088 166.430786 35.639397 1.000000 1.000000 1.000000
+vn -0.540142 0.321890 -0.777582
+v -4.954304 165.850327 35.674599 1.000000 1.000000 1.000000
+vn -0.882302 0.224406 -0.413744
+v -5.644330 164.388016 35.800400 1.000000 1.000000 1.000000
+vn -0.874337 0.096829 -0.475561
+v -5.736694 163.520126 35.685196 1.000000 1.000000 1.000000
+vn -0.013472 0.306695 -0.951712
+v -2.775668 168.089828 35.985397 1.000000 1.000000 1.000000
+vn 0.268013 0.021244 -0.963181
+v -4.168528 166.289856 35.644600 1.000000 1.000000 1.000000
+vn -0.501663 0.456888 -0.734566
+v -4.566462 166.580093 35.790596 1.000000 1.000000 1.000000
+vn -0.791439 0.404833 -0.457968
+v -5.167692 165.961960 36.019199 1.000000 1.000000 1.000000
+vn -0.933496 0.291679 -0.208587
+v -5.596320 165.183365 36.295601 1.000000 1.000000 1.000000
+vn -0.983324 0.071509 -0.167215
+v -5.869484 163.527100 36.078201 1.000000 1.000000 1.000000
+vn -0.889975 0.422414 -0.171789
+v -5.287324 166.024750 36.412201 1.000000 1.000000 1.000000
+vn -0.722285 0.520920 -0.454914
+v -4.763138 166.723801 36.134998 1.000000 1.000000 1.000000
+vn -0.342870 0.508510 -0.789847
+v -3.529076 167.827515 36.021797 1.000000 1.000000 1.000000
+vn -0.627495 0.606628 -0.488112
+v -4.266558 167.411697 36.250198 1.000000 1.000000 1.000000
+vn -0.823689 0.539879 -0.173398
+v -4.873398 166.804733 36.528198 1.000000 1.000000 1.000000
+vn -0.741256 0.647954 -0.175198
+v -4.365334 167.507980 36.643196 1.000000 1.000000 1.000000
+vn -0.547066 0.697878 -0.462262
+v -3.681076 168.024261 36.366398 1.000000 1.000000 1.000000
+vn -0.259387 0.615946 -0.743861
+v -2.905690 168.315887 36.136597 1.000000 1.000000 1.000000
+vn -0.643118 0.745085 -0.176771
+v -3.766280 168.134491 36.759399 1.000000 1.000000 1.000000
+vn -0.439296 0.768290 -0.465564
+v -3.030846 168.534943 36.480999 1.000000 1.000000 1.000000
+vn -0.772017 0.617369 0.151148
+v -4.374874 167.517746 37.458801 1.000000 1.000000 1.000000
+vn -0.849570 0.505839 0.149526
+v -4.884058 166.811722 37.343597 1.000000 1.000000 1.000000
+vn -0.722544 0.523114 0.451976
+v -4.262258 167.407516 37.926998 1.000000 1.000000 1.000000
+vn -0.769741 0.378783 0.513831
+v -4.758324 166.721024 37.811996 1.000000 1.000000 1.000000
+vn -0.678346 0.718634 0.153009
+v -3.774508 168.145645 37.574997 1.000000 1.000000 1.000000
+vn -0.800861 0.301667 0.517318
+v -5.162476 165.959167 37.695999 1.000000 1.000000 1.000000
+vn -0.910360 0.386209 0.148618
+v -5.298884 166.030319 37.227798 1.000000 1.000000 1.000000
+vn -0.952814 0.265244 0.147619
+v -5.608562 165.188950 37.111198 1.000000 1.000000 1.000000
+vn -0.874870 0.180154 0.449608
+v -5.464172 165.138702 37.579399 1.000000 1.000000 1.000000
+vn -0.976512 0.142853 0.161302
+v -5.787626 164.417328 37.008999 1.000000 1.000000 1.000000
+vn -0.988890 0.021065 0.147148
+v -5.882334 163.527100 36.893799 1.000000 1.000000 1.000000
+vn -0.556121 0.325349 0.764773
+v -4.086310 167.235886 38.264801 1.000000 1.000000 1.000000
+vn -0.286522 0.168784 0.943089
+v -2.784732 168.105179 38.636200 1.000000 1.000000 1.000000
+vn -0.459690 0.495240 0.737172
+v -2.902794 168.311691 38.495796 1.000000 1.000000 1.000000
+vn -0.634888 0.601393 0.485020
+v -3.677354 168.018677 38.043198 1.000000 1.000000 1.000000
+vn -0.452936 0.099657 0.885956
+v -4.376328 166.441940 38.290199 1.000000 1.000000 1.000000
+vn -0.652534 0.091019 0.752273
+v -5.238606 165.060562 37.917198 1.000000 1.000000 1.000000
+vn -0.546854 0.700267 0.458886
+v -3.027782 168.529373 38.157997 1.000000 1.000000 1.000000
+vn -0.567771 0.808662 0.153952
+v -3.107774 168.668900 37.689598 1.000000 1.000000 1.000000
+vn -0.444012 0.882516 0.154983
+v -2.375260 169.086105 37.805000 1.000000 1.000000 1.000000
+vn -0.528382 0.830153 -0.177925
+v -3.101002 168.656342 36.874199 1.000000 1.000000 1.000000
+vn -0.435040 0.754385 0.491572
+v -2.314118 168.936798 38.273399 1.000000 1.000000 1.000000
+vn -0.307787 0.938369 0.157259
+v -1.595872 169.390289 37.920399 1.000000 1.000000 1.000000
+vn -0.400938 0.898363 -0.179421
+v -2.370072 169.073547 36.989399 1.000000 1.000000 1.000000
+vn -0.310263 0.809843 -0.497886
+v -2.316462 168.942383 36.596397 1.000000 1.000000 1.000000
+vn -0.192968 0.860644 -0.471228
+v -1.556372 169.238205 36.711800 1.000000 1.000000 1.000000
+vn -0.262476 0.947837 -0.180863
+v -1.592382 169.376343 37.104797 1.000000 1.000000 1.000000
+vn -0.087786 0.599210 -0.795765
+v -1.492126 168.989838 36.367199 1.000000 1.000000 1.000000
+vn -0.060528 0.880264 -0.470607
+v -0.758024 169.416809 36.828201 1.000000 1.000000 1.000000
+vn 0.027327 0.667790 -0.743848
+v -0.726740 169.162857 36.483597 1.000000 1.000000 1.000000
+vn -0.115701 0.976610 -0.181232
+v -0.775558 169.559128 37.221397 1.000000 1.000000 1.000000
+vn 0.078710 0.862075 -0.500630
+v 0.053714 169.471222 36.944397 1.000000 1.000000 1.000000
+vn 0.200670 0.246778 -0.948068
+v 0.785004 168.882385 36.563980 1.000000 1.000000 1.000000
+vn 0.113922 0.278642 -0.953615
+v -0.694236 168.897736 36.332596 1.000000 1.000000 1.000000
+vn 0.230593 0.627789 -0.743443
+v 0.821820 169.146103 36.714996 1.000000 1.000000 1.000000
+vn 0.192891 -0.202973 -0.959997
+v -0.663452 168.646576 36.337799 1.000000 1.000000 1.000000
+vn 0.273425 -0.127206 -0.953445
+v -2.652520 167.874954 35.990601 1.000000 1.000000 1.000000
+vn 0.292180 0.142353 -0.945709
+v 2.785220 168.081467 36.898579 1.000000 1.000000 1.000000
+vn 0.118854 -0.248042 -0.961431
+v 0.750144 168.632614 36.569000 1.000000 1.000000 1.000000
+vn 0.223945 0.870956 -0.437361
+v 0.857240 169.401459 37.059601 1.000000 1.000000 1.000000
+vn 0.338195 0.520475 -0.784047
+v 2.228822 168.703781 36.933777 1.000000 1.000000 1.000000
+vn 0.477567 0.481133 -0.735147
+v 2.915758 168.307510 37.049797 1.000000 1.000000 1.000000
+vn 0.326770 0.017683 -0.944939
+v 4.368320 166.419617 37.244797 1.000000 1.000000 1.000000
+vn 0.032043 -0.248456 -0.968113
+v 2.661596 167.866592 36.903801 1.000000 1.000000 1.000000
+vn 0.424812 0.771838 -0.473076
+v 2.324856 168.938202 37.278397 1.000000 1.000000 1.000000
+vn 0.300754 0.928466 -0.217941
+v 1.592872 169.376343 37.554798 1.000000 1.000000 1.000000
+vn 0.047151 0.982776 -0.178683
+v 0.054972 169.614944 37.337399 1.000000 1.000000 1.000000
+vn 0.548253 0.697328 -0.461684
+v 3.041390 168.526581 37.394180 1.000000 1.000000 1.000000
+vn 0.446545 0.876748 -0.178636
+v 2.378686 169.069366 37.671398 1.000000 1.000000 1.000000
+vn 0.271074 0.949604 0.157391
+v 1.596348 169.388901 38.370377 1.000000 1.000000 1.000000
+vn 0.130849 0.976263 0.172595
+v 0.879026 169.556335 38.268196 1.000000 1.000000 1.000000
+vn -0.011257 0.987330 0.158281
+v 0.055088 169.628891 38.153000 1.000000 1.000000 1.000000
+vn 0.174005 0.862593 0.475033
+v 1.555238 169.231216 38.838600 1.000000 1.000000 1.000000
+vn -0.039639 0.878468 0.476154
+v 0.053654 169.464233 38.621201 1.000000 1.000000 1.000000
+vn 0.406600 0.900124 0.156378
+v 2.383886 169.083313 38.486977 1.000000 1.000000 1.000000
+vn 0.070072 0.632933 0.771029
+v 1.491006 168.984253 39.176376 1.000000 1.000000 1.000000
+vn -0.093134 0.647896 0.756014
+v 0.051416 169.208893 38.959000 1.000000 1.000000 1.000000
+vn 0.321765 0.823700 0.466890
+v 2.322500 168.932617 38.955200 1.000000 1.000000 1.000000
+vn -0.193069 0.845859 0.497239
+v -0.757258 169.411224 38.505196 1.000000 1.000000 1.000000
+vn -0.297972 0.556609 0.775499
+v -1.490632 168.984253 38.726398 1.000000 1.000000 1.000000
+vn -0.092000 0.333439 0.938272
+v 0.787568 168.900528 39.214779 1.000000 1.000000 1.000000
+vn -0.193536 0.305221 0.932407
+v -0.696506 168.915878 38.983398 1.000000 1.000000 1.000000
+vn -0.162649 0.974107 0.157041
+v -0.777248 169.573074 38.036797 1.000000 1.000000 1.000000
+vn -0.319019 0.825065 0.466364
+v -1.554800 169.231216 38.388599 1.000000 1.000000 1.000000
+vn 0.062700 0.346793 0.935844
+v 2.794322 168.096817 39.549400 1.000000 1.000000 1.000000
+vn 0.164100 0.607285 0.777352
+v 2.226582 168.698212 39.292976 1.000000 1.000000 1.000000
+vn 0.345278 0.528315 0.775672
+v 3.536928 167.810776 39.523998 1.000000 1.000000 1.000000
+vn 0.174671 0.268892 0.947200
+v 4.382586 166.430786 39.895397 1.000000 1.000000 1.000000
+vn 0.516615 0.439943 0.734547
+v 4.568472 166.564743 39.754978 1.000000 1.000000 1.000000
+vn 0.629921 0.605415 0.486489
+v 4.272970 167.393570 39.302399 1.000000 1.000000 1.000000
+vn 0.550383 0.696787 0.459963
+v 3.689276 168.007507 39.186180 1.000000 1.000000 1.000000
+vn 0.430480 0.755687 0.493582
+v 3.038314 168.520996 39.071178 1.000000 1.000000 1.000000
+vn 0.724827 0.519601 0.452373
+v 4.765250 166.708450 39.417198 1.000000 1.000000 1.000000
+vn 0.774382 0.412838 0.479477
+v 5.165284 165.949402 39.532600 1.000000 1.000000 1.000000
+vn 0.829903 0.537140 0.150805
+v 4.891178 166.799164 38.948776 1.000000 1.000000 1.000000
+vn 0.747976 0.645940 0.152624
+v 4.385906 167.503799 38.834179 1.000000 1.000000 1.000000
+vn 0.649798 0.744398 0.153735
+v 3.786790 168.133102 38.717999 1.000000 1.000000 1.000000
+vn 0.772565 0.610627 -0.174006
+v 4.376328 167.494034 38.018600 1.000000 1.000000 1.000000
+vn 0.895271 0.419680 0.149528
+v 5.301796 166.020569 39.064178 1.000000 1.000000 1.000000
+vn 0.849058 0.499460 -0.172166
+v 4.880506 166.792191 38.133400 1.000000 1.000000 1.000000
+vn 0.943074 0.297551 0.148576
+v 5.607790 165.186157 39.179581 1.000000 1.000000 1.000000
+vn 0.908976 0.380292 -0.170706
+v 5.290220 166.014969 38.248596 1.000000 1.000000 1.000000
+vn 0.788869 0.417783 -0.450714
+v 4.770052 166.711243 37.740196 1.000000 1.000000 1.000000
+vn 0.723792 0.519631 -0.453992
+v 4.277282 167.397751 37.625599 1.000000 1.000000 1.000000
+vn 0.679860 0.711990 -0.175674
+v 3.778524 168.121933 37.902397 1.000000 1.000000 1.000000
+vn 0.826361 0.298418 -0.477571
+v 5.170498 165.952179 37.855598 1.000000 1.000000 1.000000
+vn 0.639347 0.254160 -0.725699
+v 4.573042 166.568924 37.395779 1.000000 1.000000 1.000000
+vn 0.531656 0.327101 -0.781247
+v 4.100626 167.227524 37.280998 1.000000 1.000000 1.000000
+vn 0.635705 0.599114 -0.486767
+v 3.693010 168.011688 37.509377 1.000000 1.000000 1.000000
+vn 0.570918 0.801721 -0.176907
+v 3.111802 168.647964 37.787376 1.000000 1.000000 1.000000
+vn 0.298388 -0.097791 -0.949422
+v 5.184608 164.192673 37.591797 1.000000 1.000000 1.000000
+vn -0.128968 -0.260751 -0.956753
+v 4.174438 166.278702 37.249779 1.000000 1.000000 1.000000
+vn -0.212388 -0.184612 -0.959588
+v 4.954510 164.150803 37.597000 1.000000 1.000000 1.000000
+vn 0.266623 -0.174627 -0.947849
+v 5.221534 162.590836 37.823196 1.000000 1.000000 1.000000
+vn 0.694475 -0.003163 -0.719510
+v 5.427582 164.237320 37.742779 1.000000 1.000000 1.000000
+vn 0.621767 0.095416 -0.777369
+v 5.243048 165.060562 37.626396 1.000000 1.000000 1.000000
+vn -0.262054 -0.117941 -0.957819
+v 4.989786 162.620132 37.828178 1.000000 1.000000 1.000000
+vn 0.166306 -0.252003 -0.953330
+v 4.551116 160.395966 38.157799 1.000000 1.000000 1.000000
+vn 0.664562 -0.187068 -0.723438
+v 5.466218 162.560135 37.974178 1.000000 1.000000 1.000000
+vn -0.307177 -0.006875 -0.951627
+v 4.349124 160.522949 38.162998 1.000000 1.000000 1.000000
+vn 0.561474 -0.286472 -0.776325
+v 5.105350 161.021088 38.193001 1.000000 1.000000 1.000000
+vn 0.088935 -0.295017 -0.951344
+v 3.637456 159.135971 38.389198 1.000000 1.000000 1.000000
+vn 0.895136 -0.167864 -0.412981
+v 5.701726 162.529434 38.318798 1.000000 1.000000 1.000000
+vn 0.878914 -0.041487 -0.475174
+v 5.739216 163.402924 38.203598 1.000000 1.000000 1.000000
+vn 0.985897 -0.009282 -0.167098
+v 5.872086 163.405701 38.596581 1.000000 1.000000 1.000000
+vn 0.976947 0.130409 -0.169019
+v 5.792492 164.304291 38.480598 1.000000 1.000000 1.000000
+vn 0.892123 0.080526 -0.444559
+v 5.661414 164.280579 38.087399 1.000000 1.000000 1.000000
+vn 0.951340 0.257245 -0.169639
+v 5.595560 165.181961 38.363998 1.000000 1.000000 1.000000
+vn 0.873372 0.195639 -0.446035
+v 5.468922 165.138702 37.971001 1.000000 1.000000 1.000000
+vn -0.294713 0.074478 -0.952679
+v 3.476006 159.317383 38.394180 1.000000 1.000000 1.000000
+vn -0.059423 -0.307107 -0.949818
+v 1.761338 157.878784 38.735378 1.000000 1.000000 1.000000
+vn -0.170684 0.267563 -0.948302
+v 0.280884 157.811813 38.970177 1.000000 1.000000 1.000000
+vn -0.297227 0.195092 -0.934663
+v 2.336172 158.427155 38.624378 1.000000 1.000000 1.000000
+vn -0.229867 -0.233884 -0.944701
+v -2.198026 158.071350 39.337601 1.000000 1.000000 1.000000
+vn -0.094212 0.669544 -0.736774
+v -0.001254 158.040649 39.150177 1.000000 1.000000 1.000000
+vn -0.302606 0.691975 -0.655439
+v 0.951244 158.143890 38.991798 1.000000 1.000000 1.000000
+vn -0.180592 -0.255157 -0.949885
+v -0.750136 157.609497 39.119999 1.000000 1.000000 1.000000
+vn -0.432239 0.502861 -0.748532
+v 2.234346 158.637848 38.760201 1.000000 1.000000 1.000000
+vn -0.288648 0.840463 -0.458590
+v 0.904086 158.396454 39.326576 1.000000 1.000000 1.000000
+vn -0.504990 0.716042 -0.481944
+v 2.123610 158.866684 39.094978 1.000000 1.000000 1.000000
+vn -0.121285 0.872735 -0.472888
+v 0.255276 158.305756 39.440781 1.000000 1.000000 1.000000
+vn -0.688722 0.548316 -0.474354
+v 3.159762 159.675980 38.864979 1.000000 1.000000 1.000000
+vn -0.561613 0.368693 -0.740714
+v 3.324494 159.488998 38.530197 1.000000 1.000000 1.000000
+vn -0.801704 0.372680 -0.467312
+v 3.953454 160.771317 38.633598 1.000000 1.000000 1.000000
+vn -0.647844 0.218778 -0.729681
+v 4.159568 160.641541 38.298779 1.000000 1.000000 1.000000
+vn -0.728932 0.644302 -0.231372
+v 3.063548 159.784805 39.262379 1.000000 1.000000 1.000000
+vn -0.839638 0.500792 -0.210275
+v 3.833076 160.846664 39.030998 1.000000 1.000000 1.000000
+vn -0.885917 0.244186 -0.394366
+v 4.236380 161.399216 38.517601 1.000000 1.000000 1.000000
+vn -0.740599 0.082423 -0.666873
+v 4.666114 162.007584 38.066399 1.000000 1.000000 1.000000
+vn -0.892934 0.014179 -0.449964
+v 4.535848 162.677338 38.298779 1.000000 1.000000 1.000000
+vn -0.688469 -0.129342 -0.713639
+v 4.803682 163.377792 37.848999 1.000000 1.000000 1.000000
+vn -0.877600 -0.193308 -0.438691
+v 4.503776 164.068481 38.067596 1.000000 1.000000 1.000000
+vn -0.688172 -0.341634 -0.640082
+v 4.577458 164.830338 37.616379 1.000000 1.000000 1.000000
+vn -0.972038 0.056066 -0.228033
+v 4.397726 162.694077 38.696381 1.000000 1.000000 1.000000
+vn -0.964257 -0.150969 -0.217755
+v 4.366632 164.044769 38.464996 1.000000 1.000000 1.000000
+vn -0.982753 0.180792 -0.038874
+v 4.250090 162.119202 39.253399 1.000000 1.000000 1.000000
+vn -0.999403 -0.011427 0.032605
+v 4.375402 163.366638 39.035980 1.000000 1.000000 1.000000
+vn -0.892103 0.334607 0.303629
+v 4.223904 161.404800 40.194199 1.000000 1.000000 1.000000
+vn -0.870763 0.490452 0.035047
+v 3.788696 160.874573 39.485779 1.000000 1.000000 1.000000
+vn -0.714747 0.696975 0.057992
+v 3.028078 159.823883 39.717178 1.000000 1.000000 1.000000
+vn -0.773600 0.482886 0.410322
+v 3.941816 160.778290 40.310181 1.000000 1.000000 1.000000
+vn -0.687674 0.600730 0.407711
+v 3.583226 160.204819 40.425377 1.000000 1.000000 1.000000
+vn -0.609855 0.674110 0.416717
+v 3.150466 159.685745 40.541580 1.000000 1.000000 1.000000
+vn -0.554529 0.411719 0.723177
+v 4.145998 160.649918 40.657799 1.000000 1.000000 1.000000
+vn -0.391179 0.566069 0.725635
+v 3.313654 159.501556 40.889198 1.000000 1.000000 1.000000
+vn -0.490491 0.792257 0.362970
+v 2.661390 159.243423 40.656197 1.000000 1.000000 1.000000
+vn 0.077700 0.243587 0.966762
+v 1.687128 158.104828 41.389977 1.000000 1.000000 1.000000
+vn -0.043831 0.269974 0.961869
+v 3.484206 159.309006 41.043800 1.000000 1.000000 1.000000
+vn -0.126801 0.671221 0.730332
+v 1.604524 158.357376 41.235378 1.000000 1.000000 1.000000
+vn -0.438132 0.832413 0.339307
+v 2.117366 158.879242 40.771599 1.000000 1.000000 1.000000
+vn -0.231539 0.861399 0.452086
+v 1.525484 158.597382 40.887798 1.000000 1.000000 1.000000
+vn -0.110316 0.897570 0.426848
+v 0.901424 158.410400 41.003197 1.000000 1.000000 1.000000
+vn -0.070382 0.935129 0.347246
+v 0.267732 158.065765 41.464996 1.000000 1.000000 1.000000
+vn -0.512389 0.857345 0.049171
+v 2.035108 159.048080 39.947197 1.000000 1.000000 1.000000
+vn -0.369970 0.928972 -0.011499
+v 1.466210 158.778778 40.063400 1.000000 1.000000 1.000000
+vn -0.533392 0.815711 -0.223848
+v 2.058940 158.999237 39.492378 1.000000 1.000000 1.000000
+vn 0.044142 0.880359 0.472250
+v 0.254520 158.321106 41.117378 1.000000 1.000000 1.000000
+vn 0.227638 0.633306 0.739665
+v -0.683430 158.111816 41.619980 1.000000 1.000000 1.000000
+vn 0.182644 0.206661 0.961214
+v -0.718564 157.846695 41.774597 1.000000 1.000000 1.000000
+vn 0.230213 0.784077 0.576390
+v -0.649808 158.364365 41.272377 1.000000 1.000000 1.000000
+vn -0.008631 0.972162 0.234151
+v 0.247182 158.463440 40.723598 1.000000 1.000000 1.000000
+vn 0.325741 0.858335 0.396426
+v -1.290352 158.515060 41.382198 1.000000 1.000000 1.000000
+vn 0.404533 0.550974 0.729919
+v -2.002458 158.533188 41.837379 1.000000 1.000000 1.000000
+vn 0.473784 0.758622 0.447237
+v -1.903876 158.764816 41.489777 1.000000 1.000000 1.000000
+vn 0.013130 0.999485 -0.029298
+v -0.001194 158.505295 40.337196 1.000000 1.000000 1.000000
+vn 0.284191 0.957204 0.054741
+v -1.240268 158.699249 40.557800 1.000000 1.000000 1.000000
+vn 0.579964 0.721847 0.377596
+v -2.474950 159.105286 41.594597 1.000000 1.000000 1.000000
+vn 0.557260 0.828634 0.053169
+v -2.378852 159.267136 40.770397 1.000000 1.000000 1.000000
+vn 0.518514 0.818347 -0.247896
+v -2.406714 159.219711 40.315578 1.000000 1.000000 1.000000
+vn 0.322530 0.839073 -0.438099
+v -1.909502 158.750870 39.813198 1.000000 1.000000 1.000000
+vn 0.707689 0.577408 0.407158
+v -3.106834 159.641098 41.720779 1.000000 1.000000 1.000000
+vn 0.557135 0.397855 0.728911
+v -3.267716 159.454117 42.068398 1.000000 1.000000 1.000000
+vn 0.734798 0.676278 0.052164
+v -2.986196 159.780624 40.896400 1.000000 1.000000 1.000000
+vn 0.685354 0.689963 -0.232897
+v -3.021164 159.740158 40.441597 1.000000 1.000000 1.000000
+vn 0.590765 0.649107 -0.479224
+v -3.116012 159.629929 40.044197 1.000000 1.000000 1.000000
+vn 0.446584 0.753227 -0.482920
+v -2.482264 159.094116 39.917976 1.000000 1.000000 1.000000
+vn 0.723656 0.504460 -0.471000
+v -3.937966 160.739212 40.243980 1.000000 1.000000 1.000000
+vn 0.834650 0.496729 -0.237949
+v -3.818102 160.815964 40.641579 1.000000 1.000000 1.000000
+vn 0.879327 0.472765 0.057250
+v -3.773916 160.843872 41.096378 1.000000 1.000000 1.000000
+vn 0.816774 0.413553 0.402310
+v -3.926380 160.746201 41.920597 1.000000 1.000000 1.000000
+vn 0.879799 0.259767 0.398089
+v -4.215046 161.379669 42.016598 1.000000 1.000000 1.000000
+vn 0.900530 0.161776 0.403577
+v -4.416588 162.048050 42.109779 1.000000 1.000000 1.000000
+vn 0.965641 0.255580 0.047089
+v -4.245082 162.094086 41.285400 1.000000 1.000000 1.000000
+vn 0.650712 0.242447 0.719579
+v -4.129698 160.617828 42.268379 1.000000 1.000000 1.000000
+vn 0.848068 0.186284 0.496064
+v -4.645308 161.985245 42.457397 1.000000 1.000000 1.000000
+vn 0.918081 0.022504 0.395754
+v -4.530710 162.749893 42.202579 1.000000 1.000000 1.000000
+vn -0.237104 -0.119448 0.964113
+v -5.270908 163.494995 42.791580 1.000000 1.000000 1.000000
+vn 0.264584 0.081183 0.960939
+v -3.435836 159.258774 42.222977 1.000000 1.000000 1.000000
+vn 0.227071 0.134542 0.964540
+v -2.105468 158.290405 41.991997 1.000000 1.000000 1.000000
+vn 0.994856 0.101186 0.004705
+v -4.354776 162.769424 41.378197 1.000000 1.000000 1.000000
+vn 0.896458 -0.096730 0.432442
+v -4.550550 163.461517 42.293198 1.000000 1.000000 1.000000
+vn 0.966675 0.074621 -0.244890
+v -4.405760 162.763855 40.923397 1.000000 1.000000 1.000000
+vn 0.894843 0.164471 -0.414976
+v -4.544086 162.748505 40.525997 1.000000 1.000000 1.000000
+vn 0.956253 0.002318 -0.292531
+v -4.425046 163.455933 41.014000 1.000000 1.000000 1.000000
+vn 0.999246 -0.038821 0.000874
+v -4.373830 163.453140 41.468800 1.000000 1.000000 1.000000
+vn 0.982725 -0.152728 -0.104523
+v -4.301242 164.131271 41.556999 1.000000 1.000000 1.000000
+vn 0.536348 0.699099 -0.472855
+v -4.801854 163.474075 40.281799 1.000000 1.000000 1.000000
+vn 0.873935 -0.238612 0.423440
+v -4.475014 164.167557 42.381180 1.000000 1.000000 1.000000
+vn 0.722681 0.229613 -0.651928
+v -4.660488 161.981064 40.098396 1.000000 1.000000 1.000000
+vn 0.338774 0.137815 -0.930720
+v -5.020622 163.483841 40.145996 1.000000 1.000000 1.000000
+vn 0.778834 0.323467 -0.537389
+v -4.227482 161.375488 40.339996 1.000000 1.000000 1.000000
+vn 0.450247 0.363787 -0.815437
+v -4.143204 160.608047 39.909199 1.000000 1.000000 1.000000
+vn 0.184162 0.183158 -0.965680
+v -4.650458 161.187119 39.869400 1.000000 1.000000 1.000000
+vn 0.483442 0.636516 -0.600941
+v -3.278402 159.441559 39.709396 1.000000 1.000000 1.000000
+vn 0.251782 0.616951 -0.745639
+v -2.611630 158.876450 39.583397 1.000000 1.000000 1.000000
+vn -0.238543 -0.002968 -0.971127
+v -4.533104 160.359695 39.768398 1.000000 1.000000 1.000000
+vn -0.339590 0.031965 -0.940030
+v -5.099082 161.862457 39.957581 1.000000 1.000000 1.000000
+vn -0.654101 -0.158492 -0.739617
+v -5.094394 160.990372 40.015396 1.000000 1.000000 1.000000
+vn -0.581629 -0.342153 -0.737997
+v -4.295384 159.518295 39.820599 1.000000 1.000000 1.000000
+vn -0.259926 -0.097367 -0.960707
+v -3.586896 159.082962 39.568581 1.000000 1.000000 1.000000
+vn -0.672985 0.009419 -0.739596
+v -5.475926 162.645248 40.201401 1.000000 1.000000 1.000000
+vn -0.272080 0.121413 -0.954584
+v -5.253746 163.494995 40.140999 1.000000 1.000000 1.000000
+vn -0.866510 -0.149718 -0.476178
+v -5.567918 161.734100 40.452980 1.000000 1.000000 1.000000
+vn -0.894594 -0.039284 -0.445149
+v -5.711780 162.620132 40.545799 1.000000 1.000000 1.000000
+vn -0.682346 0.113035 -0.722237
+v -5.499900 163.506165 40.292000 1.000000 1.000000 1.000000
+vn -0.250318 0.180274 -0.951232
+v -4.973088 165.095459 40.313999 1.000000 1.000000 1.000000
+vn -0.104002 0.177904 -0.978537
+v -4.308620 166.514511 40.475197 1.000000 1.000000 1.000000
+vn -0.625510 0.273704 -0.730632
+v -5.206096 165.181961 40.464996 1.000000 1.000000 1.000000
+vn -0.891974 0.078907 -0.445146
+v -5.736796 163.517334 40.636398 1.000000 1.000000 1.000000
+vn -0.856169 0.196462 -0.477888
+v -5.641562 164.406158 40.724400 1.000000 1.000000 1.000000
+vn -0.982659 -0.076456 -0.168925
+v -5.844006 162.604782 40.938999 1.000000 1.000000 1.000000
+vn -0.984068 0.055285 -0.168981
+v -5.869586 163.524307 41.029598 1.000000 1.000000 1.000000
+vn -0.967705 0.186526 -0.169574
+v -5.772150 164.434067 41.117599 1.000000 1.000000 1.000000
+vn -0.838683 0.309092 -0.448412
+v -5.430338 165.265686 40.809601 1.000000 1.000000 1.000000
+vn -0.934714 0.311926 -0.170331
+v -5.556034 165.311722 41.202797 1.000000 1.000000 1.000000
+vn -0.775165 0.410262 -0.480421
+v -5.129762 166.040100 40.888199 1.000000 1.000000 1.000000
+vn -0.886130 0.430492 -0.171610
+v -5.248506 166.104279 41.281399 1.000000 1.000000 1.000000
+vn -0.725219 0.516839 -0.454900
+v -4.704764 166.814514 40.970798 1.000000 1.000000 1.000000
+vn -0.526468 0.425077 -0.736303
+v -4.510484 166.666595 40.626198 1.000000 1.000000 1.000000
+vn -0.901810 0.405682 0.148869
+v -5.259990 166.111252 42.096798 1.000000 1.000000 1.000000
+vn -0.819209 0.546683 -0.173303
+v -4.813672 166.896835 41.363800 1.000000 1.000000 1.000000
+vn -0.947032 0.284955 0.148092
+v -5.568188 165.317307 42.018196 1.000000 1.000000 1.000000
+vn -0.889112 0.112805 0.443571
+v -5.635870 164.406158 42.401398 1.000000 1.000000 1.000000
+vn -0.851845 0.221522 0.474645
+v -5.424840 165.262894 42.486580 1.000000 1.000000 1.000000
+vn -0.976465 0.157399 0.147451
+v -5.784794 164.435455 41.933197 1.000000 1.000000 1.000000
+vn -0.988797 0.024804 0.147194
+v -5.882424 163.524307 41.844997 1.000000 1.000000 1.000000
+vn -0.827271 0.339990 0.447246
+v -5.124586 166.037308 42.565201 1.000000 1.000000 1.000000
+vn -0.838053 0.524450 0.150399
+v -4.824204 166.905197 42.179398 1.000000 1.000000 1.000000
+vn -0.597078 0.204406 0.775704
+v -4.913028 165.921494 42.902977 1.000000 1.000000 1.000000
+vn -0.772227 0.448204 0.450311
+v -4.700014 166.810318 42.647579 1.000000 1.000000 1.000000
+vn -0.754728 0.638218 0.151865
+v -4.288560 167.621002 42.259598 1.000000 1.000000 1.000000
+vn -0.545023 0.255171 0.798648
+v -4.505990 166.663803 42.985397 1.000000 1.000000 1.000000
+vn -0.686625 0.542425 0.484067
+v -4.178158 167.507980 42.727997 1.000000 1.000000 1.000000
+vn -0.653668 0.741136 0.153090
+v -3.663630 168.243317 42.337379 1.000000 1.000000 1.000000
+vn -0.733021 0.657278 -0.175117
+v -4.279188 167.611237 41.444199 1.000000 1.000000 1.000000
+vn -0.629088 0.603045 -0.490496
+v -4.182382 167.512177 41.050999 1.000000 1.000000 1.000000
+vn -0.629301 0.756951 -0.176083
+v -3.655634 168.232162 41.521999 1.000000 1.000000 1.000000
+vn -0.545895 0.698572 -0.462597
+v -3.572926 168.120529 41.128799 1.000000 1.000000 1.000000
+vn -0.380732 0.549481 -0.743716
+v -3.425394 167.918213 40.784397 1.000000 1.000000 1.000000
+vn -0.426602 0.756376 -0.495889
+v -2.898944 168.617279 41.202999 1.000000 1.000000 1.000000
+vn -0.511410 0.840549 -0.178708
+v -2.966048 168.741455 41.596199 1.000000 1.000000 1.000000
+vn -0.537296 0.829024 0.155024
+v -2.972524 168.754013 42.411579 1.000000 1.000000 1.000000
+vn -0.193279 0.629400 -0.752661
+v -2.064348 168.776352 40.931999 1.000000 1.000000 1.000000
+vn -0.317901 0.824138 -0.468760
+v -2.153234 169.013550 41.276600 1.000000 1.000000 1.000000
+vn -0.380742 0.906928 -0.180327
+v -2.203074 169.147507 41.669598 1.000000 1.000000 1.000000
+vn -0.587186 0.628245 0.510413
+v -3.569322 168.114960 42.805798 1.000000 1.000000 1.000000
+vn -0.513557 0.702759 0.492330
+v -2.896022 168.611694 42.879997 1.000000 1.000000 1.000000
+vn -0.403782 0.898500 0.172216
+v -2.207888 169.160065 42.485180 1.000000 1.000000 1.000000
+vn -0.261777 0.520676 0.812631
+v -2.163818 168.879593 43.186779 1.000000 1.000000 1.000000
+vn -0.335683 0.270200 0.902391
+v -3.702628 167.477295 43.189796 1.000000 1.000000 1.000000
+vn -0.269063 0.945717 0.182275
+v -1.393634 169.446106 42.557198 1.000000 1.000000 1.000000
+vn -0.146779 0.555955 0.818150
+v -1.099018 169.260529 43.189796 1.000000 1.000000 1.000000
+vn -0.124859 0.977512 0.169943
+v -0.552534 169.600983 42.627197 1.000000 1.000000 1.000000
+vn -0.017173 0.609916 0.792280
+v 0.000000 169.464233 43.189796 1.000000 1.000000 1.000000
+vn 0.052525 0.986283 0.156480
+v 0.297612 169.621918 42.694798 1.000000 1.000000 1.000000
+vn -0.087181 0.979467 -0.181780
+v -0.551326 169.587036 41.811577 1.000000 1.000000 1.000000
+vn -0.237801 0.954317 -0.180912
+v -1.390582 169.432159 41.741600 1.000000 1.000000 1.000000
+vn -0.052428 0.879710 -0.472612
+v -0.538860 169.443314 41.418400 1.000000 1.000000 1.000000
+vn -0.181897 0.845832 -0.501480
+v -1.359142 169.292618 41.348598 1.000000 1.000000 1.000000
+vn 0.066484 0.981179 -0.181293
+v 0.296952 169.607971 41.879196 1.000000 1.000000 1.000000
+vn 0.083892 0.877453 -0.472270
+v 0.290224 169.464233 41.486000 1.000000 1.000000 1.000000
+vn 0.192779 0.962717 0.189767
+v 1.120400 169.513077 42.758198 1.000000 1.000000 1.000000
+vn 0.243845 0.647408 0.722082
+v 1.942976 169.189362 43.187981 1.000000 1.000000 1.000000
+vn 0.355205 0.920052 -0.165328
+v 1.939680 169.257736 42.005997 1.000000 1.000000 1.000000
+vn 0.216730 0.959402 -0.180488
+v 1.117954 169.499130 41.942780 1.000000 1.000000 1.000000
+vn 0.216389 0.838517 -0.500066
+v 1.092642 169.358200 41.549599 1.000000 1.000000 1.000000
+vn 0.110088 0.655622 -0.747022
+v 0.278212 169.207504 41.141598 1.000000 1.000000 1.000000
+vn 0.345026 0.813590 -0.468005
+v 1.895764 169.122391 41.612801 1.000000 1.000000 1.000000
+vn 0.293470 0.592089 -0.750537
+v 1.817446 168.879593 41.268196 1.000000 1.000000 1.000000
+vn 0.457698 0.737656 -0.496363
+v 2.660656 168.762390 41.673981 1.000000 1.000000 1.000000
+vn 0.404030 0.462239 -0.789364
+v 3.230444 168.078674 41.388580 1.000000 1.000000 1.000000
+vn 0.252013 0.136887 -0.957993
+v 3.671406 167.327988 41.294579 1.000000 1.000000 1.000000
+vn 0.183502 0.229541 -0.955844
+v 1.736066 168.627045 41.117199 1.000000 1.000000 1.000000
+vn 0.571370 0.678219 -0.462120
+v 3.369634 168.286591 41.733200 1.000000 1.000000 1.000000
+vn 0.492533 0.838798 -0.232013
+v 2.722262 168.890762 42.067177 1.000000 1.000000 1.000000
+vn 0.533366 0.421967 -0.733120
+v 3.843478 167.519150 41.445599 1.000000 1.000000 1.000000
+vn 0.664295 0.590754 -0.457954
+v 4.009060 167.703339 41.790176 1.000000 1.000000 1.000000
+vn 0.612542 0.756467 -0.229238
+v 3.447656 168.403793 42.126198 1.000000 1.000000 1.000000
+vn 0.605559 0.795766 0.007454
+v 3.475542 168.445648 42.531776 1.000000 1.000000 1.000000
+vn 0.481206 0.875369 0.046581
+v 2.744278 168.936798 42.472580 1.000000 1.000000 1.000000
+vn 0.716003 0.660470 -0.226094
+v 4.101888 167.806595 42.183197 1.000000 1.000000 1.000000
+vn 0.734459 0.678653 -0.000517
+v 4.135066 167.842865 42.588779 1.000000 1.000000 1.000000
+vn 0.730141 0.481996 -0.484329
+v 4.547202 167.047531 41.843201 1.000000 1.000000 1.000000
+vn 0.802179 0.553315 -0.224394
+v 4.652480 167.135422 42.236397 1.000000 1.000000 1.000000
+vn 0.814988 0.577758 0.044625
+v 4.690112 167.167526 42.641800 1.000000 1.000000 1.000000
+vn 0.464070 0.518641 0.718089
+v 3.805704 168.095428 43.189796 1.000000 1.000000 1.000000
+vn 0.626455 0.333371 0.704569
+v 5.085614 166.422409 43.189796 1.000000 1.000000 1.000000
+vn 0.879076 0.442884 -0.176294
+v 5.123556 166.362411 42.289177 1.000000 1.000000 1.000000
+vn 0.804390 0.387506 -0.450328
+v 5.007606 166.292648 41.895981 1.000000 1.000000 1.000000
+vn 0.923560 0.313909 -0.220224
+v 5.486716 165.522430 42.339996 1.000000 1.000000 1.000000
+vn 0.835649 0.267134 -0.479927
+v 5.362552 165.470795 41.946800 1.000000 1.000000 1.000000
+vn 0.624277 0.273803 -0.731649
+v 4.800786 166.167068 41.551579 1.000000 1.000000 1.000000
+vn 0.880281 0.160889 -0.446341
+v 5.606092 164.594528 41.995598 1.000000 1.000000 1.000000
+vn 0.677707 0.101041 -0.728357
+v 5.374538 164.538712 41.650997 1.000000 1.000000 1.000000
+vn 0.963736 0.192649 -0.184660
+v 5.735882 164.625229 42.388580 1.000000 1.000000 1.000000
+vn 0.879046 0.043764 -0.474723
+v 5.721758 163.783829 42.037376 1.000000 1.000000 1.000000
+vn 0.681991 -0.075004 -0.727505
+v 5.496062 162.893616 41.737396 1.000000 1.000000 1.000000
+vn 0.259608 -0.042439 -0.964781
+v 5.250038 162.908966 41.586197 1.000000 1.000000 1.000000
+vn 0.195363 -0.011804 -0.980660
+v 5.133934 164.481506 41.500000 1.000000 1.000000 1.000000
+vn 0.892406 -0.070937 -0.445623
+v 5.732844 162.878265 42.081779 1.000000 1.000000 1.000000
+vn 0.978521 0.064168 -0.195906
+v 5.854228 163.796402 42.430580 1.000000 1.000000 1.000000
+vn 0.858099 -0.187028 -0.478211
+v 5.620910 161.979675 42.124001 1.000000 1.000000 1.000000
+vn 0.978135 -0.065583 -0.197362
+v 5.865582 162.869888 42.474979 1.000000 1.000000 1.000000
+vn 0.630959 -0.279869 -0.723577
+v 5.171670 161.206650 41.819000 1.000000 1.000000 1.000000
+vn 0.252106 -0.140205 -0.957489
+v 4.940142 161.298752 41.667976 1.000000 1.000000 1.000000
+vn 0.481247 -0.465272 -0.742915
+v 3.991436 159.141571 41.919979 1.000000 1.000000 1.000000
+vn 0.192065 -0.218528 -0.956743
+v 3.812758 159.324356 41.768997 1.000000 1.000000 1.000000
+vn 0.336945 -0.509647 -0.791661
+v 2.887098 158.166214 41.974979 1.000000 1.000000 1.000000
+vn -0.549887 -0.304588 -0.777721
+v 1.798108 157.938782 41.830997 1.000000 1.000000 1.000000
+vn -0.180951 0.114469 -0.976808
+v 3.643532 159.498764 41.773979 1.000000 1.000000 1.000000
+vn -0.828860 0.239700 -0.505505
+v 1.616110 158.464828 42.119797 1.000000 1.000000 1.000000
+vn -0.436442 0.538488 -0.720797
+v 2.520566 158.812271 41.964798 1.000000 1.000000 1.000000
+vn -0.266795 0.039712 -0.962935
+v 4.720896 161.385269 41.673180 1.000000 1.000000 1.000000
+vn -0.662637 0.372454 -0.649762
+v 3.933782 160.257828 41.875580 1.000000 1.000000 1.000000
+vn -0.182278 0.022462 -0.982990
+v 5.017030 162.924316 41.591400 1.000000 1.000000 1.000000
+vn -0.612222 -0.107378 -0.783361
+v 4.789068 163.697327 41.682800 1.000000 1.000000 1.000000
+vn -0.553551 -0.277417 -0.785252
+v 4.488416 165.109406 41.592178 1.000000 1.000000 1.000000
+vn 0.292268 0.082679 -0.952756
+v 4.585866 166.035904 41.400597 1.000000 1.000000 1.000000
+vn -0.084433 -0.193809 -0.977399
+v 3.508462 167.146591 41.299599 1.000000 1.000000 1.000000
+vn -0.003665 -0.236511 -0.971622
+v 1.658996 168.388443 41.122398 1.000000 1.000000 1.000000
+vn 0.081477 -0.229556 -0.969879
+v 0.253920 168.687042 40.995598 1.000000 1.000000 1.000000
+vn 0.103096 0.258889 -0.960390
+v 0.265736 168.939590 40.990601 1.000000 1.000000 1.000000
+vn 0.187239 -0.193748 -0.963018
+v -1.884474 168.293564 40.785999 1.000000 1.000000 1.000000
+vn -0.018855 0.604034 -0.796736
+v -0.516632 169.187958 41.073997 1.000000 1.000000 1.000000
+vn -0.017261 0.288792 -0.957236
+v -1.971958 168.527969 40.780998 1.000000 1.000000 1.000000
+vn -0.109412 0.236637 -0.965418
+v -3.272094 167.710312 40.633400 1.000000 1.000000 1.000000
+vn 0.137348 -0.114883 -0.983838
+v -3.126918 167.512177 40.638397 1.000000 1.000000 1.000000
+vn 0.528264 -0.326600 -0.783753
+v -3.500790 166.817291 40.696400 1.000000 1.000000 1.000000
+vn 0.643359 -0.159718 -0.748718
+v -4.293762 165.585205 40.533600 1.000000 1.000000 1.000000
+vn -0.672418 0.631844 -0.385522
+v 3.312044 159.840622 42.244579 1.000000 1.000000 1.000000
+vn -0.795364 0.449405 -0.406734
+v 3.738858 160.405731 42.210381 1.000000 1.000000 1.000000
+vn -0.792169 0.264907 -0.549811
+v 4.291418 161.554092 42.143780 1.000000 1.000000 1.000000
+vn -0.652375 0.170543 -0.738459
+v 4.515144 161.466187 41.808998 1.000000 1.000000 1.000000
+vn -0.510667 0.712342 -0.481444
+v 2.395654 159.031326 42.299580 1.000000 1.000000 1.000000
+vn -0.901940 0.379820 -0.205528
+v 1.534780 158.706223 42.600380 1.000000 1.000000 1.000000
+vn -0.549129 0.789964 -0.272791
+v 2.322706 159.159698 42.696980 1.000000 1.000000 1.000000
+vn -0.684597 0.686927 -0.243841
+v 3.211196 159.943878 42.642197 1.000000 1.000000 1.000000
+vn -0.770014 0.317716 0.553295
+v 1.510808 158.777374 43.189598 1.000000 1.000000 1.000000
+vn -0.491841 0.507917 0.707186
+v 2.987986 159.770859 43.189377 1.000000 1.000000 1.000000
+vn -0.638972 0.373594 0.672416
+v 3.666012 160.647125 43.189796 1.000000 1.000000 1.000000
+vn -0.676591 0.190570 0.711272
+v 4.198616 161.877808 43.188580 1.000000 1.000000 1.000000
+vn -0.965643 0.190549 -0.176706
+v 4.335400 162.269897 42.501801 1.000000 1.000000 1.000000
+vn -0.690259 -0.005299 0.723543
+v 4.399812 163.260590 43.189796 1.000000 1.000000 1.000000
+vn -0.924260 0.039596 -0.379704
+v 4.560606 162.953613 42.061996 1.000000 1.000000 1.000000
+vn -0.980682 0.013486 -0.195141
+v 4.421738 162.963379 42.459396 1.000000 1.000000 1.000000
+vn -0.877629 -0.197154 -0.436918
+v 4.459756 164.319641 41.975777 1.000000 1.000000 1.000000
+vn -0.941286 -0.336795 -0.023464
+v 4.088228 164.943359 42.779198 1.000000 1.000000 1.000000
+vn -0.593182 -0.462299 -0.659101
+v 3.805962 166.429398 41.488579 1.000000 1.000000 1.000000
+vn 0.941403 0.328387 0.076955
+v 5.531096 165.540558 42.745377 1.000000 1.000000 1.000000
+vn 0.738868 0.095558 0.667040
+v 5.885874 164.023834 43.188198 1.000000 1.000000 1.000000
+vn 0.035930 0.605411 -0.795102
+v -1.361588 158.254135 39.370796 1.000000 1.000000 1.000000
+vn 0.085596 0.882369 -0.462707
+v -0.651722 158.350403 39.595798 1.000000 1.000000 1.000000
+vn -0.060004 0.963100 -0.262371
+v 0.247488 158.456451 39.838181 1.000000 1.000000 1.000000
+vn -0.253492 0.960682 -0.113275
+v 0.866386 158.598785 40.178799 1.000000 1.000000 1.000000
+vn -0.463864 -0.476587 -0.746790
+v -2.991230 158.241562 39.593376 1.000000 1.000000 1.000000
+vn -0.873328 0.216676 0.436291
+v 4.522482 162.678726 39.975399 1.000000 1.000000 1.000000
+vn -0.660085 0.216256 0.719389
+v 4.756740 162.649429 40.323196 1.000000 1.000000 1.000000
+vn -0.132511 0.236681 0.962509
+v 4.359384 160.515976 40.812401 1.000000 1.000000 1.000000
+vn -0.915469 0.052797 0.398911
+v 4.552224 163.370819 39.860378 1.000000 1.000000 1.000000
+vn -0.987065 -0.160230 0.005407
+v 4.316086 164.035004 38.919777 1.000000 1.000000 1.000000
+vn -0.220178 0.179537 0.958795
+v 5.001554 162.618729 40.477798 1.000000 1.000000 1.000000
+vn -0.064627 -0.585162 -0.808337
+v 0.307750 157.292740 39.115978 1.000000 1.000000 1.000000
+vn 0.109748 -0.654777 -0.747812
+v 1.843904 157.627625 38.886597 1.000000 1.000000 1.000000
+vn 0.535836 0.829927 0.155244
+v 3.118626 168.660538 38.602798 1.000000 1.000000 1.000000
+vn 0.840601 0.307964 0.445588
+v 5.463400 165.135910 39.647797 1.000000 1.000000 1.000000
+vn 0.974145 0.171077 0.147558
+v 5.805174 164.305695 39.295979 1.000000 1.000000 1.000000
+vn 0.575931 0.287676 0.765210
+v 5.237808 165.059174 39.985580 1.000000 1.000000 1.000000
+vn 0.857844 0.196022 0.475058
+v 5.655698 164.279190 39.764397 1.000000 1.000000 1.000000
+vn 0.988237 0.041401 0.147222
+v 5.884934 163.407104 39.412201 1.000000 1.000000 1.000000
+vn -0.983254 -0.068280 -0.168968
+v -5.846606 162.625717 35.962196 1.000000 1.000000 1.000000
+vn -0.895516 -0.023938 -0.444386
+v -5.714318 162.639664 35.569000 1.000000 1.000000 1.000000
+vn -0.884371 -0.139943 -0.445314
+v -5.576350 161.767578 35.452599 1.000000 1.000000 1.000000
+vn 0.731057 -0.133248 -0.669179
+v -4.578296 164.831726 35.547997 1.000000 1.000000 1.000000
+vn 0.695858 0.085485 -0.713074
+v -4.801776 163.475464 35.330597 1.000000 1.000000 1.000000
+vn 0.630355 -0.400865 -0.664800
+v -3.571254 166.733566 35.895599 1.000000 1.000000 1.000000
+vn 0.781766 -0.284030 -0.555129
+v -4.111248 165.406616 35.999199 1.000000 1.000000 1.000000
+vn 0.890083 -0.070692 -0.450283
+v -4.490424 164.154999 35.780399 1.000000 1.000000 1.000000
+vn 0.817060 -0.425828 -0.388694
+v -3.789404 166.013580 36.115196 1.000000 1.000000 1.000000
+vn 0.964243 -0.129871 -0.231019
+v -4.353732 164.127090 36.177998 1.000000 1.000000 1.000000
+vn 0.971935 0.089581 -0.217527
+v -4.407716 162.779190 35.946598 1.000000 1.000000 1.000000
+vn 0.998131 -0.051675 0.032620
+v -4.373754 163.455933 36.517601 1.000000 1.000000 1.000000
+vn 0.888307 0.137364 -0.438225
+v -4.546108 162.763855 35.549198 1.000000 1.000000 1.000000
+vn 0.995198 0.097723 0.005550
+v -4.356706 162.783386 36.401379 1.000000 1.000000 1.000000
+vn 0.971062 0.238665 0.008817
+v -4.251520 162.120590 36.284981 1.000000 1.000000 1.000000
+vn 0.854937 0.296266 -0.425804
+v -4.436350 162.070374 35.432598 1.000000 1.000000 1.000000
+vn 0.857211 -0.271732 0.437437
+v -4.477214 164.152206 37.457001 1.000000 1.000000 1.000000
+vn 0.910112 -0.110518 0.399352
+v -4.550472 163.464310 37.341999 1.000000 1.000000 1.000000
+vn 0.855403 0.465354 -0.227444
+v -3.839900 160.856430 35.599396 1.000000 1.000000 1.000000
+vn 0.888827 0.455745 0.047794
+v -3.795468 160.884338 36.054176 1.000000 1.000000 1.000000
+vn 0.755074 0.457013 -0.470109
+v -3.960458 160.781082 35.201996 1.000000 1.000000 1.000000
+vn 0.710207 0.296668 -0.638431
+v -4.667556 162.008972 35.098000 1.000000 1.000000 1.000000
+vn 0.535246 0.412560 -0.737093
+v -4.166868 160.652710 34.867199 1.000000 1.000000 1.000000
+vn 0.679124 0.594985 -0.429864
+v -3.603750 160.207596 35.087399 1.000000 1.000000 1.000000
+vn 0.782044 0.556625 -0.280314
+v -3.494068 160.299698 35.484798 1.000000 1.000000 1.000000
+vn 0.706094 0.706312 0.050536
+v -3.038662 159.835052 35.823399 1.000000 1.000000 1.000000
+vn 0.461780 0.577750 -0.673026
+v -3.335992 159.500168 34.636398 1.000000 1.000000 1.000000
+vn 0.500396 0.865750 -0.009026
+v -2.042486 159.052261 35.592400 1.000000 1.000000 1.000000
+vn 0.502400 0.765780 -0.401466
+v -2.679326 159.239243 34.855999 1.000000 1.000000 1.000000
+vn 0.324407 0.945899 0.005968
+v -1.472660 158.781570 35.475800 1.000000 1.000000 1.000000
+vn 0.346952 0.741287 -0.574558
+v -2.131258 158.870865 34.739998 1.000000 1.000000 1.000000
+vn 0.187408 0.951091 -0.245570
+v -0.959506 158.563889 34.918800 1.000000 1.000000 1.000000
+vn 0.112024 0.869452 -0.481149
+v -0.989624 158.417374 34.521198 1.000000 1.000000 1.000000
+vn 0.098284 0.994613 0.032932
+v -0.340608 158.519241 35.258400 1.000000 1.000000 1.000000
+vn -0.067564 0.969783 -0.234428
+v 0.282692 158.459244 34.687401 1.000000 1.000000 1.000000
+vn -0.126199 0.874843 -0.467679
+v 0.291592 158.308548 34.290001 1.000000 1.000000 1.000000
+vn -0.307112 0.839889 -0.447515
+v 0.934202 158.404831 34.173401 1.000000 1.000000 1.000000
+vn -0.076277 0.997069 0.005878
+v 0.279410 158.515060 35.142197 1.000000 1.000000 1.000000
+vn -0.242314 0.970142 0.010392
+v 0.895256 158.605759 35.025799 1.000000 1.000000 1.000000
+vn -0.481308 0.731421 -0.483080
+v 2.139704 158.875061 33.942799 1.000000 1.000000 1.000000
+vn -0.493761 0.836791 -0.236602
+v 2.074556 159.009003 34.340199 1.000000 1.000000 1.000000
+vn -0.431887 0.512561 -0.742129
+v 2.251276 158.647614 33.607998 1.000000 1.000000 1.000000
+vn -0.623212 0.650533 -0.434066
+v 2.681346 159.242035 33.828201 1.000000 1.000000 1.000000
+vn -0.587420 0.756672 -0.287028
+v 2.599708 159.364807 34.225601 1.000000 1.000000 1.000000
+vn -0.484399 0.873445 0.049524
+v 2.050520 159.057831 34.794998 1.000000 1.000000 1.000000
+vn -0.737775 0.673136 0.050764
+v 3.044314 159.842026 34.564198 1.000000 1.000000 1.000000
+vn -0.600854 0.440693 -0.666907
+v 3.342314 159.508545 33.377197 1.000000 1.000000 1.000000
+vn -0.786801 0.478116 -0.390320
+v 3.605308 160.210388 33.596798 1.000000 1.000000 1.000000
+vn -0.882887 0.469514 -0.008177
+v 3.799344 160.894104 34.333199 1.000000 1.000000 1.000000
+vn -0.720280 0.179199 -0.670138
+v 4.466748 161.330841 33.029598 1.000000 1.000000 1.000000
+vn -0.760959 0.333240 -0.556680
+v 3.964578 160.792236 33.480797 1.000000 1.000000 1.000000
+vn -0.953994 0.190696 -0.231367
+v 4.287080 162.050842 33.659599 1.000000 1.000000 1.000000
+vn -0.950327 0.311182 0.006690
+v 4.068504 161.502472 34.216599 1.000000 1.000000 1.000000
+vn -0.677280 0.587552 0.442803
+v 3.594686 160.220154 35.273399 1.000000 1.000000 1.000000
+vn -0.629186 0.701751 0.334172
+v 3.167344 159.703888 35.388599 1.000000 1.000000 1.000000
+vn -0.484976 0.493566 0.721935
+v 3.780894 160.062485 35.620998 1.000000 1.000000 1.000000
+vn -0.840267 0.447218 0.306508
+v 3.952902 160.799210 35.157398 1.000000 1.000000 1.000000
+vn -0.226442 0.644468 0.730332
+v 2.243938 158.662964 35.966999 1.000000 1.000000 1.000000
+vn -0.530247 0.765014 0.365501
+v 2.673454 159.254593 35.504601 1.000000 1.000000 1.000000
+vn -0.239735 0.898205 0.368450
+v 1.547706 158.607147 35.734798 1.000000 1.000000 1.000000
+vn 0.064707 0.671977 0.737740
+v 0.305814 158.068542 36.314178 1.000000 1.000000 1.000000
+vn -0.392729 0.816095 0.423973
+v 2.133408 158.889008 35.619400 1.000000 1.000000 1.000000
+vn -0.175232 0.922121 0.344944
+v 0.931452 158.418777 35.849998 1.000000 1.000000 1.000000
+vn 0.033156 0.890358 0.454053
+v 0.290726 158.323898 35.966599 1.000000 1.000000 1.000000
+vn 0.160148 0.890101 0.426700
+v -0.354350 158.328079 36.082779 1.000000 1.000000 1.000000
+vn 0.339079 0.821595 0.458264
+v -0.986706 158.431335 36.197777 1.000000 1.000000 1.000000
+vn 0.307864 0.599998 0.738392
+v -1.037784 158.181564 36.545601 1.000000 1.000000 1.000000
+vn 0.471607 0.821995 0.319236
+v -2.125000 158.883423 36.416580 1.000000 1.000000 1.000000
+vn 0.516585 0.462943 0.720295
+v -2.809772 159.043900 36.880180 1.000000 1.000000 1.000000
+vn 0.214304 0.182501 0.959566
+v -1.091150 157.920654 36.700180 1.000000 1.000000 1.000000
+vn 0.266736 0.087923 0.959751
+v -2.954332 158.827621 37.034779 1.000000 1.000000 1.000000
+vn 0.138031 0.230750 0.963173
+v 0.321580 157.802048 36.468781 1.000000 1.000000 1.000000
+vn 0.035677 0.262909 0.964161
+v 2.359424 158.427155 36.121578 1.000000 1.000000 1.000000
+vn -0.085413 0.254833 0.963205
+v 3.975484 159.899231 35.775597 1.000000 1.000000 1.000000
+vn -0.837612 0.325963 0.438354
+v 4.408696 162.015945 34.938599 1.000000 1.000000 1.000000
+vn -0.624421 0.298277 0.721893
+v 4.637042 161.953156 35.286400 1.000000 1.000000 1.000000
+vn -0.191517 0.206226 0.959579
+v 4.875704 161.886185 35.440998 1.000000 1.000000 1.000000
+vn -0.901200 0.167664 0.399660
+v 4.525122 162.698273 34.823601 1.000000 1.000000 1.000000
+vn -0.697290 0.080173 0.712291
+v 4.787176 163.404312 35.055000 1.000000 1.000000 1.000000
+vn -0.999384 -0.034645 0.005533
+v 4.374628 163.390350 33.882999 1.000000 1.000000 1.000000
+vn -0.992882 0.114546 0.032616
+v 4.349356 162.719193 33.999199 1.000000 1.000000 1.000000
+vn -0.902346 0.058499 0.427024
+v 4.551426 163.395935 34.707397 1.000000 1.000000 1.000000
+vn -0.984250 -0.176562 0.008819
+v 4.311490 164.060120 33.766598 1.000000 1.000000 1.000000
+vn 0.617493 0.648642 0.444934
+v -2.671446 159.251785 36.532600 1.000000 1.000000 1.000000
+vn 0.729442 0.598927 0.330456
+v -3.161410 159.696899 36.647797 1.000000 1.000000 1.000000
+vn 0.668668 0.223091 0.709304
+v -4.153284 160.661087 37.226196 1.000000 1.000000 1.000000
+vn 0.788161 0.502883 0.354840
+v -3.593140 160.215973 36.763779 1.000000 1.000000 1.000000
+vn 0.833903 0.373272 0.406539
+v -3.948794 160.788055 36.878601 1.000000 1.000000 1.000000
+vn 0.908142 0.236670 0.345349
+v -4.227740 161.413162 36.993980 1.000000 1.000000 1.000000
+vn 0.701424 -0.036135 0.711828
+v -4.767452 162.740128 37.573399 1.000000 1.000000 1.000000
+vn 0.929079 0.183182 0.321335
+v -4.423282 162.074554 37.109177 1.000000 1.000000 1.000000
+vn 0.904301 -0.001456 0.426892
+v -4.532718 162.765244 37.225777 1.000000 1.000000 1.000000
+vn -0.883572 0.126790 -0.450805
+v 4.421700 162.013168 33.262001 1.000000 1.000000 1.000000
+vn -0.975672 -0.028198 -0.217414
+v 4.425870 163.391754 33.428200 1.000000 1.000000 1.000000
+vn -0.700216 -0.041377 -0.712731
+v 4.775086 162.667572 32.812199 1.000000 1.000000 1.000000
+vn -0.895533 -0.081021 -0.437558
+v 4.564866 163.397324 33.030800 1.000000 1.000000 1.000000
+vn -0.728776 -0.250465 -0.637301
+v 4.733526 164.139648 32.579597 1.000000 1.000000 1.000000
+vn -0.872755 -0.241177 -0.424420
+v 4.498986 164.096390 32.914200 1.000000 1.000000 1.000000
+vn 0.304991 -0.530083 -0.791197
+v 3.231396 158.420181 33.503399 1.000000 1.000000 1.000000
+vn 0.468295 -0.488893 -0.735991
+v 4.344836 159.588074 33.271999 1.000000 1.000000 1.000000
+vn 0.985590 0.006145 -0.169041
+v 5.871068 163.439194 33.443596 1.000000 1.000000 1.000000
+vn 0.893388 0.423731 0.149365
+v 5.291714 166.044281 33.911999 1.000000 1.000000 1.000000
+vn 0.827766 0.540397 0.150916
+v 4.879630 166.817291 33.797398 1.000000 1.000000 1.000000
+vn 0.942017 0.300878 0.148585
+v 5.600606 165.212662 34.027397 1.000000 1.000000 1.000000
+vn 0.822710 0.309626 0.476739
+v 5.456396 165.161026 34.495598 1.000000 1.000000 1.000000
+vn 0.788671 0.419945 0.449049
+v 5.155460 165.973114 34.380398 1.000000 1.000000 1.000000
+vn 0.973376 0.175339 0.147630
+v 5.798982 164.340576 34.142799 1.000000 1.000000 1.000000
+vn 0.988017 0.046647 0.147124
+v 5.883916 163.439194 34.259201 1.000000 1.000000 1.000000
+vn 0.873891 0.198740 0.443641
+v 5.649684 164.312668 34.611000 1.000000 1.000000 1.000000
+vn 0.610378 0.212148 0.763172
+v 5.416408 164.269409 34.948799 1.000000 1.000000 1.000000
+vn 0.573651 0.368869 0.731341
+v 4.942588 165.860092 34.717999 1.000000 1.000000 1.000000
+vn 0.707012 0.516446 0.483133
+v 4.753984 166.725204 34.265598 1.000000 1.000000 1.000000
+vn 0.641839 0.616021 0.456684
+v 4.252704 167.418686 34.149399 1.000000 1.000000 1.000000
+vn 0.238946 0.154567 0.958652
+v -1.750434 158.131348 31.663198 1.000000 1.000000 1.000000
+vn 0.162986 0.656424 0.736575
+v -0.347926 158.071350 31.277399 1.000000 1.000000 1.000000
+vn 0.170068 0.210774 0.962627
+v -0.365802 157.804840 31.431999 1.000000 1.000000 1.000000
+vn 0.164264 0.876215 0.453060
+v -0.330824 158.326691 30.929798 1.000000 1.000000 1.000000
+vn -0.039429 0.938441 0.343182
+v 0.315862 158.325302 30.813198 1.000000 1.000000 1.000000
+vn -0.129136 0.668439 0.732471
+v 1.646804 158.374130 30.930199 1.000000 1.000000 1.000000
+vn -0.106285 0.923150 0.369455
+v 0.950154 158.422974 30.697998 1.000000 1.000000 1.000000
+vn -0.354025 0.933885 0.050240
+v 1.504846 158.794128 29.758198 1.000000 1.000000 1.000000
+vn -0.269565 0.863396 0.426476
+v 1.565680 158.614136 30.582598 1.000000 1.000000 1.000000
+vn -0.416348 0.831092 0.368700
+v 2.146642 158.897385 30.467798 1.000000 1.000000 1.000000
+vn -0.524407 0.781371 0.338314
+v 2.692458 159.269928 30.351599 1.000000 1.000000 1.000000
+vn -0.409289 0.552539 0.726074
+v 3.345340 159.533646 30.584198 1.000000 1.000000 1.000000
+vn -0.368897 0.898396 -0.238326
+v 1.522472 158.742493 29.303398 1.000000 1.000000 1.000000
+vn -0.576740 0.375627 0.725449
+v 4.430968 161.280609 30.249598 1.000000 1.000000 1.000000
+vn -0.680315 0.167453 0.713534
+v 4.762058 162.695480 30.018198 1.000000 1.000000 1.000000
+vn -0.159743 0.229151 0.960194
+v 4.659008 161.178757 30.403999 1.000000 1.000000 1.000000
+vn -0.046603 0.263042 0.963658
+v 3.517514 159.342484 30.738798 1.000000 1.000000 1.000000
+vn -0.887259 0.171497 0.428205
+v 4.527542 162.723389 29.670597 1.000000 1.000000 1.000000
+vn -0.947369 -0.004816 0.320108
+v 4.550074 163.423843 29.553999 1.000000 1.000000 1.000000
+vn -0.224004 0.164382 0.960625
+v 5.007142 162.667572 30.172798 1.000000 1.000000 1.000000
+vn 0.073995 0.255104 0.964078
+v 1.731572 158.122971 31.084799 1.000000 1.000000 1.000000
+vn -0.054487 -0.302846 -0.951481
+v 1.807752 157.898331 28.430199 1.000000 1.000000 1.000000
+vn -0.046934 -0.604828 -0.794972
+v 0.381892 157.298325 28.811998 1.000000 1.000000 1.000000
+vn 0.119165 -0.654325 -0.746765
+v 1.892482 157.647171 28.581398 1.000000 1.000000 1.000000
+vn 0.083247 -0.294916 -0.951890
+v 3.672230 159.170868 28.084198 1.000000 1.000000 1.000000
+vn 0.402144 0.543120 -0.737090
+v 2.259530 168.687042 26.641399 1.000000 1.000000 1.000000
+vn 0.264980 0.185782 -0.946187
+v 2.158372 168.444260 26.490398 1.000000 1.000000 1.000000
+vn 0.472187 0.411638 -0.779483
+v 3.503956 167.849838 26.860197 1.000000 1.000000 1.000000
+vn 0.042464 -0.267984 -0.962487
+v 2.062558 168.214020 26.495398 1.000000 1.000000 1.000000
+vn 0.624119 0.627311 -0.465786
+v 3.654926 168.047974 27.204599 1.000000 1.000000 1.000000
+vn 0.463995 0.773480 -0.431783
+v 2.356902 168.921448 26.985998 1.000000 1.000000 1.000000
+vn 0.551513 0.806017 -0.214874
+v 3.059054 168.682861 27.481199 1.000000 1.000000 1.000000
+vn 0.672697 0.718946 -0.174917
+v 3.739552 168.158203 27.597799 1.000000 1.000000 1.000000
+vn 0.529968 0.833700 0.155172
+v 3.065750 168.694016 28.296799 1.000000 1.000000 1.000000
+vn 0.742724 0.651971 0.152629
+v 4.350012 167.547043 28.529198 1.000000 1.000000 1.000000
+vn 0.642166 0.750931 0.154029
+v 3.747740 168.169373 28.413399 1.000000 1.000000 1.000000
+vn 0.406909 0.897356 0.170811
+v 2.416744 169.065186 28.194599 1.000000 1.000000 1.000000
+vn 0.330060 0.927062 -0.177810
+v 1.637754 169.362381 27.263798 1.000000 1.000000 1.000000
+vn 0.275623 0.948292 0.157398
+v 1.641346 169.376343 28.079399 1.000000 1.000000 1.000000
+vn 0.173543 0.968045 -0.181031
+v 0.824196 169.552155 27.147598 1.000000 1.000000 1.000000
+vn 0.127662 0.979059 0.158575
+v 0.825994 169.566101 27.963198 1.000000 1.000000 1.000000
+vn 0.325740 0.804059 -0.497375
+v 1.600686 169.224243 26.870798 1.000000 1.000000 1.000000
+vn 0.126765 -0.243540 -0.961571
+v 0.704880 168.640991 26.263998 1.000000 1.000000 1.000000
+vn 0.975885 0.137896 -0.169211
+v 5.782438 164.364288 28.174999 1.000000 1.000000 1.000000
+vn 0.985569 0.010480 -0.168950
+v 5.869318 163.474075 28.290398 1.000000 1.000000 1.000000
+vn 0.987788 0.051013 0.147219
+v 5.882166 163.474075 29.105997 1.000000 1.000000 1.000000
+vn 0.892556 0.086616 0.442541
+v 5.730706 163.468491 29.574198 1.000000 1.000000 1.000000
+vn -0.612990 -0.142142 -0.777199
+v -5.094228 160.988983 24.688999 1.000000 1.000000 1.000000
+vn 0.170662 -0.316941 0.932965
+v 0.336854 157.543900 36.464996 1.000000 1.000000 1.000000
+vn 0.256342 -0.575340 0.776706
+v 1.124802 157.416931 36.208000 1.000000 1.000000 1.000000
+vn 0.273672 -0.187194 0.943431
+v 2.471268 158.198318 36.117779 1.000000 1.000000 1.000000
+vn 0.045212 -0.652306 0.756606
+v -0.427734 157.306702 36.440578 1.000000 1.000000 1.000000
+vn 0.066936 -0.339370 0.938268
+v -1.142838 157.668091 36.696381 1.000000 1.000000 1.000000
+vn -0.116959 -0.626813 0.770342
+v -1.849852 157.637390 36.657997 1.000000 1.000000 1.000000
+vn -0.089164 -0.343057 0.935073
+v -3.094306 158.618317 37.030998 1.000000 1.000000 1.000000
+vn -0.380563 -0.799100 0.465414
+v -2.676144 157.750412 36.436798 1.000000 1.000000 1.000000
+vn -0.237016 -0.847804 0.474396
+v -1.929496 157.395996 36.320198 1.000000 1.000000 1.000000
+vn -0.208453 -0.594663 0.776481
+v -2.565680 157.977859 36.774597 1.000000 1.000000 1.000000
+vn -0.593063 -0.790206 0.154436
+v -3.453256 158.081116 36.084396 1.000000 1.000000 1.000000
+vn -0.470264 -0.868634 0.155968
+v -2.746866 157.605301 35.968578 1.000000 1.000000 1.000000
+vn -0.483455 -0.723989 0.492048
+v -3.364380 158.213669 36.552780 1.000000 1.000000 1.000000
+vn -0.382384 -0.504019 0.774434
+v -3.817110 158.960159 37.005600 1.000000 1.000000 1.000000
+vn -0.597887 -0.657897 0.457933
+v -3.981470 158.774597 36.667801 1.000000 1.000000 1.000000
+vn -0.699575 -0.698047 0.152727
+v -4.086658 158.657379 36.199600 1.000000 1.000000 1.000000
+vn -0.625535 -0.759963 -0.176529
+v -3.445724 158.092270 35.268997 1.000000 1.000000 1.000000
+vn -0.508126 -0.842728 -0.177813
+v -2.740866 157.617859 35.153000 1.000000 1.000000 1.000000
+vn -0.339945 -0.927156 0.157543
+v -1.980468 157.241119 35.851978 1.000000 1.000000 1.000000
+vn -0.595924 -0.658382 -0.459792
+v -3.367780 158.209488 34.875801 1.000000 1.000000 1.000000
+vn -0.478840 -0.740376 -0.471758
+v -2.678862 157.744843 34.759998 1.000000 1.000000 1.000000
+vn -0.367215 -0.904202 -0.218111
+v -1.976142 157.253677 35.036400 1.000000 1.000000 1.000000
+vn -0.727043 -0.664137 -0.174158
+v -4.077736 158.667145 35.383999 1.000000 1.000000 1.000000
+vn -0.675569 -0.555323 -0.484998
+v -3.985488 158.770401 34.990997 1.000000 1.000000 1.000000
+vn -0.287263 -0.852965 -0.435811
+v -1.243804 157.175537 34.541199 1.000000 1.000000 1.000000
+vn -0.202418 -0.964016 0.172338
+v -1.275366 157.020645 35.749779 1.000000 1.000000 1.000000
+vn -0.120272 -0.976427 -0.179234
+v -0.456908 156.902054 34.819000 1.000000 1.000000 1.000000
+vn -0.142659 -0.854234 -0.499934
+v -0.446584 157.045776 34.425999 1.000000 1.000000 1.000000
+vn -0.076878 -0.664101 -0.743679
+v 0.351510 157.295532 33.965199 1.000000 1.000000 1.000000
+vn -0.005044 -0.881631 -0.471912
+v 0.366676 157.038788 34.309799 1.000000 1.000000 1.000000
+vn 0.043135 -0.982407 -0.181705
+v 0.375182 156.895081 34.702999 1.000000 1.000000 1.000000
+vn 0.129101 -0.872336 -0.471554
+v 1.174456 157.158783 34.193398 1.000000 1.000000 1.000000
+vn 0.043045 -0.604507 -0.795436
+v 1.125922 157.409943 33.848801 1.000000 1.000000 1.000000
+vn 0.192566 -0.964343 -0.181553
+v 1.201654 157.017868 34.586399 1.000000 1.000000 1.000000
+vn 0.334971 -0.924814 -0.180316
+v 1.996574 157.262054 34.471001 1.000000 1.000000 1.000000
+vn 0.250677 -0.829523 -0.499051
+v 1.951384 157.397400 34.077999 1.000000 1.000000 1.000000
+vn 0.213643 -0.631742 -0.745157
+v 2.578670 157.979248 33.618198 1.000000 1.000000 1.000000
+vn 0.383000 -0.796840 -0.467287
+v 2.689780 157.751816 33.962601 1.000000 1.000000 1.000000
+vn 0.468303 -0.865235 -0.179053
+v 2.752068 157.624832 34.355797 1.000000 1.000000 1.000000
+vn 0.238865 -0.958117 0.157971
+v 1.204286 157.003906 35.402000 1.000000 1.000000 1.000000
+vn 0.379547 -0.911955 0.155829
+v 2.000938 157.249496 35.286598 1.000000 1.000000 1.000000
+vn 0.257879 -0.845309 0.467922
+v 1.173268 157.165771 35.870178 1.000000 1.000000 1.000000
+vn 0.090253 -0.983202 0.158645
+v 0.376008 156.881119 35.518398 1.000000 1.000000 1.000000
+vn 0.379633 -0.782725 0.493173
+v 1.949414 157.402969 35.754799 1.000000 1.000000 1.000000
+vn 0.495799 -0.736236 0.460587
+v 2.687050 157.757385 35.639599 1.000000 1.000000 1.000000
+vn 0.509438 -0.846477 0.154755
+v 2.758080 157.612274 35.171196 1.000000 1.000000 1.000000
+vn 0.423118 -0.524647 0.738726
+v 2.576094 157.983429 35.977180 1.000000 1.000000 1.000000
+vn 0.130189 -0.856857 0.498846
+v 0.366312 157.045776 35.986778 1.000000 1.000000 1.000000
+vn -0.061348 -0.985546 0.157912
+v -0.457900 156.888092 35.634579 1.000000 1.000000 1.000000
+vn -0.024469 -0.878993 0.476206
+v -0.446132 157.051361 36.102798 1.000000 1.000000 1.000000
+vn 0.528018 -0.365028 0.766780
+v 3.824514 158.968536 35.746399 1.000000 1.000000 1.000000
+vn 0.362486 -0.090738 0.927562
+v 4.163894 159.740158 35.771797 1.000000 1.000000 1.000000
+vn 0.648432 -0.122078 0.751420
+v 5.111146 161.054565 35.398796 1.000000 1.000000 1.000000
+vn 0.362156 0.051525 0.930692
+v 5.106780 161.820602 35.437199 1.000000 1.000000 1.000000
+vn 0.619081 -0.203822 0.758417
+v 4.773026 160.291321 35.515396 1.000000 1.000000 1.000000
+vn 0.677311 0.020712 0.735405
+v 5.463954 162.583847 35.181396 1.000000 1.000000 1.000000
+vn 0.341695 0.145462 0.928485
+v 5.272118 163.419647 35.205799 1.000000 1.000000 1.000000
+vn 0.861279 -0.235400 0.450318
+v 5.331278 160.959686 35.060997 1.000000 1.000000 1.000000
+vn 0.817150 -0.363622 0.447265
+v 4.978598 160.162949 35.177597 1.000000 1.000000 1.000000
+vn 0.748160 -0.458044 0.480055
+v 4.527452 159.433197 35.293598 1.000000 1.000000 1.000000
+vn 0.814170 -0.560859 0.150216
+v 4.647110 159.332733 34.825199 1.000000 1.000000 1.000000
+vn 0.883398 -0.444349 0.148869
+v 5.110180 160.082016 34.709396 1.000000 1.000000 1.000000
+vn 0.728135 -0.668384 0.151930
+v 4.094678 158.665756 34.940399 1.000000 1.000000 1.000000
+vn 0.685065 -0.569919 0.453738
+v 3.989246 158.784348 35.408600 1.000000 1.000000 1.000000
+vn 0.591422 -0.643260 0.486248
+v 3.367214 158.217850 35.524799 1.000000 1.000000 1.000000
+vn 0.626785 -0.763952 0.153353
+v 3.456216 158.085297 35.056599 1.000000 1.000000 1.000000
+vn 0.589396 -0.788155 -0.177269
+v 3.448672 158.096466 34.240997 1.000000 1.000000 1.000000
+vn 0.496080 -0.733999 -0.463843
+v 3.370612 158.212280 33.848000 1.000000 1.000000 1.000000
+vn 0.695258 -0.696821 -0.176230
+v 4.085744 158.676926 34.124798 1.000000 1.000000 1.000000
+vn 0.583785 -0.647419 -0.489942
+v 3.993276 158.780167 33.731796 1.000000 1.000000 1.000000
+vn 0.785811 -0.593288 -0.174670
+v 4.636966 159.341095 34.009796 1.000000 1.000000 1.000000
+vn 0.685157 -0.567425 -0.456716
+v 4.532036 159.430405 33.616600 1.000000 1.000000 1.000000
+vn 0.762405 -0.455724 -0.459406
+v 4.983634 160.160156 33.500801 1.000000 1.000000 1.000000
+vn 0.860315 -0.479736 -0.172369
+v 5.099016 160.089005 33.893799 1.000000 1.000000 1.000000
+vn 0.865699 -0.280156 -0.414824
+v 5.558262 161.695023 33.281998 1.000000 1.000000 1.000000
+vn 0.912621 -0.351221 -0.209206
+v 5.460246 160.903870 33.777199 1.000000 1.000000 1.000000
+vn 0.976806 -0.133490 -0.167425
+v 5.837142 162.537811 33.559799 1.000000 1.000000 1.000000
+vn 0.866198 -0.151776 -0.476094
+v 5.705048 162.554550 33.166798 1.000000 1.000000 1.000000
+vn 0.933831 -0.325628 0.148075
+v 5.472180 160.899673 34.592796 1.000000 1.000000 1.000000
+vn 0.965461 -0.204409 0.161562
+v 5.699396 161.655945 34.490601 1.000000 1.000000 1.000000
+vn 0.892082 -0.049213 0.449185
+v 5.699280 162.554550 34.843597 1.000000 1.000000 1.000000
+vn 0.985582 -0.083516 0.147153
+v 5.849902 162.536407 34.375397 1.000000 1.000000 1.000000
+vn 0.876387 0.086135 0.473842
+v 5.732406 163.434998 34.727600 1.000000 1.000000 1.000000
+vn -0.757167 -0.470868 -0.452749
+v -4.529796 159.424805 35.107201 1.000000 1.000000 1.000000
+vn -0.811752 -0.557926 -0.172562
+v -4.634636 159.336914 35.500198 1.000000 1.000000 1.000000
+vn -0.815103 -0.365441 -0.449510
+v -4.978160 160.147598 35.221798 1.000000 1.000000 1.000000
+vn -0.844344 -0.245126 -0.476442
+v -5.329824 160.934570 35.337196 1.000000 1.000000 1.000000
+vn -0.880229 -0.442425 -0.171632
+v -5.093404 160.075043 35.614979 1.000000 1.000000 1.000000
+vn -0.931743 -0.320819 -0.170092
+v -5.453202 160.881546 35.730179 1.000000 1.000000 1.000000
+vn -0.863691 -0.481071 0.150360
+v -5.104540 160.068069 36.430397 1.000000 1.000000 1.000000
+vn -0.669974 -0.562216 0.484818
+v -4.525212 159.429001 36.783997 1.000000 1.000000 1.000000
+vn -0.789554 -0.594701 0.151444
+v -4.644780 159.328537 36.315781 1.000000 1.000000 1.000000
+vn -0.920681 -0.360737 0.149052
+v -5.465126 160.875961 36.545776 1.000000 1.000000 1.000000
+vn -0.758614 -0.470202 0.451014
+v -4.973126 160.150391 36.898781 1.000000 1.000000 1.000000
+vn -0.546715 -0.405270 0.732706
+v -4.767838 160.278763 37.236397 1.000000 1.000000 1.000000
+vn -0.193563 -0.257056 0.946813
+v -4.573892 160.398758 37.376999 1.000000 1.000000 1.000000
+vn -0.594505 -0.250396 0.764111
+v -5.340742 161.830368 37.467178 1.000000 1.000000 1.000000
+vn -0.800343 -0.361915 0.477985
+v -5.324442 160.937347 37.014000 1.000000 1.000000 1.000000
+vn -0.859099 -0.253756 0.444474
+v -5.570712 161.770370 37.129398 1.000000 1.000000 1.000000
+vn -0.960225 -0.236743 0.148055
+v -5.717910 161.731293 36.661179 1.000000 1.000000 1.000000
+vn -0.868940 -0.141283 0.474324
+v -5.708548 162.639664 37.245998 1.000000 1.000000 1.000000
+vn -0.983074 -0.109012 0.147248
+v -5.859378 162.624313 36.777599 1.000000 1.000000 1.000000
+vn -0.965850 -0.196235 -0.169188
+v -5.705432 161.734100 35.845596 1.000000 1.000000 1.000000
+vn -0.893434 -0.007269 0.449135
+v -5.730900 163.520126 37.362000 1.000000 1.000000 1.000000
+vn -0.674429 -0.063184 0.735631
+v -5.494312 163.508957 37.699799 1.000000 1.000000 1.000000
+vn -0.330872 -0.166718 0.928832
+v -5.250258 162.688507 37.724197 1.000000 1.000000 1.000000
+vn -0.357244 -0.074331 0.931049
+v -5.185960 164.295929 37.955597 1.000000 1.000000 1.000000
+vn 0.254850 -0.118113 0.959740
+v -5.012742 162.713623 37.727997 1.000000 1.000000 1.000000
+vn 0.282795 -0.020218 0.958967
+v -4.366982 160.528519 37.380798 1.000000 1.000000 1.000000
+vn 0.206625 -0.193431 0.959109
+v -4.951356 164.248489 37.959396 1.000000 1.000000 1.000000
+vn 0.643374 -0.257957 0.720783
+v -4.709064 164.199646 37.804798 1.000000 1.000000 1.000000
+vn 0.103741 -0.248533 0.963052
+v -4.178352 166.296829 38.293999 1.000000 1.000000 1.000000
+vn 0.518820 -0.460586 0.720199
+v -3.973900 166.147537 38.139397 1.000000 1.000000 1.000000
+vn -0.016494 -0.264487 0.964248
+v -2.658764 167.886124 38.639999 1.000000 1.000000 1.000000
+vn 0.272485 -0.627021 0.729792
+v -2.528676 167.658676 38.485397 1.000000 1.000000 1.000000
+vn -0.120790 -0.239790 0.963281
+v -0.665024 168.659134 38.987198 1.000000 1.000000 1.000000
+vn -0.014727 -0.675036 0.737638
+v -0.632500 168.395416 38.832596 1.000000 1.000000 1.000000
+vn -0.200743 -0.195968 0.959843
+v 0.751910 168.645187 39.218578 1.000000 1.000000 1.000000
+vn -0.263437 -0.619648 0.739350
+v 0.715086 168.381470 39.063980 1.000000 1.000000 1.000000
+vn -0.259866 -0.104587 0.959964
+v 2.667866 167.877747 39.553177 1.000000 1.000000 1.000000
+vn -0.482783 -0.496397 0.721464
+v 2.537278 167.651703 39.398579 1.000000 1.000000 1.000000
+vn -0.282847 0.002574 0.959162
+v 4.184274 166.287064 39.899200 1.000000 1.000000 1.000000
+vn -0.094001 -0.899268 0.427178
+v 0.042486 168.184723 38.601196 1.000000 1.000000 1.000000
+vn -0.278171 -0.843369 0.459728
+v 0.679842 168.128906 38.716179 1.000000 1.000000 1.000000
+vn 0.032556 -0.890041 0.454717
+v -0.601382 168.141464 38.485001 1.000000 1.000000 1.000000
+vn 0.149502 -0.988739 0.006663
+v -0.578054 167.951691 37.660599 1.000000 1.000000 1.000000
+vn 0.312546 -0.949844 0.010544
+v -1.186708 167.814957 37.544197 1.000000 1.000000 1.000000
+vn -0.411154 -0.853657 0.319723
+v 1.843942 167.761948 38.934978 1.000000 1.000000 1.000000
+vn -0.025639 -0.999084 0.034274
+v 0.040806 167.992157 37.776798 1.000000 1.000000 1.000000
+vn 0.138594 -0.962443 -0.233444
+v -0.584812 168.006119 37.205799 1.000000 1.000000 1.000000
+vn -0.254494 -0.967053 0.006443
+v 1.186762 167.814957 37.994179 1.000000 1.000000 1.000000
+vn -0.116626 -0.962072 -0.246610
+v 0.661072 167.993561 37.437199 1.000000 1.000000 1.000000
+vn -0.570800 -0.688863 0.446829
+v 2.412302 167.435425 39.050999 1.000000 1.000000 1.000000
+vn -0.438374 -0.898757 -0.008001
+v 1.772308 167.586121 38.110779 1.000000 1.000000 1.000000
+vn -0.446047 -0.798517 -0.404244
+v 2.419434 167.446594 37.374378 1.000000 1.000000 1.000000
+vn -0.292728 -0.763001 -0.576315
+v 1.849390 167.774490 37.258400 1.000000 1.000000 1.000000
+vn -0.047370 -0.874936 -0.481917
+v 0.681856 168.142853 37.039597 1.000000 1.000000 1.000000
+vn -0.419378 -0.607422 -0.674656
+v 3.090998 167.235886 37.154800 1.000000 1.000000 1.000000
+vn -0.635991 -0.639223 -0.432330
+v 3.402644 166.549393 37.605797 1.000000 1.000000 1.000000
+vn -0.122800 -0.706582 -0.696894
+v 1.302970 168.261459 36.807178 1.000000 1.000000 1.000000
+vn 0.121074 -0.661900 -0.739750
+v 0.044864 168.456802 36.589798 1.000000 1.000000 1.000000
+vn 0.189613 -0.863720 -0.466943
+v -0.603160 168.155426 36.808399 1.000000 1.000000 1.000000
+vn 0.353037 -0.663049 -0.660099
+v -1.302790 168.261459 36.357201 1.000000 1.000000 1.000000
+vn 0.366925 -0.816185 -0.446327
+v -1.238286 168.013107 36.691799 1.000000 1.000000 1.000000
+vn 0.532357 -0.696583 -0.481008
+v -2.411284 167.453568 36.461197 1.000000 1.000000 1.000000
+vn 0.551817 -0.800321 -0.234486
+v -2.337898 167.325195 36.858597 1.000000 1.000000 1.000000
+vn 0.467329 -0.482142 -0.741042
+v -2.536942 167.672638 36.126396 1.000000 1.000000 1.000000
+vn 0.639263 -0.714318 -0.284768
+v -2.839436 166.931717 36.743996 1.000000 1.000000 1.000000
+vn 0.666746 -0.607236 -0.432104
+v -2.928568 167.047531 36.346596 1.000000 1.000000 1.000000
+vn 0.544989 -0.836963 0.049797
+v -2.310848 167.279160 37.313400 1.000000 1.000000 1.000000
+vn 0.243338 -0.906995 0.343725
+v -1.234642 167.999146 38.368401 1.000000 1.000000 1.000000
+vn 0.781774 -0.621505 0.050606
+v -3.252950 166.422409 37.082596 1.000000 1.000000 1.000000
+vn 0.450044 -0.786681 0.422603
+v -2.404190 167.441010 38.137798 1.000000 1.000000 1.000000
+vn 0.304974 -0.878531 0.367660
+v -1.837532 167.764725 38.253197 1.000000 1.000000 1.000000
+vn 0.911547 -0.411119 -0.007985
+v -3.939962 165.317307 36.851601 1.000000 1.000000 1.000000
+vn 0.676538 -0.657131 0.332380
+v -3.384362 166.550781 37.906998 1.000000 1.000000 1.000000
+vn 0.583413 -0.726276 0.363528
+v -2.919942 167.036362 38.022999 1.000000 1.000000 1.000000
+vn 0.715780 -0.541774 0.440612
+v -3.778242 166.005219 37.791798 1.000000 1.000000 1.000000
+vn 0.868429 -0.391452 0.304298
+v -4.099146 165.401031 37.675797 1.000000 1.000000 1.000000
+vn 0.968261 -0.249850 0.006829
+v -4.170216 164.690811 36.735001 1.000000 1.000000 1.000000
+vn -0.505264 -0.446692 -0.738360
+v 3.992492 166.147537 37.385597 1.000000 1.000000 1.000000
+vn -0.722256 -0.505522 -0.472011
+v 3.794656 166.003815 37.720379 1.000000 1.000000 1.000000
+vn -0.833674 -0.350456 -0.426811
+v 4.350642 164.752197 37.950996 1.000000 1.000000 1.000000
+vn -0.822634 -0.520846 -0.228020
+v 3.679118 165.920105 38.117779 1.000000 1.000000 1.000000
+vn -0.742975 -0.607322 -0.281335
+v 3.299028 166.448929 38.003197 1.000000 1.000000 1.000000
+vn -0.655619 -0.753354 0.051199
+v 2.815386 166.880081 38.341797 1.000000 1.000000 1.000000
+vn -0.856884 -0.513272 0.047977
+v 3.636528 165.889404 38.572578 1.000000 1.000000 1.000000
+vn -0.953873 -0.300078 0.008951
+v 4.169340 164.689407 38.803398 1.000000 1.000000 1.000000
+vn -0.915379 -0.242023 0.321724
+v 4.337832 164.748016 39.627579 1.000000 1.000000 1.000000
+vn -0.902565 -0.055512 0.426959
+v 4.490514 164.067093 39.744179 1.000000 1.000000 1.000000
+vn -0.702445 -0.008067 0.711692
+v 4.723110 164.108948 40.091797 1.000000 1.000000 1.000000
+vn -0.890842 -0.294325 0.346082
+v 4.101116 165.392654 39.512379 1.000000 1.000000 1.000000
+vn -0.651735 -0.264847 0.710702
+v 3.979474 166.137772 39.744598 1.000000 1.000000 1.000000
+vn -0.807440 -0.426269 0.407842
+v 3.783482 165.995438 39.396980 1.000000 1.000000 1.000000
+vn -0.752626 -0.553861 0.356079
+v 3.392616 166.541016 39.282181 1.000000 1.000000 1.000000
+vn -0.686764 -0.646713 0.331841
+v 2.929174 167.026596 39.166199 1.000000 1.000000 1.000000
+vn -0.262912 0.101551 0.959461
+v 4.966188 164.153595 40.246399 1.000000 1.000000 1.000000
+vn 0.318261 0.187332 0.929310
+v 5.201564 164.196869 40.242577 1.000000 1.000000 1.000000
+vn 0.351188 0.096622 0.931306
+v 5.238592 162.588043 40.473999 1.000000 1.000000 1.000000
+vn 0.668602 0.105428 0.736108
+v 5.496668 163.395935 40.218201 1.000000 1.000000 1.000000
+vn 0.336345 -0.022265 0.941476
+v 4.565986 160.387589 40.808578 1.000000 1.000000 1.000000
+vn 0.658313 -0.044533 0.751426
+v 5.339260 161.828964 40.435600 1.000000 1.000000 1.000000
+vn 0.557019 -0.392418 0.731941
+v 3.804120 158.946213 40.899399 1.000000 1.000000 1.000000
+vn 0.646940 -0.232482 0.726238
+v 4.759650 160.266205 40.667976 1.000000 1.000000 1.000000
+vn 0.318755 -0.109611 0.941478
+v 3.649352 159.122025 41.039997 1.000000 1.000000 1.000000
+vn 0.884864 -0.124228 0.448980
+v 5.569218 161.767578 40.097778 1.000000 1.000000 1.000000
+vn 0.844371 -0.246924 0.475464
+v 5.319922 160.926193 40.214378 1.000000 1.000000 1.000000
+vn 0.814943 -0.368720 0.447116
+v 4.964642 160.137833 40.330399 1.000000 1.000000 1.000000
+vn 0.746337 -0.461268 0.479805
+v 4.513020 159.415054 40.445396 1.000000 1.000000 1.000000
+vn 0.933431 -0.326778 0.148061
+v 5.460516 160.864807 39.746201 1.000000 1.000000 1.000000
+vn 0.880881 -0.449226 0.149145
+v 5.095862 160.055511 39.861977 1.000000 1.000000 1.000000
+vn 0.811641 -0.564369 0.150755
+v 4.632292 159.313187 39.977180 1.000000 1.000000 1.000000
+vn 0.683484 -0.572309 0.453114
+v 3.967978 158.762024 40.561577 1.000000 1.000000 1.000000
+vn 0.726080 -0.670568 0.152139
+v 4.072856 158.643433 40.093399 1.000000 1.000000 1.000000
+vn 0.692882 -0.699367 -0.175499
+v 4.063960 158.653198 39.277779 1.000000 1.000000 1.000000
+vn 0.783518 -0.596404 -0.174363
+v 4.622186 159.321564 39.161598 1.000000 1.000000 1.000000
+vn 0.857786 -0.484345 -0.172086
+v 5.084726 160.062485 39.046600 1.000000 1.000000 1.000000
+vn 0.915548 -0.363873 -0.171371
+v 5.448594 160.870377 38.930580 1.000000 1.000000 1.000000
+vn 0.667840 -0.563017 -0.486829
+v 4.517590 159.410873 38.768600 1.000000 1.000000 1.000000
+vn 0.756089 -0.472380 -0.452976
+v 4.969664 160.133652 38.653397 1.000000 1.000000 1.000000
+vn 0.595247 -0.658893 -0.459936
+v 3.971994 158.756454 38.884796 1.000000 1.000000 1.000000
+vn 0.394457 -0.538295 -0.744743
+v 3.807918 158.942032 38.540176 1.000000 1.000000 1.000000
+vn 0.541395 -0.418118 -0.729431
+v 4.764400 160.263412 38.308998 1.000000 1.000000 1.000000
+vn 0.816615 -0.352565 -0.456988
+v 5.325292 160.924805 38.537579 1.000000 1.000000 1.000000
+vn 0.950312 -0.231615 -0.207993
+v 5.703928 161.732697 38.813980 1.000000 1.000000 1.000000
+vn 0.481110 -0.724441 -0.493679
+v 3.355406 158.199707 38.999378 1.000000 1.000000 1.000000
+vn 0.219657 -0.567442 -0.793575
+v 2.559280 157.966690 38.770199 1.000000 1.000000 1.000000
+vn 0.379008 -0.798691 -0.467382
+v 2.669554 157.739243 39.114777 1.000000 1.000000 1.000000
+vn 0.586251 -0.790366 -0.177852
+v 3.433094 158.082504 39.392601 1.000000 1.000000 1.000000
+vn 0.117021 -0.857526 -0.500954
+v 1.136590 157.149033 39.346378 1.000000 1.000000 1.000000
+vn 0.255409 -0.844928 -0.469961
+v 1.923354 157.384842 39.230999 1.000000 1.000000 1.000000
+vn -0.212066 -0.636920 -0.741189
+v -0.785262 157.345764 39.271198 1.000000 1.000000 1.000000
+vn -0.013462 -0.886296 -0.462923
+v 0.321040 157.035995 39.460579 1.000000 1.000000 1.000000
+vn 0.185405 -0.965440 -0.183167
+v 1.162914 157.008102 39.739399 1.000000 1.000000 1.000000
+vn -0.046056 -0.973870 -0.222385
+v -0.001400 156.882523 39.897797 1.000000 1.000000 1.000000
+vn -0.189976 -0.859466 -0.474581
+v -0.819062 157.090424 39.615601 1.000000 1.000000 1.000000
+vn -0.176668 -0.967285 -0.182067
+v -0.838010 156.948105 40.008797 1.000000 1.000000 1.000000
+vn 0.084460 -0.996361 -0.011437
+v 0.331146 156.840652 40.259178 1.000000 1.000000 1.000000
+vn -0.337209 -0.775246 -0.534120
+v -1.626616 157.281586 39.725399 1.000000 1.000000 1.000000
+vn -0.280760 -0.946756 0.157568
+v -1.667892 157.129486 40.933998 1.000000 1.000000 1.000000
+vn -0.320306 -0.929999 -0.180295
+v -1.664250 157.143448 40.118599 1.000000 1.000000 1.000000
+vn -0.128926 -0.978730 0.159580
+v -0.839836 156.934143 40.824181 1.000000 1.000000 1.000000
+vn 0.091160 -0.974417 0.205430
+v 0.329202 156.878326 40.669197 1.000000 1.000000 1.000000
+vn -0.068556 -0.862765 0.500936
+v -0.818236 157.097397 41.292599 1.000000 1.000000 1.000000
+vn 0.067267 -0.883343 0.463876
+v -0.001380 157.033218 41.181599 1.000000 1.000000 1.000000
+vn -0.210014 -0.857796 0.469127
+v -1.624968 157.287170 41.402397 1.000000 1.000000 1.000000
+vn -0.422566 -0.892689 0.156667
+v -2.461020 157.451813 41.041580 1.000000 1.000000 1.000000
+vn 0.100659 -0.659726 0.744734
+v -0.001352 157.289948 41.519379 1.000000 1.000000 1.000000
+vn -0.089344 -0.614846 0.783570
+v -1.557904 157.534134 41.739998 1.000000 1.000000 1.000000
+vn 0.242653 -0.847896 0.471373
+v 1.135440 157.156006 41.023376 1.000000 1.000000 1.000000
+vn 0.249331 -0.579021 0.776253
+v 1.088536 157.407166 41.361000 1.000000 1.000000 1.000000
+vn 0.169021 -0.273389 0.946937
+v 0.294912 157.541107 41.615780 1.000000 1.000000 1.000000
+vn 0.079429 -0.344060 0.935582
+v -0.752582 157.591354 41.770798 1.000000 1.000000 1.000000
+vn 0.374872 -0.784010 0.494772
+v 1.921410 157.391815 40.907997 1.000000 1.000000 1.000000
+vn 0.272780 -0.191398 0.942846
+v 2.452690 158.187149 41.269997 1.000000 1.000000 1.000000
+vn 0.421022 -0.525292 0.739465
+v 2.556718 157.972275 41.129398 1.000000 1.000000 1.000000
+vn 0.230906 -0.960054 0.158046
+v 1.165468 156.994141 40.555000 1.000000 1.000000 1.000000
+vn 0.374239 -0.913993 0.156723
+v 1.972214 157.236923 40.439598 1.000000 1.000000 1.000000
+vn 0.492594 -0.737997 0.461208
+v 2.666850 157.744843 40.791779 1.000000 1.000000 1.000000
+vn 0.330058 -0.926633 -0.180038
+v 1.967902 157.249496 39.624199 1.000000 1.000000 1.000000
+vn 0.506009 -0.848505 0.154902
+v 2.737340 157.599716 40.323399 1.000000 1.000000 1.000000
+vn 0.588678 -0.645464 0.486655
+v 3.352008 158.205292 40.676376 1.000000 1.000000 1.000000
+vn 0.623859 -0.766234 0.153902
+v 3.440612 158.071350 40.208000 1.000000 1.000000 1.000000
+vn 0.464596 -0.867265 -0.178889
+v 2.731364 157.612274 39.507980 1.000000 1.000000 1.000000
+vn -0.096257 -0.353763 0.930369
+v -2.866704 158.449478 42.093201 1.000000 1.000000 1.000000
+vn -0.203748 -0.599192 0.774245
+v -2.298708 157.834137 41.847797 1.000000 1.000000 1.000000
+vn -0.410038 -0.546006 0.730579
+v -3.751204 158.891800 42.078796 1.000000 1.000000 1.000000
+vn -0.124659 -0.278691 0.952256
+v -3.598612 159.069000 42.219200 1.000000 1.000000 1.000000
+vn -0.358677 -0.802635 0.476580
+v -2.397676 157.601105 41.509998 1.000000 1.000000 1.000000
+vn -0.568475 -0.678248 0.465635
+v -3.912720 158.704819 41.740997 1.000000 1.000000 1.000000
+vn -0.533670 -0.810608 0.241062
+v -3.199262 157.892731 41.146599 1.000000 1.000000 1.000000
+vn -0.783477 -0.602480 0.152255
+v -4.594130 159.258774 41.373798 1.000000 1.000000 1.000000
+vn -0.687767 -0.708332 0.158878
+v -4.016104 158.584824 41.272598 1.000000 1.000000 1.000000
+vn -0.668000 -0.562872 0.486777
+v -4.475862 159.362030 41.841980 1.000000 1.000000 1.000000
+vn -0.561160 -0.826548 -0.043793
+v -3.218084 157.862045 40.736599 1.000000 1.000000 1.000000
+vn -0.460241 -0.869298 -0.180275
+v -2.455652 157.464371 40.226196 1.000000 1.000000 1.000000
+vn -0.582115 -0.689549 -0.430888
+v -3.120056 158.025299 39.937981 1.000000 1.000000 1.000000
+vn -0.419735 -0.732579 -0.535864
+v -2.400096 157.595535 39.833000 1.000000 1.000000 1.000000
+vn -0.703932 -0.669689 -0.236637
+v -4.007336 158.594604 40.457176 1.000000 1.000000 1.000000
+vn -0.802189 -0.571398 -0.173196
+v -4.584114 159.267136 40.558197 1.000000 1.000000 1.000000
+vn -0.729405 -0.502712 -0.463950
+v -4.480394 159.357834 40.165176 1.000000 1.000000 1.000000
+vn -0.794477 -0.371302 -0.480563
+v -4.949900 160.094574 40.264000 1.000000 1.000000 1.000000
+vn -0.852374 -0.270901 -0.447293
+v -5.313820 160.892700 40.359798 1.000000 1.000000 1.000000
+vn -0.874327 -0.454120 -0.171252
+v -5.064474 160.022018 40.656979 1.000000 1.000000 1.000000
+vn -0.928065 -0.331295 -0.170114
+v -5.436812 160.838287 40.752998 1.000000 1.000000 1.000000
+vn -0.963936 -0.205424 -0.169197
+v -5.696794 161.699219 40.846199 1.000000 1.000000 1.000000
+vn -0.860683 -0.486507 0.150122
+v -5.075546 160.015045 41.472599 1.000000 1.000000 1.000000
+vn -0.919536 -0.363630 0.149087
+v -5.448710 160.832703 41.568378 1.000000 1.000000 1.000000
+vn -0.759637 -0.469193 0.450344
+v -4.944892 160.097366 41.940781 1.000000 1.000000 1.000000
+vn -0.801982 -0.356046 0.479642
+v -5.308452 160.895493 42.036797 1.000000 1.000000 1.000000
+vn -0.960036 -0.237617 0.147883
+v -5.709258 161.696426 41.661579 1.000000 1.000000 1.000000
+vn -0.860991 -0.246460 0.444917
+v -5.562278 161.735489 42.129997 1.000000 1.000000 1.000000
+vn -0.983167 -0.107981 0.147388
+v -5.856790 162.603378 41.754379 1.000000 1.000000 1.000000
+vn -0.503549 -0.384617 0.773633
+v -4.740762 160.227142 42.278580 1.000000 1.000000 1.000000
+vn -0.603633 -0.214756 0.767794
+v -5.332656 161.798279 42.467796 1.000000 1.000000 1.000000
+vn -0.272545 -0.218844 0.936924
+v -4.882282 161.083862 42.514977 1.000000 1.000000 1.000000
+vn 0.262913 -0.004527 0.964809
+v -4.342172 160.482483 42.422779 1.000000 1.000000 1.000000
+vn 0.196687 -0.149382 0.969020
+v -4.948922 164.263840 42.883400 1.000000 1.000000 1.000000
+vn -0.354907 0.013192 0.934808
+v -4.989348 165.101028 42.964798 1.000000 1.000000 1.000000
+vn 0.108216 -0.187763 0.976235
+v -3.791542 166.841019 43.189796 1.000000 1.000000 1.000000
+vn -0.666914 0.046177 0.743703
+v -5.403210 164.357315 42.739197 1.000000 1.000000 1.000000
+vn 0.202446 -0.390322 0.898145
+v -2.453218 167.690781 43.189796 1.000000 1.000000 1.000000
+vn 0.083217 -0.520739 0.849650
+v -0.984132 168.172165 43.189796 1.000000 1.000000 1.000000
+vn -0.047736 -0.536788 0.842366
+v 0.000000 168.234955 43.189796 1.000000 1.000000 1.000000
+vn -0.188679 -0.570713 0.799179
+v 1.318136 167.921005 43.185181 1.000000 1.000000 1.000000
+vn -0.336421 -0.516190 0.787635
+v 2.202430 167.491241 43.189796 1.000000 1.000000 1.000000
+vn -0.474902 -0.392781 0.787522
+v 3.288278 166.504745 43.189198 1.000000 1.000000 1.000000
+vn -0.581172 -0.143908 0.800955
+v 4.275866 164.559647 43.189796 1.000000 1.000000 1.000000
+vn 0.746198 -0.047881 0.664000
+v 5.921280 162.921524 43.188580 1.000000 1.000000 1.000000
+vn 0.715991 -0.290910 0.634609
+v 5.488184 160.760147 43.189796 1.000000 1.000000 1.000000
+vn 0.575109 -0.543739 0.611226
+v 4.201204 158.632263 43.189598 1.000000 1.000000 1.000000
+vn -0.266927 -0.808896 0.523868
+v 2.046658 157.197861 43.189598 1.000000 1.000000 1.000000
+vn -0.690318 -0.058655 0.721125
+v -5.494416 163.506165 42.651176 1.000000 1.000000 1.000000
+vn -0.896598 -0.008102 0.442772
+v -5.731002 163.517334 42.313400 1.000000 1.000000 1.000000
+vn -0.869583 -0.130303 0.476284
+v -5.706012 162.620132 42.222797 1.000000 1.000000 1.000000
+vn 0.967853 -0.203867 0.147302
+v 5.716416 161.728516 39.629601 1.000000 1.000000 1.000000
+vn 0.983597 -0.080855 0.161245
+v 5.846490 162.511292 39.527397 1.000000 1.000000 1.000000
+vn 0.891077 0.063736 0.449354
+v 5.733410 163.402924 39.880379 1.000000 1.000000 1.000000
+vn 0.576281 -0.691341 -0.435831
+v -2.424004 167.445190 31.309599 1.000000 1.000000 1.000000
+vn 0.690044 -0.721985 0.050756
+v -2.823858 166.873108 32.045799 1.000000 1.000000 1.000000
+vn 0.850123 -0.526523 -0.008082
+v -3.643404 165.879623 31.814798 1.000000 1.000000 1.000000
+vn 0.532525 -0.795763 -0.288409
+v -2.350220 167.316833 31.707199 1.000000 1.000000 1.000000
+vn 0.427493 -0.762906 -0.484999
+v -1.860526 167.770309 31.424398 1.000000 1.000000 1.000000
+vn 0.752855 -0.528735 -0.391981
+v -3.406764 166.546600 31.078398 1.000000 1.000000 1.000000
+vn 0.393856 -0.539747 -0.744010
+v -1.957486 168.006119 31.089598 1.000000 1.000000 1.000000
+vn 0.432285 -0.869990 -0.237163
+v -1.803902 167.632172 31.821798 1.000000 1.000000 1.000000
+vn 0.420152 -0.906059 0.050286
+v -1.783032 167.581940 32.276596 1.000000 1.000000 1.000000
+vn 0.244594 -0.859599 -0.448624
+v -0.628160 168.151230 31.654999 1.000000 1.000000 1.000000
+vn 0.253577 -0.704247 -0.663125
+v -0.660868 168.406586 31.320398 1.000000 1.000000 1.000000
+vn 0.022579 -0.671790 -0.740397
+v 0.698790 168.402405 31.552998 1.000000 1.000000 1.000000
+vn 0.061199 -0.881384 -0.468420
+v 0.018960 168.198669 31.771599 1.000000 1.000000 1.000000
+vn -0.175107 -0.859395 -0.480393
+v 1.290390 167.996353 32.002800 1.000000 1.000000 1.000000
+vn -0.225079 -0.682939 -0.694934
+v 1.920586 168.022858 31.770399 1.000000 1.000000 1.000000
+vn -0.004600 -0.972138 -0.234365
+v 0.018362 168.047974 32.168999 1.000000 1.000000 1.000000
+vn -0.401662 -0.714688 -0.572616
+v 2.400830 167.460541 32.221596 1.000000 1.000000 1.000000
+vn -0.256081 -0.934962 -0.245495
+v 1.251090 167.852631 32.400398 1.000000 1.000000 1.000000
+vn -0.501497 -0.545573 -0.671454
+v 3.563064 166.741943 32.117996 1.000000 1.000000 1.000000
+vn -0.555540 -0.729071 -0.399788
+v 2.924358 167.050323 32.337601 1.000000 1.000000 1.000000
+vn -0.171058 -0.984714 0.032824
+v 0.636446 167.941940 32.739998 1.000000 1.000000 1.000000
+vn -0.392159 -0.919877 0.006191
+v 1.749326 167.597290 32.957397 1.000000 1.000000 1.000000
+vn -0.718791 -0.548026 -0.427794
+v 3.785708 166.017776 32.569000 1.000000 1.000000 1.000000
+vn -0.560495 -0.828113 -0.008589
+v 2.300766 167.284729 33.073997 1.000000 1.000000 1.000000
+vn -0.528932 -0.787517 0.316304
+v 2.393762 167.447983 33.898201 1.000000 1.000000 1.000000
+vn -0.661293 -0.605554 0.442714
+v 2.915746 167.039154 34.014198 1.000000 1.000000 1.000000
+vn 0.001945 -0.999979 0.006130
+v 0.018146 167.992157 32.623798 1.000000 1.000000 1.000000
+vn -0.397492 -0.795798 0.456844
+v 1.286590 167.982407 33.679398 1.000000 1.000000 1.000000
+vn -0.548342 -0.428302 0.718247
+v 3.066792 167.235886 34.361801 1.000000 1.000000 1.000000
+vn -0.768409 -0.549299 0.328356
+v 3.376534 166.559158 34.129398 1.000000 1.000000 1.000000
+vn -0.752439 -0.656749 0.050158
+v 3.245378 166.430786 33.305000 1.000000 1.000000 1.000000
+vn -0.682235 -0.179900 0.708654
+v 4.305350 165.523819 34.707798 1.000000 1.000000 1.000000
+vn -0.820212 -0.449754 0.353516
+v 3.774560 166.009399 34.245399 1.000000 1.000000 1.000000
+vn -0.856779 -0.318607 0.405486
+v 4.093328 165.410797 34.360199 1.000000 1.000000 1.000000
+vn -0.921569 -0.178581 0.344701
+v 4.332284 164.767548 34.475601 1.000000 1.000000 1.000000
+vn -0.916574 -0.397063 0.047267
+v 3.934336 165.327072 33.535797 1.000000 1.000000 1.000000
+vn -0.939016 -0.124092 0.320703
+v 4.485738 164.093597 34.590797 1.000000 1.000000 1.000000
+vn -0.245801 0.134352 0.959964
+v 5.033548 163.411285 35.209599 1.000000 1.000000 1.000000
+vn -0.280380 0.038220 0.959128
+v 4.526938 165.641022 34.862396 1.000000 1.000000 1.000000
+vn -0.272547 -0.070983 0.959521
+v 3.224638 167.441010 34.516399 1.000000 1.000000 1.000000
+vn -0.350670 -0.577404 0.737317
+v 1.353258 168.227982 34.027199 1.000000 1.000000 1.000000
+vn -0.226963 -0.168362 0.959240
+v 1.422924 168.484726 34.181599 1.000000 1.000000 1.000000
+vn -0.225137 -0.876218 0.426094
+v 0.662182 168.131699 33.564400 1.000000 1.000000 1.000000
+vn -0.114142 -0.666372 0.736831
+v 0.019914 168.440079 33.795799 1.000000 1.000000 1.000000
+vn -0.154301 -0.221782 0.962810
+v 0.020964 168.706573 33.950401 1.000000 1.000000 1.000000
+vn 0.178207 -0.658296 0.731361
+v -1.951100 167.990768 33.448601 1.000000 1.000000 1.000000
+vn -0.055089 -0.259531 0.964162
+v -2.051472 168.234955 33.603199 1.000000 1.000000 1.000000
+vn 0.448309 -0.524127 0.724092
+v -3.572630 166.707062 33.102600 1.000000 1.000000 1.000000
+vn 0.065733 -0.259318 0.963552
+v -3.756444 166.885666 33.257198 1.000000 1.000000 1.000000
+vn 0.601719 -0.337666 0.723820
+v -4.545786 164.884750 32.767998 1.000000 1.000000 1.000000
+vn -0.364373 -0.028916 0.930804
+v -5.006150 165.050812 32.918800 1.000000 1.000000 1.000000
+vn 0.176181 -0.218314 0.959843
+v -4.779684 164.969864 32.922398 1.000000 1.000000 1.000000
+vn -0.677491 0.021952 0.735204
+v -5.410498 164.316864 32.662998 1.000000 1.000000 1.000000
+vn -0.880251 -0.030681 0.473515
+v -5.731916 163.488022 32.209000 1.000000 1.000000 1.000000
+vn -0.623888 -0.172933 0.762140
+v -5.469180 162.632690 32.430397 1.000000 1.000000 1.000000
+vn -0.351625 -0.123538 0.927954
+v -5.271758 163.468491 32.687401 1.000000 1.000000 1.000000
+vn -0.884968 -0.142686 0.443252
+v -5.704674 162.606186 32.092598 1.000000 1.000000 1.000000
+vn -0.841358 -0.256766 0.475593
+v -5.565304 161.743866 31.977198 1.000000 1.000000 1.000000
+vn -0.982539 -0.113379 0.147521
+v -5.855412 162.588043 31.624399 1.000000 1.000000 1.000000
+vn -0.965108 -0.199691 -0.169382
+v -5.699884 161.707581 30.693398 1.000000 1.000000 1.000000
+vn -0.959366 -0.240236 0.148000
+v -5.712360 161.704788 31.508999 1.000000 1.000000 1.000000
+vn -0.598329 -0.331092 0.729644
+v -5.096674 161.009918 32.199600 1.000000 1.000000 1.000000
+vn -0.815054 -0.367718 0.447740
+v -5.316124 160.913635 31.861998 1.000000 1.000000 1.000000
+vn -0.919058 -0.364767 0.149259
+v -5.456602 160.850845 31.393599 1.000000 1.000000 1.000000
+vn -0.930280 -0.324924 -0.170307
+v -5.444692 160.856430 30.578199 1.000000 1.000000 1.000000
+vn -0.740482 -0.468902 0.481475
+v -4.962956 160.132248 31.747198 1.000000 1.000000 1.000000
+vn -0.228414 -0.229915 0.946027
+v -4.889350 161.100616 32.340199 1.000000 1.000000 1.000000
+vn -0.446735 -0.453978 0.770930
+v -4.320464 159.562943 31.968798 1.000000 1.000000 1.000000
+vn -0.861550 -0.484904 0.150329
+v -5.094098 160.049927 31.278999 1.000000 1.000000 1.000000
+vn -0.683049 -0.571687 0.454554
+v -4.506506 159.403885 31.630999 1.000000 1.000000 1.000000
+vn -0.878221 -0.446369 -0.171708
+v -5.082988 160.056900 30.463398 1.000000 1.000000 1.000000
+vn -0.787376 -0.597521 0.151684
+v -4.625572 159.302032 31.162798 1.000000 1.000000 1.000000
+vn -0.547566 -0.650149 0.526762
+v -3.965608 158.757843 31.515999 1.000000 1.000000 1.000000
+vn -0.724384 -0.667100 -0.173914
+v -4.061512 158.649002 30.232199 1.000000 1.000000 1.000000
+vn -0.696335 -0.701135 0.153389
+v -4.070396 158.639252 31.047598 1.000000 1.000000 1.000000
+vn -0.809883 -0.560575 -0.172758
+v -4.615478 159.311798 30.347198 1.000000 1.000000 1.000000
+vn -0.856582 -0.258085 -0.446832
+v -5.321506 160.910843 30.184998 1.000000 1.000000 1.000000
+vn -0.813722 -0.368492 -0.449522
+v -4.967978 160.129456 30.070398 1.000000 1.000000 1.000000
+vn -0.745316 -0.461424 -0.481240
+v -4.511062 159.399704 29.954199 1.000000 1.000000 1.000000
+vn -0.578351 -0.667676 -0.468742
+v -3.345454 158.191345 29.723198 1.000000 1.000000 1.000000
+vn -0.681531 -0.572263 -0.456103
+v -3.969626 158.752274 29.838999 1.000000 1.000000 1.000000
+vn -0.407923 -0.803563 -0.433458
+v -1.995376 157.415543 29.504398 1.000000 1.000000 1.000000
+vn -0.493062 -0.842530 -0.216870
+v -2.710946 157.601105 29.999598 1.000000 1.000000 1.000000
+vn -0.261192 -0.948713 -0.178110
+v -1.250150 157.027634 29.782198 1.000000 1.000000 1.000000
+vn -0.266104 -0.824888 -0.498747
+v -1.221870 157.168564 29.389198 1.000000 1.000000 1.000000
+vn -0.173517 -0.646836 -0.742627
+v -0.399730 157.299728 28.928398 1.000000 1.000000 1.000000
+vn -0.101005 -0.978195 -0.181476
+v -0.426556 156.899261 29.665998 1.000000 1.000000 1.000000
+vn -0.133913 -0.871619 -0.471538
+v -0.416920 157.042969 29.272999 1.000000 1.000000 1.000000
+vn -0.340343 -0.924388 0.172257
+v -2.046026 157.266235 30.712999 1.000000 1.000000 1.000000
+vn -0.204515 -0.965942 0.158525
+v -1.252882 157.015076 30.597799 1.000000 1.000000 1.000000
+vn 0.048837 -0.982132 -0.181747
+v 0.407608 156.899261 29.549599 1.000000 1.000000 1.000000
+vn 0.095814 -0.982862 0.157486
+v 0.408490 156.885300 30.365198 1.000000 1.000000 1.000000
+vn -0.055296 -0.985781 0.158678
+v -0.427490 156.885300 30.481598 1.000000 1.000000 1.000000
+vn -0.000754 -0.881714 -0.471784
+v 0.398364 157.042969 29.156399 1.000000 1.000000 1.000000
+vn 0.195781 -0.963676 -0.181653
+v 1.225778 157.023438 29.434198 1.000000 1.000000 1.000000
+vn 0.131462 -0.873327 0.469061
+v 0.397962 157.048569 30.833399 1.000000 1.000000 1.000000
+vn 0.261671 -0.827787 0.496283
+v 1.196822 157.169952 30.717999 1.000000 1.000000 1.000000
+vn 0.242218 -0.957435 0.156999
+v 1.228460 157.009491 30.249798 1.000000 1.000000 1.000000
+vn 0.002082 -0.866276 0.499561
+v -0.416498 157.049957 30.949799 1.000000 1.000000 1.000000
+vn 0.169249 -0.603993 0.778811
+v 0.381508 157.305298 31.171198 1.000000 1.000000 1.000000
+vn 0.385330 -0.797532 0.464181
+v 1.972034 157.411346 30.602798 1.000000 1.000000 1.000000
+vn 0.343423 -0.575747 0.742008
+v 1.890588 157.652740 30.940399 1.000000 1.000000 1.000000
+vn 0.383576 -0.910258 0.155886
+v 2.024164 157.257874 30.134399 1.000000 1.000000 1.000000
+vn 0.338744 -0.923424 -0.180392
+v 2.019736 157.270416 29.318998 1.000000 1.000000 1.000000
+vn 0.495185 -0.717749 0.489519
+v 2.703722 157.767166 30.487997 1.000000 1.000000 1.000000
+vn 0.471915 -0.430604 0.769335
+v 3.251108 158.443893 30.709599 1.000000 1.000000 1.000000
+vn 0.243888 -0.221505 0.944168
+v 1.813648 157.880188 31.080999 1.000000 1.000000 1.000000
+vn 0.513690 -0.843894 0.154808
+v 2.775190 157.623428 30.019798 1.000000 1.000000 1.000000
+vn 0.600193 -0.656491 0.456933
+v 3.391148 158.237381 30.371798 1.000000 1.000000 1.000000
+vn 0.472362 -0.863057 -0.178904
+v 2.769126 157.634598 29.204199 1.000000 1.000000 1.000000
+vn 0.629712 -0.761492 0.153600
+v 3.480782 158.104828 29.903599 1.000000 1.000000 1.000000
+vn 0.679140 -0.552800 0.482888
+v 4.005920 158.801102 30.256798 1.000000 1.000000 1.000000
+vn 0.592646 -0.785681 -0.177413
+v 3.473172 158.115997 29.087999 1.000000 1.000000 1.000000
+vn 0.698146 -0.693997 -0.175957
+v 4.102816 158.693665 28.972799 1.000000 1.000000 1.000000
+vn 0.731084 -0.665199 0.151745
+v 4.111790 158.683899 29.788399 1.000000 1.000000 1.000000
+vn 0.263144 -0.842580 -0.469909
+v 1.974030 157.405762 28.925798 1.000000 1.000000 1.000000
+vn 0.385996 -0.794927 -0.468080
+v 2.706452 157.761581 28.811199 1.000000 1.000000 1.000000
+vn 0.486848 -0.720818 -0.493356
+v 3.394572 158.231812 28.694998 1.000000 1.000000 1.000000
+vn 0.600637 -0.654289 -0.459502
+v 4.009962 158.796921 28.579798 1.000000 1.000000 1.000000
+vn 0.789119 -0.589051 -0.174096
+v 4.654450 159.364807 28.856998 1.000000 1.000000 1.000000
+vn 0.761303 -0.466614 0.450211
+v 4.544524 159.456909 30.140799 1.000000 1.000000 1.000000
+vn 0.816935 -0.556769 0.150422
+v 4.664646 159.356445 29.672598 1.000000 1.000000 1.000000
+vn 0.693530 -0.551431 -0.463615
+v 4.549120 159.452728 28.463799 1.000000 1.000000 1.000000
+vn 0.859419 -0.466043 -0.210245
+v 5.114814 160.121078 28.740398 1.000000 1.000000 1.000000
+vn 0.883871 -0.443499 0.148598
+v 5.126002 160.114105 29.555998 1.000000 1.000000 1.000000
+vn 0.394200 -0.545952 -0.739285
+v 3.844340 158.979706 28.235197 1.000000 1.000000 1.000000
+vn 0.462102 -0.419372 -0.781402
+v 4.361226 159.610397 28.119398 1.000000 1.000000 1.000000
+vn 0.821290 -0.389176 -0.417163
+v 5.311244 160.888519 28.245199 1.000000 1.000000 1.000000
+vn 0.951874 -0.256223 -0.168183
+v 5.693434 161.682465 28.522999 1.000000 1.000000 1.000000
+vn 0.931400 -0.325923 0.162072
+v 5.446108 160.828522 29.453798 1.000000 1.000000 1.000000
+vn 0.839031 -0.260009 -0.477935
+v 5.564608 161.718750 28.129999 1.000000 1.000000 1.000000
+vn 0.967094 -0.207261 0.147555
+v 5.705896 161.679672 29.338598 1.000000 1.000000 1.000000
+vn 0.978458 -0.118102 -0.169330
+v 5.840258 162.571289 28.406799 1.000000 1.000000 1.000000
+vn 0.589561 -0.348621 -0.728616
+v 5.091872 160.986191 27.900599 1.000000 1.000000 1.000000
+vn 0.883632 -0.145096 -0.445131
+v 5.708110 162.586655 28.013798 1.000000 1.000000 1.000000
+vn 0.224999 -0.565757 -0.793281
+v 2.594660 157.989014 28.466599 1.000000 1.000000 1.000000
+vn 0.125996 -0.856689 -0.500209
+v 1.198030 157.164383 29.041199 1.000000 1.000000 1.000000
+vn 0.986030 -0.078102 0.147119
+v 5.853044 162.569901 29.222399 1.000000 1.000000 1.000000
+vn 0.880499 -0.024830 0.473397
+v 5.702344 162.586655 29.690598 1.000000 1.000000 1.000000
+vn 0.878337 -0.161269 0.450018
+v 5.558982 161.720139 29.806799 1.000000 1.000000 1.000000
+vn 0.674718 -0.064607 0.735243
+v 5.329438 161.782928 30.144598 1.000000 1.000000 1.000000
+vn 0.359774 0.101021 0.927555
+v 5.244450 162.639664 30.168999 1.000000 1.000000 1.000000
+vn 0.365788 0.005798 0.930680
+v 4.879824 161.081085 30.400398 1.000000 1.000000 1.000000
+vn 0.626226 -0.202868 0.752785
+v 4.787794 160.320618 30.361998 1.000000 1.000000 1.000000
+vn 0.822860 -0.343591 0.452601
+v 4.994010 160.193649 30.024199 1.000000 1.000000 1.000000
+vn 0.345957 -0.135652 0.928392
+v 3.684242 159.158310 30.734999 1.000000 1.000000 1.000000
+vn 0.585833 -0.281449 0.759991
+v 4.356874 159.613190 30.478598 1.000000 1.000000 1.000000
+vn 0.122238 -0.336917 0.933566
+v -0.383110 157.546692 31.428198 1.000000 1.000000 1.000000
+vn 0.016468 -0.344428 0.938668
+v -1.833360 157.888550 31.659599 1.000000 1.000000 1.000000
+vn -0.051671 -0.652122 0.756352
+v -1.170262 157.425293 31.403799 1.000000 1.000000 1.000000
+vn -0.357614 -0.805493 0.472539
+v -2.646944 157.735062 31.283398 1.000000 1.000000 1.000000
+vn -0.153063 -0.866260 0.475568
+v -1.220642 157.175537 31.065998 1.000000 1.000000 1.000000
+vn -0.218433 -0.598712 0.770605
+v -2.537690 157.962509 31.621199 1.000000 1.000000 1.000000
+vn -0.469554 -0.868885 0.156711
+v -2.716880 157.588562 30.815199 1.000000 1.000000 1.000000
+vn -0.588495 -0.793442 0.155317
+v -3.430378 158.062973 30.931799 1.000000 1.000000 1.000000
+vn -0.621341 -0.763433 -0.176368
+v -3.422884 158.074142 30.116198 1.000000 1.000000 1.000000
+vn -0.475027 -0.700887 0.532078
+v -3.342068 158.196915 31.399998 1.000000 1.000000 1.000000
+vn -0.189202 -0.403218 0.895331
+v -3.647266 159.117844 31.994198 1.000000 1.000000 1.000000
+vn 0.235594 -0.149593 0.960270
+v -5.033278 163.458725 32.691200 1.000000 1.000000 1.000000
+vn 0.814151 -0.379203 0.439732
+v -4.321984 164.805222 32.420197 1.000000 1.000000 1.000000
+vn 0.808783 -0.501294 0.307528
+v -3.790588 165.985672 32.639000 1.000000 1.000000 1.000000
+vn 0.983659 -0.177075 0.032555
+v -4.307036 164.099182 31.480799 1.000000 1.000000 1.000000
+vn 0.579077 -0.742990 0.335612
+v -2.937928 167.019623 32.869999 1.000000 1.000000 1.000000
+vn 0.635044 -0.631887 0.444339
+v -3.396748 166.536835 32.754997 1.000000 1.000000 1.000000
+vn 0.928339 -0.371674 0.006639
+v -3.950198 165.292191 31.698198 1.000000 1.000000 1.000000
+vn 0.475781 -0.799837 0.365915
+v -2.416872 167.432648 32.986198 1.000000 1.000000 1.000000
+vn 0.173325 -0.913006 0.369295
+v -1.253050 167.993561 33.216400 1.000000 1.000000 1.000000
+vn 0.331330 -0.842204 0.425338
+v -1.855054 167.757751 33.100998 1.000000 1.000000 1.000000
+vn 0.108361 -0.932783 0.343763
+v -0.626312 168.137283 33.331596 1.000000 1.000000 1.000000
+vn -0.099774 -0.885410 0.453977
+v 0.018902 168.184723 33.448196 1.000000 1.000000 1.000000
+vn 0.170062 -0.985375 0.010687
+v -0.602010 167.947510 32.507401 1.000000 1.000000 1.000000
+vn 0.736733 -0.382317 -0.557725
+v -3.801790 165.994049 30.962399 1.000000 1.000000 1.000000
+vn 0.896656 -0.115159 0.427489
+v -4.551284 163.439194 32.188999 1.000000 1.000000 1.000000
+vn -0.700988 -0.092284 0.707177
+v 4.551026 164.866623 29.670998 1.000000 1.000000 1.000000
+vn -0.272883 0.073380 0.959245
+v 4.785258 164.950333 29.825598 1.000000 1.000000 1.000000
+vn -0.603423 -0.353613 0.714730
+v 3.539170 166.746124 29.324999 1.000000 1.000000 1.000000
+vn -0.280759 -0.036355 0.959089
+v 3.721322 166.926132 29.479597 1.000000 1.000000 1.000000
+vn -0.430707 -0.526614 0.732918
+v 1.966216 167.982407 28.990198 1.000000 1.000000 1.000000
+vn -0.249631 -0.139379 0.958258
+v 2.067424 168.225174 29.144798 1.000000 1.000000 1.000000
+vn -0.210713 -0.643854 0.735563
+v 0.671936 168.388443 28.758999 1.000000 1.000000 1.000000
+vn -0.184847 -0.199014 0.962406
+v 0.706550 168.653564 28.913601 1.000000 1.000000 1.000000
+vn -0.507923 -0.732295 0.453606
+v 1.869370 167.749374 28.642599 1.000000 1.000000 1.000000
+vn -0.349847 -0.835829 0.423080
+v 1.269538 167.989365 28.527399 1.000000 1.000000 1.000000
+vn -0.144230 -0.989523 0.006507
+v 0.613990 167.946121 27.586998 1.000000 1.000000 1.000000
+vn -0.313475 -0.948999 0.033670
+v 1.220208 167.805191 27.703199 1.000000 1.000000 1.000000
+vn -0.633954 -0.706465 0.314659
+v 2.898970 167.054504 28.861399 1.000000 1.000000 1.000000
+vn -0.227591 -0.862447 0.452092
+v 0.638822 168.135880 28.411398 1.000000 1.000000 1.000000
+vn 0.023379 -0.999674 0.010218
+v -0.006106 167.992157 27.470598 1.000000 1.000000 1.000000
+vn -0.147531 -0.961063 -0.233650
+v 0.621190 168.000534 27.132198 1.000000 1.000000 1.000000
+vn -0.389560 -0.887983 -0.244395
+v 1.817782 167.625198 27.363598 1.000000 1.000000 1.000000
+vn -0.520072 -0.854102 0.006013
+v 2.279292 167.297287 27.920597 1.000000 1.000000 1.000000
+vn -0.737834 -0.512632 0.439102
+v 3.364858 166.574509 28.977398 1.000000 1.000000 1.000000
+vn -0.669886 -0.742416 -0.008453
+v 2.786354 166.906586 28.037201 1.000000 1.000000 1.000000
+vn -0.652185 -0.646726 -0.395474
+v 3.374796 166.584274 27.300798 1.000000 1.000000 1.000000
+vn -0.498850 -0.654101 -0.568596
+v 2.907532 167.065674 27.184799 1.000000 1.000000 1.000000
+vn -0.299583 -0.826283 -0.476976
+v 1.874882 167.761948 26.965998 1.000000 1.000000 1.000000
+vn -0.321668 -0.644880 -0.693297
+v 2.502412 167.693558 26.733398 1.000000 1.000000 1.000000
+vn -0.574424 -0.474380 -0.667084
+v 3.968750 166.183807 27.081198 1.000000 1.000000 1.000000
+vn -0.786518 -0.448573 -0.424466
+v 4.098220 165.433121 27.531998 1.000000 1.000000 1.000000
+vn -0.076590 -0.667665 -0.740511
+v 1.339702 168.250305 26.516199 1.000000 1.000000 1.000000
+vn -0.069635 -0.880928 -0.468100
+v 0.640708 168.149841 26.734798 1.000000 1.000000 1.000000
+vn 0.148230 -0.731894 -0.665101
+v -0.006648 168.456802 26.283398 1.000000 1.000000 1.000000
+vn 0.115801 -0.885166 -0.450634
+v -0.006342 168.198669 26.618198 1.000000 1.000000 1.000000
+vn 0.313666 -0.814884 -0.487420
+v -1.275132 168.003326 26.387598 1.000000 1.000000 1.000000
+vn 0.302755 -0.922606 -0.239033
+v -1.236330 167.858215 26.784998 1.000000 1.000000 1.000000
+vn 0.312298 -0.587280 -0.746707
+v -1.341556 168.250305 26.052799 1.000000 1.000000 1.000000
+vn 0.413474 -0.862936 -0.290482
+v -1.817240 167.625198 26.670399 1.000000 1.000000 1.000000
+vn 0.473231 -0.763280 -0.439836
+v -1.874290 167.763336 26.272799 1.000000 1.000000 1.000000
+vn 0.284570 -0.957327 0.050457
+v -1.222018 167.805191 27.239798 1.000000 1.000000 1.000000
+vn -0.031082 -0.937823 0.345720
+v -0.006324 168.183319 28.294798 1.000000 1.000000 1.000000
+vn 0.206010 -0.880812 0.426299
+v -1.271378 167.989365 28.064198 1.000000 1.000000 1.000000
+vn 0.582860 -0.810943 0.051445
+v -2.342172 167.256821 27.008999 1.000000 1.000000 1.000000
+vn 0.036947 -0.928535 0.369401
+v -0.645222 168.134491 28.179398 1.000000 1.000000 1.000000
+vn 0.467864 -0.816441 0.338420
+v -2.436790 167.418686 27.833199 1.000000 1.000000 1.000000
+vn 0.772507 -0.634953 -0.008210
+v -3.278970 166.393112 26.777998 1.000000 1.000000 1.000000
+vn 0.355304 -0.858768 0.369158
+v -1.868766 167.749374 27.949398 1.000000 1.000000 1.000000
+vn 0.079997 -0.676356 0.732218
+v -1.337190 168.233566 28.411798 1.000000 1.000000 1.000000
+vn -0.092370 -0.249643 0.963922
+v -1.405968 168.490295 28.566399 1.000000 1.000000 1.000000
+vn 0.368690 -0.578662 0.727473
+v -3.104824 167.202408 28.065798 1.000000 1.000000 1.000000
+vn 0.026663 -0.265067 0.963861
+v -3.264562 167.406128 28.220398 1.000000 1.000000 1.000000
+vn -0.366011 0.017630 0.930443
+v -4.733114 165.773590 27.881998 1.000000 1.000000 1.000000
+vn 0.142359 -0.238843 0.960567
+v -4.518994 165.659164 27.885599 1.000000 1.000000 1.000000
+vn 0.548771 -0.412141 0.727317
+v -4.297856 165.540558 27.730997 1.000000 1.000000 1.000000
+vn -0.366100 -0.078159 0.927288
+v -5.195076 164.244293 27.650599 1.000000 1.000000 1.000000
+vn 0.667423 -0.209893 0.714487
+v -4.717330 164.152206 27.499798 1.000000 1.000000 1.000000
+vn 0.211228 -0.178529 0.960994
+v -4.960046 164.199646 27.654398 1.000000 1.000000 1.000000
+vn 0.756268 -0.481306 0.443174
+v -4.086258 165.427536 27.383398 1.000000 1.000000 1.000000
+vn 0.851318 -0.336230 0.402750
+v -4.328176 164.787079 27.268198 1.000000 1.000000 1.000000
+vn 0.988061 -0.153965 0.005422
+v -4.310898 164.075455 26.327799 1.000000 1.000000 1.000000
+vn 0.953131 -0.300801 0.032572
+v -4.160108 164.727081 26.443998 1.000000 1.000000 1.000000
+vn 0.733980 -0.604028 0.310522
+v -3.411452 166.520081 27.602198 1.000000 1.000000 1.000000
+vn 0.874398 -0.227337 0.428657
+v -4.485082 164.108948 27.151999 1.000000 1.000000 1.000000
+vn 0.872168 -0.489158 0.006943
+v -3.656626 165.855911 26.661398 1.000000 1.000000 1.000000
+vn 0.899615 -0.369111 -0.233345
+v -3.973566 165.367538 26.104399 1.000000 1.000000 1.000000
+vn 0.678249 -0.475373 -0.560355
+v -3.421520 166.529861 25.925598 1.000000 1.000000 1.000000
+vn 0.674046 -0.623528 -0.396075
+v -2.960690 167.018219 26.041599 1.000000 1.000000 1.000000
+vn 0.495805 -0.549205 -0.672720
+v -2.571344 167.648911 25.821999 1.000000 1.000000 1.000000
+vn 0.540986 -0.711688 0.448146
+v -2.951974 167.007065 27.718199 1.000000 1.000000 1.000000
+vn 0.267190 -0.090640 0.959372
+v -4.882398 161.905716 27.307198 1.000000 1.000000 1.000000
+vn -0.259401 -0.199132 0.945017
+v -5.113746 161.841537 27.303398 1.000000 1.000000 1.000000
+vn -0.245077 -0.374362 0.894310
+v -4.132298 159.694107 26.957399 1.000000 1.000000 1.000000
+vn -0.639002 -0.251552 0.726910
+v -5.330570 161.782928 27.162798 1.000000 1.000000 1.000000
+vn -0.506706 -0.391504 0.768097
+v -4.743350 160.234100 26.931999 1.000000 1.000000 1.000000
+vn -0.642343 -0.092956 0.760759
+v -5.495742 163.444778 27.393599 1.000000 1.000000 1.000000
+vn -0.034303 -0.343071 0.938683
+v -2.489756 158.209488 26.622799 1.000000 1.000000 1.000000
+vn -0.302706 -0.562503 0.769389
+v -3.178250 158.386688 26.584398 1.000000 1.000000 1.000000
+vn -0.146571 -0.637257 0.756585
+v -1.891014 157.652740 26.366999 1.000000 1.000000 1.000000
+vn 0.071424 -0.348784 0.934478
+v -1.095946 157.656921 26.391399 1.000000 1.000000 1.000000
+vn 0.208865 -0.250634 0.945282
+v 1.122236 157.662506 26.044197 1.000000 1.000000 1.000000
+vn 0.078559 -0.620327 0.780399
+v -0.368898 157.303909 26.134399 1.000000 1.000000 1.000000
+vn 0.406251 -0.489300 0.771716
+v 2.617140 158.008545 25.672798 1.000000 1.000000 1.000000
+vn 0.324121 -0.179431 0.928843
+v 3.135930 158.651794 25.698198 1.000000 1.000000 1.000000
+vn 0.256597 -0.616630 0.744262
+v 1.169858 157.425293 25.903599 1.000000 1.000000 1.000000
+vn 0.593341 -0.281224 0.754228
+v 4.375260 159.641098 25.325199 1.000000 1.000000 1.000000
+vn 0.541447 -0.354804 0.762200
+v 3.859546 159.004822 25.441799 1.000000 1.000000 1.000000
+vn 0.691205 -0.562470 0.453721
+v 4.025786 158.822021 25.103998 1.000000 1.000000 1.000000
+vn 0.769862 -0.446820 0.455702
+v 4.563708 159.486221 24.987398 1.000000 1.000000 1.000000
+vn 0.660369 -0.149149 0.735980
+v 5.095644 161.009918 25.107798 1.000000 1.000000 1.000000
+vn 0.596274 -0.638346 0.486797
+v 3.409738 158.251343 25.219801 1.000000 1.000000 1.000000
+vn 0.632923 -0.758807 0.153690
+v 3.499862 158.118790 24.751598 1.000000 1.000000 1.000000
+vn 0.734906 -0.660921 0.151979
+v 4.132196 158.704819 24.635599 1.000000 1.000000 1.000000
+vn 0.501887 -0.732124 0.460547
+v 2.729858 157.783905 25.334999 1.000000 1.000000 1.000000
+vn 0.516414 -0.842123 0.155389
+v 2.802022 157.638779 24.866798 1.000000 1.000000 1.000000
+vn 0.595506 -0.783446 -0.177722
+v 3.492228 158.129944 23.935999 1.000000 1.000000 1.000000
+vn 0.702123 -0.689914 -0.176187
+v 4.123158 158.714600 23.820198 1.000000 1.000000 1.000000
+vn 0.817727 -0.555495 0.150826
+v 4.684320 159.385742 24.519199 1.000000 1.000000 1.000000
+vn 0.789882 -0.575239 -0.212570
+v 4.674096 159.394119 23.703598 1.000000 1.000000 1.000000
+vn 0.611047 -0.638753 -0.467564
+v 4.029854 158.817841 23.426998 1.000000 1.000000 1.000000
+vn 0.502520 -0.729713 -0.463674
+v 3.413190 158.245758 23.542999 1.000000 1.000000 1.000000
+vn 0.475285 -0.861283 -0.179710
+v 2.795906 157.651352 24.051197 1.000000 1.000000 1.000000
+vn 0.378744 -0.781232 -0.496215
+v 2.732626 157.778320 23.658199 1.000000 1.000000 1.000000
+vn 0.398728 -0.476587 -0.783506
+v 3.863408 159.000626 23.082600 1.000000 1.000000 1.000000
+vn 0.761811 -0.492589 -0.420714
+v 4.965274 160.126678 23.208199 1.000000 1.000000 1.000000
+vn 0.535257 -0.421467 -0.732028
+v 4.760190 160.256439 22.863800 1.000000 1.000000 1.000000
+vn 0.797398 -0.365317 -0.480312
+v 5.320490 160.910843 23.093197 1.000000 1.000000 1.000000
+vn 0.911042 -0.376247 -0.168645
+v 5.443676 160.857819 23.486198 1.000000 1.000000 1.000000
+vn 0.639174 -0.260075 -0.723752
+v 5.341526 161.812241 22.632397 1.000000 1.000000 1.000000
+vn 0.233568 -0.199066 -0.951745
+v 5.102402 161.876419 22.481400 1.000000 1.000000 1.000000
+vn 0.611775 -0.140710 -0.778417
+v 5.474872 162.646652 22.515999 1.000000 1.000000 1.000000
+vn 0.883859 -0.141876 -0.445718
+v 5.710738 162.620132 22.860397 1.000000 1.000000 1.000000
+vn 0.857048 -0.255834 -0.447234
+v 5.571664 161.749435 22.976997 1.000000 1.000000 1.000000
+vn 0.955497 -0.241101 -0.169990
+v 5.700656 161.714569 23.369999 1.000000 1.000000 1.000000
+vn 0.881467 -0.443164 0.163161
+v 5.091356 160.048538 24.416998 1.000000 1.000000 1.000000
+vn 0.932572 -0.329240 0.148024
+v 5.455584 160.852249 24.301798 1.000000 1.000000 1.000000
+vn 0.849801 -0.271746 0.451655
+v 5.315108 160.913635 24.769999 1.000000 1.000000 1.000000
+vn 0.870144 -0.135475 0.473811
+v 5.566026 161.750839 24.653799 1.000000 1.000000 1.000000
+vn 0.968197 -0.202119 0.147453
+v 5.713120 161.711761 24.185598 1.000000 1.000000 1.000000
+vn 0.896494 -0.026380 0.442270
+v 5.704956 162.621521 24.537399 1.000000 1.000000 1.000000
+vn 0.647578 0.052257 0.760205
+v 5.469398 162.646652 24.875198 1.000000 1.000000 1.000000
+vn 0.986365 -0.073763 0.147117
+v 5.855746 162.604782 24.068998 1.000000 1.000000 1.000000
+vn 0.979004 -0.113747 -0.169154
+v 5.842948 162.606186 23.253597 1.000000 1.000000 1.000000
+vn 0.370745 0.054987 0.927105
+v 5.119088 161.872238 25.132198 1.000000 1.000000 1.000000
+vn -0.647087 -0.272984 0.711869
+v 3.945602 166.190781 24.288198 1.000000 1.000000 1.000000
+vn -0.283619 -0.000676 0.958937
+v 4.148664 166.342880 24.442799 1.000000 1.000000 1.000000
+vn -0.501931 -0.464942 0.729311
+v 2.542530 167.647522 23.953398 1.000000 1.000000 1.000000
+vn -0.267171 -0.106337 0.957764
+v 2.673390 167.873566 24.107998 1.000000 1.000000 1.000000
+vn -0.302896 -0.609425 0.732704
+v 1.311440 168.241928 23.722198 1.000000 1.000000 1.000000
+vn -0.211971 -0.174428 0.961584
+v 1.378956 168.498672 23.876799 1.000000 1.000000 1.000000
+vn -0.606193 -0.655966 0.449710
+v 2.417310 167.431229 23.605799 1.000000 1.000000 1.000000
+vn -0.466919 -0.778006 0.420349
+v 1.853238 167.757751 23.490597 1.000000 1.000000 1.000000
+vn -0.288246 -0.957539 0.005753
+v 1.198382 167.810776 22.550198 1.000000 1.000000 1.000000
+vn -0.446910 -0.893967 0.033082
+v 1.781230 167.581940 22.666397 1.000000 1.000000 1.000000
+vn -0.725127 -0.614585 0.310606
+v 3.350168 166.591248 23.824598 1.000000 1.000000 1.000000
+vn -0.351323 -0.821017 0.450004
+v 1.246838 167.996353 23.374397 1.000000 1.000000 1.000000
+vn -0.124146 -0.992210 0.010379
+v 0.589906 167.948914 22.433800 1.000000 1.000000 1.000000
+vn -0.286065 -0.929245 -0.233818
+v 1.212428 167.865189 22.095398 1.000000 1.000000 1.000000
+vn -0.634357 -0.773013 0.006505
+v 2.766770 166.923340 22.883797 1.000000 1.000000 1.000000
+vn -0.512421 -0.823484 -0.243514
+v 2.350606 167.315430 22.326797 1.000000 1.000000 1.000000
+vn -0.800499 -0.411554 0.435689
+v 3.751282 166.047073 23.940598 1.000000 1.000000 1.000000
+vn -0.764521 -0.644551 -0.007897
+v 3.220028 166.461487 23.000397 1.000000 1.000000 1.000000
+vn -0.735155 -0.553301 -0.391671
+v 3.762368 166.054047 22.264000 1.000000 1.000000 1.000000
+vn -0.586556 -0.579876 -0.565416
+v 3.360054 166.601028 22.147999 1.000000 1.000000 1.000000
+vn -0.415803 -0.775865 -0.474491
+v 2.424442 167.443802 21.929199 1.000000 1.000000 1.000000
+vn -0.634818 -0.395177 -0.663959
+v 4.300508 165.569855 22.044399 1.000000 1.000000 1.000000
+vn -0.839674 -0.342970 -0.421092
+v 4.334394 164.808014 22.495197 1.000000 1.000000 1.000000
+vn -0.412804 -0.596255 -0.688530
+v 3.037618 167.283340 21.696598 1.000000 1.000000 1.000000
+vn -0.197574 -0.862134 -0.466572
+v 1.250522 168.010300 21.697998 1.000000 1.000000 1.000000
+vn -0.174767 -0.651761 -0.738014
+v 1.955632 168.006119 21.479397 1.000000 1.000000 1.000000
+vn 0.039383 -0.744776 -0.666151
+v 0.647702 168.409378 21.246597 1.000000 1.000000 1.000000
+vn -0.014948 -0.892165 -0.451462
+v 0.615582 168.152634 21.581398 1.000000 1.000000 1.000000
+vn 0.164751 -0.956451 -0.240955
+v -0.645732 167.997757 21.748199 1.000000 1.000000 1.000000
+vn 0.191299 -0.850337 -0.490236
+v -0.665986 168.147049 21.350800 1.000000 1.000000 1.000000
+vn 0.223701 -0.622779 -0.749736
+v -0.700670 168.402405 21.015999 1.000000 1.000000 1.000000
+vn 0.283975 -0.913006 -0.292880
+v -1.250456 167.852631 21.633598 1.000000 1.000000 1.000000
+vn 0.359530 -0.821284 -0.442979
+v -1.289708 167.997757 21.236000 1.000000 1.000000 1.000000
+vn 0.141838 -0.988643 0.049670
+v -0.638258 167.941940 22.202999 1.000000 1.000000 1.000000
+vn -0.168738 -0.923035 0.345737
+v 0.613764 168.138672 23.257999 1.000000 1.000000 1.000000
+vn 0.074028 -0.900043 0.429468
+v -0.664032 168.131699 23.027397 1.000000 1.000000 1.000000
+vn 0.462477 -0.885134 0.051506
+v -1.816894 167.565186 21.972198 1.000000 1.000000 1.000000
+vn -0.100102 -0.923383 0.370600
+v -0.025390 168.184723 23.142597 1.000000 1.000000 1.000000
+vn 0.346021 -0.873689 0.341959
+v -1.890292 167.738205 22.796398 1.000000 1.000000 1.000000
+vn 0.677603 -0.735387 -0.007777
+v -2.853496 166.846588 21.740997 1.000000 1.000000 1.000000
+vn 0.226974 -0.900384 0.371202
+v -1.285906 167.983795 22.912598 1.000000 1.000000 1.000000
+vn -0.020570 -0.679890 0.733026
+v -0.698392 168.385651 23.375000 1.000000 1.000000 1.000000
+vn -0.127596 -0.235650 0.963425
+v -0.734292 168.649368 23.529598 1.000000 1.000000 1.000000
+vn 0.281589 -0.622941 0.729831
+v -2.579224 167.623795 23.028999 1.000000 1.000000 1.000000
+vn -0.012368 -0.265927 0.963914
+v -2.711912 167.848450 23.183598 1.000000 1.000000 1.000000
+vn 0.485439 -0.479668 0.730936
+v -3.969858 166.153122 22.694199 1.000000 1.000000 1.000000
+vn -0.360091 0.063471 0.930756
+v -4.371886 166.447540 22.844997 1.000000 1.000000 1.000000
+vn 0.105181 -0.254640 0.961299
+v -4.174116 166.303802 22.848797 1.000000 1.000000 1.000000
+vn 0.684041 -0.576618 0.446766
+v -3.774404 166.010788 22.346600 1.000000 1.000000 1.000000
+vn 0.799533 -0.442983 0.405602
+v -4.094678 165.410797 22.231400 1.000000 1.000000 1.000000
+vn 0.632493 -0.292909 0.717047
+v -4.559820 164.840103 22.462997 1.000000 1.000000 1.000000
+vn 0.182970 -0.203975 0.961726
+v -4.794438 164.922424 22.617599 1.000000 1.000000 1.000000
+vn -0.374353 -0.031298 0.926758
+v -5.021600 165.001968 22.613800 1.000000 1.000000 1.000000
+vn -0.649786 -0.011407 0.760031
+v -5.419934 164.254074 22.356800 1.000000 1.000000 1.000000
+vn -0.281558 -0.157805 0.946479
+v -5.242880 162.610367 22.266598 1.000000 1.000000 1.000000
+vn 0.251331 -0.123937 0.959933
+v -5.005700 162.638275 22.270397 1.000000 1.000000 1.000000
+vn -0.189878 -0.259359 0.946931
+v -4.537392 160.331787 21.919598 1.000000 1.000000 1.000000
+vn -0.673702 -0.156875 0.722160
+v -5.465190 162.582458 22.125999 1.000000 1.000000 1.000000
+vn -0.589469 -0.263404 0.763639
+v -5.323862 161.756424 22.010399 1.000000 1.000000 1.000000
+vn -0.083988 -0.334439 0.938667
+v -3.104580 158.626678 21.586800 1.000000 1.000000 1.000000
+vn -0.376988 -0.521218 0.765645
+v -3.755106 158.895981 21.546600 1.000000 1.000000 1.000000
+vn -0.238717 -0.610593 0.755109
+v -2.581992 157.986221 21.331200 1.000000 1.000000 1.000000
+vn 0.016653 -0.352604 0.935624
+v -1.793988 157.873199 21.355400 1.000000 1.000000 1.000000
+vn -0.031971 -0.647022 0.761801
+v -1.118518 157.414139 21.098400 1.000000 1.000000 1.000000
+vn 0.121965 -0.334051 0.934631
+v -0.337820 157.543900 21.123600 1.000000 1.000000 1.000000
+vn 0.249855 -0.348191 0.903513
+v 1.077632 157.652740 20.902397 1.000000 1.000000 1.000000
+vn 0.191384 -0.639557 0.744540
+v 0.427320 157.306702 20.866798 1.000000 1.000000 1.000000
+vn 0.407425 -0.485470 0.773514
+v 2.558198 157.973663 20.535000 1.000000 1.000000 1.000000
+vn 0.171059 -0.859436 0.481776
+v 0.445748 157.051361 20.528999 1.000000 1.000000 1.000000
+vn 0.009593 -0.867051 0.498127
+v -0.367258 157.045776 20.645397 1.000000 1.000000 1.000000
+vn 0.546438 -0.357477 0.757374
+v 3.987754 159.147141 20.276600 1.000000 1.000000 1.000000
+vn 0.336373 -0.757529 0.559467
+v 1.942100 157.398788 20.309799 1.000000 1.000000 1.000000
+vn 0.516000 -0.718621 0.466184
+v 2.668394 157.746231 20.197399 1.000000 1.000000 1.000000
+vn 0.652484 -0.214786 0.726726
+v 4.867128 160.476898 20.067600 1.000000 1.000000 1.000000
+vn 0.763645 -0.434601 0.477460
+v 4.663746 159.632721 19.833000 1.000000 1.000000 1.000000
+vn 0.688202 -0.558005 0.463690
+v 4.159516 158.971329 19.938795 1.000000 1.000000 1.000000
+vn 0.687938 -0.043829 0.724445
+v 5.383176 162.041061 19.863598 1.000000 1.000000 1.000000
+vn 0.851892 -0.223219 0.473765
+v 5.396348 161.145264 19.627800 1.000000 1.000000 1.000000
+vn 0.882100 -0.002124 0.471058
+v 5.721784 162.839203 19.427998 1.000000 1.000000 1.000000
+vn 0.888629 -0.118957 0.442931
+v 5.615038 161.989441 19.525799 1.000000 1.000000 1.000000
+vn 0.944098 -0.294603 0.147946
+v 5.538962 161.089447 19.159397 1.000000 1.000000 1.000000
+vn 0.980871 -0.161588 0.108545
+v 5.763434 161.955948 19.057598 1.000000 1.000000 1.000000
+vn 0.992339 -0.061974 0.106874
+v 5.872986 162.828033 18.959599 1.000000 1.000000 1.000000
+vn 0.911079 -0.120304 -0.394287
+v 5.727564 162.839203 17.750999 1.000000 1.000000 1.000000
+vn 0.909791 -0.199237 -0.364123
+v 5.620718 161.988052 17.848797 1.000000 1.000000 1.000000
+vn 0.813917 -0.327764 -0.479698
+v 5.401794 161.142471 17.950798 1.000000 1.000000 1.000000
+vn 0.934934 -0.311094 -0.170641
+v 5.526872 161.093628 18.343998 1.000000 1.000000 1.000000
+vn 0.777224 -0.437613 -0.452126
+v 5.081894 160.354111 18.052998 1.000000 1.000000 1.000000
+vn 0.651191 -0.214072 -0.728096
+v 5.388558 162.039673 17.504398 1.000000 1.000000 1.000000
+vn 0.876952 -0.448615 -0.172339
+v 5.199556 160.287140 18.445999 1.000000 1.000000 1.000000
+vn 0.897044 -0.416152 0.148762
+v 5.210924 160.280151 19.261597 1.000000 1.000000 1.000000
+vn 0.664088 -0.535545 -0.521708
+v 4.668458 159.628540 18.156197 1.000000 1.000000 1.000000
+vn 0.809185 -0.561287 -0.173713
+v 4.776554 159.544815 18.549198 1.000000 1.000000 1.000000
+vn 0.833886 -0.531103 0.150211
+v 4.787008 159.536438 19.364799 1.000000 1.000000 1.000000
+vn 0.826756 -0.341744 0.446862
+v 5.076756 160.356888 19.730000 1.000000 1.000000 1.000000
+vn 0.755487 -0.637328 0.151830
+v 4.269454 158.858307 19.470600 1.000000 1.000000 1.000000
+vn 0.606228 -0.595824 -0.526765
+v 4.163726 158.965759 18.261799 1.000000 1.000000 1.000000
+vn 0.725631 -0.665472 -0.174949
+v 4.260132 158.866684 18.654999 1.000000 1.000000 1.000000
+vn 0.554828 -0.386945 -0.736505
+v 4.871996 160.474106 17.708397 1.000000 1.000000 1.000000
+vn 0.359229 -0.572910 -0.736701
+v 3.428626 158.582031 18.025597 1.000000 1.000000 1.000000
+vn 0.161450 -0.638524 -0.752476
+v 1.863758 157.634598 18.288399 1.000000 1.000000 1.000000
+vn 0.277823 -0.831533 -0.481007
+v 1.944070 157.393219 18.632797 1.000000 1.000000 1.000000
+vn 0.017425 -0.674901 -0.737702
+v 1.124486 157.408554 18.402798 1.000000 1.000000 1.000000
+vn 0.504051 -0.724895 -0.469530
+v 3.576340 158.381104 18.370197 1.000000 1.000000 1.000000
+vn 0.116719 -0.892000 -0.436707
+v 1.172952 157.157394 18.747200 1.000000 1.000000 1.000000
+vn -0.144373 -0.654929 -0.741771
+v -0.352464 157.295532 18.623997 1.000000 1.000000 1.000000
+vn 0.322010 -0.929918 -0.177655
+v 1.989080 157.257874 19.025997 1.000000 1.000000 1.000000
+vn 0.064730 -0.972997 -0.221555
+v 0.456542 156.902054 19.245197 1.000000 1.000000 1.000000
+vn -0.110601 -0.871082 -0.478522
+v -0.367632 157.040192 18.968399 1.000000 1.000000 1.000000
+vn 0.243199 -0.954736 0.171270
+v 1.202742 157.002518 19.955799 1.000000 1.000000 1.000000
+vn 0.447429 -0.849981 -0.278101
+v 2.732948 157.613678 18.913597 1.000000 1.000000 1.000000
+vn 0.373842 -0.913915 0.158118
+v 1.993432 157.245300 19.841400 1.000000 1.000000 1.000000
+vn -0.093073 -0.978978 -0.181493
+v -0.376128 156.896469 19.361597 1.000000 1.000000 1.000000
+vn 0.099824 -0.982470 0.157441
+v 0.457544 156.888092 20.060799 1.000000 1.000000 1.000000
+vn -0.257666 -0.828015 -0.497995
+v -1.167846 157.157394 19.083797 1.000000 1.000000 1.000000
+vn -0.046537 -0.986414 0.157550
+v -0.376944 156.882523 20.176998 1.000000 1.000000 1.000000
+vn -0.239762 -0.953847 -0.180804
+v -1.194870 157.016464 19.476997 1.000000 1.000000 1.000000
+vn -0.194998 -0.968107 0.157307
+v -1.197482 157.002518 20.292400 1.000000 1.000000 1.000000
+vn -0.129184 -0.873826 0.468764
+v -1.166668 157.162979 20.760799 1.000000 1.000000 1.000000
+vn -0.339104 -0.927569 0.156922
+v -2.002084 157.248093 20.408798 1.000000 1.000000 1.000000
+vn -0.380412 -0.907182 -0.179743
+v -1.997720 157.262054 19.593399 1.000000 1.000000 1.000000
+vn -0.381219 -0.798129 -0.466543
+v -1.952516 157.397400 19.200199 1.000000 1.000000 1.000000
+vn -0.514948 -0.838234 -0.179421
+v -2.758274 157.627625 19.709599 1.000000 1.000000 1.000000
+vn -0.491953 -0.718105 -0.492247
+v -2.695882 157.754593 19.316399 1.000000 1.000000 1.000000
+vn -0.474108 -0.866538 0.155991
+v -2.764312 157.615067 20.524998 1.000000 1.000000 1.000000
+vn -0.250950 -0.830286 0.497644
+v -1.950560 157.402969 20.877197 1.000000 1.000000 1.000000
+vn -0.396988 -0.787615 0.471236
+v -2.693166 157.760178 20.993397 1.000000 1.000000 1.000000
+vn -0.576009 -0.785454 0.226442
+v -3.464740 158.090881 20.640198 1.000000 1.000000 1.000000
+vn -0.583793 -0.686067 0.434163
+v -3.916800 158.707611 21.208797 1.000000 1.000000 1.000000
+vn -0.779344 -0.606516 0.157355
+v -4.590036 159.253189 20.857197 1.000000 1.000000 1.000000
+vn -0.661587 -0.571423 0.485570
+v -4.471884 159.355057 21.325397 1.000000 1.000000 1.000000
+vn -0.718642 -0.694798 0.028436
+v -4.043940 158.561111 20.330597 1.000000 1.000000 1.000000
+vn -0.589783 -0.806234 -0.046284
+v -3.485134 158.060181 20.230198 1.000000 1.000000 1.000000
+vn -0.857423 -0.492187 0.150261
+v -5.063804 159.994110 20.973000 1.000000 1.000000 1.000000
+vn -0.808950 -0.559750 -0.179664
+v -4.580020 159.261566 20.041599 1.000000 1.000000 1.000000
+vn -0.752484 -0.480082 0.450875
+v -4.933446 160.077835 21.441399 1.000000 1.000000 1.000000
+vn -0.540797 -0.412321 0.733164
+v -4.729780 160.209000 21.779198 1.000000 1.000000 1.000000
+vn -0.795356 -0.372559 0.478131
+v -5.294108 160.857819 21.556599 1.000000 1.000000 1.000000
+vn -0.915780 -0.373048 0.148938
+v -5.433994 160.795029 21.088200 1.000000 1.000000 1.000000
+vn -0.874584 -0.453728 -0.170978
+v -5.052744 160.001083 20.157597 1.000000 1.000000 1.000000
+vn -0.963161 -0.208781 -0.169504
+v -5.687408 161.654556 20.388798 1.000000 1.000000 1.000000
+vn -0.927413 -0.333172 -0.170005
+v -5.422136 160.800613 20.272797 1.000000 1.000000 1.000000
+vn -0.957077 -0.249214 0.147971
+v -5.699846 161.651764 21.204399 1.000000 1.000000 1.000000
+vn -0.855493 -0.264871 0.444944
+v -5.553112 161.692230 21.672798 1.000000 1.000000 1.000000
+vn -0.981607 -0.121198 0.147508
+v -5.851150 162.535019 21.320000 1.000000 1.000000 1.000000
+vn -0.883448 -0.150330 0.443757
+v -5.700528 162.554550 21.788399 1.000000 1.000000 1.000000
+vn -0.982306 -0.080502 -0.169101
+v -5.838378 162.536407 20.504398 1.000000 1.000000 1.000000
+vn -0.880344 -0.037448 0.472856
+v -5.733474 163.428024 21.903599 1.000000 1.000000 1.000000
+vn -0.882389 -0.151174 -0.445575
+v -5.558724 161.690842 19.995800 1.000000 1.000000 1.000000
+vn -0.841183 -0.256048 -0.476289
+v -5.299452 160.855026 19.879597 1.000000 1.000000 1.000000
+vn -0.810509 -0.376125 -0.449005
+v -4.938430 160.073654 19.764397 1.000000 1.000000 1.000000
+vn -0.739299 -0.491325 -0.460475
+v -4.476404 159.350861 19.648598 1.000000 1.000000 1.000000
+vn -0.705422 -0.657683 -0.264258
+v -4.011508 158.598785 19.924999 1.000000 1.000000 1.000000
+vn -0.617300 -0.660996 -0.426643
+v -3.378968 158.219238 19.431599 1.000000 1.000000 1.000000
+vn -0.341426 -0.576288 -0.742509
+v -1.871920 157.638779 18.855797 1.000000 1.000000 1.000000
+vn 0.518158 -0.829939 0.206676
+v 2.738922 157.601105 19.729000 1.000000 1.000000 1.000000
+vn 0.473799 -0.880023 -0.032765
+v 2.755042 157.567627 19.319000 1.000000 1.000000 1.000000
+vn 0.653155 -0.728788 0.205566
+v 3.667158 158.258316 19.578800 1.000000 1.000000 1.000000
+vn 0.619960 -0.763315 -0.181658
+v 3.659150 158.269485 18.763199 1.000000 1.000000 1.000000
+vn -0.645279 -0.425877 -0.634227
+v 4.084366 165.989853 16.980797 1.000000 1.000000 1.000000
+vn -0.798314 -0.398919 -0.451175
+v 4.175456 165.251724 17.404598 1.000000 1.000000 1.000000
+vn -0.653133 -0.532083 -0.538799
+v 3.519536 166.402878 17.229198 1.000000 1.000000 1.000000
+vn -0.439558 -0.603036 -0.665685
+v 3.251328 167.083801 16.809998 1.000000 1.000000 1.000000
+vn -0.853119 -0.521551 0.013122
+v 3.720202 165.745682 18.167797 1.000000 1.000000 1.000000
+vn -0.658219 -0.712464 -0.243194
+v 2.996122 166.782410 17.542198 1.000000 1.000000 1.000000
+vn -0.880565 -0.232902 -0.412750
+v 4.468228 164.273605 17.542400 1.000000 1.000000 1.000000
+vn -0.706989 -0.704940 0.056793
+v 2.961438 166.741943 17.996998 1.000000 1.000000 1.000000
+vn -0.512392 -0.818431 -0.260050
+v 1.990240 167.534500 17.377598 1.000000 1.000000 1.000000
+vn -0.548874 -0.684567 -0.479694
+v 3.090224 166.894043 17.144798 1.000000 1.000000 1.000000
+vn -0.388571 -0.788938 -0.476014
+v 2.052760 167.668457 16.980000 1.000000 1.000000 1.000000
+vn -0.285347 -0.958296 -0.015641
+v 1.398410 167.742401 17.751198 1.000000 1.000000 1.000000
+vn -0.496168 -0.868040 0.017997
+v 1.967194 167.484268 17.832397 1.000000 1.000000 1.000000
+vn -0.239536 -0.613194 -0.752739
+v 2.159788 167.898682 16.645199 1.000000 1.000000 1.000000
+vn -0.127021 -0.955679 -0.265602
+v 0.238142 168.041000 17.145599 1.000000 1.000000 1.000000
+vn -0.205926 -0.751141 -0.627201
+v 1.459244 167.937744 16.898998 1.000000 1.000000 1.000000
+vn -0.043106 -0.641573 -0.765849
+v 0.901980 168.364731 16.487400 1.000000 1.000000 1.000000
+vn -0.008530 -0.887811 -0.460129
+v 0.245638 168.191696 16.748199 1.000000 1.000000 1.000000
+vn 0.116634 -0.992849 0.025442
+v -0.365070 167.975433 17.527397 1.000000 1.000000 1.000000
+vn -0.084384 -0.996271 0.017979
+v 0.235382 167.986588 17.600401 1.000000 1.000000 1.000000
+vn 0.243828 -0.871390 -0.425708
+v -1.017836 168.073105 16.602200 1.000000 1.000000 1.000000
+vn 0.078062 -0.391381 -0.916912
+v -0.400734 168.438675 16.340397 1.000000 1.000000 1.000000
+vn 0.266608 -0.927645 -0.261524
+v -0.986866 167.925186 16.999599 1.000000 1.000000 1.000000
+vn 0.225055 -0.423308 -0.877588
+v -1.760000 167.950302 16.326797 1.000000 1.000000 1.000000
+vn 0.414609 -0.908394 0.054039
+v -1.551916 167.682404 17.385197 1.000000 1.000000 1.000000
+vn 0.596634 -0.757359 -0.265397
+v -2.626552 167.113098 16.798199 1.000000 1.000000 1.000000
+vn 0.347292 -0.381738 -0.856542
+v -2.815012 167.224731 16.327400 1.000000 1.000000 1.000000
+vn 0.726047 -0.687641 -0.002231
+v -3.053326 166.648453 17.189400 1.000000 1.000000 1.000000
+vn 0.776750 -0.607369 -0.166622
+v -3.297650 166.453110 16.703800 1.000000 1.000000 1.000000
+vn 0.602156 -0.798226 0.015623
+v -2.596166 167.068451 17.252998 1.000000 1.000000 1.000000
+vn 0.169289 -0.908663 0.381672
+v -1.014840 168.057755 18.278797 1.000000 1.000000 1.000000
+vn 0.078883 -0.934322 0.347593
+v -0.379792 168.166580 18.351801 1.000000 1.000000 1.000000
+vn 0.387616 -0.804860 0.449394
+v -2.179692 167.581940 18.142399 1.000000 1.000000 1.000000
+vn -0.122533 -0.667538 0.734424
+v 0.257632 168.433090 18.772400 1.000000 1.000000 1.000000
+vn 0.159931 -0.639267 0.752170
+v -1.698200 168.100998 18.556999 1.000000 1.000000 1.000000
+vn -0.117770 -0.884008 0.452393
+v 0.244912 168.177750 18.424797 1.000000 1.000000 1.000000
+vn -0.263169 -0.889039 0.374636
+v 0.854736 168.096817 18.498798 1.000000 1.000000 1.000000
+vn -0.404006 -0.556498 0.726009
+v 2.152746 167.883331 19.004200 1.000000 1.000000 1.000000
+vn -0.357005 -0.822866 0.442085
+v 1.454956 167.923798 18.575600 1.000000 1.000000 1.000000
+vn -0.474072 -0.754947 0.453112
+v 2.046708 167.655884 18.656597 1.000000 1.000000 1.000000
+vn -0.615639 -0.698655 0.364513
+v 2.588610 167.308456 18.737997 1.000000 1.000000 1.000000
+vn -0.594357 -0.348407 0.724812
+v 3.690950 166.556366 19.253399 1.000000 1.000000 1.000000
+vn -0.673618 -0.657672 0.337203
+v 3.081110 166.882874 18.821400 1.000000 1.000000 1.000000
+vn -0.762172 -0.486264 0.427364
+v 3.509172 166.393112 18.905800 1.000000 1.000000 1.000000
+vn -0.817943 -0.510834 0.264608
+v 3.408220 166.303802 18.512199 1.000000 1.000000 1.000000
+vn -0.678869 -0.153818 0.717967
+v 4.378812 165.348007 19.428799 1.000000 1.000000 1.000000
+vn -0.875875 -0.125391 0.465961
+v 4.455058 164.269409 19.218800 1.000000 1.000000 1.000000
+vn -0.866676 -0.245782 0.434125
+v 4.163160 165.244751 19.081200 1.000000 1.000000 1.000000
+vn -0.931469 -0.278567 0.234020
+v 4.043398 165.187546 18.687399 1.000000 1.000000 1.000000
+vn -0.948411 -0.315420 -0.032057
+v 4.113256 164.866623 18.301598 1.000000 1.000000 1.000000
+vn -0.901028 -0.355325 -0.248781
+v 4.048330 165.190338 17.801998 1.000000 1.000000 1.000000
+vn -0.119842 -0.210815 0.970152
+v 0.270922 168.699600 18.926998 1.000000 1.000000 1.000000
+vn 0.358610 -0.571132 0.738381
+v -2.840904 167.428452 18.424999 1.000000 1.000000 1.000000
+vn 0.455062 -0.676353 0.579193
+v -2.701044 167.223343 18.077400 1.000000 1.000000 1.000000
+vn 0.686111 -0.685753 0.242887
+v -3.293646 166.448929 17.588997 1.000000 1.000000 1.000000
+vn -0.015721 -0.244216 0.969594
+v -1.785556 168.350769 18.711597 1.000000 1.000000 1.000000
+vn 0.069248 -0.240902 0.968076
+v -2.987058 167.643326 18.579597 1.000000 1.000000 1.000000
+vn 0.493845 -0.467406 0.733245
+v -3.566772 166.715439 18.330399 1.000000 1.000000 1.000000
+vn 0.133917 -0.205974 0.969351
+v -3.750278 166.894043 18.484997 1.000000 1.000000 1.000000
+vn 0.629383 -0.275217 0.726727
+v -4.542168 164.900101 18.155998 1.000000 1.000000 1.000000
+vn 0.644138 -0.619098 0.449226
+v -3.391174 166.543808 17.982800 1.000000 1.000000 1.000000
+vn 0.819550 -0.482539 0.309023
+v -3.772628 166.014969 17.922600 1.000000 1.000000 1.000000
+vn 0.829343 -0.341350 0.442347
+v -4.318532 164.817780 17.808399 1.000000 1.000000 1.000000
+vn 0.929733 -0.366066 -0.039894
+v -3.925028 165.350800 17.040199 1.000000 1.000000 1.000000
+vn 0.841801 -0.539617 -0.013576
+v -3.626126 165.907532 17.098400 1.000000 1.000000 1.000000
+vn 0.541598 -0.283529 -0.791380
+v -3.901608 165.719162 16.328400 1.000000 1.000000 1.000000
+vn 0.604049 -0.139226 -0.784692
+v -4.336042 164.459183 16.326797 1.000000 1.000000 1.000000
+vn 0.998855 -0.044334 -0.017978
+v -4.372234 163.493607 16.877197 1.000000 1.000000 1.000000
+vn 0.633718 0.014567 -0.773427
+v -4.448220 163.239655 16.326797 1.000000 1.000000 1.000000
+vn 0.983671 -0.179965 -0.001993
+v -4.300740 164.136856 16.929798 1.000000 1.000000 1.000000
+vn 0.969857 -0.048347 0.238832
+v -4.420528 163.056870 17.273399 1.000000 1.000000 1.000000
+vn 0.903652 -0.038566 0.426529
+v -4.551426 163.051285 17.667198 1.000000 1.000000 1.000000
+vn 0.861006 -0.166879 0.480437
+v -4.474486 164.171738 17.754200 1.000000 1.000000 1.000000
+vn 0.988174 0.150952 0.026953
+v -4.311272 162.421997 16.793598 1.000000 1.000000 1.000000
+vn 0.200095 -0.143176 0.969259
+v -4.775872 164.985214 18.310600 1.000000 1.000000 1.000000
+vn 0.689837 -0.050122 0.722227
+v -4.787124 163.041519 18.014797 1.000000 1.000000 1.000000
+vn 0.248211 -0.061965 0.966722
+v -5.033432 163.030350 18.169399 1.000000 1.000000 1.000000
+vn -0.644511 -0.227878 0.729847
+v -5.238026 161.432709 17.928799 1.000000 1.000000 1.000000
+vn -0.284084 -0.126361 0.950436
+v -5.024960 161.506653 18.069395 1.000000 1.000000 1.000000
+vn 0.636331 0.146903 0.757299
+v -4.562870 161.667114 17.918598 1.000000 1.000000 1.000000
+vn 0.256035 0.010747 0.966608
+v -4.797644 161.584793 18.073200 1.000000 1.000000 1.000000
+vn -0.506084 -0.372251 0.778016
+v -4.608576 159.992722 17.840797 1.000000 1.000000 1.000000
+vn -0.272268 -0.323671 0.906150
+v -3.502116 158.971329 17.900597 1.000000 1.000000 1.000000
+vn 0.244133 0.081533 0.966308
+v -4.221110 160.267593 17.985197 1.000000 1.000000 1.000000
+vn -0.900021 -0.002958 0.435836
+v -5.728890 163.568954 17.721600 1.000000 1.000000 1.000000
+vn -0.838761 -0.137072 0.526963
+v -5.649004 162.166641 17.638199 1.000000 1.000000 1.000000
+vn -0.857285 -0.296760 0.420709
+v -5.463580 161.354568 17.591000 1.000000 1.000000 1.000000
+vn -0.734377 -0.486237 0.473564
+v -4.807028 159.853180 17.503197 1.000000 1.000000 1.000000
+vn -0.317706 -0.555617 0.768344
+v -2.998956 158.252731 17.718197 1.000000 1.000000 1.000000
+vn -0.900815 -0.382975 0.204603
+v -5.317670 160.507599 17.077797 1.000000 1.000000 1.000000
+vn -0.581074 -0.593453 0.556926
+v -3.807776 158.597382 17.422199 1.000000 1.000000 1.000000
+vn -0.835271 -0.528265 0.152504
+v -4.934040 159.763885 17.034798 1.000000 1.000000 1.000000
+vn -0.774106 -0.607046 0.179599
+v -4.463028 159.082962 16.993599 1.000000 1.000000 1.000000
+vn -0.976023 -0.167964 0.138447
+v -5.798274 162.137344 17.169800 1.000000 1.000000 1.000000
+vn -0.723002 -0.177279 -0.667712
+v -5.695442 161.540146 16.329800 1.000000 1.000000 1.000000
+vn -0.665715 -0.326206 -0.671128
+v -5.256308 160.284348 16.327999 1.000000 1.000000 1.000000
+vn -0.665592 -0.720560 0.194372
+v -3.908394 158.474594 16.953999 1.000000 1.000000 1.000000
+vn -0.528180 -0.529993 -0.663425
+v -4.031450 158.531799 16.327000 1.000000 1.000000 1.000000
+vn -0.464552 -0.745749 0.477546
+v -3.128076 158.037857 17.380398 1.000000 1.000000 1.000000
+vn -0.561583 -0.817001 0.130901
+v -3.210732 157.899719 16.912197 1.000000 1.000000 1.000000
+vn -0.299749 -0.680259 -0.668878
+v -2.223506 157.306702 16.326797 1.000000 1.000000 1.000000
+vn -0.453612 -0.867780 0.202965
+v -2.533298 157.488083 16.876999 1.000000 1.000000 1.000000
+vn -0.072358 -0.611942 0.787585
+v -0.982170 157.384842 17.617798 1.000000 1.000000 1.000000
+vn -0.288943 -0.780566 0.554282
+v -1.762406 157.331818 17.311798 1.000000 1.000000 1.000000
+vn -0.302891 -0.938585 0.165271
+v -1.808976 157.175537 16.843597 1.000000 1.000000 1.000000
+vn -0.175895 -0.973479 0.146287
+v -1.051498 156.970428 16.811798 1.000000 1.000000 1.000000
+vn -0.041544 -0.772880 -0.633191
+v -0.321326 156.840652 16.326797 1.000000 1.000000 1.000000
+vn -0.122763 -0.874719 0.468824
+v -1.024436 157.132278 17.280197 1.000000 1.000000 1.000000
+vn 0.067676 -0.591323 0.803590
+v 0.435522 157.305298 17.561199 1.000000 1.000000 1.000000
+vn -0.089409 -0.372436 0.923741
+v -1.620952 157.807617 17.790199 1.000000 1.000000 1.000000
+vn 0.088827 -0.989096 0.117469
+v 0.466316 156.885300 16.755199 1.000000 1.000000 1.000000
+vn 0.077918 -0.876933 0.474254
+v 0.454304 157.048569 17.223400 1.000000 1.000000 1.000000
+vn 0.211809 -0.964690 0.156555
+v 1.229688 157.006714 16.729000 1.000000 1.000000 1.000000
+vn 0.824042 -0.405162 0.395978
+v 1.958374 157.451813 17.276398 1.000000 1.000000 1.000000
+vn 0.662227 -0.044624 0.747974
+v 1.838678 157.799240 17.652798 1.000000 1.000000 1.000000
+vn 0.732528 -0.455530 -0.505861
+v 2.047442 157.183914 16.326797 1.000000 1.000000 1.000000
+vn 0.195166 0.138981 0.970873
+v -3.343678 159.165283 17.904400 1.000000 1.000000 1.000000
+vn 0.143732 0.171456 0.974651
+v -1.547642 158.053207 17.793999 1.000000 1.000000 1.000000
+vn 0.015985 0.641828 0.766682
+v 0.379298 158.071350 17.550999 1.000000 1.000000 1.000000
+vn -0.985560 -0.060337 0.158213
+v -5.883568 162.994080 17.218998 1.000000 1.000000 1.000000
+vn 0.837207 -0.336694 0.430953
+v -4.335322 164.761963 22.115200 1.000000 1.000000 1.000000
+vn 0.931067 -0.173803 0.320791
+v -4.488866 164.081055 21.998798 1.000000 1.000000 1.000000
+vn 0.960551 -0.278048 0.005588
+v -4.166970 164.703369 21.291000 1.000000 1.000000 1.000000
+vn 0.906523 -0.420881 0.032807
+v -3.935674 165.327072 21.407200 1.000000 1.000000 1.000000
+vn 0.644860 -0.696904 0.313815
+v -2.968776 166.991714 22.565399 1.000000 1.000000 1.000000
+vn 0.799818 -0.600208 0.006521
+v -3.294960 166.372177 21.624599 1.000000 1.000000 1.000000
+vn 0.843699 -0.482723 -0.234840
+v -3.670326 165.934052 21.067600 1.000000 1.000000 1.000000
+vn 0.935760 -0.276769 -0.218521
+v -4.215754 164.720108 20.836197 1.000000 1.000000 1.000000
+vn 0.433517 -0.779522 0.452116
+v -2.452252 167.408905 22.681400 1.000000 1.000000 1.000000
+vn 0.581074 -0.708635 -0.400235
+v -2.459488 167.420074 21.004799 1.000000 1.000000 1.000000
+vn 0.413073 -0.609738 -0.676454
+v -1.994656 167.986588 20.785198 1.000000 1.000000 1.000000
+vn 0.606693 -0.558772 -0.565418
+v -2.977544 167.002869 20.888798 1.000000 1.000000 1.000000
+vn 0.795452 -0.397674 -0.457288
+v -3.785554 166.019165 20.669998 1.000000 1.000000 1.000000
+vn -0.920632 -0.277156 -0.274992
+v 4.202428 164.760574 22.892799 1.000000 1.000000 1.000000
+vn -0.898175 -0.436833 0.049577
+v 3.917070 165.363358 23.231400 1.000000 1.000000 1.000000
+vn -0.910793 -0.093024 0.402248
+v 4.479866 164.134064 24.286598 1.000000 1.000000 1.000000
+vn -0.909484 -0.225848 0.349042
+v 4.321636 164.802429 24.171799 1.000000 1.000000 1.000000
+vn -0.886392 -0.331910 0.322714
+v 4.075380 165.448471 24.055599 1.000000 1.000000 1.000000
+vn 0.267351 -0.841325 -0.469783
+v 1.991862 157.414139 23.774399 1.000000 1.000000 1.000000
+vn 0.343697 -0.921558 -0.180566
+v 2.037992 157.278793 24.167398 1.000000 1.000000 1.000000
+vn 0.137411 -0.871117 -0.471459
+v 1.221494 157.168564 23.888998 1.000000 1.000000 1.000000
+vn 0.247447 -0.955984 0.157684
+v 1.252524 157.015076 25.097601 1.000000 1.000000 1.000000
+vn 0.201025 -0.962715 -0.181023
+v 1.249784 157.027634 24.282198 1.000000 1.000000 1.000000
+vn 0.387676 -0.908458 0.156241
+v 2.042446 157.266235 24.982998 1.000000 1.000000 1.000000
+vn -0.001856 -0.865580 -0.500767
+v 0.422360 157.044388 24.004398 1.000000 1.000000 1.000000
+vn 0.052227 -0.981935 -0.181868
+v 0.432142 156.900650 24.397398 1.000000 1.000000 1.000000
+vn 0.099797 -0.982432 0.157698
+v 0.433098 156.886703 25.212999 1.000000 1.000000 1.000000
+vn -0.130067 -0.871893 -0.472108
+v -0.385156 157.041580 24.119598 1.000000 1.000000 1.000000
+vn -0.266350 -0.616799 -0.740687
+v -1.143536 157.414139 23.891598 1.000000 1.000000 1.000000
+vn -0.095736 -0.978717 -0.181516
+v -0.394054 156.897873 24.512798 1.000000 1.000000 1.000000
+vn -0.260474 -0.843194 -0.470295
+v -1.192768 157.161591 24.236198 1.000000 1.000000 1.000000
+vn -0.383059 -0.779019 -0.496382
+v -1.974416 157.405762 24.352398 1.000000 1.000000 1.000000
+vn -0.243556 -0.952956 -0.180431
+v -1.220370 157.020645 24.629198 1.000000 1.000000 1.000000
+vn -0.049766 -0.986228 0.157724
+v -0.394918 156.883911 25.328199 1.000000 1.000000 1.000000
+vn -0.343600 -0.925898 0.157012
+v -2.024526 157.257874 25.560999 1.000000 1.000000 1.000000
+vn -0.396211 -0.900978 -0.176793
+v -2.020108 157.270416 24.745398 1.000000 1.000000 1.000000
+vn -0.199334 -0.967059 0.158314
+v -1.223040 157.008102 25.444799 1.000000 1.000000 1.000000
+vn -0.277909 -0.835441 0.474137
+v -1.972420 157.411346 26.029198 1.000000 1.000000 1.000000
+vn -0.469943 -0.866190 0.169906
+v -2.778576 157.624832 25.676197 1.000000 1.000000 1.000000
+vn -0.125577 -0.857536 0.498861
+v -1.191568 157.168564 25.912998 1.000000 1.000000 1.000000
+vn -0.607060 -0.765217 -0.214291
+v -3.395268 158.054596 24.962799 1.000000 1.000000 1.000000
+vn -0.518014 -0.739597 -0.429718
+v -2.709788 157.762970 24.467398 1.000000 1.000000 1.000000
+vn -0.469270 -0.747671 0.469865
+v -3.315108 158.175995 26.246599 1.000000 1.000000 1.000000
+vn -0.587164 -0.794651 0.154171
+v -3.402696 158.042038 25.778399 1.000000 1.000000 1.000000
+vn -0.692775 -0.704659 0.153357
+v -4.050004 158.616928 25.894999 1.000000 1.000000 1.000000
+vn -0.569177 -0.629128 0.529373
+v -3.945756 158.736923 26.363199 1.000000 1.000000 1.000000
+vn -0.720332 -0.671187 -0.175016
+v -4.041172 158.628082 25.079399 1.000000 1.000000 1.000000
+vn -0.785113 -0.600472 0.151760
+v -4.611718 159.282486 26.010799 1.000000 1.000000 1.000000
+vn -0.632914 -0.570737 0.523144
+v -4.493000 159.384354 26.478998 1.000000 1.000000 1.000000
+vn -0.754974 -0.476544 0.450467
+v -4.947608 160.104340 26.594198 1.000000 1.000000 1.000000
+vn -0.859855 -0.487996 0.150030
+v -5.078340 160.022018 26.125998 1.000000 1.000000 1.000000
+vn -0.807446 -0.564089 -0.172728
+v -4.601650 159.290863 25.195198 1.000000 1.000000 1.000000
+vn -0.917404 -0.368961 0.149123
+v -5.448542 160.831314 26.242199 1.000000 1.000000 1.000000
+vn -0.928827 -0.329075 -0.170263
+v -5.436646 160.836884 25.426598 1.000000 1.000000 1.000000
+vn -0.876808 -0.449285 -0.171319
+v -5.067254 160.029007 25.310398 1.000000 1.000000 1.000000
+vn -0.796980 -0.368794 0.478344
+v -5.308284 160.894104 26.710398 1.000000 1.000000 1.000000
+vn -0.958338 -0.244315 0.147981
+v -5.707016 161.678284 26.356798 1.000000 1.000000 1.000000
+vn -0.856607 -0.260562 0.445344
+v -5.560102 161.718750 26.825199 1.000000 1.000000 1.000000
+vn -0.982156 -0.116733 0.147455
+v -5.853172 162.561523 26.472198 1.000000 1.000000 1.000000
+vn -0.964285 -0.203613 -0.169399
+v -5.694566 161.682465 25.541401 1.000000 1.000000 1.000000
+vn -0.868064 -0.147973 0.473886
+v -5.702498 162.579666 26.940399 1.000000 1.000000 1.000000
+vn -0.896333 -0.030154 0.442356
+v -5.732380 163.453140 27.055798 1.000000 1.000000 1.000000
+vn -0.883278 -0.147343 -0.445095
+v -5.565728 161.717346 25.148199 1.000000 1.000000 1.000000
+vn -0.855435 -0.261197 -0.447222
+v -5.313652 160.891312 25.033598 1.000000 1.000000 1.000000
+vn -0.800455 -0.360589 -0.478798
+v -4.952604 160.101547 24.917398 1.000000 1.000000 1.000000
+vn -0.753240 -0.477282 -0.452583
+v -4.497544 159.380157 24.802198 1.000000 1.000000 1.000000
+vn -0.666121 -0.583909 -0.464040
+v -3.949734 158.732727 24.686199 1.000000 1.000000 1.000000
+vn 0.001629 -0.882956 0.469453
+v -0.384762 157.047165 25.796598 1.000000 1.000000 1.000000
+vn 0.137967 -0.856513 0.497344
+v 0.421928 157.049957 25.681198 1.000000 1.000000 1.000000
+vn 0.265793 -0.843826 0.466168
+v 1.220258 157.175537 25.565998 1.000000 1.000000 1.000000
+vn 0.387387 -0.779337 0.492509
+v 1.989854 157.419724 25.451199 1.000000 1.000000 1.000000
+vn -0.610800 -0.301060 -0.732315
+v 4.565922 164.872192 27.311998 1.000000 1.000000 1.000000
+vn -0.831837 -0.302198 -0.465537
+v 4.339686 164.791260 27.646799 1.000000 1.000000 1.000000
+vn -0.876958 -0.392745 -0.276941
+v 3.973436 165.366150 27.929598 1.000000 1.000000 1.000000
+vn -0.833322 -0.550520 0.050029
+v 3.614912 165.921494 28.268198 1.000000 1.000000 1.000000
+vn -0.929693 -0.291886 -0.224664
+v 4.207540 164.745224 28.044197 1.000000 1.000000 1.000000
+vn -0.959929 -0.276259 0.047084
+v 4.158834 164.727081 28.498999 1.000000 1.000000 1.000000
+vn -0.835167 -0.443466 0.325323
+v 3.760990 166.030319 29.092398 1.000000 1.000000 1.000000
+vn -0.872504 -0.339778 0.351125
+v 4.086156 165.426147 29.208599 1.000000 1.000000 1.000000
+vn -0.891267 -0.207269 0.403341
+v 4.326902 164.787079 29.323399 1.000000 1.000000 1.000000
+vn -0.937082 -0.060807 0.343772
+v 4.482712 164.114532 29.438599 1.000000 1.000000 1.000000
+vn -0.817784 -0.503071 -0.279551
+v 3.670428 165.932648 32.966400 1.000000 1.000000 1.000000
+vn -0.884036 -0.408923 -0.226414
+v 3.980414 165.352188 33.081001 1.000000 1.000000 1.000000
+vn -0.784438 -0.406543 -0.468380
+v 4.105416 165.417786 32.683598 1.000000 1.000000 1.000000
+vn -0.563136 -0.376625 -0.735549
+v 4.319448 165.530792 32.348801 1.000000 1.000000 1.000000
+vn 0.718569 -0.341811 0.605660
+v -4.530530 164.930801 42.813980 1.000000 1.000000 1.000000
+vn 0.830123 -0.053171 0.555039
+v -4.786198 163.472672 42.640800 1.000000 1.000000 1.000000
+vn 0.827930 -0.410813 0.381791
+v -4.069058 165.462433 42.544979 1.000000 1.000000 1.000000
+vn 0.718807 -0.539256 0.438771
+v -3.731944 166.076370 42.627380 1.000000 1.000000 1.000000
+vn 0.621731 -0.435030 0.651306
+v -3.925194 166.222885 42.975197 1.000000 1.000000 1.000000
+vn 0.910138 -0.380402 0.164144
+v -3.911046 165.377319 41.720596 1.000000 1.000000 1.000000
+vn 0.655984 -0.665008 0.357000
+v -3.317594 166.630325 42.707798 1.000000 1.000000 1.000000
+vn 0.483302 -0.692826 0.535175
+v -2.834170 167.113098 42.785580 1.000000 1.000000 1.000000
+vn 0.431252 -0.780142 0.453211
+v -2.299570 167.507980 42.859779 1.000000 1.000000 1.000000
+vn 0.835312 -0.549774 0.001143
+v -3.587024 165.967529 41.803177 1.000000 1.000000 1.000000
+vn 0.849525 -0.479501 -0.219970
+v -3.629036 165.999634 41.348396 1.000000 1.000000 1.000000
+vn 0.753257 -0.618493 -0.223764
+v -3.226106 166.538223 41.428596 1.000000 1.000000 1.000000
+vn 0.665226 -0.746459 -0.016518
+v -2.724116 166.962402 41.961197 1.000000 1.000000 1.000000
+vn 0.785177 -0.432786 -0.442937
+v -3.742964 166.084747 40.950996 1.000000 1.000000 1.000000
+vn 0.867342 -0.244518 -0.433508
+v -4.320180 164.852661 40.789799 1.000000 1.000000 1.000000
+vn 0.608828 -0.686150 -0.398154
+v -2.842540 167.124268 41.108997 1.000000 1.000000 1.000000
+vn 0.626805 -0.743036 -0.234549
+v -2.756008 167.005676 41.506397 1.000000 1.000000 1.000000
+vn 0.336942 -0.563038 -0.754625
+v -1.802384 168.074493 40.921997 1.000000 1.000000 1.000000
+vn 0.397551 -0.777243 -0.487696
+v -1.713110 167.835892 41.256798 1.000000 1.000000 1.000000
+vn 0.431821 -0.873024 -0.226628
+v -1.660980 167.694962 41.654198 1.000000 1.000000 1.000000
+vn 0.422649 -0.904696 0.053790
+v -1.641758 167.644730 42.108997 1.000000 1.000000 1.000000
+vn 0.176345 -0.734022 -0.655831
+v -0.451134 168.434479 41.063797 1.000000 1.000000 1.000000
+vn 0.159069 -0.868527 -0.469422
+v -0.428816 168.176346 41.398598 1.000000 1.000000 1.000000
+vn -0.070483 -0.665827 -0.742769
+v 0.914456 168.361938 41.194977 1.000000 1.000000 1.000000
+vn -0.021501 -0.883043 -0.468799
+v 0.230768 168.193100 41.466179 1.000000 1.000000 1.000000
+vn -0.340735 -0.659051 -0.670486
+v 2.226892 167.863800 41.319397 1.000000 1.000000 1.000000
+vn -0.775028 -0.440884 -0.452717
+v 3.983646 165.670334 41.876198 1.000000 1.000000 1.000000
+vn -0.639282 -0.657485 -0.398787
+v 3.189258 166.792191 41.770180 1.000000 1.000000 1.000000
+vn -0.857989 -0.469741 -0.207843
+v 3.862340 165.596375 42.273598 1.000000 1.000000 1.000000
+vn -0.706008 -0.661503 -0.252914
+v 3.092144 166.684738 42.167797 1.000000 1.000000 1.000000
+vn -0.622313 -0.739581 -0.256411
+v 2.598934 167.135422 42.110798 1.000000 1.000000 1.000000
+vn -0.559312 -0.739003 -0.375559
+v 2.680574 167.256821 41.713398 1.000000 1.000000 1.000000
+vn -0.268047 -0.838888 -0.473728
+v 1.508052 167.921005 41.592999 1.000000 1.000000 1.000000
+vn -0.468739 -0.883212 0.014871
+v 2.028324 167.452179 42.506397 1.000000 1.000000 1.000000
+vn -0.314638 -0.916047 -0.248718
+v 1.462114 167.778671 41.990379 1.000000 1.000000 1.000000
+vn -0.638737 -0.769423 -0.001442
+v 2.568846 167.089386 42.565598 1.000000 1.000000 1.000000
+vn -0.813450 -0.581254 0.021070
+v 3.466620 166.144745 42.675579 1.000000 1.000000 1.000000
+vn -0.178056 -0.984000 0.006343
+v 0.832880 167.905655 42.381996 1.000000 1.000000 1.000000
+vn -0.054069 -0.963514 -0.262141
+v 0.223716 168.042404 41.863800 1.000000 1.000000 1.000000
+vn 0.072689 -0.996550 0.040056
+v -0.410968 167.971237 42.250977 1.000000 1.000000 1.000000
+vn 0.288113 -0.956525 -0.045282
+v -1.036340 167.856812 42.180977 1.000000 1.000000 1.000000
+vn 0.068894 -0.962020 -0.264144
+v -0.415772 168.027054 41.796181 1.000000 1.000000 1.000000
+vn 0.355973 -0.875308 0.327292
+v -1.708076 167.821945 42.933380 1.000000 1.000000 1.000000
+vn -0.884137 -0.458807 -0.088302
+v 3.817626 165.569855 42.728397 1.000000 1.000000 1.000000
+vn -0.985738 -0.139834 0.093629
+v 4.362088 163.656860 42.869797 1.000000 1.000000 1.000000
+vn 0.605547 0.310427 0.732767
+v -4.014558 160.412704 17.830597 1.000000 1.000000 1.000000
+vn 0.903913 0.137758 0.404925
+v -4.485456 162.388504 17.618000 1.000000 1.000000 1.000000
+vn 0.798180 0.407473 0.443706
+v -3.816904 160.552246 17.482998 1.000000 1.000000 1.000000
+vn 0.494901 0.467560 0.732435
+v -3.180078 159.364807 17.749798 1.000000 1.000000 1.000000
+vn 0.653540 0.601701 0.459174
+v -3.023508 159.555969 17.402199 1.000000 1.000000 1.000000
+vn 0.245432 0.620888 0.744487
+v -1.471938 158.308548 17.639397 1.000000 1.000000 1.000000
+vn 0.547867 0.757233 0.355584
+v -2.483834 159.110870 17.360197 1.000000 1.000000 1.000000
+vn 0.477403 0.794523 0.375259
+v -1.959804 158.792725 17.325199 1.000000 1.000000 1.000000
+vn 0.739793 0.624874 0.249479
+v -2.412404 159.230865 16.966599 1.000000 1.000000 1.000000
+vn 0.680397 0.710818 0.178320
+v -2.936564 159.662033 17.008400 1.000000 1.000000 1.000000
+vn 0.371061 0.619940 -0.691367
+v -2.134990 159.103897 16.327999 1.000000 1.000000 1.000000
+vn 0.179081 0.707507 -0.683640
+v -1.046904 158.635056 16.327000 1.000000 1.000000 1.000000
+vn 0.273635 0.871774 0.406366
+v -1.399478 158.551331 17.291599 1.000000 1.000000 1.000000
+vn 0.074945 0.983059 0.167266
+v -0.220860 158.459244 16.836998 1.000000 1.000000 1.000000
+vn -0.045307 0.702766 -0.709977
+v 0.229992 158.508087 16.326797 1.000000 1.000000 1.000000
+vn -0.009658 0.876001 0.482213
+v 0.360594 158.326691 17.203197 1.000000 1.000000 1.000000
+vn -0.180643 0.937021 0.298933
+v 0.923730 158.559708 16.783398 1.000000 1.000000 1.000000
+vn 0.354861 0.807300 -0.471530
+v 1.488958 158.841568 16.349197 1.000000 1.000000 1.000000
+vn -0.167080 0.894566 0.414531
+v 0.951106 158.420181 17.177200 1.000000 1.000000 1.000000
+vn 0.460972 0.645720 0.608729
+v 1.640508 158.393661 17.533798 1.000000 1.000000 1.000000
+vn 0.484463 0.499465 -0.718214
+v -2.999624 159.752716 16.327198 1.000000 1.000000 1.000000
+vn 0.889121 0.413172 0.196859
+v -3.707134 160.630386 17.089199 1.000000 1.000000 1.000000
+vn 0.584356 0.353622 -0.730396
+v -3.648322 160.573181 16.326797 1.000000 1.000000 1.000000
+vn 0.944198 0.328243 -0.027315
+v -4.169764 161.802460 16.746597 1.000000 1.000000 1.000000
+vn 0.580798 0.196219 -0.790045
+v -4.240228 161.782928 16.326797 1.000000 1.000000 1.000000
+vn -0.343745 -0.896793 -0.278571
+v 2.007454 157.309494 42.513798 1.000000 1.000000 1.000000
+vn -0.429093 -0.747814 -0.506610
+v 1.933230 157.527161 42.152798 1.000000 1.000000 1.000000
+vn 0.540256 -0.830175 -0.137596
+v 3.081238 157.825760 42.712601 1.000000 1.000000 1.000000
+vn 0.616889 -0.742332 -0.261518
+v 3.699938 158.300171 42.685997 1.000000 1.000000 1.000000
+vn 0.485030 -0.734864 -0.474048
+v 3.011496 157.948547 42.319397 1.000000 1.000000 1.000000
+vn 0.727911 -0.633175 -0.263125
+v 4.259810 158.865280 42.657600 1.000000 1.000000 1.000000
+vn 0.836738 -0.519554 -0.173014
+v 4.808742 159.592255 42.623177 1.000000 1.000000 1.000000
+vn 0.644875 -0.605901 -0.465855
+v 4.163404 158.964355 42.264580 1.000000 1.000000 1.000000
+vn 0.717239 -0.436292 -0.543340
+v 4.699910 159.674576 42.230198 1.000000 1.000000 1.000000
+vn 0.823824 -0.336960 -0.455820
+v 5.394480 161.118759 42.163597 1.000000 1.000000 1.000000
+vn 0.917771 -0.332993 -0.216363
+v 5.519366 161.069916 42.556801 1.000000 1.000000 1.000000
+vn 0.967001 -0.195995 -0.162774
+v 5.751048 161.950378 42.517197 1.000000 1.000000 1.000000
+vn -0.317187 0.587009 0.744858
+v 157.054657 -136.787827 18.567200 1.000000 1.000000 1.000000
+vn -0.481414 0.703433 0.522899
+v 156.258987 -136.902237 18.162399 1.000000 1.000000 1.000000
+vn -0.515539 0.361400 0.776923
+v 155.168503 -138.086884 18.371399 1.000000 1.000000 1.000000
+vn -0.193281 0.238710 0.951662
+v 157.134476 -137.015259 18.707798 1.000000 1.000000 1.000000
+vn -0.132242 0.611030 0.780484
+v 158.545547 -136.419449 18.709599 1.000000 1.000000 1.000000
+vn -0.305977 0.284397 0.908569
+v 155.875320 -137.754791 18.575798 1.000000 1.000000 1.000000
+vn -0.250699 0.831756 0.495311
+v 157.726715 -136.300858 18.298798 1.000000 1.000000 1.000000
+vn -0.371588 0.803772 0.464621
+v 156.970963 -136.549225 18.229597 1.000000 1.000000 1.000000
+vn -0.049144 0.405274 0.912873
+v 159.288437 -136.649689 18.923199 1.000000 1.000000 1.000000
+vn 0.127590 0.396013 0.909337
+v 161.375443 -137.253860 19.154999 1.000000 1.000000 1.000000
+vn 0.132906 0.610752 0.780588
+v 160.761307 -136.712479 18.933399 1.000000 1.000000 1.000000
+vn -0.207362 -0.146237 0.967272
+v 161.268585 -137.484100 19.158798 1.000000 1.000000 1.000000
+vn 0.195336 0.284605 0.938533
+v 163.069763 -138.714783 19.404198 1.000000 1.000000 1.000000
+vn 0.374105 0.511582 0.773518
+v 162.724716 -137.969666 19.179199 1.000000 1.000000 1.000000
+vn -0.257213 -0.061524 0.964394
+v 162.885651 -138.879425 19.407997 1.000000 1.000000 1.000000
+vn 0.237750 0.217743 0.946606
+v 163.826797 -140.045929 19.579597 1.000000 1.000000 1.000000
+vn 0.536633 0.395019 0.745643
+v 163.677444 -139.221283 19.349998 1.000000 1.000000 1.000000
+vn -0.275968 0.019059 0.960978
+v 163.609222 -140.150574 19.583397 1.000000 1.000000 1.000000
+vn 0.294910 0.132682 0.946268
+v 164.265823 -141.954742 19.811199 1.000000 1.000000 1.000000
+vn 0.608712 0.280300 0.742227
+v 164.171844 -140.324997 19.483797 1.000000 1.000000 1.000000
+vn -0.253231 0.103399 0.961864
+v 164.027649 -141.972885 19.814999 1.000000 1.000000 1.000000
+vn -0.214865 0.173036 0.961193
+v 163.934952 -143.464493 20.007797 1.000000 1.000000 1.000000
+vn 0.323590 0.059049 0.944353
+v 164.169266 -143.516129 20.003998 1.000000 1.000000 1.000000
+vn -0.119735 -0.210953 0.970135
+v 159.275558 -136.907822 18.926998 1.000000 1.000000 1.000000
+vn -0.141455 0.231423 0.962514
+v 163.462448 -144.897507 20.211800 1.000000 1.000000 1.000000
+vn 0.331646 -0.021250 0.943165
+v 163.673584 -145.017502 20.208199 1.000000 1.000000 1.000000
+vn -0.041575 0.196555 0.979611
+v 162.141479 -146.627716 20.528999 1.000000 1.000000 1.000000
+vn 0.665492 0.568672 0.483459
+v 163.423813 -138.396637 18.925999 1.000000 1.000000 1.000000
+vn 0.833838 0.335766 0.438149
+v 164.394577 -140.237091 19.146000 1.000000 1.000000 1.000000
+vn 0.753334 0.474495 0.455348
+v 163.879593 -139.085938 19.012199 1.000000 1.000000 1.000000
+vn 0.452230 0.719355 0.527273
+v 162.265076 -137.245499 18.758198 1.000000 1.000000 1.000000
+vn 0.592652 0.662317 0.458366
+v 162.885651 -137.781311 18.841400 1.000000 1.000000 1.000000
+vn 0.684874 0.712317 0.153467
+v 162.987366 -137.659897 18.373199 1.000000 1.000000 1.000000
+vn 0.578850 0.800706 0.154279
+v 162.351349 -137.110153 18.289799 1.000000 1.000000 1.000000
+vn 0.373895 0.760221 0.531288
+v 161.582718 -136.807358 18.676800 1.000000 1.000000 1.000000
+vn 0.108029 0.840216 0.531382
+v 160.081512 -136.253418 18.518997 1.000000 1.000000 1.000000
+vn 0.261899 0.844598 0.466972
+v 160.837280 -136.469696 18.595600 1.000000 1.000000 1.000000
+vn 0.457819 0.875338 0.155512
+v 161.650955 -136.660858 18.208397 1.000000 1.000000 1.000000
+vn 0.602199 0.778553 -0.176668
+v 162.343628 -137.122711 17.474400 1.000000 1.000000 1.000000
+vn 0.484686 0.856354 -0.178151
+v 161.644531 -136.673401 17.392998 1.000000 1.000000 1.000000
+vn 0.326389 0.932137 0.156814
+v 160.884903 -136.314804 18.127399 1.000000 1.000000 1.000000
+vn 0.188764 0.971929 0.140437
+v 160.109848 -136.091553 18.050598 1.000000 1.000000 1.000000
+vn 0.331247 0.924414 -0.189032
+v 160.881042 -136.327362 17.311798 1.000000 1.000000 1.000000
+vn 0.462077 0.754844 -0.465505
+v 161.585297 -136.801773 16.999798 1.000000 1.000000 1.000000
+vn 0.559802 0.668464 -0.489671
+v 162.267670 -137.239914 17.081200 1.000000 1.000000 1.000000
+vn 0.323054 0.809929 -0.489542
+v 160.838562 -136.464111 16.918800 1.000000 1.000000 1.000000
+vn 0.100363 0.976786 -0.189254
+v 159.320618 -136.000854 17.160999 1.000000 1.000000 1.000000
+vn 0.116400 0.867686 -0.483292
+v 159.312897 -136.144577 16.767998 1.000000 1.000000 1.000000
+vn 0.389055 0.539850 -0.746457
+v 161.478439 -137.032013 16.655399 1.000000 1.000000 1.000000
+vn 0.475262 0.394248 -0.786571
+v 162.728577 -137.965485 16.820000 1.000000 1.000000 1.000000
+vn 0.658213 0.597101 -0.458504
+v 162.889511 -137.775711 17.164600 1.000000 1.000000 1.000000
+vn 0.237448 0.191690 -0.952299
+v 161.367706 -137.270599 16.504200 1.000000 1.000000 1.000000
+vn 0.221744 0.661952 -0.715995
+v 160.037750 -136.498993 16.497597 1.000000 1.000000 1.000000
+vn 0.290146 0.078559 -0.953753
+v 163.055603 -138.727341 16.753399 1.000000 1.000000 1.000000
+vn 0.137647 0.227212 -0.964068
+v 159.991394 -136.761307 16.346397 1.000000 1.000000 1.000000
+vn 0.033264 0.419324 -0.907227
+v 158.975571 -136.475266 16.326599 1.000000 1.000000 1.000000
+vn -0.042735 0.863442 -0.502634
+v 158.526245 -136.158524 16.695000 1.000000 1.000000 1.000000
+vn -0.178437 0.574504 -0.798815
+v 157.258072 -136.546432 16.330997 1.000000 1.000000 1.000000
+vn -0.075246 0.980389 -0.182139
+v 158.514664 -136.014801 17.087997 1.000000 1.000000 1.000000
+vn -0.234657 0.950109 -0.205498
+v 157.695816 -136.154343 17.014999 1.000000 1.000000 1.000000
+vn -0.329889 0.501948 -0.799513
+v 155.910080 -137.160385 16.327000 1.000000 1.000000 1.000000
+vn -0.458315 0.867240 -0.194531
+v 156.193329 -136.769684 16.878597 1.000000 1.000000 1.000000
+vn -0.386598 0.911760 0.138695
+v 156.916885 -136.395737 17.761200 1.000000 1.000000 1.000000
+vn -0.250477 0.955255 0.157319
+v 157.693237 -136.140396 17.830597 1.000000 1.000000 1.000000
+vn -0.601068 0.774996 -0.195188
+v 155.519974 -137.231537 16.813599 1.000000 1.000000 1.000000
+vn -0.510342 0.845829 0.155318
+v 156.186890 -136.757126 17.694199 1.000000 1.000000 1.000000
+vn -0.694741 0.654694 -0.297844
+v 154.907135 -137.795258 16.750000 1.000000 1.000000 1.000000
+vn -0.579851 0.375507 -0.723026
+v 154.178421 -138.875244 16.327999 1.000000 1.000000 1.000000
+vn -0.621412 0.766807 0.160793
+v 155.513535 -137.220383 17.629200 1.000000 1.000000 1.000000
+vn -0.732775 0.680414 -0.008807
+v 154.873657 -137.757584 17.155399 1.000000 1.000000 1.000000
+vn -0.550073 0.650402 0.523829
+v 155.602371 -137.352936 18.097397 1.000000 1.000000 1.000000
+vn -0.680178 0.576348 0.452969
+v 155.003693 -137.902695 18.033798 1.000000 1.000000 1.000000
+vn -0.774621 0.606194 0.180256
+v 154.621307 -138.098038 17.534599 1.000000 1.000000 1.000000
+vn -0.847501 0.516567 0.122069
+v 154.128204 -138.783142 17.474400 1.000000 1.000000 1.000000
+vn -0.725171 0.440234 0.529454
+v 154.253082 -138.875244 17.942799 1.000000 1.000000 1.000000
+vn -0.651729 0.228272 0.723285
+v 154.074127 -139.718033 18.222397 1.000000 1.000000 1.000000
+vn -0.105435 0.981860 0.157593
+v 158.513367 -136.000854 17.903599 1.000000 1.000000 1.000000
+vn -0.124144 0.874630 0.468626
+v 158.526245 -136.164108 18.371799 1.000000 1.000000 1.000000
+vn 0.042295 0.986629 0.157400
+v 159.321915 -135.986908 17.976597 1.000000 1.000000 1.000000
+vn 0.016417 0.845559 0.533630
+v 159.312897 -136.150146 18.444798 1.000000 1.000000 1.000000
+vn -0.307700 0.076980 0.948364
+v 154.274979 -139.825470 18.362997 1.000000 1.000000 1.000000
+vn -0.830311 0.314564 0.460036
+v 153.861694 -139.603607 17.884598 1.000000 1.000000 1.000000
+vn -0.631415 -0.049922 0.773836
+v 153.511505 -142.051025 18.059399 1.000000 1.000000 1.000000
+vn -0.419962 0.026239 0.907163
+v 153.821777 -141.289169 18.252598 1.000000 1.000000 1.000000
+vn -0.830383 0.148272 0.537103
+v 153.369888 -141.195679 17.774197 1.000000 1.000000 1.000000
+vn -0.898683 0.417556 0.134222
+v 153.725235 -139.531052 17.416397 1.000000 1.000000 1.000000
+vn -0.933994 0.274283 0.228964
+v 153.421387 -140.329178 17.360197 1.000000 1.000000 1.000000
+vn -0.900415 -0.002715 0.435024
+v 153.275894 -142.037064 17.721600 1.000000 1.000000 1.000000
+vn -0.644048 -0.227972 0.730227
+v 153.766418 -144.174728 17.928799 1.000000 1.000000 1.000000
+vn -0.282951 -0.126240 0.950790
+v 153.980148 -144.100769 18.069199 1.000000 1.000000 1.000000
+vn -0.838825 -0.136940 0.526897
+v 153.355713 -143.440781 17.638199 1.000000 1.000000 1.000000
+vn -0.842225 -0.293123 0.452478
+v 153.541122 -144.252869 17.591000 1.000000 1.000000 1.000000
+vn -0.970791 0.144079 0.191850
+v 153.220535 -141.164978 17.306000 1.000000 1.000000 1.000000
+vn -0.977350 -0.035551 0.208623
+v 153.121399 -142.613342 17.218998 1.000000 1.000000 1.000000
+vn -0.982852 0.170040 -0.071330
+v 153.185776 -141.158005 16.896000 1.000000 1.000000 1.000000
+vn -0.998463 -0.029432 -0.046955
+v 153.086639 -142.614731 16.808998 1.000000 1.000000 1.000000
+vn -0.972357 -0.176957 0.152344
+v 153.206375 -143.470078 17.169800 1.000000 1.000000 1.000000
+vn -0.949068 -0.284618 0.135140
+v 153.396912 -144.303085 17.122597 1.000000 1.000000 1.000000
+vn -0.668322 -0.320565 -0.671256
+v 153.748398 -145.324478 16.327999 1.000000 1.000000 1.000000
+vn -0.894453 -0.395837 0.208007
+v 153.686600 -145.098434 17.077797 1.000000 1.000000 1.000000
+vn -0.697516 -0.128774 -0.704903
+v 153.229538 -143.495193 16.326599 1.000000 1.000000 1.000000
+vn -0.681056 0.055632 -0.730115
+v 153.171616 -141.940796 16.326599 1.000000 1.000000 1.000000
+vn -0.639015 0.277478 -0.717402
+v 153.653122 -139.828247 16.327797 1.000000 1.000000 1.000000
+vn -0.952867 0.299058 -0.051070
+v 153.389191 -140.316620 16.950199 1.000000 1.000000 1.000000
+vn 0.595139 0.340085 -0.728115
+v 163.246140 -138.557114 16.904598 1.000000 1.000000 1.000000
+vn 0.736106 0.502421 -0.453565
+v 163.428970 -138.393845 17.248997 1.000000 1.000000 1.000000
+vn 0.820994 0.404714 -0.402710
+v 163.884735 -139.083145 17.335400 1.000000 1.000000 1.000000
+vn 0.664344 0.178018 -0.725918
+v 164.036652 -139.945465 17.079800 1.000000 1.000000 1.000000
+vn 0.705428 0.686855 -0.174933
+v 162.979630 -137.669678 17.557598 1.000000 1.000000 1.000000
+vn 0.805362 0.567852 -0.170109
+v 163.530685 -138.301758 17.642197 1.000000 1.000000 1.000000
+vn 0.776517 0.611579 0.151634
+v 163.540985 -138.291992 18.457600 1.000000 1.000000 1.000000
+vn 0.859363 0.498269 0.114993
+v 164.008331 -138.999420 18.543999 1.000000 1.000000 1.000000
+vn 0.942271 0.334553 -0.014157
+v 164.569672 -140.168716 18.267597 1.000000 1.000000 1.000000
+vn 0.921669 0.317284 -0.223286
+v 164.524612 -140.186859 17.862198 1.000000 1.000000 1.000000
+vn 0.853833 0.307009 -0.420374
+v 164.252960 -139.840820 17.424400 1.000000 1.000000 1.000000
+vn 0.897960 0.402529 0.177875
+v 164.386856 -139.778030 18.632999 1.000000 1.000000 1.000000
+vn -0.119573 -0.976528 -0.179155
+v 158.548141 -148.705368 34.819000 1.000000 1.000000 1.000000
+vn -0.287385 -0.852917 -0.435824
+v 157.760193 -148.431885 34.541199 1.000000 1.000000 1.000000
+vn -0.142124 -0.853932 -0.500601
+v 158.558426 -148.561646 34.425999 1.000000 1.000000 1.000000
+vn 0.043952 -0.982345 -0.181844
+v 159.379837 -148.710953 34.702797 1.000000 1.000000 1.000000
+vn -0.202684 -0.964050 0.171835
+v 157.729294 -148.586761 35.749718 1.000000 1.000000 1.000000
+vn -0.060859 -0.985620 0.157636
+v 158.546844 -148.719330 35.634518 1.000000 1.000000 1.000000
+vn -0.366982 -0.904389 -0.217726
+v 157.028900 -148.352356 35.036400 1.000000 1.000000 1.000000
+vn -0.339847 -0.927291 0.156954
+v 157.023743 -148.366302 35.851936 1.000000 1.000000 1.000000
+vn -0.236781 -0.847739 0.474630
+v 157.075256 -148.211426 36.320137 1.000000 1.000000 1.000000
+vn -0.024236 -0.878415 0.477284
+v 158.558426 -148.556076 36.102718 1.000000 1.000000 1.000000
+vn 0.090984 -0.983329 0.157435
+v 159.381134 -148.724899 35.518398 1.000000 1.000000 1.000000
+vn 0.130174 -0.857075 0.498474
+v 159.370834 -148.561646 35.986717 1.000000 1.000000 1.000000
+vn 0.045264 -0.652007 0.756861
+v 158.576447 -148.299332 36.440521 1.000000 1.000000 1.000000
+vn 0.256487 -0.575343 0.776656
+v 160.129150 -148.190491 36.207916 1.000000 1.000000 1.000000
+vn 0.258495 -0.845710 0.466856
+v 160.178085 -148.441650 35.870117 1.000000 1.000000 1.000000
+vn 0.238570 -0.958327 0.157140
+v 160.208969 -148.602112 35.402000 1.000000 1.000000 1.000000
+vn 0.379306 -0.782314 0.494076
+v 160.954437 -148.203049 35.754719 1.000000 1.000000 1.000000
+vn 0.422906 -0.524644 0.738850
+v 161.580139 -147.622589 35.977119 1.000000 1.000000 1.000000
+vn 0.170460 -0.317848 0.932693
+v 159.341217 -148.063522 36.464920 1.000000 1.000000 1.000000
+vn 0.274193 -0.188283 0.943063
+v 161.475861 -147.409103 36.117718 1.000000 1.000000 1.000000
+vn 0.378575 -0.912215 0.156668
+v 161.005936 -148.357925 35.286598 1.000000 1.000000 1.000000
+vn 0.495337 -0.735588 0.462116
+v 161.692154 -147.850037 35.639519 1.000000 1.000000 1.000000
+vn 0.591229 -0.643017 0.486803
+v 162.371948 -147.389572 35.524799 1.000000 1.000000 1.000000
+vn 0.532256 -0.360557 0.765965
+v 162.829010 -146.638885 35.746319 1.000000 1.000000 1.000000
+vn 0.509532 -0.846455 0.154566
+v 161.762970 -147.995148 35.171196 1.000000 1.000000 1.000000
+vn 0.334191 -0.924840 -0.181626
+v 161.000778 -148.345383 34.471001 1.000000 1.000000 1.000000
+vn 0.467946 -0.865396 -0.179210
+v 161.756531 -147.982590 34.355797 1.000000 1.000000 1.000000
+vn 0.627150 -0.763714 0.153050
+v 162.460785 -147.522125 35.056599 1.000000 1.000000 1.000000
+vn 0.589527 -0.787792 -0.178443
+v 162.453064 -147.510971 34.240997 1.000000 1.000000 1.000000
+vn 0.685615 -0.569700 0.453182
+v 162.993805 -146.823059 35.408600 1.000000 1.000000 1.000000
+vn 0.728522 -0.668034 0.151615
+v 163.099380 -146.940277 34.940399 1.000000 1.000000 1.000000
+vn 0.382703 -0.796832 -0.467544
+v 161.694733 -147.855606 33.962601 1.000000 1.000000 1.000000
+vn 0.695455 -0.696661 -0.176083
+v 163.090363 -146.930511 34.124798 1.000000 1.000000 1.000000
+vn 0.495840 -0.733336 -0.465146
+v 162.374512 -147.393768 33.848000 1.000000 1.000000 1.000000
+vn 0.250017 -0.829230 -0.499869
+v 160.955719 -148.208633 34.077999 1.000000 1.000000 1.000000
+vn 0.213893 -0.631721 -0.745103
+v 161.582718 -147.628174 33.618198 1.000000 1.000000 1.000000
+vn 0.305300 -0.530389 -0.790873
+v 162.235474 -147.185852 33.503399 1.000000 1.000000 1.000000
+vn 0.583268 -0.647678 -0.490215
+v 162.997665 -146.827240 33.731796 1.000000 1.000000 1.000000
+vn 0.785754 -0.593640 -0.173732
+v 163.641403 -146.264923 34.009796 1.000000 1.000000 1.000000
+vn 0.468167 -0.488522 -0.736319
+v 163.349152 -146.019363 33.271999 1.000000 1.000000 1.000000
+vn 0.685345 -0.567764 -0.456011
+v 163.537125 -146.177032 33.616600 1.000000 1.000000 1.000000
+vn -0.008949 -0.306805 -0.951730
+v 161.468140 -147.392365 33.466999 1.000000 1.000000 1.000000
+vn 0.762223 -0.455121 -0.460305
+v 163.987732 -145.447266 33.500801 1.000000 1.000000 1.000000
+vn 0.516602 -0.355802 -0.778799
+v 163.781738 -145.318893 33.156197 1.000000 1.000000 1.000000
+vn 0.125343 -0.281377 -0.951376
+v 163.154739 -145.856094 33.120998 1.000000 1.000000 1.000000
+vn 0.860406 -0.479345 -0.173002
+v 164.103607 -145.518433 33.893799 1.000000 1.000000 1.000000
+vn 0.813788 -0.561311 0.150600
+v 163.651703 -146.274704 34.825199 1.000000 1.000000 1.000000
+vn 0.883194 -0.444390 0.149956
+v 164.115204 -145.525406 34.709396 1.000000 1.000000 1.000000
+vn 0.934045 -0.325035 0.148028
+v 164.476974 -144.707733 34.592796 1.000000 1.000000 1.000000
+vn 0.912817 -0.350897 -0.208891
+v 164.464096 -144.702164 33.777199 1.000000 1.000000 1.000000
+vn 0.742489 -0.427512 0.515697
+v 163.531967 -146.172836 35.293598 1.000000 1.000000 1.000000
+vn 0.778651 -0.352132 0.519331
+v 163.982574 -145.443085 35.177597 1.000000 1.000000 1.000000
+vn 0.645246 -0.132200 0.752450
+v 164.115204 -144.552856 35.398796 1.000000 1.000000 1.000000
+vn 0.860997 -0.235234 0.450943
+v 164.335358 -144.647736 35.060997 1.000000 1.000000 1.000000
+vn 0.965481 -0.204404 0.161448
+v 164.703583 -143.951462 34.490601 1.000000 1.000000 1.000000
+vn 0.891933 -0.049148 0.449488
+v 164.703583 -143.051483 34.843597 1.000000 1.000000 1.000000
+vn 0.677351 0.020672 0.735370
+v 164.467972 -143.023575 35.181396 1.000000 1.000000 1.000000
+vn 0.445576 -0.128525 0.885970
+v 163.168900 -145.867264 35.771736 1.000000 1.000000 1.000000
+vn 0.362004 0.051681 0.930743
+v 164.111343 -143.785416 35.437199 1.000000 1.000000 1.000000
+vn 0.035647 0.262884 0.964169
+v 161.363846 -147.180283 36.121521 1.000000 1.000000 1.000000
+vn -0.085716 0.255017 0.963130
+v 162.979630 -145.708191 35.775520 1.000000 1.000000 1.000000
+vn 0.342100 0.145442 0.928340
+v 164.276138 -142.187759 35.205799 1.000000 1.000000 1.000000
+vn 0.609679 0.211926 0.763793
+v 164.420334 -141.338013 34.948799 1.000000 1.000000 1.000000
+vn 0.875973 0.085870 0.474655
+v 164.737061 -142.172409 34.727398 1.000000 1.000000 1.000000
+vn 0.873358 0.198338 0.444868
+v 164.654648 -141.294754 34.611000 1.000000 1.000000 1.000000
+vn 0.822169 0.309907 0.477489
+v 164.461533 -140.444992 34.495598 1.000000 1.000000 1.000000
+vn 0.573152 0.368834 0.731750
+v 163.946533 -139.747330 34.717999 1.000000 1.000000 1.000000
+vn 0.985529 -0.083947 0.147258
+v 164.854218 -143.071014 34.375397 1.000000 1.000000 1.000000
+vn 0.987965 0.046343 0.147571
+v 164.888977 -142.166840 34.259201 1.000000 1.000000 1.000000
+vn 0.973353 0.175419 0.147688
+v 164.804001 -141.265442 34.142799 1.000000 1.000000 1.000000
+vn 0.942063 0.300956 0.148131
+v 164.605728 -140.394760 34.027397 1.000000 1.000000 1.000000
+vn 0.787972 0.420023 0.450201
+v 164.160248 -139.634308 34.380398 1.000000 1.000000 1.000000
+vn 0.893269 0.423859 0.149715
+v 164.296738 -139.561752 33.911999 1.000000 1.000000 1.000000
+vn 0.976880 -0.133941 -0.166631
+v 164.841339 -143.069626 33.559799 1.000000 1.000000 1.000000
+vn 0.865854 -0.280400 -0.414334
+v 164.563248 -143.912399 33.281998 1.000000 1.000000 1.000000
+vn 0.866140 -0.151771 -0.476200
+v 164.710007 -143.052872 33.166798 1.000000 1.000000 1.000000
+vn 0.985429 0.005990 -0.169985
+v 164.876099 -142.168228 33.443596 1.000000 1.000000 1.000000
+vn 0.976210 0.134695 -0.169913
+v 164.791122 -141.268250 33.327198 1.000000 1.000000 1.000000
+vn 0.894719 -0.032301 -0.445460
+v 164.742203 -142.172409 33.050598 1.000000 1.000000 1.000000
+vn 0.688233 -0.090609 -0.719809
+v 164.505310 -142.179398 32.706001 1.000000 1.000000 1.000000
+vn 0.632436 -0.270037 -0.726020
+v 164.332779 -143.848221 32.937401 1.000000 1.000000 1.000000
+vn 0.891693 0.083361 -0.444898
+v 164.659805 -141.293365 32.934196 1.000000 1.000000 1.000000
+vn 0.950405 0.260451 -0.169988
+v 164.592850 -140.398956 33.211800 1.000000 1.000000 1.000000
+vn 0.858719 0.190800 -0.475601
+v 164.466675 -140.443604 32.818798 1.000000 1.000000 1.000000
+vn 0.907120 0.384543 -0.171055
+v 164.285141 -139.568726 33.096596 1.000000 1.000000 1.000000
+vn 0.629485 0.016357 -0.776841
+v 164.426758 -141.336609 32.589600 1.000000 1.000000 1.000000
+vn 0.668421 0.170103 -0.724071
+v 163.951691 -139.744537 32.359001 1.000000 1.000000 1.000000
+vn 0.837509 0.312287 -0.448392
+v 164.165405 -139.631516 32.703400 1.000000 1.000000 1.000000
+vn 0.281545 -0.134222 -0.950114
+v 164.259399 -142.187759 32.555000 1.000000 1.000000 1.000000
+vn 0.325614 -0.023843 -0.945202
+v 163.730240 -139.861740 32.207798 1.000000 1.000000 1.000000
+vn 0.571945 0.255491 -0.779489
+v 163.566727 -139.021759 32.244198 1.000000 1.000000 1.000000
+vn 0.239516 -0.206307 -0.948720
+v 164.094604 -143.781235 32.786400 1.000000 1.000000 1.000000
+vn 0.138080 0.230714 0.963175
+v 159.325775 -147.805389 36.468719 1.000000 1.000000 1.000000
+vn 0.214370 0.182672 0.959519
+v 157.913406 -147.686783 36.700138 1.000000 1.000000 1.000000
+vn 0.066977 -0.340129 0.937991
+v 157.861908 -147.939331 36.696320 1.000000 1.000000 1.000000
+vn 0.267049 0.088277 0.959631
+v 156.050415 -146.778412 37.034737 1.000000 1.000000 1.000000
+vn 0.517020 0.463340 0.719726
+v 156.194611 -146.562134 36.880138 1.000000 1.000000 1.000000
+vn 0.282321 -0.020398 0.959103
+v 154.638046 -145.078903 37.380737 1.000000 1.000000 1.000000
+vn -0.089331 -0.343215 0.934999
+v 155.910080 -146.989120 37.030937 1.000000 1.000000 1.000000
+vn 0.668725 0.223221 0.709210
+v 154.851776 -144.946335 37.226139 1.000000 1.000000 1.000000
+vn 0.254643 -0.118371 0.959763
+v 153.991730 -142.892410 37.727936 1.000000 1.000000 1.000000
+vn 0.701196 -0.036027 0.712058
+v 154.237640 -142.867294 37.573338 1.000000 1.000000 1.000000
+vn 0.206929 -0.193386 0.959053
+v 154.053528 -141.358932 37.959339 1.000000 1.000000 1.000000
+vn -0.329737 -0.166742 0.929231
+v 153.754837 -142.918930 37.724136 1.000000 1.000000 1.000000
+vn -0.192884 -0.256577 0.947082
+v 154.430756 -145.207275 37.376938 1.000000 1.000000 1.000000
+vn 0.644020 -0.257673 0.720308
+v 154.295578 -141.407776 37.804741 1.000000 1.000000 1.000000
+vn 0.103928 -0.248664 0.962998
+v 154.826019 -139.309189 38.293938 1.000000 1.000000 1.000000
+vn -0.358335 -0.074019 0.930654
+v 153.817917 -141.311493 37.955536 1.000000 1.000000 1.000000
+vn 0.518308 -0.460255 0.720780
+v 155.030731 -139.458496 38.139336 1.000000 1.000000 1.000000
+vn 0.857264 -0.271929 0.437210
+v 154.527328 -141.453827 37.456940 1.000000 1.000000 1.000000
+vn 0.910272 -0.110283 0.399053
+v 154.453949 -142.143112 37.341938 1.000000 1.000000 1.000000
+vn -0.016579 -0.264248 0.964312
+v 156.345245 -137.721313 38.639938 1.000000 1.000000 1.000000
+vn -0.453642 0.099972 0.885559
+v 154.627747 -139.165466 38.290138 1.000000 1.000000 1.000000
+vn -0.121041 -0.239015 0.963442
+v 158.339554 -136.946899 38.987137 1.000000 1.000000 1.000000
+vn -0.286604 0.168966 0.943032
+v 156.220367 -137.502228 38.636139 1.000000 1.000000 1.000000
+vn 0.272699 -0.627442 0.729350
+v 156.475296 -137.948746 38.485336 1.000000 1.000000 1.000000
+vn -0.015039 -0.674088 0.738498
+v 158.371750 -137.212006 38.832539 1.000000 1.000000 1.000000
+vn -0.200484 -0.195240 0.960046
+v 159.755783 -136.960846 39.218536 1.000000 1.000000 1.000000
+vn -0.263434 -0.619074 0.739831
+v 159.719742 -137.225952 39.063938 1.000000 1.000000 1.000000
+vn -0.259328 -0.103620 0.960214
+v 161.672836 -137.728287 39.553139 1.000000 1.000000 1.000000
+vn -0.278059 -0.843727 0.459139
+v 159.684967 -137.478516 38.716141 1.000000 1.000000 1.000000
+vn -0.093858 -0.899298 0.427147
+v 159.046387 -137.422699 38.601139 1.000000 1.000000 1.000000
+vn -0.482515 -0.495558 0.722219
+v 161.541519 -137.955719 39.398537 1.000000 1.000000 1.000000
+vn -0.282918 0.002452 0.959141
+v 163.188217 -139.320358 39.899139 1.000000 1.000000 1.000000
+vn -0.411440 -0.853495 0.319788
+v 160.848862 -137.845490 38.934937 1.000000 1.000000 1.000000
+vn -0.651975 -0.265088 0.710392
+v 162.983505 -139.469666 39.744537 1.000000 1.000000 1.000000
+vn -0.686882 -0.646883 0.331265
+v 161.934204 -138.580826 39.166138 1.000000 1.000000 1.000000
+vn -0.570666 -0.689404 0.446164
+v 161.416641 -138.171997 39.050938 1.000000 1.000000 1.000000
+vn -0.024455 -0.999172 0.032509
+v 159.045090 -137.613861 37.776741 1.000000 1.000000 1.000000
+vn -0.254685 -0.967007 0.005811
+v 160.190948 -137.792465 37.994141 1.000000 1.000000 1.000000
+vn -0.436874 -0.899478 -0.008977
+v 160.776764 -138.019897 38.110741 1.000000 1.000000 1.000000
+vn -0.752885 -0.553698 0.355785
+v 162.397705 -139.066406 39.282139 1.000000 1.000000 1.000000
+vn -0.655923 -0.753134 0.050545
+v 161.819611 -138.727341 38.341736 1.000000 1.000000 1.000000
+vn -0.890901 -0.294726 0.345590
+v 163.105804 -140.214767 39.512337 1.000000 1.000000 1.000000
+vn -0.807534 -0.426297 0.407628
+v 162.787811 -139.611984 39.396938 1.000000 1.000000 1.000000
+vn -0.856910 -0.513245 0.047803
+v 162.641022 -139.718033 38.572540 1.000000 1.000000 1.000000
+vn -0.636560 -0.639437 -0.431174
+v 162.406708 -139.056625 37.605736 1.000000 1.000000 1.000000
+vn -0.915527 -0.241925 0.321377
+v 163.342712 -140.859406 39.627541 1.000000 1.000000 1.000000
+vn -0.953902 -0.299986 0.008927
+v 163.174042 -140.918015 38.803337 1.000000 1.000000 1.000000
+vn -0.446626 -0.798975 -0.402697
+v 161.424362 -138.159439 37.374336 1.000000 1.000000 1.000000
+vn -0.418352 -0.606652 -0.675984
+v 162.095139 -138.371521 37.154739 1.000000 1.000000 1.000000
+vn -0.122276 -0.706436 -0.697135
+v 160.306824 -137.345963 36.807137 1.000000 1.000000 1.000000
+vn -0.293302 -0.763980 -0.574725
+v 160.854004 -137.831528 37.258339 1.000000 1.000000 1.000000
+vn -0.116927 -0.962184 -0.246028
+v 159.665665 -137.612473 37.437138 1.000000 1.000000 1.000000
+vn -0.127970 -0.260267 -0.957019
+v 163.179199 -139.327332 37.249741 1.000000 1.000000 1.000000
+vn 0.032497 -0.247751 -0.968278
+v 161.666412 -137.739441 36.903740 1.000000 1.000000 1.000000
+vn -0.504541 -0.446404 -0.739028
+v 162.996368 -139.459885 37.385536 1.000000 1.000000 1.000000
+vn -0.211953 -0.184545 -0.959697
+v 163.959412 -141.455215 37.596916 1.000000 1.000000 1.000000
+vn -0.687270 -0.341622 -0.641057
+v 163.582184 -140.777084 37.616341 1.000000 1.000000 1.000000
+vn -0.722723 -0.505280 -0.471555
+v 162.799393 -139.603607 37.720337 1.000000 1.000000 1.000000
+vn -0.833529 -0.350673 -0.426917
+v 163.355576 -140.855225 37.950939 1.000000 1.000000 1.000000
+vn -0.822950 -0.520251 -0.228239
+v 162.683517 -139.687332 38.117737 1.000000 1.000000 1.000000
+vn -0.742578 -0.607668 -0.281632
+v 162.303711 -139.157104 38.003136 1.000000 1.000000 1.000000
+vn 0.266666 -0.174684 -0.947826
+v 164.225922 -143.016602 37.823120 1.000000 1.000000 1.000000
+vn -0.262605 -0.117814 -0.957684
+v 163.994171 -142.987289 37.828117 1.000000 1.000000 1.000000
+vn 0.297899 -0.097729 -0.949582
+v 164.188583 -141.413361 37.591721 1.000000 1.000000 1.000000
+vn 0.165598 -0.251413 -0.953608
+v 163.555145 -145.210052 38.157719 1.000000 1.000000 1.000000
+vn -0.306865 -0.006918 -0.951728
+v 163.353012 -145.084473 38.162918 1.000000 1.000000 1.000000
+vn 0.089656 -0.296047 -0.950956
+v 162.642319 -146.471436 38.389118 1.000000 1.000000 1.000000
+vn 0.327072 0.017926 -0.944829
+v 163.372314 -139.186401 37.244537 1.000000 1.000000 1.000000
+vn 0.292435 0.142732 -0.945574
+v 161.790009 -137.524551 36.898537 1.000000 1.000000 1.000000
+vn 0.118634 -0.248358 -0.961376
+v 159.754501 -136.974792 36.568939 1.000000 1.000000 1.000000
+vn 0.200432 0.246820 -0.948107
+v 159.789261 -136.723633 36.563938 1.000000 1.000000 1.000000
+vn 0.120731 -0.662857 -0.738949
+v 159.048965 -137.149216 36.589737 1.000000 1.000000 1.000000
+vn 0.193110 -0.203214 -0.959902
+v 158.340851 -136.960846 36.337738 1.000000 1.000000 1.000000
+vn -0.047710 -0.875378 -0.481079
+v 159.686264 -137.464554 37.039539 1.000000 1.000000 1.000000
+vn 0.353225 -0.662641 -0.660408
+v 157.702255 -137.345963 36.357140 1.000000 1.000000 1.000000
+vn 0.190300 -0.863754 -0.466600
+v 158.401352 -137.450607 36.808338 1.000000 1.000000 1.000000
+vn 0.273907 -0.127763 -0.953232
+v 156.351685 -137.732468 35.990540 1.000000 1.000000 1.000000
+vn 0.466835 -0.482187 -0.741323
+v 156.467560 -137.933395 36.126339 1.000000 1.000000 1.000000
+vn 0.367689 -0.816020 -0.446001
+v 157.766632 -137.594330 36.691738 1.000000 1.000000 1.000000
+vn 0.531742 -0.696927 -0.481190
+v 156.593735 -138.153854 36.461136 1.000000 1.000000 1.000000
+vn 0.139532 -0.962153 -0.234078
+v 158.419373 -137.599899 37.205738 1.000000 1.000000 1.000000
+vn 0.150860 -0.988543 0.004855
+v 158.425827 -137.655716 37.660538 1.000000 1.000000 1.000000
+vn 0.313003 -0.949699 0.010051
+v 157.818130 -137.792465 37.544136 1.000000 1.000000 1.000000
+vn 0.551419 -0.800603 -0.234463
+v 156.667114 -138.280823 36.858536 1.000000 1.000000 1.000000
+vn 0.243049 -0.906870 0.344259
+v 157.770493 -137.608276 38.368340 1.000000 1.000000 1.000000
+vn 0.544620 -0.837236 0.049250
+v 156.694153 -138.328278 37.313339 1.000000 1.000000 1.000000
+vn 0.032652 -0.890034 0.454724
+v 158.402634 -137.465958 38.484940 1.000000 1.000000 1.000000
+vn 0.304386 -0.878638 0.367892
+v 157.166656 -137.842697 38.253136 1.000000 1.000000 1.000000
+vn 0.449431 -0.787188 0.422313
+v 156.600174 -138.165009 38.137741 1.000000 1.000000 1.000000
+vn 0.583621 -0.726325 0.363096
+v 156.085175 -138.569656 38.022938 1.000000 1.000000 1.000000
+vn 0.676576 -0.657115 0.332332
+v 155.620407 -139.055237 37.906937 1.000000 1.000000 1.000000
+vn 0.781785 -0.621492 0.050598
+v 155.751724 -139.183609 37.082539 1.000000 1.000000 1.000000
+vn 0.716132 -0.541085 0.440887
+v 155.226425 -139.602219 37.791740 1.000000 1.000000 1.000000
+vn 0.911526 -0.411162 -0.008186
+v 155.064209 -140.290115 36.851540 1.000000 1.000000 1.000000
+vn 0.867937 -0.391682 0.305401
+v 154.905853 -140.206390 37.675739 1.000000 1.000000 1.000000
+vn 0.968300 -0.249709 0.006418
+v 154.833755 -140.916611 36.734940 1.000000 1.000000 1.000000
+vn 0.817046 -0.426118 -0.388407
+v 155.214844 -139.593842 36.115139 1.000000 1.000000 1.000000
+vn 0.666714 -0.607509 -0.431770
+v 156.076157 -138.558502 36.346539 1.000000 1.000000 1.000000
+vn 0.964381 -0.129934 -0.230404
+v 154.650925 -141.478928 36.177940 1.000000 1.000000 1.000000
+vn 0.998183 -0.050898 0.032246
+v 154.630325 -142.151489 36.517540 1.000000 1.000000 1.000000
+vn 0.995251 0.097177 0.005636
+v 154.648346 -142.822647 36.401337 1.000000 1.000000 1.000000
+vn 0.971767 0.089757 -0.218203
+v 154.596848 -142.828217 35.946541 1.000000 1.000000 1.000000
+vn 0.971145 0.238318 0.009062
+v 154.752640 -143.486816 36.284939 1.000000 1.000000 1.000000
+vn 0.889924 -0.070411 -0.450641
+v 154.514450 -141.451035 35.780338 1.000000 1.000000 1.000000
+vn 0.888200 0.137693 -0.438339
+v 154.457809 -142.843582 35.549198 1.000000 1.000000 1.000000
+vn 0.854759 0.296623 -0.425914
+v 154.568527 -143.535660 35.432598 1.000000 1.000000 1.000000
+vn 0.695971 0.085188 -0.712999
+v 154.202881 -142.130554 35.330597 1.000000 1.000000 1.000000
+vn 0.781398 -0.284326 -0.555495
+v 154.892975 -140.199417 35.999138 1.000000 1.000000 1.000000
+vn 0.731763 -0.133559 -0.668344
+v 154.425613 -140.774292 35.547997 1.000000 1.000000 1.000000
+vn 0.710248 0.296842 -0.638305
+v 154.336777 -143.597061 35.098000 1.000000 1.000000 1.000000
+vn 0.270534 0.101067 -0.957391
+v 154.065125 -141.360336 35.309799 1.000000 1.000000 1.000000
+vn 0.225056 0.170571 -0.959300
+v 154.003311 -142.891006 35.078598 1.000000 1.000000 1.000000
+vn 0.267826 0.021212 -0.963234
+v 154.836319 -139.316177 35.644539 1.000000 1.000000 1.000000
+vn 0.630020 -0.400301 -0.665458
+v 155.433716 -138.873856 35.895538 1.000000 1.000000 1.000000
+vn 0.638838 -0.714594 -0.285029
+v 156.164993 -138.674316 36.743938 1.000000 1.000000 1.000000
+vn 0.904634 -0.001094 0.426187
+v 154.471970 -142.842178 37.225739 1.000000 1.000000 1.000000
+vn 0.908411 0.236904 0.344479
+v 154.777100 -144.192856 36.993938 1.000000 1.000000 1.000000
+vn 0.929408 0.183810 0.320025
+v 154.581406 -143.532867 37.109138 1.000000 1.000000 1.000000
+vn 0.888829 0.455720 0.047987
+v 155.208405 -144.723083 36.054138 1.000000 1.000000 1.000000
+vn 0.834298 0.373386 0.405624
+v 155.055191 -144.817978 36.878540 1.000000 1.000000 1.000000
+vn -0.116756 -0.626928 0.770279
+v 157.155075 -147.970032 36.657936 1.000000 1.000000 1.000000
+vn -0.380671 -0.798890 0.465687
+v 156.328506 -147.857010 36.436737 1.000000 1.000000 1.000000
+vn -0.208643 -0.594644 0.776444
+v 156.439240 -147.629578 36.774536 1.000000 1.000000 1.000000
+vn -0.382880 -0.504278 0.774020
+v 155.187805 -146.647247 37.005539 1.000000 1.000000 1.000000
+vn -0.483547 -0.723563 0.492583
+v 155.639709 -147.392365 36.552738 1.000000 1.000000 1.000000
+vn -0.592934 -0.790156 0.155186
+v 155.550873 -147.526306 36.084339 1.000000 1.000000 1.000000
+vn -0.470213 -0.868672 0.155914
+v 156.257690 -148.002121 35.968536 1.000000 1.000000 1.000000
+vn -0.507602 -0.842987 -0.178083
+v 156.264145 -147.989563 35.153000 1.000000 1.000000 1.000000
+vn -0.699554 -0.697832 0.153802
+v 154.917435 -146.950043 36.199539 1.000000 1.000000 1.000000
+vn -0.625320 -0.760032 -0.176995
+v 155.558594 -147.515152 35.268997 1.000000 1.000000 1.000000
+vn -0.597982 -0.657514 0.458360
+v 155.022995 -146.831436 36.667740 1.000000 1.000000 1.000000
+vn -0.789787 -0.594160 0.152347
+v 154.359955 -146.278885 36.315739 1.000000 1.000000 1.000000
+vn -0.811879 -0.557670 -0.172793
+v 154.370255 -146.270523 35.500198 1.000000 1.000000 1.000000
+vn -0.727213 -0.663840 -0.174576
+v 154.926453 -146.940277 35.383999 1.000000 1.000000 1.000000
+vn -0.595708 -0.658345 -0.460123
+v 155.637131 -147.397949 34.875801 1.000000 1.000000 1.000000
+vn -0.675541 -0.555250 -0.485122
+v 155.019150 -146.837021 34.990997 1.000000 1.000000 1.000000
+vn -0.510592 -0.449231 -0.733136
+v 155.776184 -147.190033 34.531197 1.000000 1.000000 1.000000
+vn -0.478728 -0.740629 -0.471474
+v 156.325928 -147.862595 34.759998 1.000000 1.000000 1.000000
+vn -0.757533 -0.470629 -0.452384
+v 154.474548 -146.181213 35.107201 1.000000 1.000000 1.000000
+vn -0.553627 -0.292017 -0.779887
+v 154.661224 -146.023544 34.762596 1.000000 1.000000 1.000000
+vn -0.815023 -0.365203 -0.449850
+v 154.026505 -145.459824 35.221798 1.000000 1.000000 1.000000
+vn -0.656208 -0.212586 -0.724016
+v 154.232498 -145.331451 34.877396 1.000000 1.000000 1.000000
+vn -0.880315 -0.442354 -0.171374
+v 153.910614 -145.530991 35.614937 1.000000 1.000000 1.000000
+vn -0.374604 -0.496455 -0.783074
+v 156.436661 -147.635147 34.415398 1.000000 1.000000 1.000000
+vn -0.328199 0.002680 -0.944605
+v 154.444931 -145.198898 34.726196 1.000000 1.000000 1.000000
+vn -0.301455 -0.123145 -0.945495
+v 155.920380 -146.973755 34.380196 1.000000 1.000000 1.000000
+vn -0.276088 -0.611444 -0.741560
+v 157.811691 -148.180725 34.196598 1.000000 1.000000 1.000000
+vn -0.218399 -0.233630 -0.947480
+v 157.865753 -147.921188 34.045601 1.000000 1.000000 1.000000
+vn -0.076622 -0.664719 -0.743154
+v 159.355377 -148.310486 33.965199 1.000000 1.000000 1.000000
+vn -0.004376 -0.881562 -0.472048
+v 159.370834 -148.567230 34.309799 1.000000 1.000000 1.000000
+vn 0.128794 -0.872267 -0.471765
+v 160.179367 -148.447235 34.193398 1.000000 1.000000 1.000000
+vn 0.043157 -0.605083 -0.794992
+v 160.130447 -148.196075 33.848801 1.000000 1.000000 1.000000
+vn -0.134502 -0.271815 -0.952904
+v 159.339935 -148.045380 33.814198 1.000000 1.000000 1.000000
+vn 0.191854 -0.964488 -0.181536
+v 160.206406 -148.588165 34.586399 1.000000 1.000000 1.000000
+vn -0.863599 -0.481274 0.150238
+v 153.900330 -145.537964 36.430336 1.000000 1.000000 1.000000
+vn -0.920481 -0.361284 0.148960
+v 153.539825 -144.731461 36.545738 1.000000 1.000000 1.000000
+vn -0.931577 -0.321026 -0.170610
+v 153.551422 -144.725876 35.730141 1.000000 1.000000 1.000000
+vn -0.758776 -0.470927 0.449986
+v 154.031647 -145.457031 36.898739 1.000000 1.000000 1.000000
+vn -0.800443 -0.361989 0.477759
+v 153.680161 -144.670059 37.013939 1.000000 1.000000 1.000000
+vn -0.670112 -0.562155 0.484698
+v 154.479691 -146.177032 36.783939 1.000000 1.000000 1.000000
+vn -0.546151 -0.405281 0.733121
+v 154.236359 -145.328659 37.236336 1.000000 1.000000 1.000000
+vn -0.594744 -0.250251 0.763973
+v 153.663422 -143.775650 37.467140 1.000000 1.000000 1.000000
+vn -0.858871 -0.253680 0.444957
+v 153.434265 -143.837051 37.129341 1.000000 1.000000 1.000000
+vn -0.768635 -0.549280 0.327859
+v 162.380966 -139.048264 34.129196 1.000000 1.000000 1.000000
+vn -0.548563 -0.428558 0.717925
+v 162.070679 -138.371521 34.361801 1.000000 1.000000 1.000000
+vn -0.661496 -0.605516 0.442464
+v 161.920044 -138.566879 34.014198 1.000000 1.000000 1.000000
+vn -0.820149 -0.450360 0.352889
+v 162.778793 -139.598022 34.245399 1.000000 1.000000 1.000000
+vn -0.682085 -0.179753 0.708836
+v 163.309235 -140.083603 34.707798 1.000000 1.000000 1.000000
+vn -0.560778 -0.827921 -0.008654
+v 161.304626 -138.322693 33.073997 1.000000 1.000000 1.000000
+vn -0.752301 -0.656902 0.050221
+v 162.249649 -139.176636 33.305000 1.000000 1.000000 1.000000
+vn -0.529080 -0.787406 0.316332
+v 161.398605 -138.159439 33.898201 1.000000 1.000000 1.000000
+vn -0.392568 -0.919700 0.006481
+v 160.753586 -138.010132 32.957397 1.000000 1.000000 1.000000
+vn -0.718934 -0.547678 -0.427998
+v 162.790375 -139.589661 32.568798 1.000000 1.000000 1.000000
+vn -0.555747 -0.729172 -0.399315
+v 161.929062 -138.555710 32.337601 1.000000 1.000000 1.000000
+vn -0.256702 -0.934571 -0.246335
+v 160.255325 -137.754791 32.400398 1.000000 1.000000 1.000000
+vn -0.171867 -0.984546 0.033615
+v 159.641205 -137.664093 32.739998 1.000000 1.000000 1.000000
+vn -0.397809 -0.796030 0.456163
+v 160.291382 -137.623642 33.679398 1.000000 1.000000 1.000000
+vn -0.004161 -0.972058 -0.234704
+v 159.023209 -137.558044 32.168999 1.000000 1.000000 1.000000
+vn 0.003334 -0.999979 0.005481
+v 159.023209 -137.613861 32.623798 1.000000 1.000000 1.000000
+vn -0.400285 -0.715229 -0.572904
+v 161.405045 -138.146881 32.221596 1.000000 1.000000 1.000000
+vn -0.175688 -0.859261 -0.480420
+v 160.295242 -137.609680 32.002800 1.000000 1.000000 1.000000
+vn 0.170856 -0.985247 0.009807
+v 158.402634 -137.659897 32.507401 1.000000 1.000000 1.000000
+vn 0.244765 -0.859344 -0.449019
+v 158.376892 -137.454803 31.654999 1.000000 1.000000 1.000000
+vn 0.060924 -0.881779 -0.467712
+v 159.023209 -137.407349 31.771599 1.000000 1.000000 1.000000
+vn -0.224536 -0.876948 0.424908
+v 159.666946 -137.474335 33.564400 1.000000 1.000000 1.000000
+vn -0.350974 -0.578097 0.736628
+v 160.358337 -137.379440 34.027199 1.000000 1.000000 1.000000
+vn -0.114172 -0.665665 0.737465
+v 159.024490 -137.167358 33.795799 1.000000 1.000000 1.000000
+vn -0.098478 -0.885800 0.453498
+v 159.023209 -137.422699 33.448196 1.000000 1.000000 1.000000
+vn -0.272549 -0.070938 0.959523
+v 162.229034 -138.166412 34.516399 1.000000 1.000000 1.000000
+vn -0.227132 -0.168695 0.959142
+v 160.427856 -137.122711 34.181599 1.000000 1.000000 1.000000
+vn -0.279700 0.038645 0.959309
+v 163.531967 -139.966385 34.862396 1.000000 1.000000 1.000000
+vn -0.154472 -0.220517 0.963074
+v 159.025787 -136.899445 33.950401 1.000000 1.000000 1.000000
+vn 0.178481 -0.658288 0.731301
+v 157.053360 -137.616653 33.448601 1.000000 1.000000 1.000000
+vn -0.259364 0.204507 0.943879
+v 156.856384 -137.136658 33.599396 1.000000 1.000000 1.000000
+vn -0.055111 -0.259394 0.964198
+v 156.952942 -137.372467 33.603199 1.000000 1.000000 1.000000
+vn 0.448941 -0.524729 0.723265
+v 155.432419 -138.898956 33.102600 1.000000 1.000000 1.000000
+vn 0.066112 -0.259501 0.963477
+v 155.248322 -138.721756 33.257198 1.000000 1.000000 1.000000
+vn -0.355313 0.113603 0.927819
+v 155.070648 -138.548737 33.253399 1.000000 1.000000 1.000000
+vn -0.364827 -0.028740 0.930632
+v 153.998169 -140.555222 32.918800 1.000000 1.000000 1.000000
+vn 0.176196 -0.218203 0.959866
+v 154.224777 -140.637558 32.922398 1.000000 1.000000 1.000000
+vn 0.601345 -0.338003 0.723974
+v 154.459091 -140.721268 32.767998 1.000000 1.000000 1.000000
+vn -0.350864 -0.123515 0.928245
+v 153.732941 -142.138931 32.687401 1.000000 1.000000 1.000000
+vn 0.235895 -0.149572 0.960199
+v 153.971146 -142.148697 32.691200 1.000000 1.000000 1.000000
+vn 0.690671 -0.124059 0.712448
+v 154.217041 -142.158463 32.536598 1.000000 1.000000 1.000000
+vn 0.814018 -0.379180 0.439996
+v 154.683105 -140.802200 32.420197 1.000000 1.000000 1.000000
+vn 0.887900 -0.225292 0.401094
+v 154.523453 -141.473358 32.305000 1.000000 1.000000 1.000000
+vn 0.809875 -0.500568 0.305833
+v 155.213547 -139.621750 32.639000 1.000000 1.000000 1.000000
+vn 0.999582 -0.028403 0.005417
+v 154.630325 -142.175201 31.364599 1.000000 1.000000 1.000000
+vn 0.983773 -0.176536 0.032038
+v 154.697266 -141.508240 31.480799 1.000000 1.000000 1.000000
+vn 0.634805 -0.631909 0.444651
+v 155.607529 -139.069199 32.754997 1.000000 1.000000 1.000000
+vn 0.928359 -0.371628 0.006517
+v 155.053909 -140.313828 31.698198 1.000000 1.000000 1.000000
+vn 0.578869 -0.743300 0.335285
+v 156.067154 -138.586411 32.869999 1.000000 1.000000 1.000000
+vn 0.849295 -0.527857 -0.008013
+v 155.361618 -139.727798 31.814798 1.000000 1.000000 1.000000
+vn 0.752697 -0.528970 -0.391968
+v 155.597214 -139.059433 31.078398 1.000000 1.000000 1.000000
+vn 0.940071 -0.250892 -0.230913
+v 154.801559 -140.845459 31.141199 1.000000 1.000000 1.000000
+vn 0.576155 -0.691328 -0.436017
+v 156.580856 -138.162231 31.309599 1.000000 1.000000 1.000000
+vn 0.690124 -0.721863 0.051415
+v 156.180450 -138.732925 32.045799 1.000000 1.000000 1.000000
+vn 0.475090 -0.800165 0.366094
+v 156.587296 -138.174789 32.986198 1.000000 1.000000 1.000000
+vn 0.532224 -0.796117 -0.287985
+v 156.654251 -138.290604 31.707199 1.000000 1.000000 1.000000
+vn 0.420363 -0.906030 0.049049
+v 157.222015 -138.025482 32.276596 1.000000 1.000000 1.000000
+vn 0.332045 -0.841918 0.425347
+v 157.149918 -137.849670 33.100998 1.000000 1.000000 1.000000
+vn 0.172931 -0.913046 0.369381
+v 157.751175 -137.612473 33.216400 1.000000 1.000000 1.000000
+vn 0.433373 -0.869312 -0.237664
+v 157.200134 -137.973862 31.821798 1.000000 1.000000 1.000000
+vn 0.106880 -0.932325 0.345467
+v 158.378189 -137.470154 33.331596 1.000000 1.000000 1.000000
+vn 0.428432 -0.763122 -0.483829
+v 157.143494 -137.837128 31.424398 1.000000 1.000000 1.000000
+vn 0.253711 -0.704119 -0.663210
+v 158.343414 -137.199448 31.320198 1.000000 1.000000 1.000000
+vn 0.393985 -0.539060 -0.744439
+v 157.046936 -137.601303 31.089598 1.000000 1.000000 1.000000
+vn 0.022208 -0.671961 -0.740253
+v 159.703003 -137.205032 31.552998 1.000000 1.000000 1.000000
+vn 0.161330 -0.225102 -0.960886
+v 159.025787 -136.912018 31.300999 1.000000 1.000000 1.000000
+vn 0.252461 -0.160225 -0.954249
+v 156.958099 -137.383636 30.953798 1.000000 1.000000 1.000000
+vn 0.568693 -0.479266 -0.668500
+v 155.904938 -138.378494 30.858797 1.000000 1.000000 1.000000
+vn 0.706638 -0.224643 -0.670969
+v 154.667664 -140.114304 30.511198 1.000000 1.000000 1.000000
+vn 0.268527 -0.012731 -0.963188
+v 155.257324 -138.730133 30.607798 1.000000 1.000000 1.000000
+vn 0.737285 -0.380591 -0.558177
+v 155.203247 -139.613373 30.962399 1.000000 1.000000 1.000000
+vn 0.282475 0.066083 -0.956996
+v 154.236359 -140.641739 30.272999 1.000000 1.000000 1.000000
+vn 0.701174 -0.002957 -0.712984
+v 154.276276 -141.424530 30.293798 1.000000 1.000000 1.000000
+vn 0.873467 -0.182531 -0.451374
+v 154.670242 -140.798004 30.743599 1.000000 1.000000 1.000000
+vn 0.975499 -0.033136 -0.217493
+v 154.578827 -142.173813 30.909798 1.000000 1.000000 1.000000
+vn 0.899016 0.024198 -0.437247
+v 154.439774 -142.168228 30.512398 1.000000 1.000000 1.000000
+vn 0.247383 0.140666 -0.958653
+v 153.982727 -142.148697 30.041798 1.000000 1.000000 1.000000
+vn 0.743554 0.203471 -0.636967
+v 154.224777 -142.896606 30.060999 1.000000 1.000000 1.000000
+vn 0.886752 0.185057 -0.423586
+v 154.461670 -142.870087 30.395798 1.000000 1.000000 1.000000
+vn 0.993453 0.113879 0.009132
+v 154.650925 -142.849152 31.248198 1.000000 1.000000 1.000000
+vn 0.908875 0.351083 -0.225140
+v 154.899399 -144.162170 30.562599 1.000000 1.000000 1.000000
+vn 0.810054 0.355221 -0.466509
+v 154.770660 -144.217987 30.165199 1.000000 1.000000 1.000000
+vn 0.940186 0.337395 0.047066
+v 154.947037 -144.141235 31.017399 1.000000 1.000000 1.000000
+vn 0.896396 -0.115458 0.427952
+v 154.452652 -142.168228 32.188999 1.000000 1.000000 1.000000
+vn 0.945034 0.064630 0.320522
+v 154.474548 -142.868683 32.072399 1.000000 1.000000 1.000000
+vn 0.931248 0.120047 0.344043
+v 154.585266 -143.552399 31.957199 1.000000 1.000000 1.000000
+vn 0.693309 0.136604 0.707575
+v 154.564667 -144.308670 32.189400 1.000000 1.000000 1.000000
+vn 0.875829 0.263833 0.404124
+v 154.783539 -144.212387 31.841799 1.000000 1.000000 1.000000
+vn 0.848181 0.394547 0.353443
+v 155.064209 -144.831924 31.726999 1.000000 1.000000 1.000000
+vn 0.794827 0.604738 0.050415
+v 155.565033 -145.292389 30.786598 1.000000 1.000000 1.000000
+vn 0.277835 -0.055663 0.959015
+v 154.336777 -144.409149 32.343998 1.000000 1.000000 1.000000
+vn 0.577348 0.391666 0.716427
+v 155.692505 -146.108658 31.843399 1.000000 1.000000 1.000000
+vn -0.228380 -0.230011 0.946011
+v 154.115341 -144.506821 32.340199 1.000000 1.000000 1.000000
+vn 0.276982 0.053649 0.959376
+v 155.522552 -146.302597 31.997999 1.000000 1.000000 1.000000
+vn -0.187532 -0.401471 0.896467
+v 155.357758 -146.488190 31.994198 1.000000 1.000000 1.000000
+vn 0.016270 -0.345499 0.938278
+v 157.170517 -147.718872 31.659599 1.000000 1.000000 1.000000
+vn 0.238694 0.153933 0.958817
+v 157.254211 -147.476089 31.663198 1.000000 1.000000 1.000000
+vn -0.051158 -0.651368 0.757036
+v 157.834869 -148.180725 31.403799 1.000000 1.000000 1.000000
+vn 0.122158 -0.335921 0.933935
+v 158.621521 -148.059326 31.428198 1.000000 1.000000 1.000000
+vn -0.218454 -0.598939 0.770422
+v 156.466278 -147.644928 31.621199 1.000000 1.000000 1.000000
+vn -0.446789 -0.453876 0.770958
+v 154.684387 -146.044464 31.968798 1.000000 1.000000 1.000000
+vn -0.548021 -0.650038 0.526424
+v 155.038452 -146.849579 31.515999 1.000000 1.000000 1.000000
+vn -0.475021 -0.701162 0.531720
+v 155.662888 -147.410507 31.399998 1.000000 1.000000 1.000000
+vn -0.357403 -0.806035 0.471775
+v 156.358124 -147.872360 31.283398 1.000000 1.000000 1.000000
+vn -0.598123 -0.331168 0.729778
+v 153.908051 -144.597504 32.199600 1.000000 1.000000 1.000000
+vn -0.740608 -0.469100 0.481088
+v 154.041946 -145.473785 31.747198 1.000000 1.000000 1.000000
+vn -0.683901 -0.571219 0.453859
+v 154.497711 -146.202133 31.630999 1.000000 1.000000 1.000000
+vn -0.624310 -0.173124 0.761751
+v 153.534683 -142.974731 32.430397 1.000000 1.000000 1.000000
+vn -0.814890 -0.368045 0.447770
+v 153.687897 -144.693787 31.861998 1.000000 1.000000 1.000000
+vn -0.841556 -0.256632 0.475315
+v 153.439407 -143.862167 31.977198 1.000000 1.000000 1.000000
+vn -0.861358 -0.485100 0.150801
+v 153.910614 -145.556107 31.278999 1.000000 1.000000 1.000000
+vn -0.919166 -0.364750 0.148630
+v 153.547562 -144.755173 31.393599 1.000000 1.000000 1.000000
+vn -0.787679 -0.597157 0.151542
+v 154.379257 -146.304001 31.162798 1.000000 1.000000 1.000000
+vn -0.878202 -0.446496 -0.171471
+v 153.920929 -145.549118 30.463398 1.000000 1.000000 1.000000
+vn -0.930428 -0.324875 -0.169588
+v 153.560425 -144.750992 30.578199 1.000000 1.000000 1.000000
+vn -0.809761 -0.560679 -0.172989
+v 154.389572 -146.295624 30.347198 1.000000 1.000000 1.000000
+vn -0.724555 -0.666759 -0.174507
+v 154.943176 -146.958405 30.232199 1.000000 1.000000 1.000000
+vn -0.696764 -0.700769 0.153111
+v 154.934174 -146.968185 31.047598 1.000000 1.000000 1.000000
+vn -0.620970 -0.763714 -0.176459
+v 155.581772 -147.533295 30.116198 1.000000 1.000000 1.000000
+vn -0.588226 -0.793635 0.155349
+v 155.574051 -147.544449 30.931799 1.000000 1.000000 1.000000
+vn -0.469253 -0.869213 0.155791
+v 156.287308 -148.017471 30.815199 1.000000 1.000000 1.000000
+vn -0.340982 -0.924345 0.171225
+v 156.958099 -148.339783 30.712999 1.000000 1.000000 1.000000
+vn -0.153152 -0.865677 0.476600
+v 157.783371 -148.431885 31.065998 1.000000 1.000000 1.000000
+vn -0.492694 -0.842961 -0.216030
+v 156.293747 -148.004913 29.999598 1.000000 1.000000 1.000000
+vn -0.262014 -0.948413 -0.178497
+v 157.753754 -148.578400 29.782198 1.000000 1.000000 1.000000
+vn -0.205566 -0.965820 0.157904
+v 157.751175 -148.592346 30.597799 1.000000 1.000000 1.000000
+vn 0.001970 -0.866002 0.500037
+v 158.588043 -148.557465 30.949799 1.000000 1.000000 1.000000
+vn 0.169314 -0.603709 0.779018
+v 159.386276 -148.302124 31.171198 1.000000 1.000000 1.000000
+vn -0.055351 -0.985781 0.158659
+v 158.576447 -148.722107 30.481598 1.000000 1.000000 1.000000
+vn 0.132260 -0.873237 0.469004
+v 159.403015 -148.558868 30.833399 1.000000 1.000000 1.000000
+vn -0.101585 -0.978103 -0.181648
+v 158.577744 -148.708160 29.665998 1.000000 1.000000 1.000000
+vn 0.096119 -0.982798 0.157698
+v 159.413315 -148.722107 30.365198 1.000000 1.000000 1.000000
+vn 0.261950 -0.827560 0.496515
+v 160.201248 -148.436066 30.717999 1.000000 1.000000 1.000000
+vn 0.243776 -0.221362 0.944231
+v 160.817947 -147.727249 31.080999 1.000000 1.000000 1.000000
+vn 0.343686 -0.576652 0.741183
+v 160.895203 -147.954681 30.940399 1.000000 1.000000 1.000000
+vn 0.242374 -0.957170 0.158368
+v 160.233444 -148.597931 30.249798 1.000000 1.000000 1.000000
+vn 0.385438 -0.797374 0.464363
+v 160.976318 -148.194672 30.602798 1.000000 1.000000 1.000000
+vn 0.048783 -0.982131 -0.181766
+v 159.412033 -148.708160 29.549599 1.000000 1.000000 1.000000
+vn 0.195888 -0.963660 -0.181625
+v 160.230865 -148.583969 29.434198 1.000000 1.000000 1.000000
+vn 0.383923 -0.909918 0.157009
+v 161.029099 -148.349564 30.134399 1.000000 1.000000 1.000000
+vn 0.339468 -0.923147 -0.180449
+v 161.023956 -148.337006 29.318798 1.000000 1.000000 1.000000
+vn 0.494844 -0.717770 0.489833
+v 161.707611 -147.838867 30.487997 1.000000 1.000000 1.000000
+vn 0.471999 -0.431073 0.769021
+v 162.256073 -147.163528 30.709599 1.000000 1.000000 1.000000
+vn 0.599729 -0.656986 0.456831
+v 162.395126 -147.370026 30.371798 1.000000 1.000000 1.000000
+vn 0.513606 -0.843880 0.155162
+v 161.779709 -147.983978 30.019798 1.000000 1.000000 1.000000
+vn 0.472385 -0.863044 -0.178907
+v 161.773270 -147.971420 29.204199 1.000000 1.000000 1.000000
+vn 0.125577 -0.856439 -0.500743
+v 160.202545 -148.443054 29.040998 1.000000 1.000000 1.000000
+vn 0.263931 -0.842421 -0.469752
+v 160.978882 -148.201645 28.925798 1.000000 1.000000 1.000000
+vn 0.592121 -0.785875 -0.178304
+v 162.477524 -147.491440 29.087999 1.000000 1.000000 1.000000
+vn 0.629515 -0.761658 0.153582
+v 162.485245 -147.502594 29.903599 1.000000 1.000000 1.000000
+vn 0.386565 -0.795185 -0.467171
+v 161.711472 -147.844452 28.810999 1.000000 1.000000 1.000000
+vn 0.679528 -0.552293 0.482923
+v 163.010544 -146.806320 30.256798 1.000000 1.000000 1.000000
+vn 0.698136 -0.693984 -0.176045
+v 163.107101 -146.913757 28.972799 1.000000 1.000000 1.000000
+vn 0.731352 -0.664928 0.151642
+v 163.116119 -146.923523 29.788399 1.000000 1.000000 1.000000
+vn 0.486722 -0.720394 -0.494099
+v 162.398987 -147.374222 28.694799 1.000000 1.000000 1.000000
+vn 0.225558 -0.566200 -0.792806
+v 161.599457 -147.618408 28.466599 1.000000 1.000000 1.000000
+vn 0.119208 -0.654209 -0.746860
+v 160.896500 -147.960266 28.581198 1.000000 1.000000 1.000000
+vn -0.054185 -0.303085 -0.951422
+v 160.812805 -147.709106 28.430199 1.000000 1.000000 1.000000
+vn -0.046839 -0.604247 -0.795419
+v 159.386276 -148.307709 28.811998 1.000000 1.000000 1.000000
+vn -0.173347 -0.251430 -0.952226
+v 158.622803 -148.041199 28.777399 1.000000 1.000000 1.000000
+vn 0.393669 -0.545842 -0.739649
+v 162.848312 -146.626328 28.235197 1.000000 1.000000 1.000000
+vn 0.599984 -0.654164 -0.460532
+v 163.014404 -146.810516 28.579798 1.000000 1.000000 1.000000
+vn 0.083841 -0.295517 -0.951651
+v 162.677078 -146.435165 28.084198 1.000000 1.000000 1.000000
+vn 0.462079 -0.419821 -0.781174
+v 163.365891 -145.997040 28.119398 1.000000 1.000000 1.000000
+vn 0.693615 -0.551487 -0.463422
+v 163.553848 -146.153305 28.463799 1.000000 1.000000 1.000000
+vn 0.789174 -0.588913 -0.174313
+v 163.659424 -146.241211 28.856998 1.000000 1.000000 1.000000
+vn 0.820983 -0.389220 -0.417726
+v 164.316040 -144.717514 28.244999 1.000000 1.000000 1.000000
+vn 0.859262 -0.466146 -0.210660
+v 164.119064 -145.486328 28.740398 1.000000 1.000000 1.000000
+vn 0.589500 -0.348618 -0.728667
+v 164.095886 -144.619843 27.900599 1.000000 1.000000 1.000000
+vn 0.207827 -0.234892 -0.949544
+v 163.867996 -144.519363 27.749399 1.000000 1.000000 1.000000
+vn 0.669782 -0.176573 -0.721259
+v 164.476974 -142.992874 27.669197 1.000000 1.000000 1.000000
+vn 0.838683 -0.260382 -0.478343
+v 164.569672 -143.888687 28.129799 1.000000 1.000000 1.000000
+vn 0.951993 -0.256261 -0.167451
+v 164.698425 -143.923569 28.522999 1.000000 1.000000 1.000000
+vn 0.931363 -0.325818 0.162499
+v 164.451233 -144.777512 29.453598 1.000000 1.000000 1.000000
+vn 0.883766 -0.443438 0.149401
+v 164.130646 -145.493317 29.555798 1.000000 1.000000 1.000000
+vn 0.978456 -0.117760 -0.169574
+v 164.845200 -143.036133 28.406799 1.000000 1.000000 1.000000
+vn 0.967071 -0.207347 0.147585
+v 164.710007 -143.927750 29.338398 1.000000 1.000000 1.000000
+vn 0.883411 -0.144667 -0.445709
+v 164.712585 -143.020782 28.013599 1.000000 1.000000 1.000000
+vn 0.985582 0.010285 -0.168888
+v 164.873535 -142.133347 28.290398 1.000000 1.000000 1.000000
+vn 0.987889 0.051178 0.146480
+v 164.886398 -142.131958 29.105799 1.000000 1.000000 1.000000
+vn 0.986048 -0.078349 0.146871
+v 164.858063 -143.037521 29.222399 1.000000 1.000000 1.000000
+vn 0.878313 -0.161766 0.449886
+v 164.563248 -143.887283 29.806799 1.000000 1.000000 1.000000
+vn 0.880435 -0.025167 0.473498
+v 164.707443 -143.020782 29.690598 1.000000 1.000000 1.000000
+vn 0.822766 -0.343410 0.452909
+v 163.998032 -145.412384 30.024199 1.000000 1.000000 1.000000
+vn 0.674802 -0.064735 0.735154
+v 164.334061 -143.823090 30.144598 1.000000 1.000000 1.000000
+vn 0.634117 0.133320 0.761657
+v 164.498856 -142.147308 29.911999 1.000000 1.000000 1.000000
+vn 0.892659 0.086875 0.442281
+v 164.735764 -142.137527 29.574198 1.000000 1.000000 1.000000
+vn 0.856367 0.203022 0.474783
+v 164.650787 -141.268250 29.458799 1.000000 1.000000 1.000000
+vn 0.359402 0.101104 0.927690
+v 164.249084 -142.966354 30.168999 1.000000 1.000000 1.000000
+vn 0.619935 0.292014 0.728291
+v 164.228500 -140.500809 29.681198 1.000000 1.000000 1.000000
+vn 0.244299 0.214909 0.945586
+v 164.016052 -140.576157 29.821798 1.000000 1.000000 1.000000
+vn 0.837669 0.314677 0.446419
+v 164.453812 -140.421280 29.343399 1.000000 1.000000 1.000000
+vn 0.972772 0.178561 0.147754
+v 164.800140 -141.240326 28.990599 1.000000 1.000000 1.000000
+vn 0.940498 0.305409 0.148960
+v 164.598007 -140.369644 28.875198 1.000000 1.000000 1.000000
+vn 0.770973 0.419518 0.479172
+v 164.151245 -139.616165 29.228798 1.000000 1.000000 1.000000
+vn 0.891659 0.427418 0.149189
+v 164.286423 -139.543610 28.760399 1.000000 1.000000 1.000000
+vn 0.366457 0.005477 0.930419
+v 163.884735 -144.526352 30.400398 1.000000 1.000000 1.000000
+vn 0.626772 -0.203464 0.752170
+v 163.792038 -145.286804 30.361998 1.000000 1.000000 1.000000
+vn 0.346702 -0.136090 0.928050
+v 162.688660 -146.449112 30.734999 1.000000 1.000000 1.000000
+vn -0.046145 0.262663 0.963784
+v 162.522583 -146.263535 30.738798 1.000000 1.000000 1.000000
+vn 0.761243 -0.466117 0.450826
+v 163.548706 -146.149109 30.140799 1.000000 1.000000 1.000000
+vn 0.586005 -0.281636 0.759789
+v 163.360733 -145.992844 30.478598 1.000000 1.000000 1.000000
+vn 0.073509 0.256057 0.963863
+v 160.735565 -147.483063 31.084799 1.000000 1.000000 1.000000
+vn 0.816947 -0.556547 0.151171
+v 163.669724 -146.249588 29.672598 1.000000 1.000000 1.000000
+vn 0.170108 0.210837 0.962607
+v 158.638260 -147.802597 31.431999 1.000000 1.000000 1.000000
+vn 0.975859 0.137715 -0.169511
+v 164.787262 -141.241730 28.174999 1.000000 1.000000 1.000000
+vn 0.895174 -0.029249 -0.444756
+v 164.740921 -142.137527 27.897198 1.000000 1.000000 1.000000
+vn 0.876320 0.080695 -0.474924
+v 164.655945 -141.266846 27.781799 1.000000 1.000000 1.000000
+vn 0.949199 0.265187 -0.169404
+v 164.586411 -140.373825 28.059599 1.000000 1.000000 1.000000
+vn 0.905701 0.388298 -0.170087
+v 164.274841 -139.549194 27.944998 1.000000 1.000000 1.000000
+vn 0.871845 0.203138 -0.445670
+v 164.460236 -140.418488 27.666599 1.000000 1.000000 1.000000
+vn 0.836642 0.315583 -0.447703
+v 164.156387 -139.613373 27.551798 1.000000 1.000000 1.000000
+vn 0.686004 0.084132 -0.722717
+v 164.234940 -140.499420 27.321999 1.000000 1.000000 1.000000
+vn 0.602062 0.180974 -0.777669
+v 163.943954 -139.726395 27.207399 1.000000 1.000000 1.000000
+vn 0.260507 -0.168118 -0.950722
+v 164.232361 -142.964966 27.518198 1.000000 1.000000 1.000000
+vn 0.318774 -0.064124 -0.945659
+v 164.000610 -140.581741 27.170998 1.000000 1.000000 1.000000
+vn 0.626139 -0.062655 -0.777190
+v 164.504013 -142.147308 27.552799 1.000000 1.000000 1.000000
+vn 0.594497 0.340978 -0.728222
+v 163.071045 -138.339432 26.975998 1.000000 1.000000 1.000000
+vn 0.321369 0.062970 -0.944858
+v 162.889511 -138.519440 26.824999 1.000000 1.000000 1.000000
+vn -0.173459 -0.646806 -0.742667
+v 158.604782 -148.307709 28.928398 1.000000 1.000000 1.000000
+vn -0.251017 -0.202875 -0.946484
+v 157.176956 -147.700729 29.008799 1.000000 1.000000 1.000000
+vn -0.361963 -0.568537 -0.738748
+v 157.091980 -147.950485 29.159798 1.000000 1.000000 1.000000
+vn -0.316428 -0.083537 -0.944931
+v 155.369339 -146.475632 29.343399 1.000000 1.000000 1.000000
+vn -0.407496 -0.803795 -0.433429
+v 157.009583 -148.191895 29.504198 1.000000 1.000000 1.000000
+vn -0.266468 -0.824703 -0.498859
+v 157.782074 -148.437469 29.388998 1.000000 1.000000 1.000000
+vn -0.442054 -0.441692 -0.780702
+v 155.796783 -147.206787 29.378599 1.000000 1.000000 1.000000
+vn -0.569226 -0.378216 -0.730023
+v 155.199387 -146.668182 29.494398 1.000000 1.000000 1.000000
+vn -0.578547 -0.667869 -0.468225
+v 155.659027 -147.416092 29.723198 1.000000 1.000000 1.000000
+vn -0.134403 -0.871537 -0.471550
+v 158.588043 -148.564438 29.272799 1.000000 1.000000 1.000000
+vn -0.000676 -0.881226 -0.472695
+v 159.403015 -148.564438 29.156399 1.000000 1.000000 1.000000
+vn -0.681889 -0.571614 -0.456382
+v 155.034592 -146.853760 29.838999 1.000000 1.000000 1.000000
+vn -0.745127 -0.461273 -0.481678
+v 154.493851 -146.206329 29.954199 1.000000 1.000000 1.000000
+vn -0.588436 -0.218842 -0.778364
+v 154.241516 -145.348190 29.725798 1.000000 1.000000 1.000000
+vn -0.813295 -0.368921 -0.449942
+v 154.036789 -145.477966 30.070398 1.000000 1.000000 1.000000
+vn 0.183124 0.230427 -0.955703
+v 154.347076 -144.404953 29.694599 1.000000 1.000000 1.000000
+vn 0.081259 -0.260805 -0.961966
+v 160.423981 -137.135254 31.532198 1.000000 1.000000 1.000000
+vn -0.225542 -0.683244 -0.694484
+v 160.924820 -137.584549 31.770399 1.000000 1.000000 1.000000
+vn -0.004468 -0.249698 -0.968314
+v 162.221313 -138.176178 31.866999 1.000000 1.000000 1.000000
+vn -0.502293 -0.545709 -0.670749
+v 162.567642 -138.865479 32.117996 1.000000 1.000000 1.000000
+vn -0.165830 -0.241792 -0.956053
+v 163.520386 -139.971985 32.212997 1.000000 1.000000 1.000000
+vn -0.563185 -0.376793 -0.735425
+v 163.323395 -140.076630 32.348801 1.000000 1.000000 1.000000
+vn -0.817855 -0.502931 -0.279597
+v 162.674500 -139.674774 32.966400 1.000000 1.000000 1.000000
+vn -0.784488 -0.406711 -0.468151
+v 163.109680 -140.189651 32.683598 1.000000 1.000000 1.000000
+vn -0.728707 -0.250710 -0.637284
+v 163.737961 -141.466385 32.579597 1.000000 1.000000 1.000000
+vn -0.884074 -0.409075 -0.225987
+v 162.984787 -140.255219 33.081001 1.000000 1.000000 1.000000
+vn -0.916484 -0.397205 0.047811
+v 162.938446 -140.278961 33.535797 1.000000 1.000000 1.000000
+vn 0.309101 0.103055 -0.945429
+v 162.370651 -137.980835 31.861799 1.000000 1.000000 1.000000
+vn 0.235299 0.218789 -0.946977
+v 160.489655 -136.892471 31.527199 1.000000 1.000000 1.000000
+vn -0.236906 -0.155960 -0.958933
+v 164.026367 -142.194733 32.560196 1.000000 1.000000 1.000000
+vn -0.276337 -0.083965 -0.957386
+v 163.869293 -143.718445 32.791397 1.000000 1.000000 1.000000
+vn -0.269135 -0.004081 -0.963094
+v 162.970627 -145.699814 33.126198 1.000000 1.000000 1.000000
+vn 0.154334 0.262322 -0.952559
+v 159.025787 -136.659454 31.295799 1.000000 1.000000 1.000000
+vn -0.857157 -0.318701 0.404612
+v 163.098083 -140.195221 34.360199 1.000000 1.000000 1.000000
+vn -0.108459 0.251088 -0.961869
+v 157.961044 -147.685379 23.745598 1.000000 1.000000 1.000000
+vn 0.125785 0.660870 -0.739885
+v 157.352066 -147.248642 23.997599 1.000000 1.000000 1.000000
+vn -0.094207 0.739819 -0.666178
+v 158.682022 -147.554214 23.764999 1.000000 1.000000 1.000000
+vn -0.212922 0.205387 -0.955239
+v 160.073792 -147.678406 23.398399 1.000000 1.000000 1.000000
+vn -0.022174 0.270909 -0.962350
+v 156.632355 -147.157944 23.976999 1.000000 1.000000 1.000000
+vn 0.368521 0.622507 -0.690418
+v 156.226807 -146.608185 24.214998 1.000000 1.000000 1.000000
+vn 0.358328 0.802827 -0.476519
+v 156.848648 -146.721207 24.447599 1.000000 1.000000 1.000000
+vn 0.134608 0.873923 -0.467054
+v 158.055023 -147.199814 24.216198 1.000000 1.000000 1.000000
+vn 0.058964 0.243411 -0.968129
+v 155.068069 -145.743073 24.311598 1.000000 1.000000 1.000000
+vn 0.606352 0.435589 -0.665282
+v 154.859497 -144.992386 24.562599 1.000000 1.000000 1.000000
+vn 0.695832 0.601134 -0.393007
+v 155.425995 -145.436111 24.782198 1.000000 1.000000 1.000000
+vn 0.542814 0.618416 -0.568256
+v 155.862442 -145.950974 24.666401 1.000000 1.000000 1.000000
+vn 0.452661 0.857939 -0.242980
+v 156.914322 -146.588654 24.844999 1.000000 1.000000 1.000000
+vn 0.217909 0.947806 -0.232765
+v 158.084641 -147.053299 24.613798 1.000000 1.000000 1.000000
+vn -0.050302 0.891086 -0.451038
+v 158.697479 -147.296082 24.099798 1.000000 1.000000 1.000000
+vn 0.381688 0.923688 0.033384
+v 157.498840 -146.813309 25.184799 1.000000 1.000000 1.000000
+vn 0.216987 0.976157 0.005884
+v 158.094940 -146.998871 25.068598 1.000000 1.000000 1.000000
+vn 0.050460 0.998672 0.010415
+v 158.710358 -147.090973 24.951998 1.000000 1.000000 1.000000
+vn -0.252958 0.834875 -0.488873
+v 159.975937 -147.195618 23.868998 1.000000 1.000000 1.000000
+vn -0.233580 0.942253 -0.240000
+v 159.946335 -147.047714 24.266598 1.000000 1.000000 1.000000
+vn -0.268921 0.606786 -0.747993
+v 160.027435 -147.446777 23.534397 1.000000 1.000000 1.000000
+vn -0.418098 0.794184 -0.440983
+v 160.588791 -147.000275 23.754398 1.000000 1.000000 1.000000
+vn -0.351441 0.889668 -0.291514
+v 160.541153 -146.859344 24.151798 1.000000 1.000000 1.000000
+vn -0.214366 0.975486 0.049732
+v 159.936035 -146.993301 24.721399 1.000000 1.000000 1.000000
+vn -0.524324 0.849976 0.051234
+v 161.087036 -146.528656 24.490398 1.000000 1.000000 1.000000
+vn -0.455599 0.580591 -0.674792
+v 161.291748 -146.937485 23.303398 1.000000 1.000000 1.000000
+vn -0.629077 0.667343 -0.398642
+v 161.719193 -146.337494 23.522999 1.000000 1.000000 1.000000
+vn -0.726705 0.686905 -0.007821
+v 162.077118 -145.736099 24.259399 1.000000 1.000000 1.000000
+vn -0.260107 0.063011 -0.963522
+v 161.990860 -146.736557 23.052399 1.000000 1.000000 1.000000
+vn -0.646266 0.354909 -0.675559
+v 162.827713 -145.511459 22.955799 1.000000 1.000000 1.000000
+vn -0.643800 0.518387 -0.562846
+v 162.209717 -145.884003 23.407200 1.000000 1.000000 1.000000
+vn -0.873784 0.426665 -0.233365
+v 162.834152 -144.766342 23.585800 1.000000 1.000000 1.000000
+vn -0.838068 0.545530 0.006275
+v 162.487823 -145.229599 24.142799 1.000000 1.000000 1.000000
+vn -0.488869 0.747391 0.449904
+v 161.711472 -146.326324 25.199598 1.000000 1.000000 1.000000
+vn -0.408114 0.847090 0.340412
+v 161.172012 -146.697495 25.314798 1.000000 1.000000 1.000000
+vn -0.931844 0.361384 0.032682
+v 163.060745 -144.139847 23.925398 1.000000 1.000000 1.000000
+vn -0.691339 0.651751 0.311884
+v 162.200714 -145.872849 25.083799 1.000000 1.000000 1.000000
+vn -0.820838 0.345568 -0.454761
+v 162.953888 -144.841690 23.188400 1.000000 1.000000 1.000000
+vn -0.951654 0.216743 -0.217662
+v 163.301498 -143.514725 23.354597 1.000000 1.000000 1.000000
+vn -0.886910 0.145879 -0.438303
+v 163.436691 -143.551010 22.956997 1.000000 1.000000 1.000000
+vn -0.686827 0.134872 -0.714198
+v 163.457291 -144.314255 22.738400 1.000000 1.000000 1.000000
+vn -0.906336 -0.014568 -0.422307
+v 163.547424 -142.857529 22.840599 1.000000 1.000000 1.000000
+vn -0.976359 0.216081 0.005721
+v 163.252594 -143.500778 23.809399 1.000000 1.000000 1.000000
+vn -0.997169 0.074633 0.009169
+v 163.358170 -142.836594 23.692799 1.000000 1.000000 1.000000
+vn -0.770582 -0.058770 -0.634625
+v 163.784317 -142.884033 22.505798 1.000000 1.000000 1.000000
+vn -0.291212 -0.011390 -0.956591
+v 163.349152 -145.090057 22.717800 1.000000 1.000000 1.000000
+vn -0.272535 -0.091140 -0.957819
+v 163.880875 -143.669601 22.486397 1.000000 1.000000 1.000000
+vn -0.864734 -0.193750 -0.463352
+v 163.497208 -141.470566 22.609798 1.000000 1.000000 1.000000
+vn -0.646703 -0.220702 -0.730114
+v 163.731522 -141.423126 22.275200 1.000000 1.000000 1.000000
+vn -0.229301 -0.190273 -0.954577
+v 163.947815 -141.381256 22.139198 1.000000 1.000000 1.000000
+vn -0.839691 -0.342713 -0.421269
+v 163.338837 -140.799408 22.495197 1.000000 1.000000 1.000000
+vn -0.959758 -0.170795 -0.222922
+v 163.360733 -141.497070 23.007397 1.000000 1.000000 1.000000
+vn -0.920882 -0.277161 -0.274149
+v 163.207520 -140.846848 22.892597 1.000000 1.000000 1.000000
+vn -0.635927 -0.395379 -0.662776
+v 163.305374 -140.036163 22.044197 1.000000 1.000000 1.000000
+vn -0.898033 -0.437062 0.050133
+v 162.921707 -140.242676 23.231197 1.000000 1.000000 1.000000
+vn -0.987239 -0.152141 0.047033
+v 163.310516 -141.506851 23.462200 1.000000 1.000000 1.000000
+vn 0.040149 -0.304517 -0.951661
+v 162.129898 -146.940277 23.047398 1.000000 1.000000 1.000000
+vn -0.098709 -0.294779 -0.950453
+v 160.122726 -147.926773 23.393398 1.000000 1.000000 1.000000
+vn -0.208969 -0.226716 -0.951279
+v 157.912109 -147.932358 23.740599 1.000000 1.000000 1.000000
+vn -0.277798 -0.167721 -0.945885
+v 156.522919 -147.381195 23.971798 1.000000 1.000000 1.000000
+vn -0.324525 -0.042306 -0.944931
+v 154.885254 -145.900757 24.306599 1.000000 1.000000 1.000000
+vn -0.314076 0.083920 -0.945682
+v 153.906754 -143.760300 24.652599 1.000000 1.000000 1.000000
+vn 0.215578 0.204751 -0.954779
+v 154.133362 -143.697525 24.657598 1.000000 1.000000 1.000000
+vn -0.246828 0.183765 -0.951476
+v 153.826935 -141.365921 24.999798 1.000000 1.000000 1.000000
+vn 0.265461 0.108142 -0.958037
+v 154.056107 -141.409164 25.004799 1.000000 1.000000 1.000000
+vn -0.655878 0.218449 -0.722568
+v 153.583603 -141.319870 25.150799 1.000000 1.000000 1.000000
+vn -0.189992 0.247008 -0.950205
+v 154.286560 -139.842209 25.230997 1.000000 1.000000 1.000000
+vn -0.620093 0.101892 -0.777883
+v 153.503769 -142.161255 25.034401 1.000000 1.000000 1.000000
+vn -0.690374 -0.040686 -0.722308
+v 153.668579 -143.825897 24.803598 1.000000 1.000000 1.000000
+vn 0.289979 0.029734 -0.956571
+v 154.496429 -139.953842 25.236198 1.000000 1.000000 1.000000
+vn -0.061832 0.300022 -0.951926
+v 155.595932 -138.018509 25.565798 1.000000 1.000000 1.000000
+vn 0.264086 -0.046410 -0.963382
+v 155.747864 -138.211060 25.570799 1.000000 1.000000 1.000000
+vn 0.076695 0.299112 -0.951131
+v 157.536163 -136.885498 25.911798 1.000000 1.000000 1.000000
+vn -0.353928 0.570649 -0.741009
+v 155.436279 -137.814789 25.716799 1.000000 1.000000 1.000000
+vn -0.431500 0.449122 -0.782366
+v 154.881378 -138.405014 25.600998 1.000000 1.000000 1.000000
+vn -0.564006 0.386042 -0.729979
+v 154.065125 -139.723602 25.382198 1.000000 1.000000 1.000000
+vn -0.070704 0.660907 -0.747130
+v 157.467926 -136.628754 26.062798 1.000000 1.000000 1.000000
+vn 0.191603 0.239147 -0.951891
+v 159.741623 -136.716660 26.258999 1.000000 1.000000 1.000000
+vn -0.183306 0.580057 -0.793683
+v 156.745651 -136.917587 25.948198 1.000000 1.000000 1.000000
+vn 0.091561 0.599748 -0.794933
+v 158.997467 -136.392944 26.293598 1.000000 1.000000 1.000000
+vn 0.220484 0.633505 -0.741659
+v 159.776382 -136.451553 26.409998 1.000000 1.000000 1.000000
+vn 0.264876 0.185043 -0.946361
+v 161.163010 -137.163177 26.490198 1.000000 1.000000 1.000000
+vn 0.065647 0.879392 -0.471551
+v 158.996170 -136.136200 26.637999 1.000000 1.000000 1.000000
+vn -0.062359 0.863646 -0.500227
+v 158.191498 -136.198990 26.522598 1.000000 1.000000 1.000000
+vn 0.325275 0.804124 -0.497576
+v 160.605530 -136.381775 26.870598 1.000000 1.000000 1.000000
+vn 0.197701 0.860241 -0.469999
+v 159.809860 -136.197601 26.754398 1.000000 1.000000 1.000000
+vn 0.402041 0.542694 -0.737459
+v 161.263428 -136.918991 26.641399 1.000000 1.000000 1.000000
+vn 0.464599 0.773329 -0.431405
+v 161.361282 -136.684570 26.985798 1.000000 1.000000 1.000000
+vn 0.472558 0.411565 -0.779297
+v 162.508423 -137.757584 26.860197 1.000000 1.000000 1.000000
+vn 0.329272 0.927488 -0.177047
+v 160.642868 -136.243637 27.263798 1.000000 1.000000 1.000000
+vn 0.172943 0.968178 -0.180891
+v 159.829178 -136.055283 27.147598 1.000000 1.000000 1.000000
+vn 0.023813 0.983137 -0.181315
+v 158.996170 -135.992477 27.031199 1.000000 1.000000 1.000000
+vn 0.274692 0.948466 0.157978
+v 160.645432 -136.231094 28.079199 1.000000 1.000000 1.000000
+vn 0.127623 0.979216 0.157631
+v 159.830460 -136.041321 27.963198 1.000000 1.000000 1.000000
+vn 0.406654 0.897328 0.171565
+v 161.421783 -136.540848 28.194399 1.000000 1.000000 1.000000
+vn 0.551848 0.805724 -0.215111
+v 162.062958 -136.924561 27.481199 1.000000 1.000000 1.000000
+vn 0.216707 0.852979 0.474830
+v 160.602951 -136.388763 28.547598 1.000000 1.000000 1.000000
+vn 0.061472 0.864516 0.498832
+v 159.808578 -136.203171 28.431398 1.000000 1.000000 1.000000
+vn -0.066810 0.880302 0.469685
+v 158.996170 -136.143173 28.314999 1.000000 1.000000 1.000000
+vn -0.022827 0.987139 0.158227
+v 158.996170 -135.978531 27.846598 1.000000 1.000000 1.000000
+vn 0.099899 0.646323 0.756496
+v 160.537292 -136.634338 28.885399 1.000000 1.000000 1.000000
+vn -0.124345 0.614197 0.779295
+v 158.997467 -136.399918 28.652599 1.000000 1.000000 1.000000
+vn 0.414865 0.778451 0.471065
+v 161.990860 -137.052933 28.764999 1.000000 1.000000 1.000000
+vn 0.008647 0.343700 0.939040
+v 161.169434 -137.146423 29.140999 1.000000 1.000000 1.000000
+vn -0.097129 0.344045 0.933916
+v 159.744202 -136.697128 28.909798 1.000000 1.000000 1.000000
+vn 0.261447 0.582168 0.769887
+v 161.868546 -137.272003 29.102798 1.000000 1.000000 1.000000
+vn 0.642030 0.750960 0.154453
+v 162.751755 -137.438049 28.413198 1.000000 1.000000 1.000000
+vn 0.530374 0.833310 0.155876
+v 162.070679 -136.912018 28.296598 1.000000 1.000000 1.000000
+vn 0.523491 0.666935 0.530240
+v 162.655197 -137.565018 28.881599 1.000000 1.000000 1.000000
+vn 0.672676 0.718820 -0.175515
+v 162.744034 -137.449219 27.597799 1.000000 1.000000 1.000000
+vn 0.742240 0.652387 0.153203
+v 163.354294 -138.058975 28.529198 1.000000 1.000000 1.000000
+vn 0.624319 0.627185 -0.465688
+v 162.659058 -137.559448 27.204599 1.000000 1.000000 1.000000
+vn 0.718882 0.525577 -0.454947
+v 163.246140 -138.166412 27.320599 1.000000 1.000000 1.000000
+vn 0.774113 0.411808 -0.480795
+v 163.745682 -138.851532 27.435598 1.000000 1.000000 1.000000
+vn 0.767391 0.616870 -0.174880
+v 163.345291 -138.068741 27.713598 1.000000 1.000000 1.000000
+vn 0.845341 0.505549 -0.172683
+v 163.856415 -138.770599 27.828798 1.000000 1.000000 1.000000
+vn 0.825759 0.543341 0.151339
+v 163.866714 -138.762222 28.644199 1.000000 1.000000 1.000000
+vn 0.591651 0.611714 0.525123
+v 163.242279 -138.170609 28.997398 1.000000 1.000000 1.000000
+vn 0.477887 0.423737 0.769462
+v 163.546127 -138.999420 29.450399 1.000000 1.000000 1.000000
+vn 0.721066 0.525043 0.452098
+v 163.741821 -138.855713 29.112598 1.000000 1.000000 1.000000
+vn 0.216193 0.388499 0.895728
+v 162.902390 -138.506882 29.475798 1.000000 1.000000 1.000000
+vn -0.272897 0.073435 0.959236
+v 163.789474 -140.657089 29.825598 1.000000 1.000000 1.000000
+vn -0.280667 -0.036061 0.959127
+v 162.725998 -138.681290 29.479399 1.000000 1.000000 1.000000
+vn -0.223341 0.164505 0.960759
+v 164.012192 -142.939850 30.172798 1.000000 1.000000 1.000000
+vn -0.160130 0.229272 0.960101
+v 163.663300 -144.428680 30.403999 1.000000 1.000000 1.000000
+vn -0.249576 -0.139519 0.958252
+v 161.071594 -137.382233 29.144798 1.000000 1.000000 1.000000
+vn -0.185072 -0.200414 0.962072
+v 159.710724 -136.953873 28.913399 1.000000 1.000000 1.000000
+vn -0.226767 0.236563 0.944783
+v 157.532303 -136.867355 28.562599 1.000000 1.000000 1.000000
+vn -0.301100 0.597786 0.742960
+v 157.469223 -136.634338 28.421997 1.000000 1.000000 1.000000
+vn -0.440104 0.460969 0.770595
+v 156.061996 -137.323639 28.191198 1.000000 1.000000 1.000000
+vn -0.335242 0.156919 0.928972
+v 155.585632 -138.004547 28.216599 1.000000 1.000000 1.000000
+vn -0.200532 0.844480 0.496628
+v 158.191498 -136.204575 28.199598 1.000000 1.000000 1.000000
+vn -0.327024 0.822835 0.464755
+v 157.403564 -136.388763 28.084198 1.000000 1.000000 1.000000
+vn -0.442229 0.750071 0.491759
+v 156.651672 -136.690155 27.969599 1.000000 1.000000 1.000000
+vn -0.171785 0.972538 0.157035
+v 158.170898 -136.042709 27.731199 1.000000 1.000000 1.000000
+vn -0.316265 0.935519 0.157415
+v 157.361069 -136.231094 27.615999 1.000000 1.000000 1.000000
+vn -0.451778 0.878264 0.156682
+v 156.588577 -136.539459 27.501198 1.000000 1.000000 1.000000
+vn -0.552200 0.695922 0.459094
+v 155.935822 -137.107361 27.853399 1.000000 1.000000 1.000000
+vn -0.270502 0.945630 -0.180587
+v 157.364929 -136.243637 26.800398 1.000000 1.000000 1.000000
+vn -0.409433 0.894420 -0.179936
+v 156.593735 -136.552017 26.685799 1.000000 1.000000 1.000000
+vn -0.124645 0.975485 -0.181365
+v 158.172180 -136.056671 26.915798 1.000000 1.000000 1.000000
+vn -0.200731 0.859226 -0.470572
+v 157.402267 -136.381775 26.407398 1.000000 1.000000 1.000000
+vn -0.327691 0.820174 -0.468971
+v 156.649094 -136.683182 26.292599 1.000000 1.000000 1.000000
+vn -0.535615 0.825418 -0.178329
+v 155.861160 -136.980377 26.569599 1.000000 1.000000 1.000000
+vn -0.434247 0.752810 -0.494678
+v 155.931961 -137.101776 26.176399 1.000000 1.000000 1.000000
+vn -0.649320 0.739695 -0.176733
+v 155.196808 -137.509216 26.454399 1.000000 1.000000 1.000000
+vn -0.553483 0.693129 -0.461767
+v 155.283081 -137.619446 26.061398 1.000000 1.000000 1.000000
+vn -0.575056 0.803402 0.154453
+v 155.854721 -136.967819 27.384998 1.000000 1.000000 1.000000
+vn -0.747565 0.640849 -0.174526
+v 154.604568 -138.139908 26.338598 1.000000 1.000000 1.000000
+vn -0.684240 0.713183 0.152270
+v 155.189102 -137.499451 27.269999 1.000000 1.000000 1.000000
+vn -0.654247 0.596738 -0.464613
+v 154.703720 -138.234787 25.945398 1.000000 1.000000 1.000000
+vn -0.826544 0.521767 -0.211151
+v 154.097305 -138.858490 26.221998 1.000000 1.000000 1.000000
+vn -0.793700 0.441780 -0.418176
+v 153.852692 -139.610580 25.726599 1.000000 1.000000 1.000000
+vn -0.777702 0.610399 0.150309
+v 154.594269 -138.130142 27.153999 1.000000 1.000000 1.000000
+vn -0.852808 0.500435 0.149275
+v 154.087006 -138.850128 27.037399 1.000000 1.000000 1.000000
+vn -0.933636 0.316464 -0.167852
+v 153.421387 -140.375229 26.004599 1.000000 1.000000 1.000000
+vn -0.908516 0.384956 0.162502
+v 153.722656 -139.540817 26.935198 1.000000 1.000000 1.000000
+vn -0.820268 0.312890 -0.478811
+v 153.547562 -140.419876 25.611399 1.000000 1.000000 1.000000
+vn -0.968884 0.179952 -0.169942
+v 153.219254 -141.250107 25.888399 1.000000 1.000000 1.000000
+vn -0.951798 0.268697 0.147927
+v 153.409790 -140.371033 26.819998 1.000000 1.000000 1.000000
+vn -0.798264 0.395782 0.454017
+v 154.213181 -138.940826 27.505798 1.000000 1.000000 1.000000
+vn -0.866286 0.217351 0.449785
+v 153.553986 -140.421280 27.288399 1.000000 1.000000 1.000000
+vn -0.669315 0.107276 0.735193
+v 153.778015 -140.500809 27.626198 1.000000 1.000000 1.000000
+vn -0.610804 0.242390 0.753767
+v 154.411453 -139.081757 27.843599 1.000000 1.000000 1.000000
+vn -0.727932 0.515587 0.451979
+v 154.707581 -138.238968 27.622398 1.000000 1.000000 1.000000
+vn -0.877102 0.080314 0.473541
+v 153.355713 -141.275223 27.172199 1.000000 1.000000 1.000000
+vn -0.979048 0.140749 0.147158
+v 153.206375 -141.247299 26.703999 1.000000 1.000000 1.000000
+vn -0.642112 -0.093089 0.760938
+v 153.508926 -142.162659 27.393398 1.000000 1.000000 1.000000
+vn -0.896017 -0.030133 0.442996
+v 153.272034 -142.154282 27.055798 1.000000 1.000000 1.000000
+vn -0.989017 0.011433 0.147360
+v 153.120117 -142.148697 26.587399 1.000000 1.000000 1.000000
+vn -0.868032 -0.148261 0.473855
+v 153.301636 -143.027756 26.940399 1.000000 1.000000 1.000000
+vn -0.638464 -0.251596 0.727367
+v 153.673721 -143.824493 27.162798 1.000000 1.000000 1.000000
+vn -0.366352 -0.078311 0.927175
+v 153.808914 -141.363113 27.650398 1.000000 1.000000 1.000000
+vn -0.982148 -0.117028 0.147274
+v 153.151016 -143.044495 26.471998 1.000000 1.000000 1.000000
+vn -0.857170 -0.260251 0.444442
+v 153.444550 -143.887283 26.824999 1.000000 1.000000 1.000000
+vn -0.958227 -0.244556 0.148302
+v 153.297775 -143.927750 26.356798 1.000000 1.000000 1.000000
+vn -0.797421 -0.369363 0.477170
+v 153.695618 -144.713318 26.710398 1.000000 1.000000 1.000000
+vn -0.917533 -0.368924 0.148421
+v 153.556564 -144.774719 26.241999 1.000000 1.000000 1.000000
+vn -0.984067 0.051822 -0.170078
+v 153.132980 -142.148697 25.771999 1.000000 1.000000 1.000000
+vn -0.982591 -0.075724 -0.169647
+v 153.163879 -143.043106 25.656601 1.000000 1.000000 1.000000
+vn -0.872180 0.200468 -0.446223
+v 153.350571 -141.275223 25.495199 1.000000 1.000000 1.000000
+vn -0.890886 0.085730 -0.446062
+v 153.266876 -142.152878 25.378798 1.000000 1.000000 1.000000
+vn -0.879602 -0.025046 -0.475050
+v 153.296494 -143.027756 25.263399 1.000000 1.000000 1.000000
+vn -0.964238 -0.204057 -0.169133
+v 153.309372 -143.924957 25.541199 1.000000 1.000000 1.000000
+vn -0.883091 -0.147009 -0.445577
+v 153.438126 -143.888687 25.148199 1.000000 1.000000 1.000000
+vn -0.928824 -0.329364 -0.169720
+v 153.568146 -144.770523 25.426598 1.000000 1.000000 1.000000
+vn -0.855361 -0.261227 -0.447345
+v 153.690460 -144.714706 25.033398 1.000000 1.000000 1.000000
+vn -0.613007 -0.142341 -0.777150
+v 153.910614 -144.618439 24.688999 1.000000 1.000000 1.000000
+vn -0.800615 -0.360491 -0.478604
+v 154.052246 -145.505875 24.917198 1.000000 1.000000 1.000000
+vn -0.616785 -0.302148 -0.726831
+v 154.692123 -146.066788 24.457598 1.000000 1.000000 1.000000
+vn -0.365657 0.017648 0.930582
+v 154.271118 -139.833847 27.881798 1.000000 1.000000 1.000000
+vn -0.564617 0.318416 0.761459
+v 154.885254 -138.409195 27.959999 1.000000 1.000000 1.000000
+vn -0.639578 0.596980 0.484309
+v 155.286942 -137.623642 27.738199 1.000000 1.000000 1.000000
+vn -0.827191 0.390283 0.404270
+v 163.224258 -144.212387 24.749798 1.000000 1.000000 1.000000
+vn -0.721767 0.530123 0.444997
+v 162.942307 -144.834717 24.864998 1.000000 1.000000 1.000000
+vn -0.326057 0.602225 0.728705
+v 161.851807 -146.531433 25.547199 1.000000 1.000000 1.000000
+vn -0.518638 0.446825 0.728946
+v 163.147018 -144.961685 25.212599 1.000000 1.000000 1.000000
+vn 0.110232 0.242910 0.963766
+v 160.076370 -147.690964 26.047998 1.000000 1.000000 1.000000
+vn -0.007175 0.266233 0.963882
+v 161.998581 -146.746323 25.701799 1.000000 1.000000 1.000000
+vn -0.029610 0.679797 0.732802
+v 160.023575 -147.430038 25.893398 1.000000 1.000000 1.000000
+vn -0.291960 0.881800 0.370390
+v 160.584915 -146.986328 25.430998 1.000000 1.000000 1.000000
+vn 0.030788 0.928726 0.369487
+v 159.339935 -147.279343 25.660999 1.000000 1.000000 1.000000
+vn -0.140198 0.892897 0.427878
+v 159.973373 -147.180283 25.545597 1.000000 1.000000 1.000000
+vn 0.257725 0.627766 0.734499
+v 158.008667 -147.435623 26.240398 1.000000 1.000000 1.000000
+vn 0.099316 0.933900 0.343463
+v 158.698761 -147.282135 25.776398 1.000000 1.000000 1.000000
+vn 0.290536 0.843924 0.450978
+v 158.058884 -147.185852 25.892799 1.000000 1.000000 1.000000
+vn 0.409840 0.808608 0.422119
+v 157.438309 -146.993301 26.008999 1.000000 1.000000 1.000000
+vn 0.558559 0.695607 0.451822
+v 156.855087 -146.708649 26.124199 1.000000 1.000000 1.000000
+vn 0.467480 0.496653 0.731299
+v 156.743088 -146.934692 26.471798 1.000000 1.000000 1.000000
+vn 0.681155 0.662624 0.311380
+v 155.871460 -145.941223 26.342999 1.000000 1.000000 1.000000
+vn 0.578748 0.815477 0.006896
+v 156.473999 -146.228653 25.401999 1.000000 1.000000 1.000000
+vn 0.626735 0.313994 0.713170
+v 155.252182 -145.585403 26.806398 1.000000 1.000000 1.000000
+vn 0.771276 0.462747 0.437034
+v 155.436279 -145.426331 26.458799 1.000000 1.000000 1.000000
+vn 0.862862 0.387922 0.324015
+v 155.075790 -144.854248 26.573999 1.000000 1.000000 1.000000
+vn 0.283224 0.018811 0.958869
+v 155.059052 -145.751450 26.960999 1.000000 1.000000 1.000000
+vn 0.718861 0.695099 -0.008680
+v 155.992477 -145.801682 25.518599 1.000000 1.000000 1.000000
+vn 0.867897 0.494231 0.049908
+v 155.229004 -144.757980 25.749598 1.000000 1.000000 1.000000
+vn 0.892737 0.283172 0.350478
+v 154.789963 -144.227737 26.690199 1.000000 1.000000 1.000000
+vn 0.814836 0.396556 -0.422830
+v 154.777100 -144.233337 25.013599 1.000000 1.000000 1.000000
+vn 0.630911 0.261677 -0.730395
+v 154.345795 -143.640305 24.793598 1.000000 1.000000 1.000000
+vn 0.849769 0.248558 -0.464878
+v 154.576248 -143.576126 25.128199 1.000000 1.000000 1.000000
+vn 0.765378 0.107254 -0.634581
+v 154.201584 -142.186371 25.024199 1.000000 1.000000 1.000000
+vn 0.259301 0.123667 0.957846
+v 156.627213 -147.169113 26.626398 1.000000 1.000000 1.000000
+vn 0.198714 0.186750 0.962101
+v 157.958466 -147.697937 26.394999 1.000000 1.000000 1.000000
+vn -0.651144 0.252045 0.715880
+v 163.652985 -143.608215 24.981199 1.000000 1.000000 1.000000
+vn -0.124133 0.247468 0.960912
+v 163.359451 -145.097031 25.367199 1.000000 1.000000 1.000000
+vn -0.857284 0.282772 0.430237
+v 163.423813 -143.546814 24.633598 1.000000 1.000000 1.000000
+vn -0.940604 0.114157 0.319737
+v 163.534546 -142.856140 24.517199 1.000000 1.000000 1.000000
+vn -0.937425 0.057225 0.343452
+v 163.553848 -142.162659 24.401798 1.000000 1.000000 1.000000
+vn -0.911079 -0.092933 0.401621
+v 163.484329 -141.473358 24.286398 1.000000 1.000000 1.000000
+vn -0.707110 -0.003095 0.707097
+v 163.716080 -141.427307 24.634199 1.000000 1.000000 1.000000
+vn -0.909679 -0.225719 0.348619
+v 163.325974 -140.803604 24.171799 1.000000 1.000000 1.000000
+vn -0.886487 -0.331972 0.322391
+v 163.080063 -140.157547 24.055599 1.000000 1.000000 1.000000
+vn -0.646797 -0.273151 0.712069
+v 162.950027 -139.415237 24.287998 1.000000 1.000000 1.000000
+vn -0.259248 0.107650 0.959793
+v 163.959412 -141.378464 24.788799 1.000000 1.000000 1.000000
+vn -0.284216 -0.000984 0.958760
+v 163.153442 -139.264542 24.442598 1.000000 1.000000 1.000000
+vn -0.197484 0.191633 0.961393
+v 163.892456 -143.672409 25.135799 1.000000 1.000000 1.000000
+vn 0.774693 0.412922 0.478902
+v 164.169266 -139.658020 39.532341 1.000000 1.000000 1.000000
+vn 0.942904 0.298001 0.148753
+v 164.612167 -140.419876 39.179539 1.000000 1.000000 1.000000
+vn 0.895214 0.419822 0.149471
+v 164.305740 -139.586868 39.064140 1.000000 1.000000 1.000000
+vn 0.575883 0.287670 0.765248
+v 164.242661 -140.548248 39.985538 1.000000 1.000000 1.000000
+vn 0.840431 0.308271 0.445696
+v 164.467972 -140.470108 39.647739 1.000000 1.000000 1.000000
+vn 0.974082 0.170894 0.148188
+v 164.809158 -141.300339 39.295921 1.000000 1.000000 1.000000
+vn 0.858066 0.195760 0.474765
+v 164.659805 -141.328247 39.764320 1.000000 1.000000 1.000000
+vn 0.668483 0.105400 0.736221
+v 164.501434 -142.211487 40.218117 1.000000 1.000000 1.000000
+vn 0.318544 0.187328 0.929214
+v 164.206604 -141.410568 40.242519 1.000000 1.000000 1.000000
+vn 0.988336 0.041182 0.146613
+v 164.888977 -142.200333 39.412117 1.000000 1.000000 1.000000
+vn 0.891383 0.063921 0.448720
+v 164.738342 -142.204514 39.880318 1.000000 1.000000 1.000000
+vn 0.885321 -0.124307 0.448057
+v 164.573532 -143.838440 40.097717 1.000000 1.000000 1.000000
+vn 0.350082 0.096850 0.931699
+v 164.242661 -143.019394 40.473919 1.000000 1.000000 1.000000
+vn 0.658680 -0.044743 0.751092
+v 164.344376 -143.778442 40.435516 1.000000 1.000000 1.000000
+vn 0.983639 -0.080901 0.160963
+v 164.850342 -143.094742 39.527336 1.000000 1.000000 1.000000
+vn 0.967897 -0.203656 0.147309
+v 164.720322 -143.877518 39.629517 1.000000 1.000000 1.000000
+vn 0.844307 -0.247032 0.475522
+v 164.323776 -144.679840 40.214317 1.000000 1.000000 1.000000
+vn 0.933438 -0.326692 0.148212
+v 164.465393 -144.741226 39.746117 1.000000 1.000000 1.000000
+vn 0.336832 -0.022663 0.941292
+v 163.570587 -145.219818 40.808517 1.000000 1.000000 1.000000
+vn 0.646850 -0.232381 0.726350
+v 163.763718 -145.341217 40.667919 1.000000 1.000000 1.000000
+vn 0.880923 -0.449298 0.148680
+v 164.099747 -145.551926 39.861919 1.000000 1.000000 1.000000
+vn 0.815319 -0.368228 0.446837
+v 163.969711 -145.469589 40.330318 1.000000 1.000000 1.000000
+vn 0.915643 -0.364171 -0.170226
+v 164.452515 -144.735641 38.930519 1.000000 1.000000 1.000000
+vn 0.950407 -0.231744 -0.207417
+v 164.708725 -143.874725 38.813919 1.000000 1.000000 1.000000
+vn 0.857951 -0.483749 -0.172936
+v 164.089447 -145.544937 39.046516 1.000000 1.000000 1.000000
+vn 0.756311 -0.472017 -0.452982
+v 163.973572 -145.472382 38.653320 1.000000 1.000000 1.000000
+vn 0.817013 -0.353319 -0.455692
+v 164.330200 -144.682632 38.537518 1.000000 1.000000 1.000000
+vn 0.811908 -0.564228 0.149837
+v 163.636246 -146.292847 39.977119 1.000000 1.000000 1.000000
+vn 0.746461 -0.461451 0.479435
+v 163.517807 -146.192383 40.445320 1.000000 1.000000 1.000000
+vn 0.692975 -0.699211 -0.175753
+v 163.068466 -146.954224 39.277718 1.000000 1.000000 1.000000
+vn 0.783616 -0.596440 -0.173800
+v 163.627243 -146.284470 39.161518 1.000000 1.000000 1.000000
+vn 0.725966 -0.670672 0.152228
+v 163.077484 -146.963989 40.093338 1.000000 1.000000 1.000000
+vn 0.667553 -0.563223 -0.486984
+v 163.521667 -146.196564 38.768517 1.000000 1.000000 1.000000
+vn 0.541207 -0.418240 -0.729500
+v 163.768860 -145.344009 38.308918 1.000000 1.000000 1.000000
+vn 0.595308 -0.658204 -0.460842
+v 162.977066 -146.849579 38.884720 1.000000 1.000000 1.000000
+vn 0.394697 -0.538597 -0.744397
+v 162.812271 -146.664001 38.540119 1.000000 1.000000 1.000000
+vn 0.480738 -0.724907 -0.493357
+v 162.360367 -147.407700 38.999321 1.000000 1.000000 1.000000
+vn -0.059377 -0.306042 -0.950164
+v 160.766464 -147.727249 38.735321 1.000000 1.000000 1.000000
+vn 0.219525 -0.567021 -0.793912
+v 161.563416 -147.639328 38.770119 1.000000 1.000000 1.000000
+vn 0.586115 -0.790684 -0.176883
+v 162.437607 -147.523514 39.392540 1.000000 1.000000 1.000000
+vn 0.378838 -0.798292 -0.468201
+v 161.674133 -147.866776 39.114719 1.000000 1.000000 1.000000
+vn 0.110291 -0.654880 -0.747642
+v 160.848862 -147.979797 38.886520 1.000000 1.000000 1.000000
+vn -0.180745 -0.255284 -0.949822
+v 158.254578 -147.997940 39.119919 1.000000 1.000000 1.000000
+vn 0.117305 -0.857061 -0.501683
+v 160.140747 -148.457001 39.346321 1.000000 1.000000 1.000000
+vn -0.064401 -0.585325 -0.808237
+v 159.311600 -148.314682 39.115921 1.000000 1.000000 1.000000
+vn 0.255254 -0.844856 -0.470174
+v 160.927399 -148.221191 39.230919 1.000000 1.000000 1.000000
+vn 0.464809 -0.866817 -0.180502
+v 161.735931 -147.995148 39.507736 1.000000 1.000000 1.000000
+vn 0.329596 -0.926522 -0.181447
+v 160.972458 -148.357925 39.624119 1.000000 1.000000 1.000000
+vn -0.013220 -0.886235 -0.463046
+v 159.325775 -148.571411 39.460518 1.000000 1.000000 1.000000
+vn 0.185693 -0.965258 -0.183832
+v 160.167786 -148.599335 39.739319 1.000000 1.000000 1.000000
+vn -0.212069 -0.637597 -0.740605
+v 158.219818 -148.261658 39.271118 1.000000 1.000000 1.000000
+vn -0.229145 -0.231998 -0.945341
+v 156.806168 -147.534683 39.337540 1.000000 1.000000 1.000000
+vn -0.464187 -0.477012 -0.746318
+v 156.013077 -147.365845 39.593338 1.000000 1.000000 1.000000
+vn -0.189786 -0.859369 -0.474833
+v 158.185059 -148.515610 39.615517 1.000000 1.000000 1.000000
+vn -0.336945 -0.775316 -0.534184
+v 157.377808 -148.325836 39.725338 1.000000 1.000000 1.000000
+vn -0.048323 -0.974981 -0.216972
+v 159.002609 -148.724899 39.897720 1.000000 1.000000 1.000000
+vn -0.174686 -0.967811 -0.181179
+v 158.167038 -148.659332 40.008720 1.000000 1.000000 1.000000
+vn -0.320331 -0.930180 -0.179312
+v 157.340469 -148.463974 40.118519 1.000000 1.000000 1.000000
+vn -0.420487 -0.733003 -0.534693
+v 156.604034 -148.011902 39.832939 1.000000 1.000000 1.000000
+vn -0.128740 -0.978963 0.158297
+v 158.164459 -148.671890 40.824120 1.000000 1.000000 1.000000
+vn 0.081947 -0.996566 -0.011909
+v 159.336075 -148.765366 40.259117 1.000000 1.000000 1.000000
+vn -0.069018 -0.863370 0.499828
+v 158.186340 -148.510025 41.292519 1.000000 1.000000 1.000000
+vn 0.066860 -0.883579 0.463485
+v 159.002609 -148.574219 41.181519 1.000000 1.000000 1.000000
+vn -0.280904 -0.946649 0.157950
+v 157.336609 -148.476547 40.933918 1.000000 1.000000 1.000000
+vn 0.090374 -0.974780 0.204050
+v 159.333481 -148.729095 40.669121 1.000000 1.000000 1.000000
+vn 0.242691 -0.848379 0.470482
+v 160.139465 -148.451416 41.023319 1.000000 1.000000 1.000000
+vn 0.231401 -0.959968 0.157846
+v 160.170349 -148.611893 40.554916 1.000000 1.000000 1.000000
+vn 0.100569 -0.659854 0.744633
+v 159.002609 -148.317459 41.519318 1.000000 1.000000 1.000000
+vn 0.249437 -0.579123 0.776143
+v 160.093109 -148.200256 41.360916 1.000000 1.000000 1.000000
+vn 0.375256 -0.783838 0.494754
+v 160.926102 -148.215607 40.907921 1.000000 1.000000 1.000000
+vn 0.373711 -0.914188 0.156848
+v 160.976318 -148.370483 40.439518 1.000000 1.000000 1.000000
+vn 0.492274 -0.737424 0.462463
+v 161.671555 -147.861191 40.791718 1.000000 1.000000 1.000000
+vn 0.421264 -0.525298 0.739323
+v 161.560837 -147.633759 41.129318 1.000000 1.000000 1.000000
+vn 0.169011 -0.273574 0.946886
+v 159.300018 -148.066299 41.615719 1.000000 1.000000 1.000000
+vn 0.273216 -0.192318 0.942532
+v 161.456543 -147.420273 41.269920 1.000000 1.000000 1.000000
+vn 0.588758 -0.645231 0.486868
+v 162.356491 -147.402130 40.676319 1.000000 1.000000 1.000000
+vn 0.557089 -0.392443 0.731874
+v 162.808411 -146.659821 40.899319 1.000000 1.000000 1.000000
+vn 0.319374 -0.110427 0.941173
+v 162.653900 -146.485397 41.039917 1.000000 1.000000 1.000000
+vn 0.506119 -0.848293 0.155703
+v 161.742371 -148.007706 40.323318 1.000000 1.000000 1.000000
+vn 0.624268 -0.766036 0.153224
+v 162.445328 -147.534683 40.207916 1.000000 1.000000 1.000000
+vn 0.682947 -0.572327 0.453900
+v 162.971909 -146.845383 40.561520 1.000000 1.000000 1.000000
+vn -0.043532 0.269672 0.961968
+v 162.489105 -146.298416 41.043716 1.000000 1.000000 1.000000
+vn 0.077483 0.244216 0.966620
+v 160.691788 -147.501190 41.389919 1.000000 1.000000 1.000000
+vn 0.182783 0.207678 0.960968
+v 158.285492 -147.759338 41.774536 1.000000 1.000000 1.000000
+vn 0.226939 0.134319 0.964602
+v 156.898865 -147.317017 41.991920 1.000000 1.000000 1.000000
+vn 0.079443 -0.343914 0.935635
+v 158.252014 -148.016083 41.770737 1.000000 1.000000 1.000000
+vn -0.096298 -0.353762 0.930365
+v 156.137970 -147.156540 42.093117 1.000000 1.000000 1.000000
+vn 0.264541 0.081262 0.960945
+v 155.568893 -146.348648 42.222919 1.000000 1.000000 1.000000
+vn -0.125229 -0.279206 0.952030
+v 155.405396 -146.537018 42.219116 1.000000 1.000000 1.000000
+vn 0.262558 -0.004796 0.964904
+v 154.662506 -145.124954 42.422718 1.000000 1.000000 1.000000
+vn 0.557235 0.398166 0.728665
+v 155.736267 -146.153305 42.068336 1.000000 1.000000 1.000000
+vn -0.273461 -0.218976 0.936626
+v 154.121765 -144.522156 42.514919 1.000000 1.000000 1.000000
+vn -0.237846 -0.119345 0.963943
+v 153.732941 -142.111023 42.791538 1.000000 1.000000 1.000000
+vn 0.650551 0.242171 0.719817
+v 154.874939 -144.989609 42.268120 1.000000 1.000000 1.000000
+vn 0.196938 -0.149509 0.968949
+v 154.056107 -141.342194 42.883339 1.000000 1.000000 1.000000
+vn -0.355058 0.013081 0.934753
+v 154.014908 -140.504990 42.964737 1.000000 1.000000 1.000000
+vn 0.847933 0.186425 0.496241
+v 154.358658 -143.620773 42.457336 1.000000 1.000000 1.000000
+vn 0.108558 -0.188349 0.976084
+v 155.213547 -138.766403 43.189739 1.000000 1.000000 1.000000
+vn -0.339008 0.265321 0.902595
+v 155.302383 -138.130142 43.189739 1.000000 1.000000 1.000000
+vn -0.281554 0.385380 0.878754
+v 156.275726 -137.143631 43.189739 1.000000 1.000000 1.000000
+vn 0.203704 -0.391340 0.897417
+v 156.551254 -137.916656 43.189739 1.000000 1.000000 1.000000
+vn -0.199986 0.564219 0.801038
+v 157.364929 -136.476654 43.187340 1.000000 1.000000 1.000000
+vn 0.082477 -0.519909 0.850231
+v 158.020264 -137.435257 43.189739 1.000000 1.000000 1.000000
+vn 0.088964 0.622196 0.777790
+v 159.784119 -136.162720 43.189938 1.000000 1.000000 1.000000
+vn -0.040308 -0.547958 0.835534
+v 159.037369 -137.371063 43.189739 1.000000 1.000000 1.000000
+vn 0.356251 0.563225 0.745562
+v 162.083557 -137.012466 43.189720 1.000000 1.000000 1.000000
+vn -0.266363 -0.539970 0.798425
+v 160.819244 -137.895721 43.187317 1.000000 1.000000 1.000000
+vn -0.440879 -0.407988 0.799482
+v 162.089996 -138.847336 43.189140 1.000000 1.000000 1.000000
+vn 0.587392 0.426234 0.687964
+v 163.680038 -138.413391 43.189720 1.000000 1.000000 1.000000
+vn -0.564000 -0.121477 0.816791
+v 163.341431 -141.243118 43.189720 1.000000 1.000000 1.000000
+vn 0.741347 0.084219 0.665816
+v 164.892838 -141.600327 43.188519 1.000000 1.000000 1.000000
+vn -0.701418 0.095448 0.706330
+v 163.342712 -143.034744 43.187920 1.000000 1.000000 1.000000
+vn 0.738298 -0.136210 0.660577
+v 164.823318 -143.597061 43.188919 1.000000 1.000000 1.000000
+vn -0.648019 0.286195 0.705808
+v 162.901108 -144.566818 43.188721 1.000000 1.000000 1.000000
+vn 0.669094 -0.383683 0.636475
+v 164.074005 -145.751450 43.189720 1.000000 1.000000 1.000000
+vn -0.497047 0.499887 0.709266
+v 161.992142 -145.835175 43.189320 1.000000 1.000000 1.000000
+vn 0.521474 -0.617209 0.589167
+v 162.642319 -147.476089 43.185516 1.000000 1.000000 1.000000
+vn -0.769787 0.318281 0.553287
+v 160.515411 -146.828644 43.189537 1.000000 1.000000 1.000000
+vn -0.281072 -0.791290 0.543009
+v 161.045837 -148.397003 43.189720 1.000000 1.000000 1.000000
+vn 0.879710 0.260220 0.397990
+v 154.789963 -144.226349 42.016541 1.000000 1.000000 1.000000
+vn 0.816899 0.412987 0.402639
+v 155.078369 -144.859833 41.920517 1.000000 1.000000 1.000000
+vn 0.900336 0.162496 0.403720
+v 154.587845 -143.559387 42.109737 1.000000 1.000000 1.000000
+vn 0.879236 0.472971 0.056938
+v 155.230286 -144.763550 41.096336 1.000000 1.000000 1.000000
+vn 0.918052 0.022255 0.395834
+v 154.473251 -142.857529 42.202538 1.000000 1.000000 1.000000
+vn 0.830387 -0.053525 0.554610
+v 154.218323 -142.133347 42.640739 1.000000 1.000000 1.000000
+vn 0.965664 0.255490 0.047089
+v 154.759079 -143.511932 41.285339 1.000000 1.000000 1.000000
+vn 0.896245 -0.097497 0.432711
+v 154.453949 -142.144516 42.293137 1.000000 1.000000 1.000000
+vn 0.874106 -0.238557 0.423119
+v 154.529907 -141.439865 42.381138 1.000000 1.000000 1.000000
+vn 0.718816 -0.341846 0.605347
+v 154.474548 -140.675232 42.813938 1.000000 1.000000 1.000000
+vn 0.994845 0.101323 0.004010
+v 154.649628 -142.837997 41.378139 1.000000 1.000000 1.000000
+vn 0.827876 -0.410861 0.381857
+v 154.935455 -140.143600 42.544937 1.000000 1.000000 1.000000
+vn 0.999239 -0.039000 0.000200
+v 154.630325 -142.152878 41.468739 1.000000 1.000000 1.000000
+vn 0.956234 0.002244 -0.292594
+v 154.578827 -142.151489 41.013939 1.000000 1.000000 1.000000
+vn 0.966713 0.075014 -0.244619
+v 154.598145 -142.843582 40.923340 1.000000 1.000000 1.000000
+vn 0.982655 -0.153671 -0.103798
+v 154.703720 -141.474747 41.556938 1.000000 1.000000 1.000000
+vn 0.867179 -0.244468 -0.433861
+v 154.684387 -140.753357 40.789738 1.000000 1.000000 1.000000
+vn 0.895226 0.164738 -0.414044
+v 154.460373 -142.858932 40.525940 1.000000 1.000000 1.000000
+vn 0.536524 0.699107 -0.472643
+v 154.202881 -142.133347 40.281738 1.000000 1.000000 1.000000
+vn 0.779157 0.323552 -0.536870
+v 154.777100 -144.231918 40.339939 1.000000 1.000000 1.000000
+vn 0.834843 0.496949 -0.236812
+v 155.186523 -144.791458 40.641541 1.000000 1.000000 1.000000
+vn 0.721646 0.229480 -0.653120
+v 154.344498 -143.624954 40.098339 1.000000 1.000000 1.000000
+vn 0.338816 0.137943 -0.930685
+v 153.984009 -142.123581 40.145939 1.000000 1.000000 1.000000
+vn 0.183474 0.182935 -0.965853
+v 154.353516 -144.420303 39.869339 1.000000 1.000000 1.000000
+vn 0.849528 -0.479179 -0.220656
+v 155.375778 -139.607788 41.348339 1.000000 1.000000 1.000000
+vn 0.784724 -0.432430 -0.444086
+v 155.261200 -139.521286 40.950737 1.000000 1.000000 1.000000
+vn 0.753069 -0.618577 -0.224164
+v 155.778763 -139.069199 41.428539 1.000000 1.000000 1.000000
+vn 0.835636 -0.549281 0.001482
+v 155.416977 -139.639893 41.803139 1.000000 1.000000 1.000000
+vn 0.910091 -0.380385 0.164443
+v 155.093811 -140.230118 41.720539 1.000000 1.000000 1.000000
+vn 0.643886 -0.159752 -0.748258
+v 154.710144 -140.022202 40.533539 1.000000 1.000000 1.000000
+vn -0.103174 0.177168 -0.978758
+v 154.695984 -139.092911 40.475140 1.000000 1.000000 1.000000
+vn -0.103728 0.246367 -0.963610
+v 155.732407 -137.897125 40.633141 1.000000 1.000000 1.000000
+vn 0.528370 -0.326867 -0.783571
+v 155.503235 -138.788742 40.696339 1.000000 1.000000 1.000000
+vn 0.137713 -0.115954 -0.983661
+v 155.877899 -138.095261 40.638336 1.000000 1.000000 1.000000
+vn 0.336800 -0.562178 -0.755329
+v 157.202713 -137.532928 40.921940 1.000000 1.000000 1.000000
+vn 0.608713 -0.686137 -0.398352
+v 156.162430 -138.483154 41.108940 1.000000 1.000000 1.000000
+vn 0.398174 -0.778002 -0.485974
+v 157.291550 -137.771530 41.256737 1.000000 1.000000 1.000000
+vn 0.627435 -0.742530 -0.234468
+v 156.248688 -138.600357 41.506340 1.000000 1.000000 1.000000
+vn 0.224624 -0.248381 -0.942258
+v 157.120316 -137.312469 40.785938 1.000000 1.000000 1.000000
+vn 0.176174 -0.733016 -0.657001
+v 158.553284 -137.172928 41.063740 1.000000 1.000000 1.000000
+vn 0.002819 0.315382 -0.948961
+v 157.760193 -136.824097 40.852940 1.000000 1.000000 1.000000
+vn 0.079083 -0.227198 -0.970632
+v 159.258820 -136.918991 40.995537 1.000000 1.000000 1.000000
+vn -0.069925 -0.664979 -0.743581
+v 159.919296 -137.245499 41.194939 1.000000 1.000000 1.000000
+vn -0.021617 -0.883084 -0.468716
+v 159.235641 -137.414337 41.466141 1.000000 1.000000 1.000000
+vn 0.158174 -0.868765 -0.469285
+v 158.575165 -137.429672 41.398537 1.000000 1.000000 1.000000
+vn -0.003374 -0.236190 -0.971701
+v 160.663467 -137.217590 41.122337 1.000000 1.000000 1.000000
+vn -0.340498 -0.658535 -0.671114
+v 161.231247 -137.742233 41.319340 1.000000 1.000000 1.000000
+vn 0.251648 0.136605 -0.958130
+v 162.675797 -138.279434 41.294540 1.000000 1.000000 1.000000
+vn -0.084184 -0.193486 -0.977485
+v 162.513565 -138.459442 41.299538 1.000000 1.000000 1.000000
+vn -0.592657 -0.461807 -0.659918
+v 162.810974 -139.178040 41.488541 1.000000 1.000000 1.000000
+vn 0.195059 -0.011928 -0.980719
+v 164.138367 -141.125916 41.499920 1.000000 1.000000 1.000000
+vn -0.553598 -0.277245 -0.785280
+v 163.493347 -140.498016 41.592140 1.000000 1.000000 1.000000
+vn -0.774220 -0.450193 -0.444869
+v 162.988647 -139.937088 41.876137 1.000000 1.000000 1.000000
+vn -0.648486 -0.651997 -0.392895
+v 162.194275 -138.815247 41.770119 1.000000 1.000000 1.000000
+vn -0.909755 -0.379433 -0.168453
+v 163.140564 -140.644516 42.324341 1.000000 1.000000 1.000000
+vn -0.842799 -0.491028 -0.220412
+v 162.866333 -140.009659 42.273537 1.000000 1.000000 1.000000
+vn -0.614394 -0.787928 -0.041101
+v 161.573715 -138.516647 42.565536 1.000000 1.000000 1.000000
+vn -0.590814 -0.771940 -0.234623
+v 161.603317 -138.471985 42.110741 1.000000 1.000000 1.000000
+vn -0.558413 -0.738722 -0.377446
+v 161.684433 -138.350601 41.713341 1.000000 1.000000 1.000000
+vn -0.267938 -0.839082 -0.473445
+v 160.512817 -137.685028 41.592937 1.000000 1.000000 1.000000
+vn -0.484400 -0.874819 -0.006937
+v 161.032959 -138.153854 42.506340 1.000000 1.000000 1.000000
+vn -0.314585 -0.916108 -0.248560
+v 160.466476 -137.827347 41.990318 1.000000 1.000000 1.000000
+vn -0.192906 -0.981024 0.019457
+v 159.836899 -137.700363 42.381939 1.000000 1.000000 1.000000
+vn -0.053764 -0.963875 -0.260872
+v 159.227921 -137.565018 41.863739 1.000000 1.000000 1.000000
+vn 0.080360 -0.995832 0.043135
+v 158.593185 -137.634796 42.250938 1.000000 1.000000 1.000000
+vn 0.068145 -0.961977 -0.264494
+v 158.589325 -137.580368 41.796139 1.000000 1.000000 1.000000
+vn -0.227516 -0.963039 0.144194
+v 159.845901 -137.651535 42.812538 1.000000 1.000000 1.000000
+vn 0.288920 -0.955989 -0.051087
+v 157.968765 -137.750610 42.180939 1.000000 1.000000 1.000000
+vn 0.422557 -0.904830 0.052230
+v 157.362350 -137.962692 42.108940 1.000000 1.000000 1.000000
+vn -0.794119 -0.600709 0.092325
+v 162.471085 -139.461273 42.675518 1.000000 1.000000 1.000000
+vn -0.876872 -0.459953 -0.139784
+v 162.822571 -140.037552 42.728340 1.000000 1.000000 1.000000
+vn 0.431901 -0.872997 -0.226579
+v 157.343048 -137.911072 41.654137 1.000000 1.000000 1.000000
+vn 0.665343 -0.746343 -0.017064
+v 156.280884 -138.645004 41.961140 1.000000 1.000000 1.000000
+vn 0.356045 -0.875308 0.327213
+v 157.296707 -137.785492 42.933140 1.000000 1.000000 1.000000
+vn 0.431110 -0.780163 0.453310
+v 156.704453 -138.099442 42.859737 1.000000 1.000000 1.000000
+vn 0.483454 -0.692992 0.534822
+v 156.170151 -138.494308 42.785538 1.000000 1.000000 1.000000
+vn 0.655557 -0.665511 0.356848
+v 155.687347 -138.975708 42.707741 1.000000 1.000000 1.000000
+vn 0.622856 -0.435521 0.649901
+v 155.079666 -139.383148 42.975140 1.000000 1.000000 1.000000
+vn 0.718454 -0.539351 0.439232
+v 155.272781 -139.529663 42.627338 1.000000 1.000000 1.000000
+vn -0.878537 -0.194330 -0.436359
+v 163.463730 -141.287781 41.975719 1.000000 1.000000 1.000000
+vn -0.937797 -0.343655 -0.049377
+v 163.092941 -140.664063 42.779137 1.000000 1.000000 1.000000
+vn -0.090097 -0.615426 0.783029
+v 157.446045 -148.073288 41.739937 1.000000 1.000000 1.000000
+vn -0.204281 -0.599208 0.774093
+v 156.705734 -147.771896 41.847740 1.000000 1.000000 1.000000
+vn -0.211056 -0.858183 0.467951
+v 157.379089 -148.318863 41.402336 1.000000 1.000000 1.000000
+vn -0.358977 -0.802701 0.476242
+v 156.606613 -148.004913 41.509937 1.000000 1.000000 1.000000
+vn -0.409376 -0.545420 0.731388
+v 155.253464 -146.714233 42.078720 1.000000 1.000000 1.000000
+vn -0.567928 -0.678087 0.466537
+v 155.091248 -146.902603 41.740936 1.000000 1.000000 1.000000
+vn -0.532676 -0.811047 0.241784
+v 155.805786 -147.713287 41.146538 1.000000 1.000000 1.000000
+vn -0.422836 -0.892541 0.156779
+v 156.543518 -148.154221 41.041538 1.000000 1.000000 1.000000
+vn -0.460906 -0.869203 -0.179029
+v 156.548676 -148.141647 40.226139 1.000000 1.000000 1.000000
+vn -0.559796 -0.827542 -0.042448
+v 155.786484 -147.745377 40.736538 1.000000 1.000000 1.000000
+vn -0.687587 -0.708572 0.158587
+v 154.988235 -147.022598 41.272537 1.000000 1.000000 1.000000
+vn -0.582396 -0.689653 -0.430340
+v 155.884338 -147.580734 39.937939 1.000000 1.000000 1.000000
+vn -0.703936 -0.669681 -0.236647
+v 154.997253 -147.012833 40.457138 1.000000 1.000000 1.000000
+vn -0.802499 -0.571225 -0.172328
+v 154.420471 -146.338882 40.558140 1.000000 1.000000 1.000000
+vn -0.783581 -0.602491 0.151676
+v 154.410172 -146.348648 41.373737 1.000000 1.000000 1.000000
+vn -0.874253 -0.454182 -0.171467
+v 153.940231 -145.585403 40.656937 1.000000 1.000000 1.000000
+vn -0.860707 -0.486251 0.150809
+v 153.928650 -145.592392 41.472538 1.000000 1.000000 1.000000
+vn -0.667690 -0.562503 0.487628
+v 154.528610 -146.245392 41.841919 1.000000 1.000000 1.000000
+vn -0.503737 -0.384734 0.773453
+v 154.263397 -145.378891 42.278519 1.000000 1.000000 1.000000
+vn -0.759586 -0.468897 0.450738
+v 154.059982 -145.508652 41.940720 1.000000 1.000000 1.000000
+vn -0.919661 -0.363586 0.148425
+v 153.555283 -144.773315 41.568336 1.000000 1.000000 1.000000
+vn -0.928243 -0.330842 -0.170025
+v 153.568146 -144.767731 40.752937 1.000000 1.000000 1.000000
+vn -0.801732 -0.356285 0.479882
+v 153.695618 -144.711929 42.036739 1.000000 1.000000 1.000000
+vn -0.603544 -0.214451 0.767949
+v 153.672440 -143.807755 42.467739 1.000000 1.000000 1.000000
+vn -0.860654 -0.245884 0.445888
+v 153.441986 -143.870544 42.129936 1.000000 1.000000 1.000000
+vn -0.690537 -0.058884 0.720896
+v 153.510223 -142.101257 42.651138 1.000000 1.000000 1.000000
+vn -0.729965 -0.502806 -0.462966
+v 154.523453 -146.249588 40.165138 1.000000 1.000000 1.000000
+vn -0.581493 -0.341778 -0.738278
+v 154.708862 -146.089111 39.820538 1.000000 1.000000 1.000000
+vn -0.794605 -0.371245 -0.480395
+v 154.054825 -145.512848 40.263939 1.000000 1.000000 1.000000
+vn -0.260434 -0.097968 -0.960508
+v 155.416977 -146.524460 39.568539 1.000000 1.000000 1.000000
+vn 0.560937 -0.286314 -0.776772
+v 164.110046 -144.586349 38.192917 1.000000 1.000000 1.000000
+vn 0.664699 -0.187165 -0.723287
+v 164.470551 -143.047287 37.974121 1.000000 1.000000 1.000000
+vn 0.895257 -0.167474 -0.412877
+v 164.706146 -143.076599 38.318718 1.000000 1.000000 1.000000
+vn 0.985955 -0.009588 -0.166737
+v 164.876099 -142.200333 38.596519 1.000000 1.000000 1.000000
+vn 0.879002 -0.041827 -0.474979
+v 164.743484 -142.204514 38.203518 1.000000 1.000000 1.000000
+vn 0.693997 -0.003379 -0.719970
+v 164.431915 -141.370102 37.742718 1.000000 1.000000 1.000000
+vn 0.621927 0.095462 -0.777234
+v 164.247803 -140.546844 37.626339 1.000000 1.000000 1.000000
+vn 0.872962 0.195918 -0.446715
+v 164.473114 -140.468719 37.970940 1.000000 1.000000 1.000000
+vn 0.891761 0.080232 -0.445337
+v 164.666245 -141.326843 38.087318 1.000000 1.000000 1.000000
+vn 0.977040 0.129944 -0.168843
+v 164.797562 -141.303116 38.480518 1.000000 1.000000 1.000000
+vn 0.951003 0.258009 -0.170366
+v 164.600571 -140.424057 38.363937 1.000000 1.000000 1.000000
+vn 0.908831 0.380574 -0.170850
+v 164.294159 -139.592438 38.248539 1.000000 1.000000 1.000000
+vn 0.826441 0.298553 -0.477348
+v 164.174423 -139.655228 37.855537 1.000000 1.000000 1.000000
+vn 0.639493 0.253784 -0.725702
+v 163.577026 -139.038498 37.395737 1.000000 1.000000 1.000000
+vn -0.509489 -0.451618 -0.732436
+v 155.764603 -147.180283 19.086998 1.000000 1.000000 1.000000
+vn -0.326677 -0.000761 -0.945136
+v 154.482269 -145.265869 19.268799 1.000000 1.000000 1.000000
+vn -0.298576 -0.129200 -0.945600
+v 155.910080 -146.963989 18.935999 1.000000 1.000000 1.000000
+vn -0.341426 -0.576161 -0.742608
+v 157.133179 -147.968628 18.855598 1.000000 1.000000 1.000000
+vn -0.617138 -0.660854 -0.427098
+v 155.625549 -147.388168 19.431599 1.000000 1.000000 1.000000
+vn -0.491800 -0.717819 -0.492817
+v 156.309204 -147.852814 19.316399 1.000000 1.000000 1.000000
+vn -0.549023 -0.312026 -0.775380
+v 154.712723 -146.094711 19.303999 1.000000 1.000000 1.000000
+vn -0.237634 -0.203786 -0.949738
+v 157.216873 -147.717468 18.704597 1.000000 1.000000 1.000000
+vn -0.144272 -0.654087 -0.742534
+v 158.652405 -148.310486 18.623798 1.000000 1.000000 1.000000
+vn -0.146975 -0.237238 -0.960269
+v 158.667862 -148.043976 18.472797 1.000000 1.000000 1.000000
+vn -0.257537 -0.827688 -0.498606
+v 157.836151 -148.450027 19.083797 1.000000 1.000000 1.000000
+vn -0.110620 -0.870463 -0.479644
+v 158.636963 -148.567230 18.968399 1.000000 1.000000 1.000000
+vn 0.017264 -0.674575 -0.738004
+v 160.129150 -148.197464 18.402599 1.000000 1.000000 1.000000
+vn 0.116645 -0.891578 -0.437588
+v 160.178085 -148.450027 18.747200 1.000000 1.000000 1.000000
+vn -0.101868 -0.228361 -0.968233
+v 160.078949 -147.936539 18.251598 1.000000 1.000000 1.000000
+vn 0.277604 -0.831034 -0.481994
+v 160.947998 -148.214218 18.632797 1.000000 1.000000 1.000000
+vn 0.161499 -0.637908 -0.752989
+v 160.868164 -147.971420 18.288200 1.000000 1.000000 1.000000
+vn 0.310226 -0.932326 -0.185819
+v 160.993057 -148.349564 19.025997 1.000000 1.000000 1.000000
+vn 0.064715 -0.972994 -0.221572
+v 159.460953 -148.705368 19.245197 1.000000 1.000000 1.000000
+vn -0.093073 -0.978954 -0.181620
+v 158.627960 -148.710953 19.361397 1.000000 1.000000 1.000000
+vn 0.099794 -0.982482 0.157387
+v 159.462250 -148.719330 20.060799 1.000000 1.000000 1.000000
+vn 0.243535 -0.954561 0.171769
+v 160.207687 -148.604904 19.955799 1.000000 1.000000 1.000000
+vn -0.195296 -0.967801 0.158809
+v 157.806534 -148.604904 20.292400 1.000000 1.000000 1.000000
+vn -0.239885 -0.953803 -0.180870
+v 157.809113 -148.590942 19.476801 1.000000 1.000000 1.000000
+vn -0.046547 -0.986240 0.158631
+v 158.627960 -148.724899 20.176998 1.000000 1.000000 1.000000
+vn 0.170714 -0.858746 0.483128
+v 159.450653 -148.556076 20.528999 1.000000 1.000000 1.000000
+vn 0.336229 -0.757287 0.559881
+v 160.946716 -148.207245 20.309799 1.000000 1.000000 1.000000
+vn 0.370477 -0.914279 0.163831
+v 160.998215 -148.362122 19.841400 1.000000 1.000000 1.000000
+vn 0.190850 -0.639275 0.744919
+v 159.431335 -148.299332 20.866798 1.000000 1.000000 1.000000
+vn 0.407176 -0.485766 0.773459
+v 161.562119 -147.633759 20.535000 1.000000 1.000000 1.000000
+vn 0.009296 -0.866262 0.499504
+v 158.636963 -148.560257 20.645397 1.000000 1.000000 1.000000
+vn -0.128888 -0.873461 0.469525
+v 157.837448 -148.443054 20.760597 1.000000 1.000000 1.000000
+vn -0.031822 -0.647582 0.761331
+v 157.886368 -148.191895 21.098400 1.000000 1.000000 1.000000
+vn 0.121785 -0.335815 0.934022
+v 158.666580 -148.063522 21.123600 1.000000 1.000000 1.000000
+vn 0.250035 -0.349885 0.902808
+v 160.081512 -147.954681 20.902397 1.000000 1.000000 1.000000
+vn 0.015763 -0.354380 0.934969
+v 157.210434 -147.734222 21.355400 1.000000 1.000000 1.000000
+vn -0.238874 -0.610280 0.755313
+v 156.422501 -147.619797 21.330997 1.000000 1.000000 1.000000
+vn -0.250261 -0.830508 0.497621
+v 157.053360 -148.204437 20.877197 1.000000 1.000000 1.000000
+vn -0.338685 -0.927743 0.156798
+v 157.001862 -148.357925 20.408798 1.000000 1.000000 1.000000
+vn -0.473923 -0.866604 0.156185
+v 156.239670 -147.992355 20.524998 1.000000 1.000000 1.000000
+vn -0.396665 -0.786961 0.472598
+v 156.311768 -147.847244 20.993198 1.000000 1.000000 1.000000
+vn -0.380511 -0.907202 -0.179432
+v 157.007004 -148.345383 19.593399 1.000000 1.000000 1.000000
+vn -0.515013 -0.838090 -0.179909
+v 156.246109 -147.979797 19.709400 1.000000 1.000000 1.000000
+vn -0.381490 -0.797978 -0.466580
+v 157.052078 -148.210037 19.200199 1.000000 1.000000 1.000000
+vn -0.576229 -0.785432 0.225959
+v 155.539276 -147.516541 20.640198 1.000000 1.000000 1.000000
+vn -0.583627 -0.685927 0.434608
+v 155.087387 -146.898407 21.208797 1.000000 1.000000 1.000000
+vn -0.779174 -0.606513 0.158211
+v 154.414032 -146.354233 20.856998 1.000000 1.000000 1.000000
+vn -0.718214 -0.695286 0.027311
+v 154.959915 -147.046326 20.330399 1.000000 1.000000 1.000000
+vn -0.590386 -0.805710 -0.047698
+v 155.519974 -147.545837 20.230198 1.000000 1.000000 1.000000
+vn -0.376931 -0.521581 0.765426
+v 155.249603 -146.711441 21.546600 1.000000 1.000000 1.000000
+vn -0.661383 -0.571267 0.486032
+v 154.532471 -146.250977 21.325397 1.000000 1.000000 1.000000
+vn -0.083451 -0.334144 0.938820
+v 155.899780 -146.979340 21.586800 1.000000 1.000000 1.000000
+vn -0.190141 -0.259277 0.946901
+v 154.466812 -145.274246 21.919598 1.000000 1.000000 1.000000
+vn -0.540558 -0.412564 0.733204
+v 154.274979 -145.398438 21.778999 1.000000 1.000000 1.000000
+vn -0.752127 -0.480286 0.451255
+v 154.071564 -145.529587 21.441200 1.000000 1.000000 1.000000
+vn -0.857474 -0.491910 0.150872
+v 153.940231 -145.613312 20.973000 1.000000 1.000000 1.000000
+vn -0.589835 -0.263283 0.763399
+v 153.680161 -143.849609 22.010399 1.000000 1.000000 1.000000
+vn -0.795283 -0.372907 0.477980
+v 153.709778 -144.749603 21.556400 1.000000 1.000000 1.000000
+vn -0.281675 -0.157747 0.946454
+v 153.761276 -142.997055 22.266598 1.000000 1.000000 1.000000
+vn -0.674092 -0.156779 0.721817
+v 153.539825 -143.024963 22.125999 1.000000 1.000000 1.000000
+vn -0.855625 -0.264208 0.445085
+v 153.450989 -143.913788 21.672600 1.000000 1.000000 1.000000
+vn -0.915775 -0.373257 0.148447
+v 153.570724 -144.812378 21.088200 1.000000 1.000000 1.000000
+vn -0.705046 -0.657730 -0.265145
+v 154.993393 -147.008652 19.924999 1.000000 1.000000 1.000000
+vn -0.739354 -0.491051 -0.460679
+v 154.528610 -146.255173 19.648399 1.000000 1.000000 1.000000
+vn -0.808774 -0.559480 -0.181289
+v 154.424332 -146.345871 20.041599 1.000000 1.000000 1.000000
+vn -0.810198 -0.376206 -0.449498
+v 154.066406 -145.532379 19.764397 1.000000 1.000000 1.000000
+vn -0.652610 -0.220960 -0.724760
+v 154.269821 -145.401230 19.419800 1.000000 1.000000 1.000000
+vn -0.874460 -0.453545 -0.172094
+v 153.951813 -145.606323 20.157398 1.000000 1.000000 1.000000
+vn -0.841080 -0.255985 -0.476504
+v 153.704636 -144.750992 19.879597 1.000000 1.000000 1.000000
+vn -0.927437 -0.333126 -0.169964
+v 153.582321 -144.806808 20.272598 1.000000 1.000000 1.000000
+vn 0.306466 -0.189991 0.932729
+v 162.290833 -146.830048 20.525398 1.000000 1.000000 1.000000
+vn 0.106273 0.252542 0.961732
+v 160.033890 -147.702133 20.906197 1.000000 1.000000 1.000000
+vn 0.175057 0.217911 0.960141
+v 158.682022 -147.805389 21.127399 1.000000 1.000000 1.000000
+vn 0.546673 -0.357779 0.757062
+v 162.992508 -146.460281 20.276398 1.000000 1.000000 1.000000
+vn 0.515636 -0.718585 0.466642
+v 161.672836 -147.861191 20.197195 1.000000 1.000000 1.000000
+vn -0.179996 0.632310 0.753516
+v 161.232529 -146.952835 20.524799 1.000000 1.000000 1.000000
+vn 0.652302 -0.214729 0.726907
+v 163.871857 -145.130524 20.067600 1.000000 1.000000 1.000000
+vn 0.688214 -0.043943 0.724176
+v 164.388138 -143.566360 19.863400 1.000000 1.000000 1.000000
+vn 0.676548 0.127071 0.725352
+v 164.488571 -141.938004 19.670597 1.000000 1.000000 1.000000
+vn 0.851790 -0.223380 0.473872
+v 164.401016 -144.462158 19.627800 1.000000 1.000000 1.000000
+vn 0.882206 -0.001967 0.470859
+v 164.726746 -142.768219 19.427799 1.000000 1.000000 1.000000
+vn 0.888738 -0.118959 0.442712
+v 164.619888 -143.617981 19.525799 1.000000 1.000000 1.000000
+vn 0.852756 0.218845 0.474251
+v 164.616028 -141.071487 19.238998 1.000000 1.000000 1.000000
+vn 0.890056 0.106295 0.443285
+v 164.725464 -141.919861 19.332798 1.000000 1.000000 1.000000
+vn 0.980954 -0.161509 0.107904
+v 164.767944 -143.651474 19.057400 1.000000 1.000000 1.000000
+vn 0.992404 -0.061677 0.106441
+v 164.877380 -142.777985 18.959599 1.000000 1.000000 1.000000
+vn 0.944061 -0.295006 0.147381
+v 164.543930 -144.517975 19.159397 1.000000 1.000000 1.000000
+vn 0.897177 -0.416029 0.148301
+v 164.215622 -145.325867 19.261597 1.000000 1.000000 1.000000
+vn 0.934992 -0.310851 -0.170770
+v 164.531052 -144.512390 18.343998 1.000000 1.000000 1.000000
+vn 0.827000 -0.341874 0.446311
+v 164.081726 -145.250519 19.729797 1.000000 1.000000 1.000000
+vn 0.834207 -0.530748 0.149684
+v 163.792038 -146.069580 19.364597 1.000000 1.000000 1.000000
+vn 0.877289 -0.448239 -0.171596
+v 164.204041 -145.320297 18.445999 1.000000 1.000000 1.000000
+vn 0.763727 -0.434736 0.477206
+v 163.668442 -145.974701 19.833000 1.000000 1.000000 1.000000
+vn 0.755464 -0.637475 0.151326
+v 163.274475 -146.749115 19.470398 1.000000 1.000000 1.000000
+vn 0.808848 -0.561972 -0.173067
+v 163.780457 -146.062607 18.549198 1.000000 1.000000 1.000000
+vn 0.777786 -0.437076 -0.451678
+v 164.086868 -145.253311 18.052998 1.000000 1.000000 1.000000
+vn 0.664154 -0.536344 -0.520802
+v 163.673584 -145.978897 18.155998 1.000000 1.000000 1.000000
+vn 0.606387 -0.596957 -0.525297
+v 163.167618 -146.640274 18.261799 1.000000 1.000000 1.000000
+vn 0.725371 -0.665457 -0.176082
+v 163.264175 -146.739349 18.654999 1.000000 1.000000 1.000000
+vn 0.687952 -0.558102 0.463944
+v 163.163757 -146.636093 19.938795 1.000000 1.000000 1.000000
+vn 0.653236 -0.728681 0.205685
+v 162.671936 -147.349106 19.578800 1.000000 1.000000 1.000000
+vn 0.503910 -0.724332 -0.470550
+v 162.580521 -147.224930 18.370197 1.000000 1.000000 1.000000
+vn 0.620231 -0.762701 -0.183305
+v 162.664215 -147.337952 18.763199 1.000000 1.000000 1.000000
+vn 0.359328 -0.573026 -0.736562
+v 162.433746 -147.024002 18.025597 1.000000 1.000000 1.000000
+vn 0.554745 -0.386552 -0.736774
+v 163.877014 -145.133316 17.708397 1.000000 1.000000 1.000000
+vn 0.093268 -0.286313 -0.953586
+v 162.279251 -146.814697 17.874599 1.000000 1.000000 1.000000
+vn -0.022893 -0.251878 -0.967488
+v 161.450119 -147.402130 18.024799 1.000000 1.000000 1.000000
+vn 0.188710 -0.240650 -0.952090
+v 163.658142 -145.009140 17.557400 1.000000 1.000000 1.000000
+vn 0.651354 -0.213975 -0.727979
+v 164.393295 -143.566360 17.504398 1.000000 1.000000 1.000000
+vn 0.814368 -0.327429 -0.479160
+v 164.406174 -144.463547 17.950798 1.000000 1.000000 1.000000
+vn 0.064048 -0.185924 -0.980475
+v 164.151245 -143.513336 17.353201 1.000000 1.000000 1.000000
+vn 0.911206 -0.120215 -0.394019
+v 164.731903 -142.768219 17.750999 1.000000 1.000000 1.000000
+vn 0.909713 -0.199526 -0.364159
+v 164.625031 -143.619385 17.848797 1.000000 1.000000 1.000000
+vn 0.691416 -0.049640 -0.720749
+v 164.495010 -141.936600 17.311398 1.000000 1.000000 1.000000
+vn 0.985727 0.028015 -0.166006
+v 164.863220 -141.908707 18.049000 1.000000 1.000000 1.000000
+vn 0.895926 0.009686 -0.444097
+v 164.730606 -141.918472 17.655998 1.000000 1.000000 1.000000
+vn 0.985940 0.079947 0.146732
+v 164.876099 -141.907303 18.864597 1.000000 1.000000 1.000000
+vn 0.970839 0.162194 -0.176536
+v 164.751205 -141.040802 17.955200 1.000000 1.000000 1.000000
+vn 0.883494 0.132510 -0.449309
+v 164.621170 -141.070099 17.562000 1.000000 1.000000 1.000000
+vn 0.967068 0.203014 0.153510
+v 164.764084 -141.038010 18.770798 1.000000 1.000000 1.000000
+vn 0.636311 0.060401 -0.769064
+v 164.389435 -141.123123 17.217598 1.000000 1.000000 1.000000
+vn 0.272873 -0.091779 -0.957662
+v 164.249084 -141.956146 17.160397 1.000000 1.000000 1.000000
+vn 0.314665 0.003080 -0.949198
+v 163.811356 -140.052902 16.928799 1.000000 1.000000 1.000000
+vn 0.455488 -0.841560 -0.290359
+v 161.737228 -147.993759 18.913399 1.000000 1.000000 1.000000
+vn 0.500549 -0.865535 -0.017319
+v 161.759109 -148.039795 19.319000 1.000000 1.000000 1.000000
+vn 0.518203 -0.829958 0.206485
+v 161.743652 -148.006302 19.729000 1.000000 1.000000 1.000000
+vn 0.232012 0.163584 0.958859
+v 157.291550 -147.491440 21.359200 1.000000 1.000000 1.000000
+vn 0.274558 0.089240 0.957420
+v 156.040115 -146.770035 21.590599 1.000000 1.000000 1.000000
+vn 0.283629 -0.016671 0.958789
+v 154.672821 -145.143082 21.923397 1.000000 1.000000 1.000000
+vn 0.664484 0.231897 0.710412
+v 154.883957 -145.006332 21.768799 1.000000 1.000000 1.000000
+vn 0.251050 -0.124249 0.959967
+v 153.998169 -142.967758 22.270199 1.000000 1.000000 1.000000
+vn 0.904904 0.248172 0.345774
+v 154.800278 -144.257050 21.536198 1.000000 1.000000 1.000000
+vn 0.705368 -0.041116 0.707648
+v 154.244080 -142.938461 22.115799 1.000000 1.000000 1.000000
+vn 0.828445 0.384642 0.407098
+v 155.087387 -144.876572 21.421200 1.000000 1.000000 1.000000
+vn 0.183905 -0.204062 0.961529
+v 154.210602 -140.684982 22.617397 1.000000 1.000000 1.000000
+vn 0.633194 -0.293119 0.716343
+v 154.444931 -140.765930 22.462799 1.000000 1.000000 1.000000
+vn 0.105410 -0.254526 0.961304
+v 154.829895 -139.303604 22.848797 1.000000 1.000000 1.000000
+vn -0.374178 -0.031603 0.926818
+v 153.982727 -140.605453 22.613598 1.000000 1.000000 1.000000
+vn -0.360143 0.063824 0.930711
+v 154.632904 -139.158493 22.844997 1.000000 1.000000 1.000000
+vn 0.485009 -0.479715 0.731191
+v 155.034592 -139.452911 22.694199 1.000000 1.000000 1.000000
+vn -0.012832 -0.265642 0.963986
+v 156.292465 -137.757584 23.183399 1.000000 1.000000 1.000000
+vn 0.683640 -0.576424 0.447629
+v 155.230286 -139.596634 22.346600 1.000000 1.000000 1.000000
+vn 0.799035 -0.443212 0.406333
+v 154.909714 -140.196625 22.231400 1.000000 1.000000 1.000000
+vn 0.281171 -0.622350 0.730495
+v 156.425079 -137.983627 23.028797 1.000000 1.000000 1.000000
+vn -0.127525 -0.235648 0.963435
+v 158.270035 -136.958054 23.529598 1.000000 1.000000 1.000000
+vn -0.020476 -0.680529 0.732435
+v 158.306076 -137.221771 23.375000 1.000000 1.000000 1.000000
+vn 0.644704 -0.697115 0.313667
+v 156.036255 -138.614319 22.565399 1.000000 1.000000 1.000000
+vn 0.345647 -0.874063 0.341382
+v 157.113876 -137.867813 22.796398 1.000000 1.000000 1.000000
+vn 0.434567 -0.779440 0.451247
+v 156.552536 -138.198502 22.681198 1.000000 1.000000 1.000000
+vn 0.906476 -0.421021 0.032279
+v 155.069351 -140.280350 21.406998 1.000000 1.000000 1.000000
+vn 0.800219 -0.599679 0.005912
+v 155.709229 -139.235245 21.624397 1.000000 1.000000 1.000000
+vn 0.678295 -0.734740 -0.008536
+v 156.150833 -138.759430 21.740997 1.000000 1.000000 1.000000
+vn 0.462272 -0.885216 0.051939
+v 157.187256 -138.042221 21.972000 1.000000 1.000000 1.000000
+vn 0.226271 -0.900141 0.372221
+v 157.718994 -137.623642 22.912598 1.000000 1.000000 1.000000
+vn 0.581050 -0.708704 -0.400150
+v 156.544800 -138.185959 21.004597 1.000000 1.000000 1.000000
+vn 0.359527 -0.821414 -0.442742
+v 157.715134 -137.609680 21.236000 1.000000 1.000000 1.000000
+vn 0.843612 -0.482632 -0.235343
+v 155.334579 -139.671982 21.067398 1.000000 1.000000 1.000000
+vn 0.607094 -0.559103 -0.564659
+v 156.027252 -138.603149 20.888798 1.000000 1.000000 1.000000
+vn 0.412686 -0.609920 -0.676526
+v 157.009583 -137.619446 20.785000 1.000000 1.000000 1.000000
+vn 0.619601 -0.395227 -0.678152
+v 155.387360 -138.929657 20.437399 1.000000 1.000000 1.000000
+vn 0.795522 -0.397789 -0.457065
+v 155.218704 -139.588257 20.669998 1.000000 1.000000 1.000000
+vn 0.935667 -0.276711 -0.218995
+v 154.788681 -140.885925 20.836197 1.000000 1.000000 1.000000
+vn 0.254730 -0.079034 -0.963777
+v 156.298904 -137.768738 20.533997 1.000000 1.000000 1.000000
+vn 0.291196 -0.007009 -0.956638
+v 154.840179 -139.310593 20.199398 1.000000 1.000000 1.000000
+vn 0.676301 -0.178136 -0.714762
+v 154.683105 -140.076630 20.219997 1.000000 1.000000 1.000000
+vn 0.875412 -0.201163 -0.439532
+v 154.656082 -140.839874 20.438599 1.000000 1.000000 1.000000
+vn 0.278853 0.073701 -0.957501
+v 154.220917 -140.687790 19.967999 1.000000 1.000000 1.000000
+vn 0.773762 0.013060 -0.633342
+v 154.267258 -141.478928 19.987400 1.000000 1.000000 1.000000
+vn 0.905151 -0.042119 -0.422999
+v 154.502869 -141.523590 20.322195 1.000000 1.000000 1.000000
+vn 0.917918 0.128248 -0.375472
+v 154.464233 -142.911942 20.091400 1.000000 1.000000 1.000000
+vn 0.706795 0.300530 -0.640408
+v 154.352234 -143.662628 19.641197 1.000000 1.000000 1.000000
+vn 0.967302 0.063496 -0.245551
+v 154.603287 -142.895203 20.488998 1.000000 1.000000 1.000000
+vn 0.990489 -0.137289 0.009169
+v 154.689545 -141.558472 21.174400 1.000000 1.000000 1.000000
+vn 0.996205 0.085772 0.014789
+v 154.653503 -142.888229 20.943798 1.000000 1.000000 1.000000
+vn 0.964215 0.261342 0.044610
+v 154.766800 -143.545425 20.828197 1.000000 1.000000 1.000000
+vn 0.960386 -0.278620 0.005449
+v 154.837616 -140.904068 21.291000 1.000000 1.000000 1.000000
+vn 0.837024 -0.337049 0.431031
+v 154.668961 -140.844070 22.115200 1.000000 1.000000 1.000000
+vn 0.930773 -0.174286 0.321383
+v 154.515732 -141.524979 21.998798 1.000000 1.000000 1.000000
+vn 0.931130 -0.111712 0.347157
+v 154.451355 -142.215668 21.883400 1.000000 1.000000 1.000000
+vn 0.904561 0.010727 0.426209
+v 154.478409 -142.910553 21.767998 1.000000 1.000000 1.000000
+vn 0.926402 0.194161 0.322615
+v 154.595551 -143.594269 21.652397 1.000000 1.000000 1.000000
+vn 0.887246 0.459911 0.035729
+v 155.239304 -144.778900 20.596798 1.000000 1.000000 1.000000
+vn 0.723368 0.278591 -0.631764
+v 154.582687 -143.597061 19.975800 1.000000 1.000000 1.000000
+vn 0.881231 0.423666 -0.209617
+v 155.195526 -144.806808 20.141998 1.000000 1.000000 1.000000
+vn 0.194755 0.162689 -0.967266
+v 154.011047 -142.966354 19.620800 1.000000 1.000000 1.000000
+vn 0.197417 -0.218190 -0.955730
+v 158.271317 -136.970612 20.879997 1.000000 1.000000 1.000000
+vn 0.089546 -0.257776 -0.962046
+v 160.380219 -137.121307 21.227200 1.000000 1.000000 1.000000
+vn 0.039128 -0.745340 -0.665535
+v 159.652786 -137.198059 21.246597 1.000000 1.000000 1.000000
+vn 0.223497 -0.622825 -0.749758
+v 158.303513 -137.205032 21.015999 1.000000 1.000000 1.000000
+vn 0.191228 -0.850523 -0.489942
+v 158.338272 -137.460373 21.350597 1.000000 1.000000 1.000000
+vn -0.015609 -0.892463 -0.450851
+v 159.620590 -137.453400 21.581398 1.000000 1.000000 1.000000
+vn -0.174004 -0.651160 -0.738724
+v 160.959579 -137.601303 21.479198 1.000000 1.000000 1.000000
+vn -0.198426 -0.862055 -0.466357
+v 160.255325 -137.597122 21.697800 1.000000 1.000000 1.000000
+vn 0.163589 -0.956932 -0.239832
+v 158.358871 -137.609680 21.748199 1.000000 1.000000 1.000000
+vn 0.285126 -0.913075 -0.291544
+v 157.753754 -137.753387 21.633400 1.000000 1.000000 1.000000
+vn 0.140988 -0.988711 0.050718
+v 158.366592 -137.664093 22.202999 1.000000 1.000000 1.000000
+vn -0.124234 -0.992203 0.009972
+v 159.594849 -137.658508 22.433598 1.000000 1.000000 1.000000
+vn -0.286602 -0.929199 -0.233343
+v 160.216705 -137.742233 22.095398 1.000000 1.000000 1.000000
+vn -0.415656 -0.775929 -0.474515
+v 161.429520 -138.163620 21.929199 1.000000 1.000000 1.000000
+vn -0.512022 -0.823732 -0.243513
+v 161.354828 -138.291992 22.326599 1.000000 1.000000 1.000000
+vn -0.447633 -0.893572 0.033972
+v 160.785782 -138.025482 22.666199 1.000000 1.000000 1.000000
+vn -0.287849 -0.957656 0.006178
+v 160.202545 -137.795258 22.550198 1.000000 1.000000 1.000000
+vn -0.586031 -0.580101 -0.565730
+v 162.364227 -139.005005 22.147999 1.000000 1.000000 1.000000
+vn -0.412545 -0.596028 -0.688882
+v 162.042358 -138.324097 21.696598 1.000000 1.000000 1.000000
+vn -0.735014 -0.553268 -0.391981
+v 162.767197 -139.551987 22.263798 1.000000 1.000000 1.000000
+vn -0.633994 -0.773308 0.006899
+v 161.770691 -138.682693 22.883598 1.000000 1.000000 1.000000
+vn 0.002607 -0.271131 -0.962539
+v 161.671555 -137.743637 21.458599 1.000000 1.000000 1.000000
+vn -0.076861 -0.239296 -0.967900
+v 163.143143 -139.271530 21.793198 1.000000 1.000000 1.000000
+vn 0.327356 0.021781 -0.944650
+v 163.336273 -139.127792 21.788200 1.000000 1.000000 1.000000
+vn 0.288886 0.148899 -0.945714
+v 161.795151 -137.530151 21.453400 1.000000 1.000000 1.000000
+vn 0.306703 -0.103394 -0.946173
+v 164.176987 -141.335220 22.134197 1.000000 1.000000 1.000000
+vn 0.233969 -0.199237 -0.951611
+v 164.107468 -143.731003 22.481400 1.000000 1.000000 1.000000
+vn 0.171992 -0.258770 -0.950504
+v 163.551270 -145.217026 22.712597 1.000000 1.000000 1.000000
+vn 0.225570 0.212884 -0.950683
+v 160.444595 -136.877121 21.222198 1.000000 1.000000 1.000000
+vn 0.120296 0.287213 -0.950283
+v 158.237839 -136.719452 20.875000 1.000000 1.000000 1.000000
+vn -0.764384 -0.644704 -0.008562
+v 162.223892 -139.144547 23.000198 1.000000 1.000000 1.000000
+vn -0.606017 -0.656518 0.449141
+v 161.421783 -138.176178 23.605799 1.000000 1.000000 1.000000
+vn -0.725265 -0.614580 0.310293
+v 162.355209 -139.014771 23.824598 1.000000 1.000000 1.000000
+vn -0.467010 -0.778225 0.419843
+v 160.857880 -137.849670 23.490597 1.000000 1.000000 1.000000
+vn -0.501808 -0.464970 0.729377
+v 161.546677 -137.959900 23.953398 1.000000 1.000000 1.000000
+vn -0.302820 -0.609177 0.732942
+v 160.315842 -137.365494 23.721998 1.000000 1.000000 1.000000
+vn -0.351264 -0.821074 0.449945
+v 160.251465 -137.611069 23.374397 1.000000 1.000000 1.000000
+vn -0.168862 -0.923009 0.345746
+v 159.618027 -137.468750 23.257999 1.000000 1.000000 1.000000
+vn -0.100478 -0.923668 0.369786
+v 158.979446 -137.422699 23.142597 1.000000 1.000000 1.000000
+vn 0.074168 -0.900683 0.428100
+v 158.340851 -137.474335 23.027199 1.000000 1.000000 1.000000
+vn -0.267317 -0.106410 0.957715
+v 161.677994 -137.733856 24.107998 1.000000 1.000000 1.000000
+vn -0.212081 -0.174430 0.961559
+v 160.384079 -137.108749 23.876598 1.000000 1.000000 1.000000
+vn -0.800397 -0.411419 0.436003
+v 162.755615 -139.560349 23.940399 1.000000 1.000000 1.000000
+vn -0.310607 0.200160 0.929225
+v 156.163712 -137.539902 23.179798 1.000000 1.000000 1.000000
+vn 0.475782 0.484604 -0.734024
+v 161.926468 -137.304092 21.604597 1.000000 1.000000 1.000000
+vn 0.311078 0.598195 -0.738508
+v 160.511536 -136.620392 21.373199 1.000000 1.000000 1.000000
+vn 0.526374 0.346685 -0.776363
+v 163.054321 -138.317108 21.823399 1.000000 1.000000 1.000000
+vn 0.568912 0.701976 -0.428449
+v 162.052643 -137.086426 21.948997 1.000000 1.000000 1.000000
+vn 0.438306 0.750325 -0.494873
+v 161.340683 -136.674805 21.833797 1.000000 1.000000 1.000000
+vn 0.178950 0.581801 -0.793401
+v 159.746780 -136.447372 21.256798 1.000000 1.000000 1.000000
+vn 0.026785 0.664567 -0.746748
+v 158.201797 -136.455734 21.025997 1.000000 1.000000 1.000000
+vn 0.065428 0.863564 -0.499977
+v 158.972992 -136.136200 21.485798 1.000000 1.000000 1.000000
+vn 0.194288 0.860935 -0.470153
+v 159.778961 -136.193420 21.601200 1.000000 1.000000 1.000000
+vn -0.096323 0.599289 -0.794717
+v 157.449905 -136.635742 20.911400 1.000000 1.000000 1.000000
+vn -0.072865 0.878970 -0.471277
+v 158.167038 -136.201782 21.370598 1.000000 1.000000 1.000000
+vn -0.204643 0.857895 -0.471314
+v 157.382950 -136.388763 21.255798 1.000000 1.000000 1.000000
+vn -0.268187 0.612781 -0.743354
+v 156.040115 -137.330612 20.680000 1.000000 1.000000 1.000000
+vn -0.017601 0.306254 -0.951787
+v 156.172729 -137.555252 20.528999 1.000000 1.000000 1.000000
+vn -0.321189 0.805511 -0.497986
+v 156.622055 -136.697128 21.139599 1.000000 1.000000 1.000000
+vn -0.412927 0.892821 -0.179895
+v 156.566696 -136.565964 21.532799 1.000000 1.000000 1.000000
+vn -0.275398 0.944215 -0.180594
+v 157.345627 -136.250626 21.648998 1.000000 1.000000 1.000000
+vn -0.129403 0.974852 -0.181435
+v 158.147720 -136.059464 21.763599 1.000000 1.000000 1.000000
+vn -0.455555 0.876573 0.155207
+v 156.561539 -136.553406 22.348198 1.000000 1.000000 1.000000
+vn -0.176535 0.971646 0.157287
+v 158.146439 -136.045502 22.579197 1.000000 1.000000 1.000000
+vn -0.320784 0.933982 0.157399
+v 157.341766 -136.238068 22.464397 1.000000 1.000000 1.000000
+vn -0.538809 0.823396 -0.178057
+v 155.841843 -136.992935 21.417599 1.000000 1.000000 1.000000
+vn -0.449559 0.762666 -0.465014
+v 155.912659 -137.114334 21.024399 1.000000 1.000000 1.000000
+vn -0.652992 0.736311 -0.177335
+v 155.174927 -137.528748 21.301800 1.000000 1.000000 1.000000
+vn -0.578318 0.801078 0.154349
+v 155.834122 -136.981766 22.233200 1.000000 1.000000 1.000000
+vn -0.564863 0.678370 -0.469834
+v 155.262482 -137.638977 20.908600 1.000000 1.000000 1.000000
+vn -0.688125 0.709453 0.152188
+v 155.167206 -137.518982 22.117199 1.000000 1.000000 1.000000
+vn -0.778462 0.609357 0.150603
+v 154.573669 -138.158035 22.000599 1.000000 1.000000 1.000000
+vn -0.749245 0.626778 -0.213967
+v 154.582687 -138.166412 21.185200 1.000000 1.000000 1.000000
+vn -0.650661 0.607661 0.455399
+v 155.265060 -137.643173 22.585598 1.000000 1.000000 1.000000
+vn -0.549770 0.677388 0.488772
+v 155.916519 -137.119919 22.701397 1.000000 1.000000 1.000000
+vn -0.737955 0.496620 0.456937
+v 154.686981 -138.265488 22.468998 1.000000 1.000000 1.000000
+vn -0.850267 0.500231 0.163754
+v 154.125626 -138.787338 21.898399 1.000000 1.000000 1.000000
+vn -0.726325 0.541884 -0.422864
+v 154.246658 -138.876633 20.689800 1.000000 1.000000 1.000000
+vn -0.884364 0.434608 -0.170341
+v 153.722656 -139.568726 20.967800 1.000000 1.000000 1.000000
+vn -0.830223 0.325405 0.452594
+v 153.847534 -139.635696 22.251598 1.000000 1.000000 1.000000
+vn -0.909367 0.388379 0.149044
+v 153.711060 -139.563141 21.783199 1.000000 1.000000 1.000000
+vn -0.572136 0.318407 0.755829
+v 154.865936 -138.434311 22.806599 1.000000 1.000000 1.000000
+vn -0.648864 0.190603 0.736645
+v 154.059982 -139.747330 22.589397 1.000000 1.000000 1.000000
+vn -0.859581 0.190243 0.474266
+v 153.544983 -140.451965 22.135399 1.000000 1.000000 1.000000
+vn -0.953245 0.263478 0.147994
+v 153.400787 -140.401733 21.667000 1.000000 1.000000 1.000000
+vn -0.938040 0.301866 -0.170173
+v 153.412369 -140.405930 20.851597 1.000000 1.000000 1.000000
+vn -0.770938 0.415967 -0.482314
+v 153.842377 -139.632904 20.574600 1.000000 1.000000 1.000000
+vn -0.838159 0.310226 -0.448608
+v 153.538544 -140.450577 20.458397 1.000000 1.000000 1.000000
+vn -0.969760 0.175128 -0.169990
+v 153.214096 -141.283585 20.735197 1.000000 1.000000 1.000000
+vn -0.979725 0.135990 0.147127
+v 153.201218 -141.282196 21.550598 1.000000 1.000000 1.000000
+vn -0.892492 0.083117 0.443340
+v 153.350571 -141.310104 22.018997 1.000000 1.000000 1.000000
+vn -0.649391 -0.011449 0.760369
+v 153.584885 -141.353363 22.356598 1.000000 1.000000 1.000000
+vn -0.880406 -0.037949 0.472699
+v 153.270737 -142.179398 21.903599 1.000000 1.000000 1.000000
+vn -0.984458 0.048062 -0.168915
+v 153.132980 -142.175201 20.619797 1.000000 1.000000 1.000000
+vn -0.989197 0.007409 0.146407
+v 153.120117 -142.175201 21.435200 1.000000 1.000000 1.000000
+vn -0.872389 0.197021 -0.447348
+v 153.345428 -141.308716 20.341999 1.000000 1.000000 1.000000
+vn -0.876037 0.085461 -0.474611
+v 153.265594 -142.179398 20.226597 1.000000 1.000000 1.000000
+vn -0.982477 -0.080125 -0.168285
+v 153.166458 -143.069626 20.504398 1.000000 1.000000 1.000000
+vn -0.981701 -0.120643 0.147340
+v 153.153580 -143.071014 21.320000 1.000000 1.000000 1.000000
+vn -0.963234 -0.208551 -0.169374
+v 153.317093 -143.951462 20.388798 1.000000 1.000000 1.000000
+vn -0.957195 -0.248879 0.147774
+v 153.304214 -143.955658 21.204399 1.000000 1.000000 1.000000
+vn -0.895505 -0.034944 -0.443678
+v 153.297775 -143.054276 20.111397 1.000000 1.000000 1.000000
+vn -0.689247 0.046614 -0.723026
+v 153.533386 -143.024963 19.766800 1.000000 1.000000 1.000000
+vn -0.882480 -0.151430 -0.445306
+v 153.445847 -143.916580 19.995800 1.000000 1.000000 1.000000
+vn -0.626188 -0.063868 -0.777052
+v 153.675018 -143.851013 19.651199 1.000000 1.000000 1.000000
+vn -0.297229 0.122262 -0.946946
+v 153.779297 -142.995667 19.615799 1.000000 1.000000 1.000000
+vn -0.218601 0.213161 -0.952248
+v 153.999451 -140.611038 19.962997 1.000000 1.000000 1.000000
+vn 0.144019 0.253505 -0.956553
+v 154.683105 -145.136108 19.273998 1.000000 1.000000 1.000000
+vn -0.600599 0.178993 -0.779258
+v 153.579742 -141.351959 19.997597 1.000000 1.000000 1.000000
+vn -0.619402 0.300315 -0.725364
+v 153.765137 -140.528717 20.113998 1.000000 1.000000 1.000000
+vn -0.153155 0.269381 -0.950777
+v 154.647064 -139.169662 20.194199 1.000000 1.000000 1.000000
+vn -0.504992 0.455787 -0.732967
+v 154.442352 -139.020370 20.345398 1.000000 1.000000 1.000000
+vn -0.364025 0.502255 -0.784364
+v 155.416977 -137.832932 20.563999 1.000000 1.000000 1.000000
+vn -0.021531 0.245633 -0.969124
+v 156.047852 -146.760269 18.940998 1.000000 1.000000 1.000000
+vn -0.024729 0.374093 -0.927061
+v 157.295410 -147.478867 18.709797 1.000000 1.000000 1.000000
+vn 0.449443 0.573248 -0.685119
+v 155.722107 -146.163071 19.177200 1.000000 1.000000 1.000000
+vn -0.070768 0.148644 -0.986355
+v 158.683319 -147.791428 18.477997 1.000000 1.000000 1.000000
+vn -0.387749 0.419846 -0.820597
+v 161.240250 -146.968185 18.165798 1.000000 1.000000 1.000000
+vn -0.222307 0.602646 -0.766419
+v 159.377274 -147.550034 18.497597 1.000000 1.000000 1.000000
+vn -0.716736 0.494877 -0.491311
+v 162.489105 -145.942612 17.907200 1.000000 1.000000 1.000000
+vn 0.472069 0.743341 -0.473915
+v 156.315643 -146.359818 19.411598 1.000000 1.000000 1.000000
+vn 0.530003 0.419398 -0.737023
+v 154.871078 -145.014709 19.409798 1.000000 1.000000 1.000000
+vn 0.680881 0.610495 -0.404595
+v 155.442734 -145.458435 19.628597 1.000000 1.000000 1.000000
+vn 0.203620 0.803787 -0.558986
+v 157.451187 -147.012833 19.180399 1.000000 1.000000 1.000000
+vn -0.027445 0.880995 -0.472328
+v 158.711639 -147.297485 18.948595 1.000000 1.000000 1.000000
+vn 0.304745 0.923970 -0.231107
+v 157.498840 -146.871902 19.577797 1.000000 1.000000 1.000000
+vn 0.039560 0.972113 -0.231151
+v 158.720657 -147.146790 19.345997 1.000000 1.000000 1.000000
+vn -0.298145 0.851109 -0.432114
+v 159.937317 -147.203995 18.727398 1.000000 1.000000 1.000000
+vn -0.255062 0.934962 -0.246556
+v 159.908997 -147.056091 19.124798 1.000000 1.000000 1.000000
+vn -0.488663 0.726660 -0.482881
+v 161.129532 -146.740738 18.500599 1.000000 1.000000 1.000000
+vn -0.504673 0.841297 -0.193715
+v 161.065155 -146.606781 18.897999 1.000000 1.000000 1.000000
+vn -0.333587 0.942239 0.030091
+v 160.487076 -146.821671 19.465199 1.000000 1.000000 1.000000
+vn -0.123866 0.992281 0.005888
+v 159.345078 -147.088181 19.684599 1.000000 1.000000 1.000000
+vn -0.651289 0.758824 -0.003087
+v 161.730774 -146.068192 19.202599 1.000000 1.000000 1.000000
+vn -0.612968 0.746700 -0.258284
+v 161.762970 -146.112839 18.747799 1.000000 1.000000 1.000000
+vn -0.455260 0.872351 0.178165
+v 161.062576 -146.601212 19.783398 1.000000 1.000000 1.000000
+vn -0.634504 0.648792 -0.420088
+v 161.849228 -146.230057 18.350197 1.000000 1.000000 1.000000
+vn -0.784099 0.619614 -0.035600
+v 162.178833 -145.623077 19.094200 1.000000 1.000000 1.000000
+vn -0.684663 0.496963 -0.533165
+v 162.316589 -145.765411 18.241997 1.000000 1.000000 1.000000
+vn -0.832002 0.507907 -0.223167
+v 162.604980 -145.150055 18.533600 1.000000 1.000000 1.000000
+vn -0.897111 0.434460 0.080225
+v 162.879211 -144.565414 18.885399 1.000000 1.000000 1.000000
+vn -0.526859 0.742819 0.413085
+v 161.841507 -146.218887 20.026798 1.000000 1.000000 1.000000
+vn -0.544905 0.802557 0.242860
+v 161.759109 -146.107254 19.633198 1.000000 1.000000 1.000000
+vn -0.952321 0.305031 -0.006370
+v 163.122543 -143.964035 18.783199 1.000000 1.000000 1.000000
+vn -0.718839 0.561785 0.409473
+v 162.707977 -145.229599 19.812798 1.000000 1.000000 1.000000
+vn -0.576987 0.636679 0.511592
+v 162.307571 -145.754242 19.918598 1.000000 1.000000 1.000000
+vn -0.571983 0.569311 0.590525
+v 162.477524 -145.931442 20.266197 1.000000 1.000000 1.000000
+vn -0.567315 0.402821 0.718254
+v 163.243576 -144.773315 20.057400 1.000000 1.000000 1.000000
+vn -0.775353 0.456832 0.436043
+v 163.034988 -144.654709 19.709599 1.000000 1.000000 1.000000
+vn -0.658415 0.228410 0.717160
+v 163.694183 -143.410080 19.853201 1.000000 1.000000 1.000000
+vn -0.844581 0.355867 0.400052
+v 163.288635 -144.028214 19.607597 1.000000 1.000000 1.000000
+vn -0.984519 0.169071 0.046243
+v 163.289917 -143.319382 18.681198 1.000000 1.000000 1.000000
+vn -0.887409 0.222042 0.403983
+v 163.462448 -143.358444 19.505600 1.000000 1.000000 1.000000
+vn -0.698576 0.040862 0.714368
+v 163.781738 -141.992416 19.660397 1.000000 1.000000 1.000000
+vn -0.909485 0.125122 0.396462
+v 163.547424 -142.683121 19.407597 1.000000 1.000000 1.000000
+vn -0.996620 -0.061532 0.054426
+v 163.369751 -142.023117 18.488400 1.000000 1.000000 1.000000
+vn -0.968579 -0.075582 -0.236942
+v 163.421249 -142.018921 18.033600 1.000000 1.000000 1.000000
+vn -0.967555 0.135047 -0.213541
+v 163.340134 -143.330551 18.226398 1.000000 1.000000 1.000000
+vn -0.948481 -0.315236 -0.031795
+v 163.117401 -140.739410 18.301598 1.000000 1.000000 1.000000
+vn -0.842801 0.012854 -0.538072
+v 163.475311 -143.361252 17.828999 1.000000 1.000000 1.000000
+vn -0.882988 -0.091022 -0.460485
+v 163.560287 -142.009171 17.635998 1.000000 1.000000 1.000000
+vn -0.806282 0.345375 -0.480235
+v 163.047867 -144.660309 18.032997 1.000000 1.000000 1.000000
+vn -0.672284 0.366467 -0.643223
+v 162.911407 -145.388657 17.801399 1.000000 1.000000 1.000000
+vn -0.292444 0.009097 -0.956240
+v 163.452148 -144.891922 17.562399 1.000000 1.000000 1.000000
+vn -0.553923 -0.617012 -0.558986
+v 163.708359 -143.414261 17.494198 1.000000 1.000000 1.000000
+vn -0.242933 -0.115492 -0.963143
+v 164.016052 -141.974274 17.165398 1.000000 1.000000 1.000000
+vn -0.670532 -0.135423 -0.729415
+v 163.797195 -141.991028 17.301399 1.000000 1.000000 1.000000
+vn -0.718341 -0.354500 -0.598595
+v 163.520386 -140.581741 17.114397 1.000000 1.000000 1.000000
+vn -0.880691 -0.232836 -0.412517
+v 163.472748 -141.333817 17.542198 1.000000 1.000000 1.000000
+vn -0.798543 -0.398412 -0.451216
+v 163.180496 -140.355682 17.404400 1.000000 1.000000 1.000000
+vn -0.901170 -0.354885 -0.248895
+v 163.053024 -140.417099 17.801998 1.000000 1.000000 1.000000
+vn -0.853135 -0.521528 0.013020
+v 162.724716 -139.860352 18.167797 1.000000 1.000000 1.000000
+vn -0.913882 -0.018346 0.405565
+v 163.546127 -142.009171 19.312599 1.000000 1.000000 1.000000
+vn -0.876001 -0.125248 0.465764
+v 163.459869 -141.336609 19.218800 1.000000 1.000000 1.000000
+vn -0.931466 -0.278309 0.234342
+v 163.047867 -140.418488 18.687399 1.000000 1.000000 1.000000
+vn -0.678754 -0.153829 0.718074
+v 163.383911 -140.258011 19.428799 1.000000 1.000000 1.000000
+vn -0.866531 -0.245531 0.434555
+v 163.167618 -140.361282 19.080997 1.000000 1.000000 1.000000
+vn -0.817857 -0.510956 0.264640
+v 162.413147 -139.303604 18.511997 1.000000 1.000000 1.000000
+vn -0.594245 -0.348356 0.724928
+v 162.695099 -139.049667 19.253399 1.000000 1.000000 1.000000
+vn -0.344781 0.813256 0.468764
+v 161.123093 -146.726791 20.176998 1.000000 1.000000 1.000000
+vn -0.017515 0.662318 0.749018
+v 159.982391 -147.439804 20.751598 1.000000 1.000000 1.000000
+vn -0.096132 0.878325 0.468298
+v 159.934738 -147.190033 20.403999 1.000000 1.000000 1.000000
+vn 0.168740 0.648362 0.742397
+v 158.697479 -147.538864 20.972797 1.000000 1.000000 1.000000
+vn 0.123111 0.881416 0.456014
+v 158.712936 -147.283524 20.625198 1.000000 1.000000 1.000000
+vn 0.280088 0.860838 0.424862
+v 158.078201 -147.190033 20.740398 1.000000 1.000000 1.000000
+vn 0.361213 0.577467 0.732159
+v 157.375229 -147.240280 21.204597 1.000000 1.000000 1.000000
+vn 0.092952 0.995519 0.017363
+v 158.724518 -147.092361 19.800800 1.000000 1.000000 1.000000
+vn 0.391873 0.816341 0.424291
+v 157.455048 -146.998871 20.856998 1.000000 1.000000 1.000000
+vn 0.527470 0.741563 0.414558
+v 156.865387 -146.715622 20.973198 1.000000 1.000000 1.000000
+vn 0.533859 0.430849 0.727574
+v 156.185593 -146.555161 21.435999 1.000000 1.000000 1.000000
+vn 0.343582 0.937836 0.049142
+v 157.515579 -146.818878 20.032597 1.000000 1.000000 1.000000
+vn 0.650598 0.613600 0.447457
+v 156.324646 -146.348648 21.088200 1.000000 1.000000 1.000000
+vn 0.510288 0.859365 0.033145
+v 156.949081 -146.546783 20.148800 1.000000 1.000000 1.000000
+vn 0.764768 0.564622 0.310372
+v 155.454300 -145.450058 21.305199 1.000000 1.000000 1.000000
+vn 0.680563 0.731553 -0.040784
+v 156.015656 -145.822617 20.364397 1.000000 1.000000 1.000000
+vn 0.558436 0.794514 -0.238530
+v 156.398041 -146.238419 19.809200 1.000000 1.000000 1.000000
+vn 0.749567 0.466033 -0.470067
+v 155.075790 -144.883545 19.744598 1.000000 1.000000 1.000000
+vn -0.883532 -0.150291 0.443604
+v 153.304214 -143.052872 21.788200 1.000000 1.000000 1.000000
+vn -0.514926 0.389024 0.763879
+v 155.419556 -137.838516 22.923199 1.000000 1.000000 1.000000
+vn -0.189836 0.263979 0.945662
+v 158.235275 -136.701309 23.525799 1.000000 1.000000 1.000000
+vn -0.369643 0.514500 0.773727
+v 156.722473 -136.937119 23.154400 1.000000 1.000000 1.000000
+vn -0.448461 0.764482 0.463088
+v 156.623352 -136.702713 22.816595 1.000000 1.000000 1.000000
+vn -0.211015 0.632088 0.745612
+v 158.203079 -136.461319 23.385197 1.000000 1.000000 1.000000
+vn -0.329618 0.804079 0.494782
+v 157.385529 -136.395737 22.932800 1.000000 1.000000 1.000000
+vn -0.045808 0.351920 0.934909
+v 160.448456 -136.860382 23.872799 1.000000 1.000000 1.000000
+vn -0.032323 0.623677 0.781014
+v 159.745483 -136.454330 23.615799 1.000000 1.000000 1.000000
+vn -0.203837 0.860261 0.467335
+v 158.168320 -136.207367 23.047398 1.000000 1.000000 1.000000
+vn -0.073981 0.864041 0.497955
+v 158.972992 -136.141785 23.162800 1.000000 1.000000 1.000000
+vn -0.026804 0.987197 0.157236
+v 158.971710 -135.978531 22.694395 1.000000 1.000000 1.000000
+vn 0.063624 0.880462 0.469828
+v 159.777664 -136.198990 23.278198 1.000000 1.000000 1.000000
+vn 0.122216 0.979984 0.157145
+v 159.798264 -136.037140 22.809799 1.000000 1.000000 1.000000
+vn 0.019974 0.983229 -0.181280
+v 158.971710 -135.992477 21.878998 1.000000 1.000000 1.000000
+vn 0.168025 0.969049 -0.180861
+v 159.796982 -136.051086 21.994400 1.000000 1.000000 1.000000
+vn 0.321564 0.823238 -0.467841
+v 160.575912 -136.373413 21.717598 1.000000 1.000000 1.000000
+vn 0.312441 0.932640 -0.180451
+v 160.613251 -136.235275 22.110798 1.000000 1.000000 1.000000
+vn 0.459473 0.870363 -0.177069
+v 161.394745 -136.542252 22.226997 1.000000 1.000000 1.000000
+vn 0.409580 0.898592 0.157406
+v 161.399902 -136.529694 23.042400 1.000000 1.000000 1.000000
+vn 0.269520 0.949942 0.158014
+v 160.617111 -136.221313 22.926197 1.000000 1.000000 1.000000
+vn 0.188246 0.845677 0.499393
+v 160.574631 -136.380386 23.394600 1.000000 1.000000 1.000000
+vn 0.337919 0.813482 0.473347
+v 161.338104 -136.680389 23.510799 1.000000 1.000000 1.000000
+vn 0.530504 0.830433 0.170138
+v 162.129898 -136.952469 23.157597 1.000000 1.000000 1.000000
+vn 0.193261 0.626014 0.755485
+v 161.242828 -136.914795 23.848598 1.000000 1.000000 1.000000
+vn 0.521617 0.714051 0.466956
+v 162.629440 -137.542694 23.728201 1.000000 1.000000 1.000000
+vn 0.658885 0.721305 -0.213516
+v 162.718277 -137.426880 22.444395 1.000000 1.000000 1.000000
+vn 0.641504 0.751458 0.154220
+v 162.725998 -137.415726 23.259800 1.000000 1.000000 1.000000
+vn 0.611940 0.589807 0.526931
+v 163.224258 -138.148285 23.844801 1.000000 1.000000 1.000000
+vn 0.738861 0.656389 0.152437
+v 163.334976 -138.036652 23.376400 1.000000 1.000000 1.000000
+vn 0.342992 0.541572 0.767500
+v 162.480087 -137.740845 24.065798 1.000000 1.000000 1.000000
+vn 0.670782 0.527323 0.521520
+v 163.728943 -138.834778 23.960598 1.000000 1.000000 1.000000
+vn 0.823323 0.547052 0.151243
+v 163.853836 -138.741287 23.492397 1.000000 1.000000 1.000000
+vn 0.268832 0.355770 0.895074
+v 163.349152 -139.118042 24.438999 1.000000 1.000000 1.000000
+vn 0.059255 0.339893 0.938595
+v 161.804169 -137.513397 24.104198 1.000000 1.000000 1.000000
+vn 0.533004 0.357816 0.766729
+v 163.925934 -139.701279 24.413601 1.000000 1.000000 1.000000
+vn 0.785425 0.426155 0.448888
+v 164.137085 -139.586868 24.075798 1.000000 1.000000 1.000000
+vn 0.890009 0.430602 0.149887
+v 164.273560 -139.514313 23.607397 1.000000 1.000000 1.000000
+vn 0.272847 0.182285 0.944630
+v 164.193726 -141.332428 24.784998 1.000000 1.000000 1.000000
+vn 0.654971 0.210379 0.725778
+v 164.413895 -141.289169 24.644398 1.000000 1.000000 1.000000
+vn 0.819861 0.316801 0.476933
+v 164.447357 -140.401733 24.191998 1.000000 1.000000 1.000000
+vn 0.939345 0.309128 0.148564
+v 164.591553 -140.348709 23.723598 1.000000 1.000000 1.000000
+vn 0.371752 0.054554 0.926728
+v 164.124207 -143.735199 25.131998 1.000000 1.000000 1.000000
+vn 0.364399 -0.040843 0.930347
+v 163.566727 -145.226807 25.363398 1.000000 1.000000 1.000000
+vn 0.764255 0.621063 -0.173766
+v 163.325974 -138.046417 22.560999 1.000000 1.000000 1.000000
+vn 0.704787 0.538372 -0.461986
+v 163.228119 -138.144089 22.167797 1.000000 1.000000 1.000000
+vn 0.636446 0.261465 -0.725653
+v 163.538406 -138.977097 21.939198 1.000000 1.000000 1.000000
+vn 0.783803 0.426831 -0.451074
+v 163.734100 -138.830597 22.283600 1.000000 1.000000 1.000000
+vn 0.843232 0.509339 -0.171852
+v 163.843536 -138.749664 22.676800 1.000000 1.000000 1.000000
+vn 0.822474 0.308283 -0.478014
+v 164.142227 -139.584076 22.398800 1.000000 1.000000 1.000000
+vn 0.904262 0.391121 -0.171274
+v 164.261963 -139.519882 22.792000 1.000000 1.000000 1.000000
+vn -0.459515 0.495236 0.737284
+v 156.101913 -137.295731 38.495537 1.000000 1.000000 1.000000
+vn -0.556048 0.325095 0.764934
+v 154.918732 -138.370132 38.264740 1.000000 1.000000 1.000000
+vn -0.193380 0.304463 0.932688
+v 158.307373 -136.691544 38.983337 1.000000 1.000000 1.000000
+vn -0.297949 0.556543 0.775556
+v 157.514282 -136.621780 38.726341 1.000000 1.000000 1.000000
+vn -0.652250 0.091244 0.752492
+v 153.766418 -140.546844 37.917137 1.000000 1.000000 1.000000
+vn -0.769527 0.378294 0.514512
+v 154.246658 -138.886414 37.811939 1.000000 1.000000 1.000000
+vn -0.800384 0.301572 0.518111
+v 153.842377 -139.648254 37.695938 1.000000 1.000000 1.000000
+vn -0.874468 0.180247 0.450351
+v 153.539825 -140.468719 37.579338 1.000000 1.000000 1.000000
+vn -0.674285 -0.063491 0.735737
+v 153.510223 -142.098465 37.699738 1.000000 1.000000 1.000000
+vn -0.893613 -0.007808 0.448770
+v 153.273331 -142.087311 37.361938 1.000000 1.000000 1.000000
+vn -0.868744 -0.141195 0.474708
+v 153.296494 -142.967758 37.245941 1.000000 1.000000 1.000000
+vn -0.976624 0.142624 0.160822
+v 153.216660 -141.190109 37.008938 1.000000 1.000000 1.000000
+vn -0.988961 0.020932 0.146690
+v 153.122681 -142.080322 36.893738 1.000000 1.000000 1.000000
+vn -0.982984 -0.108571 0.148171
+v 153.144562 -142.983109 36.777538 1.000000 1.000000 1.000000
+vn -0.983350 0.071691 -0.166983
+v 153.135559 -142.080322 36.078140 1.000000 1.000000 1.000000
+vn -0.983194 -0.067979 -0.169439
+v 153.157440 -142.981705 35.961937 1.000000 1.000000 1.000000
+vn -0.952843 0.265335 0.147267
+v 153.395630 -140.418488 37.111137 1.000000 1.000000 1.000000
+vn -0.933363 0.292025 -0.208698
+v 153.408508 -140.422668 36.295540 1.000000 1.000000 1.000000
+vn -0.910296 0.386343 0.148662
+v 153.705917 -139.575699 37.227737 1.000000 1.000000 1.000000
+vn -0.889898 0.422409 -0.172197
+v 153.717499 -139.582687 36.412140 1.000000 1.000000 1.000000
+vn -0.791664 0.405048 -0.457389
+v 153.837234 -139.645477 36.019138 1.000000 1.000000 1.000000
+vn -0.882939 0.224017 -0.412596
+v 153.359573 -141.219406 35.800339 1.000000 1.000000 1.000000
+vn -0.874693 0.096680 -0.474938
+v 153.268173 -142.087311 35.685139 1.000000 1.000000 1.000000
+vn -0.650001 0.228846 -0.724657
+v 153.592606 -141.265442 35.455799 1.000000 1.000000 1.000000
+vn -0.541081 0.322258 -0.776776
+v 154.049667 -139.757095 35.674538 1.000000 1.000000 1.000000
+vn -0.722751 0.520519 -0.454632
+v 154.241516 -138.883621 36.134941 1.000000 1.000000 1.000000
+vn -0.502229 0.457145 -0.734019
+v 154.438492 -139.025940 35.790337 1.000000 1.000000 1.000000
+vn -0.145605 0.272748 -0.951004
+v 154.641907 -139.175247 35.639336 1.000000 1.000000 1.000000
+vn -0.252537 0.190712 -0.948606
+v 153.835953 -141.314285 35.304798 1.000000 1.000000 1.000000
+vn -0.692568 0.047029 -0.719818
+v 153.525665 -142.942642 35.224396 1.000000 1.000000 1.000000
+vn -0.012905 0.305547 -0.952089
+v 156.229370 -137.517578 35.985336 1.000000 1.000000 1.000000
+vn -0.290034 0.116217 -0.949934
+v 153.771576 -142.916138 35.073399 1.000000 1.000000 1.000000
+vn 0.148621 0.252268 -0.956176
+v 154.648346 -145.071930 34.731400 1.000000 1.000000 1.000000
+vn -0.626425 -0.056229 -0.777451
+v 153.658279 -143.777054 35.107998 1.000000 1.000000 1.000000
+vn -0.844055 -0.245055 -0.476989
+v 153.675018 -144.671463 35.337196 1.000000 1.000000 1.000000
+vn -0.014049 0.249191 -0.968352
+v 156.056854 -146.768646 34.385399 1.000000 1.000000 1.000000
+vn -0.100533 0.254436 -0.961850
+v 157.915970 -147.674225 34.050598 1.000000 1.000000 1.000000
+vn -0.177546 0.214387 -0.960477
+v 159.325775 -147.792816 33.819397 1.000000 1.000000 1.000000
+vn -0.263745 0.144305 -0.953737
+v 161.358704 -147.169113 33.472198 1.000000 1.000000 1.000000
+vn -0.072174 0.667628 -0.740988
+v 158.630524 -147.550034 34.071396 1.000000 1.000000 1.000000
+vn -0.304119 0.684454 -0.662597
+v 159.987534 -147.455154 33.838799 1.000000 1.000000 1.000000
+vn 0.111732 0.869869 -0.480462
+v 158.015121 -147.190033 34.521198 1.000000 1.000000 1.000000
+vn -0.125409 0.875494 -0.466671
+v 159.296158 -147.297485 34.290001 1.000000 1.000000 1.000000
+vn 0.174015 0.695979 -0.696658
+v 157.388107 -147.262604 34.288799 1.000000 1.000000 1.000000
+vn 0.502356 0.765710 -0.401654
+v 156.324646 -146.366791 34.855999 1.000000 1.000000 1.000000
+vn 0.348154 0.740987 -0.574218
+v 156.873123 -146.736557 34.739998 1.000000 1.000000 1.000000
+vn 0.461683 0.577615 -0.673209
+v 155.668030 -146.105865 34.636398 1.000000 1.000000 1.000000
+vn 0.536196 0.412840 -0.736245
+v 154.837616 -144.954712 34.867199 1.000000 1.000000 1.000000
+vn 0.679264 0.594736 -0.429988
+v 155.400238 -145.399826 35.087399 1.000000 1.000000 1.000000
+vn 0.755246 0.456407 -0.470421
+v 155.043610 -144.824951 35.201996 1.000000 1.000000 1.000000
+vn 0.782473 0.555905 -0.280545
+v 155.510971 -145.307739 35.484798 1.000000 1.000000 1.000000
+vn 0.705807 0.706600 0.050524
+v 155.965439 -145.772385 35.823338 1.000000 1.000000 1.000000
+vn 0.500050 0.865954 -0.008613
+v 156.961960 -146.553757 35.592400 1.000000 1.000000 1.000000
+vn 0.855555 0.465532 -0.226508
+v 155.164627 -144.750992 35.599396 1.000000 1.000000 1.000000
+vn 0.325306 0.945588 0.006362
+v 157.532303 -146.824463 35.475800 1.000000 1.000000 1.000000
+vn 0.617311 0.648957 0.444727
+v 156.333664 -146.355621 36.532539 1.000000 1.000000 1.000000
+vn 0.729668 0.598927 0.329956
+v 155.843124 -145.910522 36.647739 1.000000 1.000000 1.000000
+vn 0.187782 0.950820 -0.246331
+v 158.044724 -147.043533 34.918800 1.000000 1.000000 1.000000
+vn 0.098483 0.994594 0.032918
+v 158.664001 -147.088181 35.258400 1.000000 1.000000 1.000000
+vn 0.471799 0.822124 0.318620
+v 156.879547 -146.723999 36.416538 1.000000 1.000000 1.000000
+vn -0.067900 0.969948 -0.233648
+v 159.287140 -147.148178 34.687401 1.000000 1.000000 1.000000
+vn -0.077564 0.996974 0.005234
+v 159.283279 -147.092361 35.142197 1.000000 1.000000 1.000000
+vn 0.339233 0.821461 0.458392
+v 158.017685 -147.176086 36.197739 1.000000 1.000000 1.000000
+vn 0.308158 0.599982 0.738282
+v 157.966187 -147.425842 36.545540 1.000000 1.000000 1.000000
+vn 0.160070 0.890093 0.426745
+v 158.649841 -147.279343 36.082718 1.000000 1.000000 1.000000
+vn 0.064622 0.671944 0.737778
+v 159.310318 -147.538864 36.314117 1.000000 1.000000 1.000000
+vn 0.033331 0.890023 0.454695
+v 159.294861 -147.283524 35.966518 1.000000 1.000000 1.000000
+vn -0.242504 0.970094 0.010422
+v 159.899979 -147.000275 35.025799 1.000000 1.000000 1.000000
+vn -0.176295 0.922279 0.343980
+v 159.936035 -147.188644 35.849918 1.000000 1.000000 1.000000
+vn -0.240128 0.898126 0.368387
+v 160.552734 -146.998871 35.734718 1.000000 1.000000 1.000000
+vn -0.483911 0.873716 0.049499
+v 161.054855 -146.549576 34.794998 1.000000 1.000000 1.000000
+vn -0.226085 0.644609 0.730318
+v 161.247971 -146.944458 35.966938 1.000000 1.000000 1.000000
+vn -0.392138 0.816480 0.423779
+v 161.138535 -146.718414 35.619316 1.000000 1.000000 1.000000
+vn -0.493720 0.837158 -0.235387
+v 161.079315 -146.598419 34.340199 1.000000 1.000000 1.000000
+vn -0.588132 0.756760 -0.285333
+v 161.604599 -146.242599 34.225601 1.000000 1.000000 1.000000
+vn -0.737840 0.673003 0.051570
+v 162.048782 -145.765411 34.564198 1.000000 1.000000 1.000000
+vn -0.530178 0.765081 0.365463
+v 161.677994 -146.352844 35.504601 1.000000 1.000000 1.000000
+vn -0.629338 0.701737 0.333913
+v 162.172379 -145.903549 35.388397 1.000000 1.000000 1.000000
+vn -0.485080 0.493485 0.721921
+v 162.785217 -145.544937 35.620918 1.000000 1.000000 1.000000
+vn -0.623475 0.650392 -0.433900
+v 161.685715 -146.364014 33.827999 1.000000 1.000000 1.000000
+vn -0.882335 0.470551 -0.008233
+v 162.803253 -144.713318 34.333199 1.000000 1.000000 1.000000
+vn -0.481561 0.731541 -0.482645
+v 161.143692 -146.730972 33.942799 1.000000 1.000000 1.000000
+vn -0.431487 0.511469 -0.743114
+v 161.255707 -146.959808 33.607998 1.000000 1.000000 1.000000
+vn -0.600785 0.440595 -0.667034
+v 162.346191 -146.098892 33.377197 1.000000 1.000000 1.000000
+vn -0.786625 0.478323 -0.390421
+v 162.610138 -145.395645 33.596798 1.000000 1.000000 1.000000
+vn -0.950253 0.311396 0.007140
+v 163.073624 -144.104950 34.216599 1.000000 1.000000 1.000000
+vn -0.677460 0.587311 0.442847
+v 162.598541 -145.387268 35.273399 1.000000 1.000000 1.000000
+vn -0.840407 0.447408 0.305846
+v 162.957748 -144.808197 35.157398 1.000000 1.000000 1.000000
+vn -0.954055 0.190727 -0.231087
+v 163.291214 -143.556595 33.659599 1.000000 1.000000 1.000000
+vn -0.992943 0.113990 0.032710
+v 163.354294 -142.888229 33.999199 1.000000 1.000000 1.000000
+vn -0.760702 0.333708 -0.556751
+v 162.969345 -144.815186 33.480797 1.000000 1.000000 1.000000
+vn -0.720183 0.179267 -0.670224
+v 163.471451 -144.276581 33.029598 1.000000 1.000000 1.000000
+vn -0.883491 0.126581 -0.451023
+v 163.426392 -143.594269 33.262001 1.000000 1.000000 1.000000
+vn -0.975626 -0.028463 -0.217585
+v 163.430267 -142.214279 33.428200 1.000000 1.000000 1.000000
+vn -0.999368 -0.035165 0.005164
+v 163.378754 -142.215668 33.882999 1.000000 1.000000 1.000000
+vn -0.837947 0.325521 0.438042
+v 163.413528 -143.590073 34.938599 1.000000 1.000000 1.000000
+vn -0.624320 0.298393 0.721932
+v 163.641403 -143.654266 35.286400 1.000000 1.000000 1.000000
+vn -0.900996 0.167827 0.400051
+v 163.529388 -142.909149 34.823601 1.000000 1.000000 1.000000
+vn -0.697734 0.080262 0.711846
+v 163.792038 -142.203110 35.055000 1.000000 1.000000 1.000000
+vn -0.192518 0.206551 0.959309
+v 163.879593 -143.721237 35.440796 1.000000 1.000000 1.000000
+vn -0.245869 0.134109 0.959981
+v 164.037949 -142.194733 35.209599 1.000000 1.000000 1.000000
+vn -0.921683 -0.179104 0.344125
+v 163.336273 -140.839874 34.475601 1.000000 1.000000 1.000000
+vn -0.939271 -0.125059 0.319579
+v 163.490768 -141.513824 34.590797 1.000000 1.000000 1.000000
+vn -0.902022 0.058995 0.427639
+v 163.556427 -142.210083 34.707397 1.000000 1.000000 1.000000
+vn -0.984231 -0.176653 0.009064
+v 163.315674 -141.545914 33.766598 1.000000 1.000000 1.000000
+vn -0.872678 -0.241057 -0.424647
+v 163.503647 -141.511032 32.914200 1.000000 1.000000 1.000000
+vn -0.895660 -0.080734 -0.437350
+v 163.569305 -142.210083 33.030800 1.000000 1.000000 1.000000
+vn -0.699662 -0.041600 -0.713262
+v 163.779160 -142.939850 32.812199 1.000000 1.000000 1.000000
+vn -0.306763 0.839909 -0.447716
+v 159.938599 -147.202606 34.173401 1.000000 1.000000 1.000000
+vn 0.788220 0.502134 0.355768
+v 155.411819 -145.390060 36.763741 1.000000 1.000000 1.000000
+vn -0.884284 -0.140118 -0.445430
+v 153.427811 -143.838440 35.452599 1.000000 1.000000 1.000000
+vn -0.895515 -0.023787 -0.444396
+v 153.290054 -142.967758 35.569000 1.000000 1.000000 1.000000
+vn -0.965760 -0.196477 -0.169425
+v 153.299072 -143.873337 35.845539 1.000000 1.000000 1.000000
+vn -0.259282 0.615669 -0.744127
+v 156.099350 -137.290146 36.136536 1.000000 1.000000 1.000000
+vn 0.114006 0.278450 -0.953660
+v 158.309937 -136.709686 36.332539 1.000000 1.000000 1.000000
+vn -0.342820 0.508505 -0.789871
+v 155.474915 -137.779907 36.021736 1.000000 1.000000 1.000000
+vn -0.087577 0.600035 -0.795166
+v 157.513000 -136.616211 36.367138 1.000000 1.000000 1.000000
+vn 0.027432 0.667939 -0.743710
+v 158.277756 -136.444580 36.483536 1.000000 1.000000 1.000000
+vn -0.192587 0.861123 -0.470507
+v 157.448624 -136.369232 36.711739 1.000000 1.000000 1.000000
+vn -0.310124 0.809761 -0.498107
+v 156.687714 -136.665039 36.596336 1.000000 1.000000 1.000000
+vn 0.078603 0.861589 -0.501484
+v 159.057968 -136.136200 36.944336 1.000000 1.000000 1.000000
+vn -0.060571 0.879606 -0.471831
+v 158.246857 -136.190628 36.828140 1.000000 1.000000 1.000000
+vn 0.230729 0.628780 -0.742563
+v 159.826599 -136.459915 36.714939 1.000000 1.000000 1.000000
+vn 0.224329 0.871035 -0.437007
+v 159.861359 -136.205963 37.059540 1.000000 1.000000 1.000000
+vn 0.338293 0.521121 -0.783575
+v 161.233810 -136.903641 36.933739 1.000000 1.000000 1.000000
+vn -0.116325 0.976248 -0.182781
+v 158.228836 -136.046906 37.221336 1.000000 1.000000 1.000000
+vn 0.047512 0.982489 -0.180161
+v 159.059265 -135.991089 37.337341 1.000000 1.000000 1.000000
+vn -0.262188 0.947848 -0.181223
+v 157.412567 -136.231094 37.104736 1.000000 1.000000 1.000000
+vn -0.308323 0.938326 0.156466
+v 157.408707 -136.217133 37.920338 1.000000 1.000000 1.000000
+vn -0.011600 0.987291 0.158501
+v 159.059265 -135.977142 38.152939 1.000000 1.000000 1.000000
+vn -0.162954 0.973937 0.157775
+v 158.227554 -136.032944 38.036739 1.000000 1.000000 1.000000
+vn 0.131293 0.976165 0.172813
+v 159.883240 -136.049683 38.268139 1.000000 1.000000 1.000000
+vn 0.300666 0.928232 -0.219057
+v 160.597794 -136.231094 37.554741 1.000000 1.000000 1.000000
+vn -0.192835 0.845426 0.498065
+v 158.246857 -136.196198 38.505138 1.000000 1.000000 1.000000
+vn -0.040279 0.877824 0.477287
+v 159.057968 -136.141785 38.621140 1.000000 1.000000 1.000000
+vn -0.319531 0.825272 0.465645
+v 157.449905 -136.374802 38.388538 1.000000 1.000000 1.000000
+vn -0.093382 0.647412 0.756397
+v 159.055405 -136.398529 38.958939 1.000000 1.000000 1.000000
+vn 0.174052 0.862101 0.475907
+v 160.559174 -136.376205 38.838539 1.000000 1.000000 1.000000
+vn 0.271163 0.949413 0.158387
+v 160.600372 -136.217133 38.370338 1.000000 1.000000 1.000000
+vn 0.321703 0.823741 0.466860
+v 161.326508 -136.674805 38.955139 1.000000 1.000000 1.000000
+vn 0.406711 0.899875 0.157513
+v 161.388306 -136.524109 38.486938 1.000000 1.000000 1.000000
+vn 0.070504 0.633575 0.770462
+v 160.496078 -136.623169 39.176338 1.000000 1.000000 1.000000
+vn 0.446280 0.876679 -0.179633
+v 161.383163 -136.536667 37.671341 1.000000 1.000000 1.000000
+vn 0.535716 0.829857 0.156033
+v 162.123459 -136.946899 38.602737 1.000000 1.000000 1.000000
+vn 0.164504 0.607903 0.776784
+v 161.231247 -136.909225 39.292938 1.000000 1.000000 1.000000
+vn 0.430329 0.755713 0.493674
+v 162.042358 -137.086426 39.071136 1.000000 1.000000 1.000000
+vn 0.063634 0.348031 0.935321
+v 161.799011 -137.509216 39.549339 1.000000 1.000000 1.000000
+vn -0.091641 0.335192 0.937683
+v 159.791840 -136.705505 39.214737 1.000000 1.000000 1.000000
+vn 0.345495 0.528612 0.775373
+v 162.541901 -137.796646 39.523941 1.000000 1.000000 1.000000
+vn 0.649691 0.744420 0.154079
+v 162.791672 -137.474335 38.717941 1.000000 1.000000 1.000000
+vn 0.550199 0.697049 0.459787
+v 162.693817 -137.599899 39.186138 1.000000 1.000000 1.000000
+vn 0.173636 0.268251 0.947571
+v 163.386475 -139.176636 39.895340 1.000000 1.000000 1.000000
+vn 0.516297 0.439670 0.734933
+v 163.573166 -139.041290 39.754738 1.000000 1.000000 1.000000
+vn 0.629893 0.605880 0.485947
+v 163.277054 -138.212463 39.302338 1.000000 1.000000 1.000000
+vn 0.747808 0.646057 0.152947
+v 163.390335 -138.103622 38.834137 1.000000 1.000000 1.000000
+vn 0.725485 0.519144 0.451842
+v 163.770157 -138.898956 39.417137 1.000000 1.000000 1.000000
+vn 0.830145 0.536814 0.150633
+v 163.895035 -138.806885 38.948738 1.000000 1.000000 1.000000
+vn -0.220271 0.179633 0.958756
+v 164.005768 -142.988678 40.477718 1.000000 1.000000 1.000000
+vn -0.262658 0.101629 0.959522
+v 163.971008 -141.453827 40.246319 1.000000 1.000000 1.000000
+vn -0.132996 0.236816 0.962409
+v 163.363312 -145.090057 40.812317 1.000000 1.000000 1.000000
+vn -0.435269 0.754059 0.491870
+v 156.690292 -136.670609 38.273140 1.000000 1.000000 1.000000
+vn -0.443679 0.882523 0.155895
+v 156.629776 -136.519928 37.804939 1.000000 1.000000 1.000000
+vn -0.546441 0.700455 0.459092
+v 155.977036 -137.078049 38.157936 1.000000 1.000000 1.000000
+vn -0.634779 0.601870 0.484571
+v 155.326843 -137.587357 38.043137 1.000000 1.000000 1.000000
+vn -0.568187 0.808297 0.154339
+v 155.897202 -136.938522 37.689537 1.000000 1.000000 1.000000
+vn -0.400135 0.898541 -0.180323
+v 156.634933 -136.532471 36.989338 1.000000 1.000000 1.000000
+vn -0.528782 0.829831 -0.178242
+v 155.903641 -136.949692 36.874138 1.000000 1.000000 1.000000
+vn -0.439528 0.768089 -0.465677
+v 155.973175 -137.072479 36.480938 1.000000 1.000000 1.000000
+vn -0.643039 0.745235 -0.176423
+v 155.238007 -137.472931 36.759338 1.000000 1.000000 1.000000
+vn -0.678179 0.718992 0.152066
+v 155.230286 -137.461761 37.574936 1.000000 1.000000 1.000000
+vn -0.547034 0.698042 -0.462052
+v 155.322983 -137.583160 36.366341 1.000000 1.000000 1.000000
+vn -0.741178 0.648032 -0.175242
+v 154.639343 -138.098038 36.643139 1.000000 1.000000 1.000000
+vn -0.771982 0.617403 0.151191
+v 154.629028 -138.089676 37.458740 1.000000 1.000000 1.000000
+vn -0.627378 0.606595 -0.488302
+v 154.738464 -138.194321 36.250137 1.000000 1.000000 1.000000
+vn -0.823865 0.539432 -0.173952
+v 154.130783 -138.802689 36.528137 1.000000 1.000000 1.000000
+vn -0.849467 0.505829 0.150145
+v 154.120483 -138.794312 37.343536 1.000000 1.000000 1.000000
+vn -0.722857 0.522810 0.451827
+v 154.742340 -138.198502 37.926941 1.000000 1.000000 1.000000
+vn 0.571130 0.801527 -0.177101
+v 162.115738 -136.958054 37.787338 1.000000 1.000000 1.000000
+vn 0.679669 0.712174 -0.175667
+v 162.782654 -137.485489 37.902336 1.000000 1.000000 1.000000
+vn 0.772471 0.610837 -0.173683
+v 163.381332 -138.112000 38.018539 1.000000 1.000000 1.000000
+vn 0.635782 0.599125 -0.486652
+v 162.697678 -137.595718 37.509338 1.000000 1.000000 1.000000
+vn 0.548358 0.697188 -0.461771
+v 162.046219 -137.080841 37.394138 1.000000 1.000000 1.000000
+vn 0.424263 0.771609 -0.473941
+v 161.329086 -136.669220 37.278339 1.000000 1.000000 1.000000
+vn 0.477757 0.481939 -0.734495
+v 161.920044 -137.298523 37.049736 1.000000 1.000000 1.000000
+vn 0.723154 0.519446 -0.455219
+v 163.282196 -138.208282 37.625538 1.000000 1.000000 1.000000
+vn 0.531137 0.326749 -0.781748
+v 163.104523 -138.379898 37.280937 1.000000 1.000000 1.000000
+vn 0.789188 0.417090 -0.450796
+v 163.774017 -138.894775 37.740139 1.000000 1.000000 1.000000
+vn 0.849677 0.498484 -0.171937
+v 163.884735 -138.815247 38.133339 1.000000 1.000000 1.000000
+vn -0.960077 -0.237025 0.148562
+v 153.286194 -143.876114 36.661140 1.000000 1.000000 1.000000
+vn -0.505982 -0.371961 0.778220
+v 154.395996 -145.613312 17.840797 1.000000 1.000000 1.000000
+vn -0.734039 -0.486091 0.474239
+v 154.197723 -145.754242 17.502998 1.000000 1.000000 1.000000
+vn -0.317683 -0.555212 0.768646
+v 156.005356 -147.353302 17.718197 1.000000 1.000000 1.000000
+vn -0.273773 -0.324991 0.905223
+v 155.501953 -146.636093 17.900597 1.000000 1.000000 1.000000
+vn -0.580863 -0.593322 0.557286
+v 155.196808 -147.010040 17.422199 1.000000 1.000000 1.000000
+vn -0.464486 -0.745815 0.477508
+v 155.876602 -147.569565 17.380398 1.000000 1.000000 1.000000
+vn -0.096282 -0.646399 0.756900
+v 158.022842 -148.222580 17.617798 1.000000 1.000000 1.000000
+vn -0.111222 -0.378656 0.918831
+v 157.382950 -147.799805 17.789997 1.000000 1.000000 1.000000
+vn -0.773919 -0.607366 0.179320
+v 154.541489 -146.524460 16.993599 1.000000 1.000000 1.000000
+vn -0.665349 -0.721271 0.192558
+v 155.096390 -147.132828 16.953999 1.000000 1.000000 1.000000
+vn -0.835249 -0.528089 0.153237
+v 154.070267 -145.843552 17.034798 1.000000 1.000000 1.000000
+vn -0.527835 -0.529200 -0.664332
+v 154.971497 -147.071442 16.327000 1.000000 1.000000 1.000000
+vn -0.562236 -0.816797 0.129359
+v 155.794205 -147.706314 16.911999 1.000000 1.000000 1.000000
+vn -0.299853 -0.680873 -0.668206
+v 156.780426 -148.300720 16.326599 1.000000 1.000000 1.000000
+vn -0.453677 -0.867668 0.203297
+v 156.471420 -148.119324 16.876999 1.000000 1.000000 1.000000
+vn -0.042158 -0.773297 -0.632640
+v 158.683319 -148.766754 16.326599 1.000000 1.000000 1.000000
+vn -0.176110 -0.973419 0.146429
+v 157.953308 -148.635605 16.811798 1.000000 1.000000 1.000000
+vn -0.302527 -0.938529 0.166253
+v 157.194992 -148.430496 16.843399 1.000000 1.000000 1.000000
+vn -0.289100 -0.780802 0.553868
+v 157.242630 -148.274216 17.311798 1.000000 1.000000 1.000000
+vn -0.123401 -0.875120 0.467907
+v 157.980347 -148.475143 17.279999 1.000000 1.000000 1.000000
+vn 0.088946 -0.988793 0.119903
+v 159.471252 -148.722107 16.754997 1.000000 1.000000 1.000000
+vn 0.087082 -0.873338 0.479267
+v 159.458374 -148.557465 17.223400 1.000000 1.000000 1.000000
+vn 0.104243 -0.635068 0.765390
+v 159.440353 -148.302124 17.561199 1.000000 1.000000 1.000000
+vn 0.023375 -0.317070 0.948114
+v 158.741241 -148.069092 17.729000 1.000000 1.000000 1.000000
+vn 0.829805 -0.432652 0.352472
+v 161.005936 -148.283981 16.993797 1.000000 1.000000 1.000000
+vn 0.640915 0.042412 0.766439
+v 160.792206 -147.650497 17.692600 1.000000 1.000000 1.000000
+vn 0.201878 -0.966229 0.160148
+v 160.234726 -148.599335 16.729000 1.000000 1.000000 1.000000
+vn 0.726290 -0.448274 -0.521107
+v 161.053574 -148.426300 16.326599 1.000000 1.000000 1.000000
+vn 0.533685 0.689323 0.489913
+v 162.677078 -137.583160 34.034401 1.000000 1.000000 1.000000
+vn 0.745499 0.649000 0.151757
+v 163.369751 -138.078506 33.681198 1.000000 1.000000 1.000000
+vn 0.646466 0.747366 0.153381
+v 162.773636 -137.457581 33.565998 1.000000 1.000000 1.000000
+vn 0.250887 0.579072 0.775713
+v 161.895584 -137.288742 34.256199 1.000000 1.000000 1.000000
+vn 0.437064 0.770536 0.463949
+v 162.019180 -137.069687 33.918396 1.000000 1.000000 1.000000
+vn 0.642461 0.615754 0.456170
+v 163.257736 -138.188736 34.149399 1.000000 1.000000 1.000000
+vn 0.417618 0.477401 0.773100
+v 163.081345 -138.360367 34.487198 1.000000 1.000000 1.000000
+vn 0.827600 0.540702 0.150727
+v 163.884735 -138.790131 33.797398 1.000000 1.000000 1.000000
+vn 0.706829 0.516263 0.483596
+v 163.758560 -138.882217 34.265598 1.000000 1.000000 1.000000
+vn 0.211577 0.243904 0.946439
+v 163.745682 -139.853378 34.858597 1.000000 1.000000 1.000000
+vn 0.113541 0.335870 0.935040
+v 162.382248 -137.966873 34.512596 1.000000 1.000000 1.000000
+vn 0.162644 0.616670 0.770237
+v 161.201630 -136.896667 34.139599 1.000000 1.000000 1.000000
+vn -0.041656 0.342971 0.938422
+v 160.494797 -136.874344 34.177998 1.000000 1.000000 1.000000
+vn -0.146753 0.326944 0.933580
+v 159.027069 -136.641312 33.946598 1.000000 1.000000 1.000000
+vn 0.003172 0.653411 0.756996
+v 159.804718 -136.461319 33.922199 1.000000 1.000000 1.000000
+vn 0.298102 0.828503 0.474044
+v 161.296906 -136.660858 33.801796 1.000000 1.000000 1.000000
+vn 0.088926 0.874802 0.476250
+v 159.838196 -136.207367 33.584396 1.000000 1.000000 1.000000
+vn -0.066486 0.863982 0.499113
+v 159.028351 -136.141785 33.468201 1.000000 1.000000 1.000000
+vn -0.213530 0.591026 0.777877
+v 158.248154 -136.455734 33.689598 1.000000 1.000000 1.000000
+vn 0.531110 0.832958 0.155253
+v 162.098999 -136.930145 33.450199 1.000000 1.000000 1.000000
+vn 0.406012 0.900317 0.156793
+v 161.357422 -136.510147 33.333599 1.000000 1.000000 1.000000
+vn 0.272379 0.946713 0.171883
+v 160.667328 -136.238068 33.231400 1.000000 1.000000 1.000000
+vn 0.566443 0.804795 -0.177332
+v 162.092560 -136.942703 32.634598 1.000000 1.000000 1.000000
+vn 0.431607 0.875424 -0.217598
+v 161.352264 -136.522720 32.517998 1.000000 1.000000 1.000000
+vn 0.191693 0.965064 -0.178623
+v 159.858780 -136.059464 32.300598 1.000000 1.000000 1.000000
+vn 0.133624 0.978407 0.157682
+v 159.860077 -136.045502 33.116196 1.000000 1.000000 1.000000
+vn 0.530211 0.705827 -0.469771
+v 162.023041 -137.065506 32.241600 1.000000 1.000000 1.000000
+vn 0.348324 0.830160 -0.435322
+v 160.626129 -136.390152 32.022797 1.000000 1.000000 1.000000
+vn 0.640685 0.616916 -0.457097
+v 162.680954 -137.578979 32.357399 1.000000 1.000000 1.000000
+vn 0.676910 0.714949 -0.175044
+v 162.765915 -137.468750 32.750599 1.000000 1.000000 1.000000
+vn 0.770469 0.613456 -0.173345
+v 163.359451 -138.088272 32.865601 1.000000 1.000000 1.000000
+vn 0.712437 0.509551 -0.482484
+v 163.261597 -138.184555 32.472599 1.000000 1.000000 1.000000
+vn 0.541038 0.414646 -0.731674
+v 162.529022 -137.775711 32.012798 1.000000 1.000000 1.000000
+vn 0.787566 0.420668 -0.450310
+v 163.763718 -138.878036 32.588799 1.000000 1.000000 1.000000
+vn 0.847003 0.503121 -0.171625
+v 163.873154 -138.798492 32.981796 1.000000 1.000000 1.000000
+vn 0.319865 0.591340 -0.740273
+v 160.559174 -136.637131 31.678198 1.000000 1.000000 1.000000
+vn 0.409327 0.470578 -0.781670
+v 161.898163 -137.283173 31.896999 1.000000 1.000000 1.000000
+vn 0.205105 0.841501 -0.499807
+v 159.839478 -136.201782 31.907598 1.000000 1.000000 1.000000
+vn 0.125600 0.657540 -0.742877
+v 159.027069 -136.392944 31.446798 1.000000 1.000000 1.000000
+vn 0.069771 0.878624 -0.472390
+v 159.028351 -136.136200 31.791401 1.000000 1.000000 1.000000
+vn -0.064427 0.879050 -0.472356
+v 158.214676 -136.194809 31.674999 1.000000 1.000000 1.000000
+vn 0.001848 0.605578 -0.795784
+v 158.248154 -136.450150 31.330399 1.000000 1.000000 1.000000
+vn 0.029248 0.982731 -0.182711
+v 159.029648 -135.991089 32.184399 1.000000 1.000000 1.000000
+vn -0.121314 0.975872 -0.181539
+v 158.196655 -136.052475 32.068001 1.000000 1.000000 1.000000
+vn -0.017586 0.987204 0.158493
+v 159.029648 -135.977142 33.000000 1.000000 1.000000 1.000000
+vn -0.168021 0.973038 0.158006
+v 158.195358 -136.038528 32.883598 1.000000 1.000000 1.000000
+vn -0.266762 0.946574 -0.181204
+v 157.388107 -136.238068 31.952599 1.000000 1.000000 1.000000
+vn -0.321810 0.807103 0.494998
+v 157.426743 -136.381775 33.236397 1.000000 1.000000 1.000000
+vn -0.311893 0.937129 0.156565
+v 157.384247 -136.224106 32.768196 1.000000 1.000000 1.000000
+vn -0.195570 0.861706 0.468205
+v 158.215958 -136.201782 33.351799 1.000000 1.000000 1.000000
+vn -0.441460 0.768367 0.463385
+v 156.668396 -136.680389 33.121201 1.000000 1.000000 1.000000
+vn -0.384166 0.551131 0.740723
+v 156.764969 -136.914795 33.458801 1.000000 1.000000 1.000000
+vn -0.501192 0.398358 0.768191
+v 155.456894 -137.805023 33.227997 1.000000 1.000000 1.000000
+vn -0.544627 0.681595 0.488681
+v 155.960297 -137.089218 33.006401 1.000000 1.000000 1.000000
+vn -0.447489 0.880672 0.155469
+v 156.606613 -136.529694 32.652798 1.000000 1.000000 1.000000
+vn -0.644533 0.614240 0.455287
+v 155.304962 -137.608276 32.890198 1.000000 1.000000 1.000000
+vn -0.572046 0.805656 0.153888
+v 155.880463 -136.949692 32.538200 1.000000 1.000000 1.000000
+vn -0.404512 0.896616 -0.180137
+v 156.611755 -136.543640 31.837399 1.000000 1.000000 1.000000
+vn -0.532335 0.827533 -0.178350
+v 155.886902 -136.962234 31.722601 1.000000 1.000000 1.000000
+vn -0.680985 0.716187 0.152761
+v 155.207123 -137.482697 32.421997 1.000000 1.000000 1.000000
+vn -0.715626 0.506093 0.481403
+v 154.726883 -138.216644 32.775200 1.000000 1.000000 1.000000
+vn -0.774894 0.613666 0.151505
+v 154.613586 -138.107803 32.306801 1.000000 1.000000 1.000000
+vn -0.744161 0.644728 -0.174787
+v 154.622604 -138.116180 31.491398 1.000000 1.000000 1.000000
+vn -0.645477 0.742931 -0.177237
+v 155.214844 -137.493866 31.606398 1.000000 1.000000 1.000000
+vn -0.324129 0.822144 -0.467996
+v 156.665833 -136.674805 31.444199 1.000000 1.000000 1.000000
+vn -0.442388 0.766382 -0.465781
+v 155.957718 -137.083633 31.329599 1.000000 1.000000 1.000000
+vn -0.536490 0.685433 -0.492301
+v 155.301102 -137.604095 31.213398 1.000000 1.000000 1.000000
+vn -0.826858 0.535188 -0.172856
+v 154.115341 -138.827805 31.375399 1.000000 1.000000 1.000000
+vn -0.644051 0.611959 -0.459026
+v 154.721741 -138.212463 31.098198 1.000000 1.000000 1.000000
+vn -0.432063 0.518622 -0.737803
+v 154.899399 -138.384094 30.753599 1.000000 1.000000 1.000000
+vn -0.265888 0.549212 -0.792256
+v 156.083893 -137.301315 30.984999 1.000000 1.000000 1.000000
+vn -0.166937 0.644922 -0.745794
+v 156.762390 -136.909225 31.099798 1.000000 1.000000 1.000000
+vn -0.189084 0.845279 -0.499750
+v 157.425446 -136.376205 31.559599 1.000000 1.000000 1.000000
+vn 0.031966 0.305457 -0.951669
+v 156.862808 -137.153397 30.948599 1.000000 1.000000 1.000000
+vn -0.105143 0.289536 -0.951375
+v 155.082230 -138.561295 30.602598 1.000000 1.000000 1.000000
+vn -0.490872 0.389026 -0.779554
+v 154.423035 -139.049667 30.637798 1.000000 1.000000 1.000000
+vn -0.612255 0.309594 -0.727527
+v 153.780594 -140.477097 30.418999 1.000000 1.000000 1.000000
+vn -0.223285 0.220547 -0.949475
+v 154.014908 -140.562195 30.267998 1.000000 1.000000 1.000000
+vn -0.271344 0.151532 -0.950479
+v 153.749680 -142.138931 30.036598 1.000000 1.000000 1.000000
+vn -0.680531 0.134038 -0.720355
+v 153.503769 -142.129166 30.187599 1.000000 1.000000 1.000000
+vn -0.845532 0.334964 -0.415783
+v 153.555283 -140.396164 30.763599 1.000000 1.000000 1.000000
+vn -0.854360 0.205792 -0.477199
+v 153.355713 -141.243118 30.648399 1.000000 1.000000 1.000000
+vn -0.729796 0.504601 -0.461276
+v 154.226059 -138.907333 30.982397 1.000000 1.000000 1.000000
+vn -0.887909 0.409479 -0.209629
+v 153.703339 -139.614761 31.258799 1.000000 1.000000 1.000000
+vn -0.966294 0.194810 -0.168299
+v 153.224396 -141.216614 31.041401 1.000000 1.000000 1.000000
+vn -0.891263 0.089320 -0.444603
+v 153.266876 -142.119385 30.532198 1.000000 1.000000 1.000000
+vn -0.983984 0.056404 -0.169098
+v 153.134277 -142.113815 30.925198 1.000000 1.000000 1.000000
+vn -0.950434 0.265499 0.161818
+v 153.417526 -140.347321 31.972198 1.000000 1.000000 1.000000
+vn -0.978270 0.145912 0.147302
+v 153.211517 -141.213821 31.856998 1.000000 1.000000 1.000000
+vn -0.910729 0.385350 0.148584
+v 153.691757 -139.609192 32.074398 1.000000 1.000000 1.000000
+vn -0.852119 0.501383 0.150028
+v 154.105026 -138.820816 32.190998 1.000000 1.000000 1.000000
+vn -0.843894 0.290209 0.451245
+v 153.828232 -139.680359 32.542599 1.000000 1.000000 1.000000
+vn -0.886865 0.105545 0.449812
+v 153.360870 -141.244522 32.325199 1.000000 1.000000 1.000000
+vn -0.880586 -0.030987 0.472872
+v 153.272034 -142.119385 32.209000 1.000000 1.000000 1.000000
+vn -0.989068 0.015615 0.146632
+v 153.121399 -142.112411 31.740799 1.000000 1.000000 1.000000
+vn -0.677303 0.021918 0.735378
+v 153.593903 -141.290573 32.662998 1.000000 1.000000 1.000000
+vn -0.638778 0.163100 0.751905
+v 154.041946 -139.790573 32.880398 1.000000 1.000000 1.000000
+vn -0.791107 0.415975 0.448458
+v 154.231201 -138.911530 32.659199 1.000000 1.000000 1.000000
+vn -0.604053 0.243564 0.758812
+v 154.428192 -139.053848 32.996998 1.000000 1.000000 1.000000
+vn -0.885137 -0.142862 0.442857
+v 153.300354 -143.001251 32.092598 1.000000 1.000000 1.000000
+vn -0.982446 -0.113126 0.148331
+v 153.148438 -143.017990 31.624399 1.000000 1.000000 1.000000
+vn -0.959240 -0.240604 0.148218
+v 153.292633 -143.902634 31.508999 1.000000 1.000000 1.000000
+vn -0.965080 -0.200134 -0.169016
+v 153.304214 -143.898438 30.693398 1.000000 1.000000 1.000000
+vn -0.982887 -0.072320 -0.169420
+v 153.161301 -143.016602 30.808798 1.000000 1.000000 1.000000
+vn -0.895137 -0.027075 -0.444968
+v 153.293930 -143.002640 30.415798 1.000000 1.000000 1.000000
+vn -0.869352 -0.136239 -0.475044
+v 153.432968 -143.863556 30.300398 1.000000 1.000000 1.000000
+vn -0.628983 0.023200 -0.777072
+v 153.529526 -142.976135 30.071199 1.000000 1.000000 1.000000
+vn -0.679017 -0.127826 -0.722909
+v 153.902893 -144.600311 29.840599 1.000000 1.000000 1.000000
+vn -0.856739 -0.258211 -0.446458
+v 153.682739 -144.696579 30.184998 1.000000 1.000000 1.000000
+vn -0.323374 0.044041 -0.945246
+v 154.130783 -144.499832 29.689398 1.000000 1.000000 1.000000
+vn 0.022454 0.248548 -0.968359
+v 155.530273 -146.292847 29.348398 1.000000 1.000000 1.000000
+vn -0.062095 0.265047 -0.962234
+v 157.258072 -147.463516 29.013798 1.000000 1.000000 1.000000
+vn -0.144392 0.235058 -0.961196
+v 158.639542 -147.788635 28.782398 1.000000 1.000000 1.000000
+vn -0.240240 0.175793 -0.954663
+v 160.731705 -147.471893 28.435198 1.000000 1.000000 1.000000
+vn -0.266227 0.029034 -0.963473
+v 162.513565 -146.255173 28.089199 1.000000 1.000000 1.000000
+vn -0.286477 -0.048187 -0.956875
+v 163.652985 -144.423080 27.754599 1.000000 1.000000 1.000000
+vn -0.688600 0.268415 -0.673634
+v 163.188217 -144.917038 27.992598 1.000000 1.000000 1.000000
+vn -0.699464 0.046760 -0.713136
+v 163.662003 -143.638916 27.775198 1.000000 1.000000 1.000000
+vn -0.257494 -0.124546 -0.958220
+v 163.999313 -142.938461 27.523199 1.000000 1.000000 1.000000
+vn -0.757822 -0.155497 -0.633661
+v 163.806198 -142.173813 27.542599 1.000000 1.000000 1.000000
+vn -0.859393 0.237750 -0.452680
+v 163.229401 -144.234726 28.225199 1.000000 1.000000 1.000000
+vn -0.898633 0.032973 -0.437461
+v 163.544846 -142.885437 27.993799 1.000000 1.000000 1.000000
+vn -0.200299 -0.218298 -0.955105
+v 163.777878 -140.661270 27.175999 1.000000 1.000000 1.000000
+vn -0.896945 -0.128340 -0.423106
+v 163.568008 -142.182190 27.877398 1.000000 1.000000 1.000000
+vn -0.831932 -0.302456 -0.465198
+v 163.343994 -140.814758 27.646599 1.000000 1.000000 1.000000
+vn -0.611717 -0.301134 -0.731520
+v 163.570587 -140.735229 27.311998 1.000000 1.000000 1.000000
+vn -0.971445 0.094755 -0.217521
+v 163.407074 -142.868683 28.391399 1.000000 1.000000 1.000000
+vn -0.929895 -0.291669 -0.224108
+v 163.212662 -140.862198 28.044197 1.000000 1.000000 1.000000
+vn -0.998669 -0.050785 0.009029
+v 163.377472 -142.190552 28.729597 1.000000 1.000000 1.000000
+vn -0.921907 0.310200 -0.232083
+v 163.100662 -144.177521 28.622599 1.000000 1.000000 1.000000
+vn -0.995773 0.091666 0.005776
+v 163.355576 -142.863113 28.846201 1.000000 1.000000 1.000000
+vn -0.970402 0.239238 0.032937
+v 163.246140 -143.524490 28.962399 1.000000 1.000000 1.000000
+vn -0.959883 -0.276468 0.046806
+v 163.163757 -140.878937 28.498999 1.000000 1.000000 1.000000
+vn -0.876957 -0.392863 -0.276776
+v 162.978348 -140.241287 27.929398 1.000000 1.000000 1.000000
+vn -0.833393 -0.550428 0.049856
+v 162.619141 -139.684540 28.267998 1.000000 1.000000 1.000000
+vn -0.786728 -0.448508 -0.424146
+v 163.103241 -140.174301 27.531998 1.000000 1.000000 1.000000
+vn -0.871731 0.280682 0.401625
+v 163.418671 -143.571930 29.786598 1.000000 1.000000 1.000000
+vn -0.786773 0.430892 0.441951
+v 163.217819 -144.229141 29.901798 1.000000 1.000000 1.000000
+vn -0.576835 0.375755 0.725307
+v 163.435410 -144.326813 30.249399 1.000000 1.000000 1.000000
+vn -0.679976 0.167273 0.713900
+v 163.766281 -142.910553 30.018198 1.000000 1.000000 1.000000
+vn -0.887498 0.171424 0.427741
+v 163.531967 -142.884033 29.670597 1.000000 1.000000 1.000000
+vn -0.409773 0.552878 0.725543
+v 162.350052 -146.072372 30.584198 1.000000 1.000000 1.000000
+vn -0.773573 0.553529 0.308530
+v 162.612701 -145.369125 30.120598 1.000000 1.000000 1.000000
+vn -0.129999 0.669236 0.731589
+v 160.651871 -147.233292 30.930199 1.000000 1.000000 1.000000
+vn 0.163222 0.655927 0.736966
+v 158.656281 -147.536087 31.277399 1.000000 1.000000 1.000000
+vn 0.391829 0.552693 0.735528
+v 157.339188 -147.224930 31.508799 1.000000 1.000000 1.000000
+vn 0.453936 0.766025 0.455135
+v 157.421585 -146.984924 31.160999 1.000000 1.000000 1.000000
+vn 0.288712 0.857973 0.424886
+v 158.035706 -147.180283 31.045799 1.000000 1.000000 1.000000
+vn 0.582996 0.749034 0.314745
+v 156.350403 -146.369583 31.379799 1.000000 1.000000 1.000000
+vn 0.070919 0.997470 0.004991
+v 158.685883 -147.089569 30.105398 1.000000 1.000000 1.000000
+vn 0.243688 0.969292 0.033020
+v 158.073044 -146.993301 30.221598 1.000000 1.000000 1.000000
+vn 0.803901 0.497002 0.326699
+v 155.425995 -145.410980 31.610798 1.000000 1.000000 1.000000
+vn 0.701216 0.560347 0.440804
+v 155.856003 -145.924469 31.495798 1.000000 1.000000 1.000000
+vn 0.457542 0.889164 0.006503
+v 156.983841 -146.566330 30.438999 1.000000 1.000000 1.000000
+vn 0.323923 0.913752 -0.245216
+v 157.465363 -146.857956 29.881998 1.000000 1.000000 1.000000
+vn 0.076291 0.969270 -0.233870
+v 158.683319 -147.145386 29.650599 1.000000 1.000000 1.000000
+vn 0.605442 0.689285 -0.397903
+v 155.846985 -145.934235 29.819199 1.000000 1.000000 1.000000
+vn 0.617460 0.786561 -0.008067
+v 156.453400 -146.213303 30.555599 1.000000 1.000000 1.000000
+vn 0.452989 0.685461 -0.570039
+v 156.342667 -146.382141 29.703199 1.000000 1.000000 1.000000
+vn 0.238136 0.845043 -0.478741
+v 157.416428 -146.998871 29.484398 1.000000 1.000000 1.000000
+vn 0.538532 0.510906 -0.670044
+v 155.229004 -145.579819 29.599398 1.000000 1.000000 1.000000
+vn 0.274253 0.665851 -0.693850
+v 156.786850 -146.977951 29.251799 1.000000 1.000000 1.000000
+vn 0.754306 0.499538 -0.426010
+v 155.052612 -144.840302 30.050398 1.000000 1.000000 1.000000
+vn 0.849402 0.448995 -0.277344
+v 155.172363 -144.763550 30.447998 1.000000 1.000000 1.000000
+vn 0.588110 0.339700 -0.733983
+v 154.550507 -144.315659 29.830399 1.000000 1.000000 1.000000
+vn 0.027084 0.671559 -0.740456
+v 157.981644 -147.446777 29.034401 1.000000 1.000000 1.000000
+vn 0.005001 0.884186 -0.467108
+v 158.673004 -147.294693 29.252998 1.000000 1.000000 1.000000
+vn -0.201221 0.720230 -0.663912
+v 159.337357 -147.552826 28.801798 1.000000 1.000000 1.000000
+vn -0.180868 0.875002 -0.449063
+v 159.321915 -147.296082 29.136599 1.000000 1.000000 1.000000
+vn -0.371828 0.790895 -0.486035
+v 160.574631 -147.005859 28.905998 1.000000 1.000000 1.000000
+vn -0.354020 0.564202 -0.745886
+v 160.657013 -147.248642 28.571199 1.000000 1.000000 1.000000
+vn -0.368788 0.898710 -0.237308
+v 160.526993 -146.864929 29.303398 1.000000 1.000000 1.000000
+vn -0.097305 0.995205 0.009950
+v 159.307739 -147.089569 29.988998 1.000000 1.000000 1.000000
+vn -0.353458 0.934096 0.050328
+v 160.508957 -146.813309 29.758198 1.000000 1.000000 1.000000
+vn -0.038340 0.937454 0.345991
+v 159.320618 -147.280731 30.813198 1.000000 1.000000 1.000000
+vn 0.164584 0.875590 0.454153
+v 158.674301 -147.280731 30.929798 1.000000 1.000000 1.000000
+vn -0.475211 0.831125 -0.288800
+v 161.092194 -146.590042 29.188599 1.000000 1.000000 1.000000
+vn -0.526492 0.728878 -0.437656
+v 161.157852 -146.722595 28.791199 1.000000 1.000000 1.000000
+vn -0.638239 0.768128 0.051289
+v 161.591736 -146.182602 29.527399 1.000000 1.000000 1.000000
+vn -0.533271 0.514409 -0.671569
+v 161.845367 -146.556549 28.340199 1.000000 1.000000 1.000000
+vn -0.715174 0.577637 -0.393525
+v 162.194275 -145.900757 28.559799 1.000000 1.000000 1.000000
+vn -0.812418 0.583019 -0.008054
+v 162.472366 -145.251923 29.296198 1.000000 1.000000 1.000000
+vn -0.902528 0.430581 0.006674
+v 162.816132 -144.689606 29.179598 1.000000 1.000000 1.000000
+vn -0.589539 0.673268 0.446268
+v 162.185257 -145.889587 30.236597 1.000000 1.000000 1.000000
+vn -0.524801 0.781378 0.337686
+v 161.697311 -146.337494 30.351599 1.000000 1.000000 1.000000
+vn -0.416281 0.830981 0.369027
+v 161.151413 -146.710037 30.467798 1.000000 1.000000 1.000000
+vn -0.269424 0.863351 0.426657
+v 160.570770 -146.993301 30.582598 1.000000 1.000000 1.000000
+vn -0.105219 0.922979 0.370187
+v 159.954056 -147.184464 30.697998 1.000000 1.000000 1.000000
+vn -0.709433 0.428478 -0.559564
+v 162.623001 -145.377502 28.443998 1.000000 1.000000 1.000000
+vn -0.947883 -0.005336 0.318574
+v 163.555145 -142.183578 29.553999 1.000000 1.000000 1.000000
+vn -0.937365 -0.061434 0.342889
+v 163.486908 -141.492889 29.438599 1.000000 1.000000 1.000000
+vn -0.700837 -0.092582 0.707288
+v 163.555145 -140.739410 29.670998 1.000000 1.000000 1.000000
+vn -0.603330 -0.353436 0.714896
+v 162.543182 -138.861282 29.324999 1.000000 1.000000 1.000000
+vn -0.891464 -0.207376 0.402848
+v 163.331116 -140.820328 29.323198 1.000000 1.000000 1.000000
+vn -0.872416 -0.338975 0.352116
+v 163.090363 -140.181274 29.208599 1.000000 1.000000 1.000000
+vn 0.495896 -0.549223 -0.672637
+v 156.432800 -137.958511 25.821798 1.000000 1.000000 1.000000
+vn 0.473782 -0.762939 -0.439835
+v 157.130615 -137.844101 26.272799 1.000000 1.000000 1.000000
+vn 0.673519 -0.623654 -0.396772
+v 156.043976 -138.587799 26.041401 1.000000 1.000000 1.000000
+vn 0.227134 -0.191173 -0.954915
+v 157.601837 -137.128281 25.916798 1.000000 1.000000 1.000000
+vn 0.312230 -0.586666 -0.747218
+v 157.662338 -137.355728 26.052799 1.000000 1.000000 1.000000
+vn 0.669848 -0.313107 -0.673251
+v 154.989532 -139.494766 25.474199 1.000000 1.000000 1.000000
+vn 0.126762 -0.243750 -0.961518
+v 159.709427 -136.966431 26.263998 1.000000 1.000000 1.000000
+vn 0.148172 -0.731417 -0.665638
+v 158.997467 -137.150604 26.283398 1.000000 1.000000 1.000000
+vn 0.313284 -0.814459 -0.488375
+v 157.729294 -137.604095 26.387398 1.000000 1.000000 1.000000
+vn -0.076600 -0.668019 -0.740191
+v 160.344162 -137.355728 26.515999 1.000000 1.000000 1.000000
+vn 0.115881 -0.885212 -0.450523
+v 158.998749 -137.408737 26.618198 1.000000 1.000000 1.000000
+vn -0.069579 -0.881301 -0.467405
+v 159.645065 -137.457581 26.734598 1.000000 1.000000 1.000000
+vn 0.041796 -0.269384 -0.962125
+v 161.066437 -137.393402 26.495398 1.000000 1.000000 1.000000
+vn -0.299172 -0.825800 -0.478071
+v 160.879761 -137.845490 26.965998 1.000000 1.000000 1.000000
+vn -0.322665 -0.646028 -0.691763
+v 161.506760 -137.912460 26.733398 1.000000 1.000000 1.000000
+vn -0.147352 -0.961111 -0.233567
+v 159.625748 -137.605499 27.132198 1.000000 1.000000 1.000000
+vn -0.499357 -0.653189 -0.569199
+v 161.912323 -138.540359 27.184799 1.000000 1.000000 1.000000
+vn -0.389304 -0.888138 -0.244241
+v 160.821823 -137.982224 27.363398 1.000000 1.000000 1.000000
+vn -0.652519 -0.646614 -0.395108
+v 162.379669 -139.023148 27.300598 1.000000 1.000000 1.000000
+vn -0.574948 -0.474523 -0.666531
+v 162.973206 -139.423599 27.080999 1.000000 1.000000 1.000000
+vn -0.040995 -0.246682 -0.968229
+v 162.716995 -138.689667 26.829998 1.000000 1.000000 1.000000
+vn -0.669726 -0.742558 -0.008630
+v 161.791290 -138.699432 28.036999 1.000000 1.000000 1.000000
+vn -0.519465 -0.854467 0.006512
+v 161.284027 -138.308746 27.920399 1.000000 1.000000 1.000000
+vn -0.738187 -0.513055 0.438012
+v 162.369370 -139.032913 28.977198 1.000000 1.000000 1.000000
+vn -0.835431 -0.443481 0.324623
+v 162.765915 -139.577087 29.092398 1.000000 1.000000 1.000000
+vn -0.633923 -0.707532 0.312313
+v 161.903305 -138.551529 28.861399 1.000000 1.000000 1.000000
+vn -0.507799 -0.732303 0.453731
+v 160.873322 -137.858047 28.642599 1.000000 1.000000 1.000000
+vn -0.431032 -0.526367 0.732904
+v 160.971161 -137.625031 28.990198 1.000000 1.000000 1.000000
+vn -0.313410 -0.949047 0.032936
+v 160.224426 -137.802231 27.703199 1.000000 1.000000 1.000000
+vn -0.350431 -0.835149 0.423939
+v 160.274643 -137.618042 28.527399 1.000000 1.000000 1.000000
+vn -0.144004 -0.989564 0.005073
+v 159.618027 -137.661301 27.586998 1.000000 1.000000 1.000000
+vn -0.210785 -0.644085 0.735339
+v 159.675964 -137.217590 28.758799 1.000000 1.000000 1.000000
+vn -0.228478 -0.861700 0.453068
+v 159.643784 -137.471542 28.411198 1.000000 1.000000 1.000000
+vn 0.023475 -0.999670 0.010439
+v 158.998749 -137.615250 27.470398 1.000000 1.000000 1.000000
+vn -0.030583 -0.938071 0.345090
+v 158.998749 -137.422699 28.294798 1.000000 1.000000 1.000000
+vn 0.284458 -0.957367 0.050320
+v 157.782074 -137.802231 27.239798 1.000000 1.000000 1.000000
+vn 0.301859 -0.922953 -0.238830
+v 157.767914 -137.749207 26.784998 1.000000 1.000000 1.000000
+vn 0.037619 -0.928175 0.370238
+v 158.358871 -137.472931 28.179398 1.000000 1.000000 1.000000
+vn 0.205049 -0.880499 0.427407
+v 157.733154 -137.618042 28.063999 1.000000 1.000000 1.000000
+vn 0.583380 -0.810555 0.051653
+v 156.661972 -138.350601 27.008799 1.000000 1.000000 1.000000
+vn 0.414378 -0.862809 -0.289573
+v 157.187256 -137.980835 26.670198 1.000000 1.000000 1.000000
+vn 0.468317 -0.816128 0.338547
+v 156.567993 -138.188736 27.833199 1.000000 1.000000 1.000000
+vn 0.771430 -0.636261 -0.008197
+v 155.725967 -139.214310 26.777798 1.000000 1.000000 1.000000
+vn 0.355762 -0.858742 0.368776
+v 157.135773 -137.856659 27.949398 1.000000 1.000000 1.000000
+vn 0.079433 -0.675775 0.732815
+v 157.667496 -137.372467 28.411798 1.000000 1.000000 1.000000
+vn 0.368936 -0.578881 0.727175
+v 155.899780 -138.405014 28.065598 1.000000 1.000000 1.000000
+vn 0.540577 -0.712059 0.448050
+v 156.052994 -138.598969 27.717999 1.000000 1.000000 1.000000
+vn 0.872170 -0.489164 0.006139
+v 155.347458 -139.750122 26.661198 1.000000 1.000000 1.000000
+vn 0.734419 -0.603779 0.309966
+v 155.593353 -139.087341 27.602198 1.000000 1.000000 1.000000
+vn 0.953266 -0.300401 0.032289
+v 154.844040 -140.880341 26.443998 1.000000 1.000000 1.000000
+vn 0.899698 -0.369149 -0.232964
+v 155.030731 -140.238480 26.104198 1.000000 1.000000 1.000000
+vn 0.678106 -0.474044 -0.561654
+v 155.583069 -139.077576 25.925598 1.000000 1.000000 1.000000
+vn 0.841988 -0.291804 -0.453770
+v 154.905853 -140.172897 25.706799 1.000000 1.000000 1.000000
+vn 0.963646 -0.156006 -0.216907
+v 154.643204 -141.522202 25.872999 1.000000 1.000000 1.000000
+vn 0.755819 -0.481354 0.443887
+v 154.918732 -140.178482 27.383398 1.000000 1.000000 1.000000
+vn 0.987997 -0.154368 0.005674
+v 154.693405 -141.531952 26.327799 1.000000 1.000000 1.000000
+vn 0.850949 -0.336147 0.403598
+v 154.676666 -140.820328 27.268198 1.000000 1.000000 1.000000
+vn 0.549294 -0.412400 0.726775
+v 154.706284 -140.065475 27.730997 1.000000 1.000000 1.000000
+vn 0.999892 -0.011611 0.009009
+v 154.629028 -142.201721 26.211199 1.000000 1.000000 1.000000
+vn 0.873992 -0.227648 0.429320
+v 154.519592 -141.498474 27.151999 1.000000 1.000000 1.000000
+vn 0.667394 -0.210072 0.714461
+v 154.286560 -141.453827 27.499598 1.000000 1.000000 1.000000
+vn 0.027004 -0.265434 0.963751
+v 155.740128 -138.201294 28.220198 1.000000 1.000000 1.000000
+vn 0.143405 -0.239258 0.960307
+v 154.486130 -139.948257 27.885599 1.000000 1.000000 1.000000
+vn -0.092429 -0.249218 0.964027
+v 157.597961 -137.115723 28.566399 1.000000 1.000000 1.000000
+vn 0.212160 -0.178583 0.960779
+v 154.044525 -141.407776 27.654198 1.000000 1.000000 1.000000
+vn 0.705555 0.047904 0.707035
+v 154.361237 -143.636124 27.152599 1.000000 1.000000 1.000000
+vn -0.258495 -0.198846 0.945326
+v 153.891312 -143.764496 27.303398 1.000000 1.000000 1.000000
+vn 0.266345 -0.090882 0.959584
+v 154.121765 -143.701706 27.307198 1.000000 1.000000 1.000000
+vn 0.938988 0.001760 0.343946
+v 154.477112 -142.889618 26.920198 1.000000 1.000000 1.000000
+vn 0.945933 -0.054333 0.319778
+v 154.452652 -142.196136 27.035599 1.000000 1.000000 1.000000
+vn 0.903130 0.150006 0.402312
+v 154.589127 -143.571930 26.804798 1.000000 1.000000 1.000000
+vn 0.975517 0.214820 0.047097
+v 154.761642 -143.525894 25.980598 1.000000 1.000000 1.000000
+vn -0.244273 -0.373681 0.894814
+v 154.872375 -145.911911 26.957399 1.000000 1.000000 1.000000
+vn -0.034219 -0.342865 0.938761
+v 156.515198 -147.397949 26.622599 1.000000 1.000000 1.000000
+vn 0.071445 -0.348810 0.934466
+v 157.908249 -147.950485 26.391199 1.000000 1.000000 1.000000
+vn 0.209145 -0.251922 0.944878
+v 160.126587 -147.944916 26.044197 1.000000 1.000000 1.000000
+vn 0.078529 -0.620966 0.779894
+v 158.635681 -148.303513 26.134199 1.000000 1.000000 1.000000
+vn 0.323713 -0.178954 0.929078
+v 162.140198 -146.954224 25.698198 1.000000 1.000000 1.000000
+vn 0.256769 -0.616547 0.744271
+v 160.174210 -148.180725 25.903599 1.000000 1.000000 1.000000
+vn 0.405883 -0.488416 0.772469
+v 161.621338 -147.597473 25.672798 1.000000 1.000000 1.000000
+vn 0.593544 -0.281317 0.754034
+v 163.380051 -145.966324 25.324999 1.000000 1.000000 1.000000
+vn 0.541373 -0.355001 0.762161
+v 162.863770 -146.602600 25.441599 1.000000 1.000000 1.000000
+vn 0.691057 -0.562575 0.453817
+v 163.029846 -146.785385 25.103998 1.000000 1.000000 1.000000
+vn 0.770011 -0.446951 0.455321
+v 163.568008 -146.121216 24.987398 1.000000 1.000000 1.000000
+vn 0.660184 -0.149106 0.736155
+v 164.099747 -144.596115 25.107798 1.000000 1.000000 1.000000
+vn 0.869970 -0.135557 0.474105
+v 164.570969 -143.855194 24.653799 1.000000 1.000000 1.000000
+vn 0.647381 0.052452 0.760359
+v 164.474411 -142.959381 24.874998 1.000000 1.000000 1.000000
+vn 0.849478 -0.271514 0.452401
+v 164.319901 -144.692383 24.769999 1.000000 1.000000 1.000000
+vn 0.896514 -0.026205 0.442240
+v 164.710007 -142.985901 24.537399 1.000000 1.000000 1.000000
+vn 0.875977 0.092978 0.473308
+v 164.734467 -142.112411 24.421997 1.000000 1.000000 1.000000
+vn 0.968217 -0.202431 0.146891
+v 164.717743 -143.895660 24.185398 1.000000 1.000000 1.000000
+vn 0.986382 -0.073857 0.146957
+v 164.860641 -143.002640 24.068998 1.000000 1.000000 1.000000
+vn 0.987546 0.054500 0.147589
+v 164.886398 -142.105438 23.953598 1.000000 1.000000 1.000000
+vn 0.872029 0.205467 0.444240
+v 164.646927 -141.243118 24.306599 1.000000 1.000000 1.000000
+vn 0.971959 0.182956 0.147729
+v 164.796280 -141.213821 23.838398 1.000000 1.000000 1.000000
+vn 0.932555 -0.329185 0.148252
+v 164.460236 -144.755173 24.301598 1.000000 1.000000 1.000000
+vn 0.955468 -0.241190 -0.170024
+v 164.704865 -143.891464 23.369999 1.000000 1.000000 1.000000
+vn 0.881315 -0.443438 0.163239
+v 164.095886 -145.558899 24.416798 1.000000 1.000000 1.000000
+vn 0.911040 -0.375903 -0.169419
+v 164.448654 -144.749603 23.486198 1.000000 1.000000 1.000000
+vn 0.789917 -0.575108 -0.212793
+v 163.678741 -146.211914 23.703598 1.000000 1.000000 1.000000
+vn 0.817827 -0.555468 0.150382
+v 163.689041 -146.220276 24.518999 1.000000 1.000000 1.000000
+vn 0.797340 -0.364944 -0.480692
+v 164.325058 -144.695175 23.092999 1.000000 1.000000 1.000000
+vn 0.761783 -0.492834 -0.420478
+v 163.969711 -145.479355 23.208199 1.000000 1.000000 1.000000
+vn 0.702083 -0.689848 -0.176607
+v 163.127701 -146.892838 23.820198 1.000000 1.000000 1.000000
+vn 0.610861 -0.638704 -0.467875
+v 163.033707 -146.789566 23.426998 1.000000 1.000000 1.000000
+vn 0.734720 -0.661084 0.152164
+v 163.136703 -146.902603 24.635599 1.000000 1.000000 1.000000
+vn 0.633259 -0.758677 0.152944
+v 162.504562 -147.487244 24.751598 1.000000 1.000000 1.000000
+vn 0.595574 -0.783452 -0.177465
+v 162.496826 -147.476089 23.935999 1.000000 1.000000 1.000000
+vn 0.502701 -0.729528 -0.463768
+v 162.418304 -147.360275 23.542999 1.000000 1.000000 1.000000
+vn 0.311902 -0.593275 -0.742120
+v 162.276672 -147.153763 23.198399 1.000000 1.000000 1.000000
+vn 0.398879 -0.476972 -0.783194
+v 162.867630 -146.606781 23.082600 1.000000 1.000000 1.000000
+vn 0.378907 -0.780689 -0.496944
+v 161.737228 -147.829102 23.658001 1.000000 1.000000 1.000000
+vn 0.516731 -0.842003 0.154984
+v 161.806747 -147.968628 24.866598 1.000000 1.000000 1.000000
+vn 0.475813 -0.861022 -0.179561
+v 161.800308 -147.956085 24.051197 1.000000 1.000000 1.000000
+vn 0.596475 -0.638271 0.486650
+v 162.414444 -147.356079 25.219801 1.000000 1.000000 1.000000
+vn 0.501694 -0.731544 0.461678
+v 161.734650 -147.823517 25.334999 1.000000 1.000000 1.000000
+vn 0.387575 -0.908533 0.156057
+v 161.047134 -148.341187 24.982798 1.000000 1.000000 1.000000
+vn 0.342952 -0.921857 -0.180455
+v 161.041977 -148.328629 24.167398 1.000000 1.000000 1.000000
+vn 0.266630 -0.841221 -0.470378
+v 160.996918 -148.193283 23.774199 1.000000 1.000000 1.000000
+vn 0.247166 -0.956155 0.157088
+v 160.256622 -148.592346 25.097601 1.000000 1.000000 1.000000
+vn 0.200859 -0.962617 -0.181724
+v 160.254044 -148.578400 24.281998 1.000000 1.000000 1.000000
+vn 0.137430 -0.871089 -0.471505
+v 160.225708 -148.437469 23.888998 1.000000 1.000000 1.000000
+vn 0.387197 -0.778837 0.493448
+v 160.994339 -148.187714 25.451199 1.000000 1.000000 1.000000
+vn 0.265718 -0.843342 0.467085
+v 160.224426 -148.431885 25.565798 1.000000 1.000000 1.000000
+vn 0.100046 -0.982443 0.157469
+v 159.437775 -148.720718 25.212799 1.000000 1.000000 1.000000
+vn 0.052987 -0.981916 -0.181752
+v 159.436493 -148.706757 24.397398 1.000000 1.000000 1.000000
+vn -0.001091 -0.865400 -0.501081
+v 159.427475 -148.563049 24.004198 1.000000 1.000000 1.000000
+vn 0.022139 -0.664907 -0.746598
+v 160.175507 -148.186310 23.544399 1.000000 1.000000 1.000000
+vn -0.135309 -0.591818 -0.794634
+v 158.635681 -148.309097 23.775198 1.000000 1.000000 1.000000
+vn -0.130531 -0.871882 -0.471999
+v 158.618942 -148.565842 24.119598 1.000000 1.000000 1.000000
+vn -0.050156 -0.986071 0.158583
+v 158.609924 -148.723511 25.328199 1.000000 1.000000 1.000000
+vn -0.096606 -0.978643 -0.181452
+v 158.609924 -148.709564 24.512798 1.000000 1.000000 1.000000
+vn 0.138004 -0.856210 0.497854
+v 159.426193 -148.557465 25.681198 1.000000 1.000000 1.000000
+vn 0.001418 -0.882924 0.469514
+v 158.620239 -148.558868 25.796598 1.000000 1.000000 1.000000
+vn -0.243563 -0.952915 -0.180639
+v 157.784653 -148.585373 24.629198 1.000000 1.000000 1.000000
+vn -0.199042 -0.967224 0.157672
+v 157.782074 -148.599335 25.444799 1.000000 1.000000 1.000000
+vn -0.260616 -0.843790 -0.469146
+v 157.811691 -148.444443 24.235998 1.000000 1.000000 1.000000
+vn -0.395632 -0.901158 -0.177172
+v 156.983841 -148.337006 24.745398 1.000000 1.000000 1.000000
+vn -0.383016 -0.779118 -0.496259
+v 157.030197 -148.201645 24.352198 1.000000 1.000000 1.000000
+vn -0.343248 -0.926082 0.156695
+v 156.979980 -148.349564 25.560799 1.000000 1.000000 1.000000
+vn -0.125091 -0.857734 0.498643
+v 157.812973 -148.438873 25.912998 1.000000 1.000000 1.000000
+vn -0.278118 -0.835288 0.474284
+v 157.031479 -148.196075 26.029198 1.000000 1.000000 1.000000
+vn -0.146553 -0.636943 0.756853
+v 157.113876 -147.954681 26.366999 1.000000 1.000000 1.000000
+vn -0.470540 -0.865739 0.170552
+v 156.225510 -147.982590 25.675999 1.000000 1.000000 1.000000
+vn -0.469723 -0.748000 0.468888
+v 155.689926 -147.430038 26.246599 1.000000 1.000000 1.000000
+vn -0.302965 -0.563122 0.768834
+v 155.826385 -147.220734 26.584198 1.000000 1.000000 1.000000
+vn -0.632623 -0.570279 0.523994
+v 154.511871 -146.223068 26.478998 1.000000 1.000000 1.000000
+vn -0.568963 -0.629920 0.528661
+v 155.059052 -146.870514 26.363199 1.000000 1.000000 1.000000
+vn -0.506680 -0.391644 0.768043
+v 154.260818 -145.371918 26.931999 1.000000 1.000000 1.000000
+vn -0.755099 -0.476312 0.450502
+v 154.057388 -145.501678 26.594198 1.000000 1.000000 1.000000
+vn -0.860065 -0.487324 0.151007
+v 153.926071 -145.585403 26.125799 1.000000 1.000000 1.000000
+vn -0.784934 -0.600589 0.152223
+v 154.392136 -146.324921 26.010799 1.000000 1.000000 1.000000
+vn -0.692010 -0.705482 0.153029
+v 154.954773 -146.989120 25.894798 1.000000 1.000000 1.000000
+vn -0.807221 -0.564105 -0.173723
+v 154.402451 -146.316559 25.195198 1.000000 1.000000 1.000000
+vn -0.587906 -0.793939 0.155008
+v 155.602371 -147.563980 25.778198 1.000000 1.000000 1.000000
+vn -0.720266 -0.671352 -0.174652
+v 154.963776 -146.979340 25.079399 1.000000 1.000000 1.000000
+vn -0.607305 -0.764953 -0.214540
+v 155.608810 -147.552826 24.962799 1.000000 1.000000 1.000000
+vn -0.876942 -0.448979 -0.171437
+v 153.937668 -145.578430 25.310398 1.000000 1.000000 1.000000
+vn -0.665970 -0.583936 -0.464223
+v 155.055191 -146.874695 24.686199 1.000000 1.000000 1.000000
+vn -0.518334 -0.738946 -0.430451
+v 156.295044 -147.843063 24.467398 1.000000 1.000000 1.000000
+vn -0.500296 -0.380012 -0.778007
+v 155.217407 -146.687714 24.341799 1.000000 1.000000 1.000000
+vn -0.440404 -0.515115 -0.735323
+v 156.407043 -147.617004 24.122999 1.000000 1.000000 1.000000
+vn -0.753190 -0.477367 -0.452577
+v 154.506729 -146.225861 24.802198 1.000000 1.000000 1.000000
+vn -0.266401 -0.617336 -0.740221
+v 157.860611 -148.193283 23.891598 1.000000 1.000000 1.000000
+vn 0.140143 -0.591184 -0.794268
+v 160.914520 -147.951889 23.429798 1.000000 1.000000 1.000000
+vn 0.535860 -0.421835 -0.731375
+v 163.764999 -145.350983 22.863800 1.000000 1.000000 1.000000
+vn 0.639660 -0.260294 -0.723244
+v 164.345657 -143.795197 22.632397 1.000000 1.000000 1.000000
+vn 0.612080 -0.140994 -0.778125
+v 164.479553 -142.960785 22.515999 1.000000 1.000000 1.000000
+vn 0.857122 -0.255871 -0.447071
+v 164.576126 -143.856583 22.976801 1.000000 1.000000 1.000000
+vn 0.883782 -0.142025 -0.445822
+v 164.715164 -142.985901 22.860397 1.000000 1.000000 1.000000
+vn 0.978870 -0.114067 -0.169710
+v 164.847778 -143.001251 23.253597 1.000000 1.000000 1.000000
+vn 0.985545 0.013962 -0.168837
+v 164.873535 -142.105438 23.138199 1.000000 1.000000 1.000000
+vn 0.879604 -0.030002 -0.474761
+v 164.740921 -142.112411 22.744999 1.000000 1.000000 1.000000
+vn 0.691880 -0.002822 -0.722007
+v 164.419037 -141.287781 22.285198 1.000000 1.000000 1.000000
+vn 0.871244 0.205987 -0.445537
+v 164.452515 -140.398956 22.514999 1.000000 1.000000 1.000000
+vn 0.621853 0.103179 -0.776307
+v 164.228500 -140.479874 22.170597 1.000000 1.000000 1.000000
+vn 0.890866 0.091796 -0.444894
+v 164.652084 -141.241730 22.629799 1.000000 1.000000 1.000000
+vn 0.975117 0.142572 -0.169764
+v 164.783401 -141.216614 23.022797 1.000000 1.000000 1.000000
+vn 0.948169 0.268446 -0.170038
+v 164.578690 -140.354294 22.908199 1.000000 1.000000 1.000000
+vn 0.894712 -0.089269 -0.437631
+v 154.506729 -141.495682 25.475401 1.000000 1.000000 1.000000
+vn 0.903595 0.071371 -0.422400
+v 154.439774 -142.194733 25.358999 1.000000 1.000000 1.000000
+vn 0.695004 -0.090984 -0.713226
+v 154.437210 -140.735229 25.256798 1.000000 1.000000 1.000000
+vn 0.946479 0.231685 -0.224723
+v 154.711441 -143.538452 25.525799 1.000000 1.000000 1.000000
+vn 0.900699 0.335492 -0.276020
+v 154.905853 -144.176117 25.410999 1.000000 1.000000 1.000000
+vn -0.686973 0.601251 0.408125
+v 162.588242 -145.402618 40.425320 1.000000 1.000000 1.000000
+vn -0.555468 0.411514 0.722572
+v 163.150879 -144.956116 40.657719 1.000000 1.000000 1.000000
+vn -0.774145 0.482397 0.409868
+v 162.946167 -144.829132 40.310120 1.000000 1.000000 1.000000
+vn -0.609008 0.674199 0.417809
+v 162.154358 -145.920288 40.541321 1.000000 1.000000 1.000000
+vn -0.390385 0.565786 0.726282
+v 162.317871 -146.105865 40.889118 1.000000 1.000000 1.000000
+vn -0.870596 0.490764 0.034839
+v 162.792953 -144.732849 39.485718 1.000000 1.000000 1.000000
+vn -0.892164 0.334372 0.303710
+v 163.228119 -144.201233 40.194118 1.000000 1.000000 1.000000
+vn -0.982777 0.180625 -0.039037
+v 163.255157 -143.488220 39.253319 1.000000 1.000000 1.000000
+vn -0.714937 0.696889 0.056661
+v 162.032043 -145.782135 39.717117 1.000000 1.000000 1.000000
+vn -0.840010 0.500010 -0.210648
+v 162.838013 -144.760757 39.030918 1.000000 1.000000 1.000000
+vn -0.886058 0.244280 -0.393990
+v 163.240997 -144.206818 38.517540 1.000000 1.000000 1.000000
+vn -0.688661 0.548201 -0.474575
+v 162.164673 -145.931442 38.864918 1.000000 1.000000 1.000000
+vn -0.728660 0.643997 -0.233072
+v 162.068100 -145.822617 39.262318 1.000000 1.000000 1.000000
+vn -0.802230 0.372874 -0.466253
+v 162.957748 -144.836121 38.633518 1.000000 1.000000 1.000000
+vn -0.432445 0.503740 -0.747822
+v 161.238968 -146.969574 38.760117 1.000000 1.000000 1.000000
+vn -0.504661 0.715716 -0.482771
+v 161.128250 -146.740738 39.094917 1.000000 1.000000 1.000000
+vn -0.562270 0.369579 -0.739773
+v 162.329468 -146.118423 38.530136 1.000000 1.000000 1.000000
+vn -0.533489 0.815272 -0.225212
+v 161.063858 -146.606781 39.492317 1.000000 1.000000 1.000000
+vn -0.512572 0.857235 0.049182
+v 161.039413 -146.557953 39.947121 1.000000 1.000000 1.000000
+vn -0.302451 0.692184 -0.655289
+v 159.955338 -147.463516 38.991718 1.000000 1.000000 1.000000
+vn -0.287855 0.840544 -0.458939
+v 159.908997 -147.210968 39.326519 1.000000 1.000000 1.000000
+vn -0.120972 0.872845 -0.472766
+v 159.260101 -147.300278 39.440720 1.000000 1.000000 1.000000
+vn -0.371246 0.928454 -0.012273
+v 160.470337 -146.828644 40.063316 1.000000 1.000000 1.000000
+vn -0.094266 0.668761 -0.737477
+v 159.002609 -147.565384 39.150116 1.000000 1.000000 1.000000
+vn -0.170488 0.266911 -0.948521
+v 159.285858 -147.795609 38.970116 1.000000 1.000000 1.000000
+vn -0.297384 0.195352 -0.934559
+v 161.340683 -147.178879 38.624321 1.000000 1.000000 1.000000
+vn 0.085347 0.882505 -0.462493
+v 158.352432 -147.257019 39.595741 1.000000 1.000000 1.000000
+vn 0.036048 0.606257 -0.794451
+v 157.643036 -147.353302 39.370739 1.000000 1.000000 1.000000
+vn 0.251447 0.616201 -0.746372
+v 156.392883 -146.729568 39.583336 1.000000 1.000000 1.000000
+vn 0.322578 0.838825 -0.438539
+v 157.094559 -146.855164 39.813137 1.000000 1.000000 1.000000
+vn 0.013101 0.999502 -0.028695
+v 159.003891 -147.102142 40.337120 1.000000 1.000000 1.000000
+vn -0.059972 0.963391 -0.261307
+v 159.252380 -147.149567 39.838120 1.000000 1.000000 1.000000
+vn -0.253228 0.960833 -0.112588
+v 159.870361 -147.008652 40.178719 1.000000 1.000000 1.000000
+vn -0.008334 0.972179 0.234092
+v 159.251099 -147.143997 40.723518 1.000000 1.000000 1.000000
+vn 0.325611 0.858022 0.397211
+v 157.713837 -147.090973 41.382137 1.000000 1.000000 1.000000
+vn 0.284581 0.957097 0.054581
+v 157.764053 -146.906784 40.557739 1.000000 1.000000 1.000000
+vn -0.111268 0.897431 0.426892
+v 159.906418 -147.195618 41.003120 1.000000 1.000000 1.000000
+vn 0.043447 0.880478 0.472092
+v 159.258820 -147.286316 41.117317 1.000000 1.000000 1.000000
+vn -0.071327 0.936465 0.343433
+v 159.271698 -147.541656 41.464920 1.000000 1.000000 1.000000
+vn -0.126722 0.671371 0.730208
+v 160.609390 -147.250031 41.235317 1.000000 1.000000 1.000000
+vn -0.230413 0.861020 0.453381
+v 160.529556 -147.008652 40.887718 1.000000 1.000000 1.000000
+vn 0.231065 0.783469 0.576875
+v 158.355011 -147.243057 41.272339 1.000000 1.000000 1.000000
+vn 0.227727 0.633693 0.739306
+v 158.321533 -147.495621 41.619919 1.000000 1.000000 1.000000
+vn 0.404383 0.550593 0.730289
+v 157.001862 -147.074219 41.837318 1.000000 1.000000 1.000000
+vn -0.490850 0.791629 0.363854
+v 161.666412 -146.362595 40.656120 1.000000 1.000000 1.000000
+vn -0.873295 0.216762 0.436314
+v 163.526825 -142.928680 39.975319 1.000000 1.000000 1.000000
+vn -0.660167 0.216317 0.719296
+v 163.761139 -142.957993 40.323120 1.000000 1.000000 1.000000
+vn -0.915495 0.052712 0.398861
+v 163.556427 -142.236603 39.860317 1.000000 1.000000 1.000000
+vn -0.702068 -0.007824 0.712067
+v 163.727661 -141.498474 40.091740 1.000000 1.000000 1.000000
+vn -0.987068 -0.160206 0.005464
+v 163.320816 -141.572418 38.919739 1.000000 1.000000 1.000000
+vn -0.999396 -0.011315 0.032850
+v 163.380051 -142.240799 39.035919 1.000000 1.000000 1.000000
+vn -0.972275 0.056045 -0.227025
+v 163.401932 -142.913330 38.696320 1.000000 1.000000 1.000000
+vn -0.964206 -0.150693 -0.218169
+v 163.371033 -141.562653 38.464939 1.000000 1.000000 1.000000
+vn -0.892578 0.014104 -0.450672
+v 163.539703 -142.930084 38.298721 1.000000 1.000000 1.000000
+vn -0.740792 0.082513 -0.666647
+v 163.671021 -143.598450 38.066319 1.000000 1.000000 1.000000
+vn -0.648380 0.218678 -0.729235
+v 163.163757 -144.964478 38.298721 1.000000 1.000000 1.000000
+vn -0.877255 -0.193504 -0.439295
+v 163.508789 -141.537537 38.067539 1.000000 1.000000 1.000000
+vn -0.688493 -0.128970 -0.713684
+v 163.808777 -142.229630 37.848919 1.000000 1.000000 1.000000
+vn -0.295705 0.075461 -0.952294
+v 162.480087 -146.288651 38.394119 1.000000 1.000000 1.000000
+vn -0.902522 -0.055159 0.427096
+v 163.494629 -141.540329 39.744141 1.000000 1.000000 1.000000
+vn -0.438096 0.832413 0.339354
+v 161.121796 -146.728180 40.771519 1.000000 1.000000 1.000000
+vn 0.473792 0.758079 0.448149
+v 157.100998 -146.842606 41.489738 1.000000 1.000000 1.000000
+vn 0.579597 0.721816 0.378218
+v 156.529358 -146.500748 41.594540 1.000000 1.000000 1.000000
+vn 0.707503 0.577226 0.407738
+v 155.897202 -145.966324 41.720718 1.000000 1.000000 1.000000
+vn 0.556708 0.828977 0.053599
+v 156.625916 -146.340271 40.770340 1.000000 1.000000 1.000000
+vn 0.735117 0.675965 0.051724
+v 156.018234 -145.825409 40.896339 1.000000 1.000000 1.000000
+vn 0.517924 0.818645 -0.248143
+v 156.597595 -146.386337 40.315536 1.000000 1.000000 1.000000
+vn 0.590629 0.649044 -0.479477
+v 155.888199 -145.977493 40.044140 1.000000 1.000000 1.000000
+vn 0.685050 0.690048 -0.233536
+v 155.983459 -145.867264 40.441540 1.000000 1.000000 1.000000
+vn 0.445884 0.753624 -0.482947
+v 156.521637 -146.513306 39.917938 1.000000 1.000000 1.000000
+vn 0.486545 0.639993 -0.594712
+v 155.725967 -146.165863 39.709339 1.000000 1.000000 1.000000
+vn -0.237433 -0.002078 -0.971402
+v 154.471970 -145.246338 39.768337 1.000000 1.000000 1.000000
+vn 0.450156 0.363629 -0.815557
+v 154.860779 -144.997971 39.909138 1.000000 1.000000 1.000000
+vn 0.723641 0.504690 -0.470779
+v 155.066788 -144.866806 40.243938 1.000000 1.000000 1.000000
+vn -0.339688 0.031808 -0.940000
+v 153.905472 -143.744949 39.957539 1.000000 1.000000 1.000000
+vn -0.653949 -0.158483 -0.739752
+v 153.910614 -144.617035 40.015339 1.000000 1.000000 1.000000
+vn -0.672962 0.009631 -0.739615
+v 153.528244 -142.960785 40.201340 1.000000 1.000000 1.000000
+vn -0.272178 0.121498 -0.954546
+v 153.750977 -142.112411 40.140938 1.000000 1.000000 1.000000
+vn -0.866601 -0.149985 -0.475928
+v 153.436829 -143.871933 40.452938 1.000000 1.000000 1.000000
+vn -0.894542 -0.039383 -0.445245
+v 153.292633 -142.987289 40.545738 1.000000 1.000000 1.000000
+vn -0.682485 0.113240 -0.722075
+v 153.505066 -142.101257 40.291939 1.000000 1.000000 1.000000
+vn -0.250147 0.180237 -0.951284
+v 154.031647 -140.510574 40.313938 1.000000 1.000000 1.000000
+vn -0.625867 0.273781 -0.730298
+v 153.798615 -140.424057 40.464939 1.000000 1.000000 1.000000
+vn -0.891443 0.079034 -0.446186
+v 153.268173 -142.090088 40.636337 1.000000 1.000000 1.000000
+vn -0.855870 0.196610 -0.478363
+v 153.363449 -141.199875 40.724339 1.000000 1.000000 1.000000
+vn -0.838660 0.308761 -0.448682
+v 153.574585 -140.341736 40.809540 1.000000 1.000000 1.000000
+vn -0.775256 0.410066 -0.480442
+v 153.874573 -139.567337 40.888138 1.000000 1.000000 1.000000
+vn -0.526328 0.424922 -0.736492
+v 154.493851 -138.939423 40.626137 1.000000 1.000000 1.000000
+vn -0.725876 0.516896 -0.453786
+v 154.299438 -138.792923 40.970737 1.000000 1.000000 1.000000
+vn -0.629581 0.603562 -0.489224
+v 154.822159 -138.093857 41.050938 1.000000 1.000000 1.000000
+vn -0.371142 0.550931 -0.747482
+v 155.579193 -137.687820 40.784340 1.000000 1.000000 1.000000
+vn -0.934684 0.311792 -0.170737
+v 153.448410 -140.294296 41.202740 1.000000 1.000000 1.000000
+vn -0.885915 0.430957 -0.171552
+v 153.756134 -139.501740 41.281338 1.000000 1.000000 1.000000
+vn -0.819208 0.546830 -0.172844
+v 154.191299 -138.710602 41.363739 1.000000 1.000000 1.000000
+vn -0.733339 0.657084 -0.174512
+v 154.725601 -137.996185 41.444138 1.000000 1.000000 1.000000
+vn -0.546383 0.698216 -0.462558
+v 155.431137 -137.486877 41.128738 1.000000 1.000000 1.000000
+vn -0.838301 0.524251 0.149709
+v 154.179703 -138.702225 42.179337 1.000000 1.000000 1.000000
+vn -0.755050 0.638071 0.150883
+v 154.715302 -137.986420 42.259537 1.000000 1.000000 1.000000
+vn -0.901877 0.405584 0.148727
+v 153.744537 -139.496170 42.096741 1.000000 1.000000 1.000000
+vn -0.852302 0.221519 0.473825
+v 153.579742 -140.343140 42.486538 1.000000 1.000000 1.000000
+vn -0.827711 0.340109 0.446342
+v 153.879715 -139.570114 42.565140 1.000000 1.000000 1.000000
+vn -0.947084 0.284841 0.147976
+v 153.436829 -140.290115 42.018139 1.000000 1.000000 1.000000
+vn -0.771975 0.448156 0.450789
+v 154.304596 -138.795715 42.647537 1.000000 1.000000 1.000000
+vn -0.686432 0.542285 0.484497
+v 154.826019 -138.098038 42.727940 1.000000 1.000000 1.000000
+vn -0.653103 0.741526 0.153607
+v 155.341019 -137.362701 42.337337 1.000000 1.000000 1.000000
+vn -0.597336 0.204714 0.775423
+v 154.090866 -139.684540 42.902939 1.000000 1.000000 1.000000
+vn -0.544509 0.255367 0.798935
+v 154.499008 -138.943619 42.985336 1.000000 1.000000 1.000000
+vn -0.667133 0.046328 0.743497
+v 153.601624 -141.248718 42.739140 1.000000 1.000000 1.000000
+vn -0.600950 0.628439 0.493886
+v 155.434998 -137.492477 42.805740 1.000000 1.000000 1.000000
+vn -0.507888 0.733070 0.452391
+v 156.108353 -136.994339 42.879936 1.000000 1.000000 1.000000
+vn -0.537498 0.829018 0.154357
+v 156.032394 -136.853409 42.411537 1.000000 1.000000 1.000000
+vn -0.411513 0.895431 0.169881
+v 156.797165 -136.445969 42.485138 1.000000 1.000000 1.000000
+vn -0.380650 0.907148 -0.179408
+v 156.801025 -136.459915 41.669540 1.000000 1.000000 1.000000
+vn -0.511161 0.840906 -0.177738
+v 156.038834 -136.864563 41.596138 1.000000 1.000000 1.000000
+vn -0.629643 0.756543 -0.176615
+v 155.348740 -137.373871 41.521938 1.000000 1.000000 1.000000
+vn -0.256554 0.951510 0.169731
+v 157.610840 -136.161316 42.557137 1.000000 1.000000 1.000000
+vn -0.112905 0.966641 0.229909
+v 158.451569 -136.006439 42.627136 1.000000 1.000000 1.000000
+vn -0.238191 0.954085 -0.181621
+v 157.613419 -136.173874 41.741539 1.000000 1.000000 1.000000
+vn 0.022320 0.985514 0.168121
+v 159.302597 -135.985504 42.694538 1.000000 1.000000 1.000000
+vn -0.086394 0.979531 -0.181812
+v 158.452850 -136.020386 41.811539 1.000000 1.000000 1.000000
+vn -0.052064 0.879619 -0.472821
+v 158.465729 -136.164108 41.418339 1.000000 1.000000 1.000000
+vn -0.181673 0.845146 -0.502716
+v 157.645599 -136.314804 41.348537 1.000000 1.000000 1.000000
+vn 0.066460 0.981183 -0.181280
+v 159.301315 -135.999466 41.879139 1.000000 1.000000 1.000000
+vn 0.083926 0.877491 -0.472193
+v 159.294861 -136.143173 41.485939 1.000000 1.000000 1.000000
+vn 0.256418 0.942827 0.212900
+v 160.125290 -136.094345 42.758141 1.000000 1.000000 1.000000
+vn 0.207720 0.959930 -0.188112
+v 160.122726 -136.108292 41.942738 1.000000 1.000000 1.000000
+vn 0.216356 0.838509 -0.500093
+v 160.096970 -136.249237 41.549538 1.000000 1.000000 1.000000
+vn 0.110170 0.656368 -0.746354
+v 159.283279 -136.399918 41.141541 1.000000 1.000000 1.000000
+vn -0.009037 0.646804 -0.762603
+v 158.487610 -136.419449 41.073936 1.000000 1.000000 1.000000
+vn 0.293507 0.592673 -0.750062
+v 160.821823 -136.727829 41.268139 1.000000 1.000000 1.000000
+vn 0.184019 0.230608 -0.955488
+v 160.740707 -136.978989 41.117138 1.000000 1.000000 1.000000
+vn 0.105664 0.258639 -0.960178
+v 159.270401 -136.666428 40.990540 1.000000 1.000000 1.000000
+vn 0.344063 0.813265 -0.469277
+v 160.900360 -136.485046 41.612740 1.000000 1.000000 1.000000
+vn 0.403546 0.461485 -0.790052
+v 162.235474 -137.528748 41.388538 1.000000 1.000000 1.000000
+vn 0.457626 0.737802 -0.496212
+v 161.665115 -136.843628 41.673920 1.000000 1.000000 1.000000
+vn 0.359522 0.903397 -0.233703
+v 160.944138 -136.348297 42.005737 1.000000 1.000000 1.000000
+vn 0.572015 0.678318 -0.461177
+v 162.374512 -137.319443 41.733116 1.000000 1.000000 1.000000
+vn 0.493243 0.838737 -0.230722
+v 161.726913 -136.716660 42.067120 1.000000 1.000000 1.000000
+vn 0.533482 0.421794 -0.733135
+v 162.848312 -138.088272 41.445538 1.000000 1.000000 1.000000
+vn 0.292650 0.082991 -0.952611
+v 163.589905 -139.570114 41.400539 1.000000 1.000000 1.000000
+vn 0.624165 0.273751 -0.731764
+v 163.804916 -139.440353 41.551537 1.000000 1.000000 1.000000
+vn 0.729865 0.482063 -0.484678
+v 163.551270 -138.558502 41.843117 1.000000 1.000000 1.000000
+vn 0.664573 0.591030 -0.457194
+v 163.013107 -137.904099 41.790119 1.000000 1.000000 1.000000
+vn 0.613074 0.756389 -0.228069
+v 162.451767 -137.203629 42.126137 1.000000 1.000000 1.000000
+vn 0.715808 0.660674 -0.226118
+v 163.105804 -137.800842 42.183121 1.000000 1.000000 1.000000
+vn 0.803856 0.387535 -0.451255
+v 164.012192 -139.314774 41.895920 1.000000 1.000000 1.000000
+vn 0.801840 0.554150 -0.223541
+v 163.656845 -138.470596 42.236320 1.000000 1.000000 1.000000
+vn 0.835793 0.267236 -0.479619
+v 164.367538 -140.135223 41.946716 1.000000 1.000000 1.000000
+vn 0.871368 0.437551 -0.221960
+v 164.128082 -139.243607 42.289120 1.000000 1.000000 1.000000
+vn 0.896872 0.440772 0.036624
+v 164.169266 -139.218491 42.694519 1.000000 1.000000 1.000000
+vn 0.816202 0.574379 -0.062474
+v 163.694183 -138.439911 42.641720 1.000000 1.000000 1.000000
+vn 0.709303 0.704525 0.023092
+v 163.139282 -137.764557 42.588718 1.000000 1.000000 1.000000
+vn 0.624318 0.780396 0.034767
+v 162.480087 -137.161774 42.531719 1.000000 1.000000 1.000000
+vn 0.478214 0.877212 0.042547
+v 161.748810 -136.670609 42.472519 1.000000 1.000000 1.000000
+vn 0.350071 0.932807 0.085567
+v 160.959579 -136.299454 42.411339 1.000000 1.000000 1.000000
+vn 0.923532 0.313631 -0.220735
+v 164.491150 -140.085007 42.339737 1.000000 1.000000 1.000000
+vn 0.932653 0.331550 0.142240
+v 164.536194 -140.065475 42.745319 1.000000 1.000000 1.000000
+vn -0.193798 0.575176 -0.794742
+v 156.940063 -136.831085 40.931938 1.000000 1.000000 1.000000
+vn -0.316989 0.824483 -0.468771
+v 156.851227 -136.592468 41.276539 1.000000 1.000000 1.000000
+vn -0.426396 0.756248 -0.496261
+v 156.105774 -136.988754 41.202938 1.000000 1.000000 1.000000
+vn 0.259397 -0.042360 -0.964841
+v 164.254242 -142.698456 41.586121 1.000000 1.000000 1.000000
+vn 0.253417 -0.140929 -0.957036
+v 163.945251 -144.308670 41.667919 1.000000 1.000000 1.000000
+vn -0.182256 0.022468 -0.982994
+v 164.021210 -142.683121 41.591316 1.000000 1.000000 1.000000
+vn -0.612105 -0.107342 -0.783457
+v 163.793335 -141.910095 41.682716 1.000000 1.000000 1.000000
+vn -0.652598 0.170606 -0.738248
+v 163.519104 -144.141235 41.808937 1.000000 1.000000 1.000000
+vn -0.924485 0.039519 -0.379165
+v 163.565445 -142.653809 42.061920 1.000000 1.000000 1.000000
+vn -0.266573 0.039569 -0.963002
+v 163.725082 -144.222168 41.673119 1.000000 1.000000 1.000000
+vn 0.186578 -0.212957 -0.959082
+v 162.817413 -146.281677 41.768936 1.000000 1.000000 1.000000
+vn -0.182565 0.106926 -0.977362
+v 162.647476 -146.108658 41.773918 1.000000 1.000000 1.000000
+vn -0.662998 0.372610 -0.649305
+v 162.938446 -145.349594 41.875519 1.000000 1.000000 1.000000
+vn -0.792517 0.264924 -0.549302
+v 163.296356 -144.051926 42.143719 1.000000 1.000000 1.000000
+vn -0.484514 0.656117 -0.578582
+v 161.524780 -146.795166 41.964737 1.000000 1.000000 1.000000
+vn -0.675162 0.623565 -0.394111
+v 162.316589 -145.766800 42.244518 1.000000 1.000000 1.000000
+vn -0.787421 0.452760 -0.418303
+v 162.742737 -145.201691 42.210320 1.000000 1.000000 1.000000
+vn -0.961616 0.206259 -0.180972
+v 163.340134 -143.337524 42.501717 1.000000 1.000000 1.000000
+vn -0.510669 0.712064 -0.481853
+v 161.399902 -146.574692 42.299519 1.000000 1.000000 1.000000
+vn -0.715291 0.655127 -0.243246
+v 162.216171 -145.663544 42.642120 1.000000 1.000000 1.000000
+vn -0.977831 0.003035 -0.209373
+v 163.426392 -142.644043 42.459320 1.000000 1.000000 1.000000
+vn -0.993912 -0.095257 0.055355
+v 163.367172 -141.950562 42.869720 1.000000 1.000000 1.000000
+vn -0.549337 0.789775 -0.272917
+v 161.327805 -146.446335 42.696918 1.000000 1.000000 1.000000
+vn -0.902193 0.379018 -0.205894
+v 160.539856 -146.901199 42.600319 1.000000 1.000000 1.000000
+vn -0.850898 0.265883 -0.453078
+v 160.620972 -147.142593 42.119720 1.000000 1.000000 1.000000
+vn -0.699539 -0.035833 -0.713695
+v 160.722687 -147.445389 41.876320 1.000000 1.000000 1.000000
+vn -0.419837 -0.599224 -0.681665
+v 160.872025 -147.865387 41.896519 1.000000 1.000000 1.000000
+vn -0.888835 0.112859 0.444113
+v 153.368591 -141.201263 42.401337 1.000000 1.000000 1.000000
+vn -0.896724 -0.008685 0.442504
+v 153.273331 -142.090088 42.313339 1.000000 1.000000 1.000000
+vn -0.869239 -0.130100 0.476967
+v 153.299072 -142.985901 42.222740 1.000000 1.000000 1.000000
+vn -0.976331 0.157970 0.147727
+v 153.219254 -141.170578 41.933140 1.000000 1.000000 1.000000
+vn -0.988786 0.024196 0.147367
+v 153.122681 -142.083115 41.844940 1.000000 1.000000 1.000000
+vn -0.983105 -0.107398 0.148224
+v 153.147141 -143.002640 41.754337 1.000000 1.000000 1.000000
+vn -0.982587 -0.076469 -0.169341
+v 153.160019 -143.001251 40.938938 1.000000 1.000000 1.000000
+vn -0.983977 0.055116 -0.169564
+v 153.134277 -142.083115 41.029537 1.000000 1.000000 1.000000
+vn -0.960033 -0.237802 0.147603
+v 153.295212 -143.911011 41.661537 1.000000 1.000000 1.000000
+vn -0.963801 -0.205763 -0.169558
+v 153.308075 -143.906815 40.846138 1.000000 1.000000 1.000000
+vn -0.967525 0.186871 -0.170219
+v 153.232117 -141.173355 41.117538 1.000000 1.000000 1.000000
+vn -0.852662 -0.270525 -0.446972
+v 153.690460 -144.713318 40.359737 1.000000 1.000000 1.000000
+vn -0.403802 -0.555661 0.726764
+v 161.157852 -137.722702 19.004200 1.000000 1.000000 1.000000
+vn -0.762228 -0.486092 0.427460
+v 162.513565 -139.212921 18.905800 1.000000 1.000000 1.000000
+vn -0.673325 -0.658956 0.335276
+v 162.086121 -138.723145 18.821198 1.000000 1.000000 1.000000
+vn -0.615065 -0.699069 0.364688
+v 161.593018 -138.298965 18.737997 1.000000 1.000000 1.000000
+vn -0.122579 -0.667559 0.734398
+v 159.262680 -137.174332 18.772400 1.000000 1.000000 1.000000
+vn 0.160337 -0.639782 0.751646
+v 157.305710 -137.506424 18.556999 1.000000 1.000000 1.000000
+vn -0.015789 -0.244568 0.969504
+v 157.219452 -137.256668 18.711597 1.000000 1.000000 1.000000
+vn 0.357947 -0.570534 0.739165
+v 156.163712 -138.177582 18.424797 1.000000 1.000000 1.000000
+vn 0.168643 -0.908863 0.381481
+v 157.989365 -137.548279 18.278599 1.000000 1.000000 1.000000
+vn 0.387722 -0.804713 0.449565
+v 156.824188 -138.025482 18.142197 1.000000 1.000000 1.000000
+vn 0.069351 -0.240993 0.968046
+v 156.016937 -137.962692 18.579399 1.000000 1.000000 1.000000
+vn 0.494817 -0.467277 0.732672
+v 155.437576 -138.891983 18.330399 1.000000 1.000000 1.000000
+vn 0.134658 -0.206242 0.969191
+v 155.254745 -138.713394 18.484997 1.000000 1.000000 1.000000
+vn 0.629905 -0.275376 0.726214
+v 154.462952 -140.707321 18.155998 1.000000 1.000000 1.000000
+vn 0.644457 -0.619182 0.448653
+v 155.613953 -139.062225 17.982800 1.000000 1.000000 1.000000
+vn 0.819346 -0.482634 0.309412
+v 155.231583 -139.592438 17.922600 1.000000 1.000000 1.000000
+vn 0.829646 -0.341585 0.441597
+v 154.685684 -140.788254 17.808399 1.000000 1.000000 1.000000
+vn 0.199651 -0.143096 0.969362
+v 154.228638 -140.622192 18.310600 1.000000 1.000000 1.000000
+vn 0.689846 -0.050106 0.722220
+v 154.217041 -142.565903 18.014797 1.000000 1.000000 1.000000
+vn 0.249003 -0.062009 0.966516
+v 153.971146 -142.577057 18.169197 1.000000 1.000000 1.000000
+vn 0.256756 0.010993 0.966414
+v 154.206741 -144.021240 18.072998 1.000000 1.000000 1.000000
+vn 0.243313 0.081062 0.966555
+v 154.783539 -145.339828 17.985197 1.000000 1.000000 1.000000
+vn 0.195544 0.139219 0.970763
+v 155.660309 -146.442139 17.904198 1.000000 1.000000 1.000000
+vn 0.119207 0.193533 0.973825
+v 157.456345 -147.552826 17.793800 1.000000 1.000000 1.000000
+vn 0.009645 0.275667 0.961205
+v 159.403015 -147.802597 17.705399 1.000000 1.000000 1.000000
+vn 0.635998 0.146890 0.757582
+v 154.441071 -143.940308 17.918400 1.000000 1.000000 1.000000
+vn 0.903629 -0.038203 0.426608
+v 154.452652 -142.556137 17.667000 1.000000 1.000000 1.000000
+vn 0.903638 0.138193 0.405390
+v 154.519592 -143.217514 17.618000 1.000000 1.000000 1.000000
+vn 0.605495 0.310013 0.732985
+v 154.989532 -145.193314 17.830597 1.000000 1.000000 1.000000
+vn 0.798835 0.407312 0.442673
+v 155.187805 -145.053787 17.482800 1.000000 1.000000 1.000000
+vn 0.889498 0.414382 0.192563
+v 155.297241 -144.977036 17.089199 1.000000 1.000000 1.000000
+vn 0.945517 0.321719 0.049954
+v 154.835037 -143.803558 16.746597 1.000000 1.000000 1.000000
+vn 0.987860 0.155350 -0.000022
+v 154.693405 -143.184036 16.793598 1.000000 1.000000 1.000000
+vn 0.600619 0.314241 -0.735194
+v 155.214844 -144.802628 16.328400 1.000000 1.000000 1.000000
+vn 0.622529 0.099197 -0.776284
+v 154.618744 -143.144958 16.326599 1.000000 1.000000 1.000000
+vn 0.969792 -0.048352 0.239095
+v 154.583984 -142.550552 17.273399 1.000000 1.000000 1.000000
+vn 0.999533 -0.029518 -0.007850
+v 154.631607 -142.113815 16.877197 1.000000 1.000000 1.000000
+vn 0.861353 -0.166883 0.479813
+v 154.529907 -141.434280 17.754200 1.000000 1.000000 1.000000
+vn 0.981526 -0.191317 -0.001948
+v 154.703720 -141.470566 16.929798 1.000000 1.000000 1.000000
+vn 0.913519 -0.402862 0.056438
+v 155.079666 -140.256622 17.040199 1.000000 1.000000 1.000000
+vn 0.630020 -0.076527 -0.772799
+v 154.589127 -141.658936 16.327198 1.000000 1.000000 1.000000
+vn 0.956609 -0.288926 -0.037696
+v 154.805420 -140.831497 16.529198 1.000000 1.000000 1.000000
+vn 0.500061 -0.278093 -0.820124
+v 155.176224 -139.671982 16.326599 1.000000 1.000000 1.000000
+vn 0.850930 -0.524665 -0.025403
+v 155.378342 -139.699890 17.098198 1.000000 1.000000 1.000000
+vn 0.686939 -0.685118 0.242339
+v 155.710526 -139.157104 17.588997 1.000000 1.000000 1.000000
+vn 0.725965 -0.687727 -0.002452
+v 155.951279 -138.957565 17.189198 1.000000 1.000000 1.000000
+vn 0.752327 -0.635467 -0.173740
+v 155.706665 -139.152908 16.703598 1.000000 1.000000 1.000000
+vn 0.319107 -0.413838 -0.852590
+v 156.440521 -138.192932 16.327400 1.000000 1.000000 1.000000
+vn 0.619002 -0.747319 -0.241559
+v 156.377441 -138.492920 16.798199 1.000000 1.000000 1.000000
+vn 0.601545 -0.798701 0.014822
+v 156.408340 -138.538971 17.252998 1.000000 1.000000 1.000000
+vn 0.455357 -0.676400 0.578906
+v 156.304047 -138.384094 18.077198 1.000000 1.000000 1.000000
+vn 0.412965 -0.910666 -0.012118
+v 157.452484 -137.925018 17.384998 1.000000 1.000000 1.000000
+vn 0.425077 -0.870391 -0.248453
+v 157.434448 -137.871994 16.930199 1.000000 1.000000 1.000000
+vn 0.120550 -0.428061 -0.895674
+v 157.948166 -137.348740 16.326599 1.000000 1.000000 1.000000
+vn 0.234645 -0.936985 -0.258846
+v 158.017685 -137.680832 16.999599 1.000000 1.000000 1.000000
+vn 0.176139 -0.855019 -0.487768
+v 157.986786 -137.534332 16.601997 1.000000 1.000000 1.000000
+vn 0.077912 -0.934127 0.348333
+v 158.624100 -137.440842 18.351597 1.000000 1.000000 1.000000
+vn 0.106194 -0.991870 0.070127
+v 158.639542 -137.630600 17.527397 1.000000 1.000000 1.000000
+vn -0.117907 -0.884283 0.451820
+v 159.249802 -137.429672 18.424797 1.000000 1.000000 1.000000
+vn -0.262087 -0.889419 0.374493
+v 159.858780 -137.510605 18.498798 1.000000 1.000000 1.000000
+vn -0.085154 -0.996224 0.016960
+v 159.239502 -137.620834 17.600401 1.000000 1.000000 1.000000
+vn -0.042955 -0.971762 -0.232021
+v 159.242081 -137.565018 17.145599 1.000000 1.000000 1.000000
+vn -0.356670 -0.823033 0.442044
+v 160.460037 -137.682236 18.575397 1.000000 1.000000 1.000000
+vn -0.474491 -0.754149 0.454002
+v 161.050995 -137.951523 18.656597 1.000000 1.000000 1.000000
+vn -0.285062 -0.958360 -0.016888
+v 160.403381 -137.863632 17.751198 1.000000 1.000000 1.000000
+vn -0.496561 -0.867795 0.018922
+v 160.971161 -138.121765 17.832199 1.000000 1.000000 1.000000
+vn -0.389010 -0.788164 -0.476937
+v 161.057434 -137.937576 16.980000 1.000000 1.000000 1.000000
+vn -0.513848 -0.817210 -0.261012
+v 160.994339 -138.072937 17.377399 1.000000 1.000000 1.000000
+vn -0.706961 -0.705003 0.056364
+v 161.966400 -138.865479 17.996998 1.000000 1.000000 1.000000
+vn -0.657714 -0.713047 -0.242850
+v 162.001160 -138.823608 17.542198 1.000000 1.000000 1.000000
+vn -0.549488 -0.684734 -0.478751
+v 162.095139 -138.713394 17.144600 1.000000 1.000000 1.000000
+vn -0.653332 -0.532356 -0.538288
+v 162.523865 -139.204544 17.229198 1.000000 1.000000 1.000000
+vn -0.438750 -0.602443 -0.666754
+v 162.256073 -138.523621 16.809799 1.000000 1.000000 1.000000
+vn -0.644782 -0.425722 -0.634836
+v 163.089066 -139.616165 16.980797 1.000000 1.000000 1.000000
+vn -0.112218 -0.231553 -0.966328
+v 162.876648 -138.887802 16.758598 1.000000 1.000000 1.000000
+vn -0.240436 -0.614086 -0.751724
+v 161.164291 -137.707352 16.645199 1.000000 1.000000 1.000000
+vn -0.018202 -0.267441 -0.963402
+v 161.262131 -137.496658 16.509399 1.000000 1.000000 1.000000
+vn 0.035507 -0.236656 -0.970945
+v 159.947617 -137.009689 16.351597 1.000000 1.000000 1.000000
+vn -0.028150 -0.646919 -0.762039
+v 159.906418 -137.242706 16.487400 1.000000 1.000000 1.000000
+vn 0.029477 -0.909373 -0.414936
+v 159.249802 -137.414337 16.748199 1.000000 1.000000 1.000000
+vn -0.205837 -0.751605 -0.626675
+v 160.463898 -137.668289 16.898998 1.000000 1.000000 1.000000
+vn 0.487298 0.467421 0.737603
+v 155.823822 -146.242599 17.749599 1.000000 1.000000 1.000000
+vn 0.641286 0.618253 0.454439
+v 155.980896 -146.051437 17.401997 1.000000 1.000000 1.000000
+vn 0.259281 0.627535 0.734149
+v 157.532303 -147.298874 17.639198 1.000000 1.000000 1.000000
+vn 0.486463 0.789587 0.374041
+v 157.044342 -146.814697 17.324997 1.000000 1.000000 1.000000
+vn 0.572140 0.799164 0.184374
+v 156.592438 -146.376556 16.966400 1.000000 1.000000 1.000000
+vn 0.683235 0.706529 0.184408
+v 156.068436 -145.945404 17.008400 1.000000 1.000000 1.000000
+vn 0.503538 0.491122 -0.710808
+v 155.951279 -145.786331 16.326599 1.000000 1.000000 1.000000
+vn 0.338868 0.595763 -0.728173
+v 156.807449 -146.474228 16.326599 1.000000 1.000000 1.000000
+vn 0.189533 0.703638 -0.684815
+v 157.923706 -146.959808 16.327000 1.000000 1.000000 1.000000
+vn 0.311155 0.852290 0.420456
+v 157.604401 -147.056091 17.291599 1.000000 1.000000 1.000000
+vn -0.026057 0.709027 -0.704699
+v 159.104324 -147.103531 16.326599 1.000000 1.000000 1.000000
+vn 0.145136 0.923229 0.355785
+v 158.191498 -147.215149 17.259800 1.000000 1.000000 1.000000
+vn 0.003009 0.657862 0.753133
+v 159.383698 -147.536087 17.550800 1.000000 1.000000 1.000000
+vn 0.003411 0.836046 0.548650
+v 159.365677 -147.280731 17.203197 1.000000 1.000000 1.000000
+vn -0.198741 0.964926 0.171524
+v 159.928314 -147.047714 16.783398 1.000000 1.000000 1.000000
+vn 0.428014 0.878217 0.213400
+v 160.534714 -146.895630 16.941799 1.000000 1.000000 1.000000
+vn 0.487405 0.684203 0.542496
+v 160.637711 -147.197006 17.473598 1.000000 1.000000 1.000000
+vn 0.382383 0.736458 -0.558044
+v 160.514114 -146.849579 16.326599 1.000000 1.000000 1.000000
+vn -0.335028 -0.914655 -0.226191
+v 161.031677 -148.356537 42.746319 1.000000 1.000000 1.000000
+vn 0.547015 -0.807887 -0.219302
+v 162.086121 -147.781662 42.712517 1.000000 1.000000 1.000000
+vn 0.490213 -0.738833 -0.462404
+v 162.016602 -147.658875 42.319321 1.000000 1.000000 1.000000
+vn 0.638826 -0.621244 -0.453826
+v 163.167618 -146.643066 42.264519 1.000000 1.000000 1.000000
+vn 0.719585 -0.667519 -0.191355
+v 163.264175 -146.742142 42.657516 1.000000 1.000000 1.000000
+vn 0.337959 -0.513311 -0.788857
+v 161.891708 -147.439804 41.974918 1.000000 1.000000 1.000000
+vn 0.485106 -0.464152 -0.741104
+v 162.996368 -146.465866 41.919918 1.000000 1.000000 1.000000
+vn 0.706544 -0.444175 -0.550912
+v 163.704498 -145.932846 42.230141 1.000000 1.000000 1.000000
+vn 0.804257 -0.552023 -0.220094
+v 163.812637 -146.015167 42.623119 1.000000 1.000000 1.000000
+vn 0.875010 -0.416079 -0.247458
+v 164.214325 -145.302155 42.590736 1.000000 1.000000 1.000000
+vn 0.823804 -0.325681 -0.463982
+v 164.398453 -144.487274 42.163521 1.000000 1.000000 1.000000
+vn 0.933026 -0.321848 -0.160863
+v 164.523331 -144.537506 42.556717 1.000000 1.000000 1.000000
+vn 0.959395 -0.196886 -0.201985
+v 164.755081 -143.657059 42.517120 1.000000 1.000000 1.000000
+vn 0.631747 -0.280119 -0.722793
+v 164.175705 -144.399368 41.818916 1.000000 1.000000 1.000000
+vn 0.858064 -0.187303 -0.478166
+v 164.625031 -143.627747 42.123917 1.000000 1.000000 1.000000
+vn 0.984092 -0.058564 -0.167730
+v 164.869659 -142.737518 42.474918 1.000000 1.000000 1.000000
+vn 0.892422 -0.071410 -0.445514
+v 164.737061 -142.729156 42.081718 1.000000 1.000000 1.000000
+vn 0.979586 0.060121 -0.191826
+v 164.859360 -141.811035 42.430519 1.000000 1.000000 1.000000
+vn 0.681839 -0.075155 -0.727632
+v 164.500153 -142.713806 41.737137 1.000000 1.000000 1.000000
+vn 0.878824 0.043414 -0.475166
+v 164.726746 -141.823578 42.037319 1.000000 1.000000 1.000000
+vn 0.963720 0.192918 -0.184461
+v 164.740921 -140.980804 42.388519 1.000000 1.000000 1.000000
+vn 0.880133 0.160850 -0.446646
+v 164.610886 -141.012894 41.995537 1.000000 1.000000 1.000000
+vn 0.677432 0.101121 -0.728602
+v 164.379135 -141.067307 41.650940 1.000000 1.000000 1.000000
+vn -0.649291 0.218461 0.728489
+v -163.954269 -139.771042 18.567398 1.000000 1.000000 1.000000
+vn -0.839627 0.195053 0.506933
+v -164.460236 -140.446381 18.162399 1.000000 1.000000 1.000000
+vn -0.631572 -0.065134 0.772577
+v -164.498856 -142.119385 18.371597 1.000000 1.000000 1.000000
+vn -0.313897 0.048158 0.948235
+v -163.753418 -139.877090 18.707798 1.000000 1.000000 1.000000
+vn -0.539279 0.348598 0.766588
+v -163.107101 -138.392456 18.709599 1.000000 1.000000 1.000000
+vn -0.425334 0.011135 0.904968
+v -164.196304 -141.351959 18.575798 1.000000 1.000000 1.000000
+vn -0.830455 0.332260 0.447156
+v -164.167984 -139.659424 18.229597 1.000000 1.000000 1.000000
+vn -0.333991 0.259063 0.906276
+v -162.423447 -138.004547 18.923199 1.000000 1.000000 1.000000
+vn 0.069136 -0.231949 0.970268
+v -162.268951 -138.201294 18.926998 1.000000 1.000000 1.000000
+vn -0.044601 -0.240014 0.969744
+v -160.456177 -137.133865 19.158798 1.000000 1.000000 1.000000
+vn -0.202907 0.368981 0.907018
+v -160.525696 -136.885498 19.154999 1.000000 1.000000 1.000000
+vn 0.171893 -0.187856 0.967038
+v -163.538406 -139.988724 18.711597 1.000000 1.000000 1.000000
+vn -0.643409 -0.250032 0.723539
+v -164.256821 -144.120300 18.222397 1.000000 1.000000 1.000000
+vn -0.281012 -0.137145 0.949854
+v -164.043106 -144.047745 18.362997 1.000000 1.000000 1.000000
+vn -0.329918 -0.251291 0.909949
+v -163.443130 -145.447266 18.252598 1.000000 1.000000 1.000000
+vn -0.897249 -0.014664 0.441282
+v -164.735764 -142.109634 18.033798 1.000000 1.000000 1.000000
+vn -0.841087 -0.138803 0.522787
+v -164.662369 -143.375198 17.942799 1.000000 1.000000 1.000000
+vn -0.835489 -0.301177 0.459620
+v -164.483414 -144.195663 17.884598 1.000000 1.000000 1.000000
+vn -0.430617 -0.444281 0.785610
+v -163.183060 -146.231445 18.059399 1.000000 1.000000 1.000000
+vn -0.852862 0.118620 0.508484
+v -164.649506 -141.264053 18.097397 1.000000 1.000000 1.000000
+vn -0.976016 0.154155 0.153717
+v -164.798859 -141.234756 17.629200 1.000000 1.000000 1.000000
+vn -0.980611 -0.042927 0.191204
+v -164.888977 -142.536606 17.534599 1.000000 1.000000 1.000000
+vn -0.966904 -0.161830 0.197253
+v -164.811722 -143.401718 17.474598 1.000000 1.000000 1.000000
+vn -0.989941 -0.134002 -0.045387
+v -164.846481 -143.407288 17.064400 1.000000 1.000000 1.000000
+vn -0.999178 0.040345 -0.004088
+v -164.921158 -142.101257 17.155399 1.000000 1.000000 1.000000
+vn -0.950386 0.273876 0.147510
+v -164.604431 -140.396164 17.694199 1.000000 1.000000 1.000000
+vn -0.907389 0.393257 0.148303
+v -164.304459 -139.588257 17.761200 1.000000 1.000000 1.000000
+vn -0.656280 -0.131251 -0.743014
+v -164.675247 -143.749146 16.326599 1.000000 1.000000 1.000000
+vn -0.957616 -0.283386 -0.051612
+v -164.661087 -144.255661 17.006397 1.000000 1.000000 1.000000
+vn -0.949210 0.033766 -0.312825
+v -164.873535 -142.104050 16.750000 1.000000 1.000000 1.000000
+vn -0.909191 -0.394431 -0.133400
+v -164.372696 -145.064941 16.950199 1.000000 1.000000 1.000000
+vn -0.587711 0.151130 -0.794831
+v -164.551651 -140.898468 16.326797 1.000000 1.000000 1.000000
+vn -0.545385 -0.385355 -0.744350
+v -163.499771 -146.405869 16.326797 1.000000 1.000000 1.000000
+vn -0.938842 -0.282000 0.197615
+v -164.627609 -144.244492 17.416397 1.000000 1.000000 1.000000
+vn -0.888951 -0.396578 0.229110
+v -164.341797 -145.049606 17.360197 1.000000 1.000000 1.000000
+vn -0.868173 -0.486221 -0.099319
+v -163.986450 -145.826797 16.896000 1.000000 1.000000 1.000000
+vn -0.467256 -0.556730 -0.686821
+v -162.653900 -147.368637 16.326599 1.000000 1.000000 1.000000
+vn -0.779900 -0.625880 -0.005441
+v -163.504929 -146.530045 16.843399 1.000000 1.000000 1.000000
+vn -0.832613 -0.516523 0.199902
+v -163.958130 -145.805878 17.306000 1.000000 1.000000 1.000000
+vn -0.723672 -0.426145 0.542862
+v -163.830658 -145.717957 17.774399 1.000000 1.000000 1.000000
+vn -0.668872 -0.592130 0.449436
+v -163.363312 -146.398880 17.721600 1.000000 1.000000 1.000000
+vn -0.697778 -0.697274 0.164056
+v -163.109680 -146.931900 17.218998 1.000000 1.000000 1.000000
+vn -0.609061 -0.777198 0.158142
+v -162.504562 -147.488647 17.169800 1.000000 1.000000 1.000000
+vn -0.524642 -0.656870 0.541547
+v -162.414444 -147.357483 17.638199 1.000000 1.000000 1.000000
+vn -0.305902 -0.591105 0.746337
+v -161.649673 -147.582123 17.928799 1.000000 1.000000 1.000000
+vn -0.409385 -0.780797 0.471974
+v -161.764252 -147.806778 17.591000 1.000000 1.000000 1.000000
+vn -0.092397 -0.609174 0.787636
+v -160.279785 -148.156998 17.840797 1.000000 1.000000 1.000000
+vn -0.116118 -0.277402 0.953711
+v -161.542816 -147.370026 18.069395 1.000000 1.000000 1.000000
+vn -0.501930 -0.853349 0.140930
+v -161.836349 -147.951889 17.122799 1.000000 1.000000 1.000000
+vn -0.178351 -0.851983 0.492256
+v -160.333862 -148.406769 17.503197 1.000000 1.000000 1.000000
+vn -0.372426 -0.902265 0.217292
+v -161.120514 -148.313278 17.077797 1.000000 1.000000 1.000000
+vn 0.185919 -0.610026 0.770261
+v -158.006104 -148.218399 17.718197 1.000000 1.000000 1.000000
+vn 0.044100 -0.415542 0.908504
+v -158.827515 -148.073288 17.900597 1.000000 1.000000 1.000000
+vn 0.022473 -0.822250 0.568682
+v -158.812057 -148.572815 17.422199 1.000000 1.000000 1.000000
+vn -0.223445 -0.961466 0.160175
+v -160.369904 -148.565842 17.034798 1.000000 1.000000 1.000000
+vn -0.113296 -0.978095 0.174627
+v -159.596130 -148.708160 16.993599 1.000000 1.000000 1.000000
+vn -0.260015 -0.696928 -0.668344
+v -160.933838 -148.429092 16.327999 1.000000 1.000000 1.000000
+vn 0.040941 -0.759821 -0.648842
+v -158.703918 -148.797455 16.326797 1.000000 1.000000 1.000000
+vn 0.047067 -0.975102 0.216703
+v -158.806915 -148.736069 16.953999 1.000000 1.000000 1.000000
+vn 0.219848 -0.847629 0.482900
+v -157.963608 -148.470947 17.380398 1.000000 1.000000 1.000000
+vn 0.218472 -0.964066 0.151154
+v -157.935287 -148.632813 16.911999 1.000000 1.000000 1.000000
+vn 0.314901 -0.928429 0.197123
+v -157.183395 -148.426300 16.876999 1.000000 1.000000 1.000000
+vn 0.289917 -0.685610 -0.667748
+v -156.842209 -148.327240 16.326797 1.000000 1.000000 1.000000
+vn 0.400257 -0.483167 0.778681
+v -155.992477 -147.344925 17.617798 1.000000 1.000000 1.000000
+vn 0.370735 -0.746085 0.553094
+v -156.524200 -147.964447 17.311798 1.000000 1.000000 1.000000
+vn 0.474379 -0.864735 0.164916
+v -156.458557 -148.112350 16.843597 1.000000 1.000000 1.000000
+vn 0.582768 -0.799906 0.143287
+v -155.778763 -147.696548 16.811798 1.000000 1.000000 1.000000
+vn 0.525157 -0.565846 -0.635632
+v -155.167206 -147.247253 16.326797 1.000000 1.000000 1.000000
+vn 0.550198 -0.697492 0.459116
+v -155.862442 -147.558411 17.279999 1.000000 1.000000 1.000000
+vn 0.204704 -0.339585 0.918029
+v -156.723770 -147.513763 17.790199 1.000000 1.000000 1.000000
+vn 0.484852 -0.374976 0.790134
+v -154.912277 -146.344467 17.561199 1.000000 1.000000 1.000000
+vn 0.766348 -0.632423 0.112919
+v -154.623886 -146.626328 16.755199 1.000000 1.000000 1.000000
+vn 0.686996 -0.561457 0.461305
+v -154.735901 -146.516083 17.223400 1.000000 1.000000 1.000000
+vn 0.824995 -0.545813 0.146531
+v -154.147522 -145.969116 16.729000 1.000000 1.000000 1.000000
+vn 0.918705 0.262686 0.294918
+v -153.788315 -145.162628 16.993797 1.000000 1.000000 1.000000
+vn 0.589007 0.375539 0.715571
+v -154.169403 -144.960297 17.642998 1.000000 1.000000 1.000000
+vn -0.140064 0.175689 0.974431
+v -155.257324 -146.009583 17.705399 1.000000 1.000000 1.000000
+vn 0.040545 0.224017 0.973741
+v -158.835236 -147.815140 17.904400 1.000000 1.000000 1.000000
+vn 0.116969 0.212862 0.970056
+v -160.171646 -147.670029 17.985197 1.000000 1.000000 1.000000
+vn 0.178076 0.171616 0.968936
+v -161.426941 -147.142593 18.072998 1.000000 1.000000 1.000000
+vn 0.224748 0.113722 0.967758
+v -162.516144 -146.270523 18.169399 1.000000 1.000000 1.000000
+vn 0.241302 0.024602 0.970138
+v -163.570587 -144.660309 18.310600 1.000000 1.000000 1.000000
+vn 0.130720 -0.085341 0.987739
+v -164.039246 -142.511490 18.484997 1.000000 1.000000 1.000000
+vn 0.242372 -0.145162 0.959262
+v -163.961990 -141.396606 18.579597 1.000000 1.000000 1.000000
+vn 0.830429 0.182661 -0.526329
+v -153.666000 -145.229599 16.326797 1.000000 1.000000 1.000000
+vn -0.967683 0.171516 -0.184854
+v -164.785965 -141.237549 16.813599 1.000000 1.000000 1.000000
+vn -0.932782 0.308225 -0.186857
+v -164.591553 -140.400345 16.878597 1.000000 1.000000 1.000000
+vn -0.881975 0.411918 -0.229005
+v -164.292877 -139.595230 16.945795 1.000000 1.000000 1.000000
+vn -0.142762 -0.208509 0.967545
+v -158.396210 -136.939911 19.407997 1.000000 1.000000 1.000000
+vn -0.071002 0.331457 0.940795
+v -158.367874 -136.683182 19.404198 1.000000 1.000000 1.000000
+vn -0.214791 -0.161641 0.963191
+v -157.064957 -137.322235 19.583397 1.000000 1.000000 1.000000
+vn 0.012140 0.312598 0.949808
+v -156.973541 -137.082245 19.579597 1.000000 1.000000 1.000000
+vn -0.259280 -0.086364 0.961933
+v -155.603668 -138.331070 19.814999 1.000000 1.000000 1.000000
+vn -0.545512 -0.421261 0.724538
+v -155.769745 -138.527802 19.660397 1.000000 1.000000 1.000000
+vn -0.282573 -0.012204 0.959168
+v -154.724319 -139.482208 20.007797 1.000000 1.000000 1.000000
+vn -0.386335 -0.557287 0.734967
+v -157.160233 -137.567825 19.428799 1.000000 1.000000 1.000000
+vn -0.649680 -0.253087 0.716843
+v -154.932877 -139.623154 19.853201 1.000000 1.000000 1.000000
+vn -0.272543 0.075737 0.959158
+v -154.156540 -140.874756 20.211998 1.000000 1.000000 1.000000
+vn -0.702171 -0.066176 0.708927
+v -154.394714 -140.947311 20.057400 1.000000 1.000000 1.000000
+vn -0.874459 -0.276553 0.398548
+v -154.833755 -140.373825 19.607597 1.000000 1.000000 1.000000
+vn -0.817515 -0.406746 0.407710
+v -155.133728 -139.757095 19.505600 1.000000 1.000000 1.000000
+vn -0.767752 -0.497064 0.404333
+v -155.500656 -139.204544 19.407799 1.000000 1.000000 1.000000
+vn -0.178430 0.115685 0.977128
+v -154.016190 -143.114273 20.529198 1.000000 1.000000 1.000000
+vn -0.588021 0.337462 0.735085
+v -154.468094 -144.029602 20.524799 1.000000 1.000000 1.000000
+vn 0.362916 0.055671 0.930157
+v -153.779297 -143.150543 20.525398 1.000000 1.000000 1.000000
+vn -0.818089 0.045907 0.573257
+v -154.214462 -142.358002 20.266197 1.000000 1.000000 1.000000
+vn -0.819573 0.355124 0.449652
+v -154.692123 -143.947281 20.177200 1.000000 1.000000 1.000000
+vn -0.897684 0.195358 0.394966
+v -154.493851 -143.043106 20.026798 1.000000 1.000000 1.000000
+vn -0.863749 0.093206 0.495228
+v -154.450073 -142.358002 19.918598 1.000000 1.000000 1.000000
+vn -0.915973 -0.048745 0.398268
+v -154.493851 -141.678467 19.812798 1.000000 1.000000 1.000000
+vn -0.964546 -0.252018 0.078347
+v -154.791260 -141.068710 18.885399 1.000000 1.000000 1.000000
+vn -0.947154 0.223261 0.230333
+v -154.623886 -143.022171 19.633198 1.000000 1.000000 1.000000
+vn -0.998240 -0.048012 -0.034797
+v -154.627747 -142.358002 19.094200 1.000000 1.000000 1.000000
+vn -0.930058 0.326316 0.168850
+v -154.815720 -143.901230 19.783398 1.000000 1.000000 1.000000
+vn -0.991484 0.130210 -0.001993
+v -154.668961 -143.015198 19.202599 1.000000 1.000000 1.000000
+vn -0.943916 0.275029 -0.182704
+v -154.810562 -143.902634 18.897999 1.000000 1.000000 1.000000
+vn -0.958312 0.145499 -0.245902
+v -154.618744 -143.023575 18.747799 1.000000 1.000000 1.000000
+vn -0.963068 -0.157026 -0.218733
+v -154.617447 -141.698013 18.533798 1.000000 1.000000 1.000000
+vn -0.911789 0.066345 -0.405265
+v -154.480972 -143.044495 18.350401 1.000000 1.000000 1.000000
+vn -0.860957 0.207759 -0.464316
+v -154.679245 -143.951462 18.500599 1.000000 1.000000 1.000000
+vn -0.582960 0.056209 -0.810554
+v -154.453949 -144.035187 18.165798 1.000000 1.000000 1.000000
+vn -0.869082 -0.095638 -0.485336
+v -154.199020 -142.358002 17.907200 1.000000 1.000000 1.000000
+vn -0.850266 -0.071854 -0.521426
+v -154.437210 -142.358002 18.241997 1.000000 1.000000 1.000000
+vn -0.814197 0.410041 -0.411035
+v -155.249603 -145.177963 18.727398 1.000000 1.000000 1.000000
+vn -0.838990 -0.261625 -0.477125
+v -154.608429 -141.012894 18.033199 1.000000 1.000000 1.000000
+vn -0.922560 -0.385791 -0.006885
+v -154.995972 -140.450577 18.783199 1.000000 1.000000 1.000000
+vn -0.754487 -0.159790 -0.636566
+v -154.244080 -141.640793 17.801399 1.000000 1.000000 1.000000
+vn 0.164523 -0.195139 -0.966878
+v -154.025208 -144.192856 18.024799 1.000000 1.000000 1.000000
+vn -0.220600 -0.180097 -0.958593
+v -154.168121 -140.877548 17.562399 1.000000 1.000000 1.000000
+vn 0.189618 -0.094008 -0.977347
+v -154.536331 -139.355240 17.353397 1.000000 1.000000 1.000000
+vn -0.635088 -0.536405 -0.555818
+v -155.122147 -139.750122 17.828999 1.000000 1.000000 1.000000
+vn -0.889377 -0.157356 0.429242
+v -154.621307 -141.017090 19.709797 1.000000 1.000000 1.000000
+vn -0.857296 -0.512643 0.047333
+v -155.284363 -139.858963 18.681198 1.000000 1.000000 1.000000
+vn -0.820501 -0.527881 -0.219360
+v -155.240601 -139.829651 18.226398 1.000000 1.000000 1.000000
+vn -0.705988 -0.705971 0.056454
+v -156.049133 -138.858490 18.488400 1.000000 1.000000 1.000000
+vn -0.669907 -0.612923 0.418986
+v -155.929398 -138.717575 19.312798 1.000000 1.000000 1.000000
+vn -0.478405 -0.877498 -0.033565
+v -157.046936 -138.114792 18.301598 1.000000 1.000000 1.000000
+vn -0.672541 -0.697701 -0.246783
+v -156.014374 -138.816635 18.033600 1.000000 1.000000 1.000000
+vn -0.592706 -0.649305 -0.476553
+v -155.920380 -138.706406 17.636200 1.000000 1.000000 1.000000
+vn 0.043788 -0.820106 -0.570533
+v -154.920013 -139.614761 17.494198 1.000000 1.000000 1.000000
+vn -0.484077 -0.761235 -0.431498
+v -156.412201 -138.282227 17.542198 1.000000 1.000000 1.000000
+vn -0.394164 -0.536871 -0.745925
+v -155.759445 -138.515259 17.301399 1.000000 1.000000 1.000000
+vn -0.088765 -0.240166 -0.966665
+v -155.611389 -138.340836 17.165600 1.000000 1.000000 1.000000
+vn -0.265136 -0.738974 -0.619371
+v -156.855087 -137.700363 17.114597 1.000000 1.000000 1.000000
+vn -0.408974 -0.874742 -0.259936
+v -157.299271 -137.929199 17.801998 1.000000 1.000000 1.000000
+vn -0.292447 -0.831805 -0.471779
+v -157.246490 -137.791061 17.404598 1.000000 1.000000 1.000000
+vn 0.268212 0.106833 -0.957418
+v -155.454300 -138.153854 17.160397 1.000000 1.000000 1.000000
+vn -0.154796 -0.740256 -0.654262
+v -157.780792 -137.322235 16.980797 1.000000 1.000000 1.000000
+vn -0.078661 -0.826455 -0.557480
+v -158.452850 -137.443634 17.229198 1.000000 1.000000 1.000000
+vn 0.054682 -0.966596 -0.250403
+v -159.074707 -137.559448 17.542198 1.000000 1.000000 1.000000
+vn -0.243528 -0.969791 0.014141
+v -157.890228 -137.771530 18.167797 1.000000 1.000000 1.000000
+vn -0.493032 -0.834662 0.245475
+v -157.301849 -137.934799 18.687399 1.000000 1.000000 1.000000
+vn -0.224751 -0.934154 0.277206
+v -158.470871 -137.599899 18.511997 1.000000 1.000000 1.000000
+vn 0.012504 -0.998152 0.059472
+v -159.073425 -137.613861 17.996998 1.000000 1.000000 1.000000
+vn -0.463907 -0.761139 0.453274
+v -157.251633 -137.803635 19.081200 1.000000 1.000000 1.000000
+vn -0.561670 -0.671863 0.482832
+v -156.419922 -138.293396 19.218800 1.000000 1.000000 1.000000
+vn -0.197344 -0.873334 0.445358
+v -158.455429 -137.458984 18.905800 1.000000 1.000000 1.000000
+vn -0.175408 -0.646384 0.742577
+v -158.425827 -137.205032 19.253399 1.000000 1.000000 1.000000
+vn 0.000510 -0.937227 0.348720
+v -159.075989 -137.422699 18.821198 1.000000 1.000000 1.000000
+vn 0.123699 -0.668109 0.733709
+v -160.385361 -137.389206 19.004200 1.000000 1.000000 1.000000
+vn 0.076093 -0.923384 0.376260
+v -159.703003 -137.481308 18.737997 1.000000 1.000000 1.000000
+vn 0.290809 -0.956600 0.018609
+v -160.265640 -137.817581 17.832397 1.000000 1.000000 1.000000
+vn 0.221425 -0.859836 0.460058
+v -160.317123 -137.633392 18.656597 1.000000 1.000000 1.000000
+vn 0.501010 -0.865301 -0.015603
+v -160.842422 -138.054794 17.751198 1.000000 1.000000 1.000000
+vn 0.354399 -0.823700 0.442629
+v -160.917099 -137.880371 18.575600 1.000000 1.000000 1.000000
+vn 0.466096 -0.803425 0.370491
+v -161.461700 -138.202682 18.498798 1.000000 1.000000 1.000000
+vn 0.404112 -0.555185 0.726955
+v -162.109299 -138.405014 18.772400 1.000000 1.000000 1.000000
+vn 0.659443 -0.751567 0.016791
+v -161.841507 -138.745468 17.600401 1.000000 1.000000 1.000000
+vn 0.560900 -0.699740 0.442442
+v -161.956085 -138.598969 18.424797 1.000000 1.000000 1.000000
+vn 0.779396 -0.622769 0.068569
+v -162.270233 -139.200363 17.527397 1.000000 1.000000 1.000000
+vn 0.724607 -0.603109 0.333474
+v -162.401566 -139.073380 18.351597 1.000000 1.000000 1.000000
+vn 0.765653 -0.530208 0.364218
+v -162.794235 -139.625931 18.278797 1.000000 1.000000 1.000000
+vn 0.578273 -0.352754 0.735639
+v -163.316956 -140.104538 18.556999 1.000000 1.000000 1.000000
+vn 0.926583 -0.375932 -0.010917
+v -162.944870 -140.298492 17.384998 1.000000 1.000000 1.000000
+vn 0.843892 -0.323361 0.428117
+v -163.336273 -140.839874 18.142197 1.000000 1.000000 1.000000
+vn 0.982473 -0.185825 0.014687
+v -163.313095 -141.523590 17.252998 1.000000 1.000000 1.000000
+vn 0.636227 -0.237760 0.733952
+v -163.718658 -141.444061 18.424999 1.000000 1.000000 1.000000
+vn 0.897828 -0.016639 0.440033
+v -163.556427 -142.496140 17.982800 1.000000 1.000000 1.000000
+vn 0.734348 0.130736 0.666064
+v -163.579605 -143.892868 18.212200 1.000000 1.000000 1.000000
+vn 0.306644 -0.822116 -0.479682
+v -160.320999 -137.619446 16.980000 1.000000 1.000000 1.000000
+vn 0.240943 -0.933565 -0.265335
+v -160.281067 -137.764557 17.377598 1.000000 1.000000 1.000000
+vn 0.669486 -0.708016 -0.224725
+v -161.874985 -138.703613 17.145599 1.000000 1.000000 1.000000
+vn 0.115222 -0.864050 -0.490042
+v -159.075989 -137.408737 17.144798 1.000000 1.000000 1.000000
+vn 0.130565 -0.725256 -0.675985
+v -159.079849 -137.150604 16.809998 1.000000 1.000000 1.000000
+vn 0.282791 -0.596669 -0.751009
+v -160.389221 -137.372467 16.645199 1.000000 1.000000 1.000000
+vn 0.183330 -0.204114 -0.961628
+v -160.452316 -137.146423 16.509399 1.000000 1.000000 1.000000
+vn 0.090762 -0.239088 -0.966747
+v -158.397491 -136.952469 16.758598 1.000000 1.000000 1.000000
+vn 0.200561 -0.151040 -0.967968
+v -161.715332 -137.774323 16.351597 1.000000 1.000000 1.000000
+vn 0.407295 -0.669178 -0.621540
+v -160.922241 -137.867813 16.898998 1.000000 1.000000 1.000000
+vn 0.454976 -0.478928 -0.750750
+v -161.598175 -137.973862 16.487400 1.000000 1.000000 1.000000
+vn 0.398839 -0.236426 -0.886020
+v -162.950027 -139.511520 16.326797 1.000000 1.000000 1.000000
+vn 0.674792 -0.620525 -0.399506
+v -161.965103 -138.587799 16.748199 1.000000 1.000000 1.000000
+vn 0.827408 -0.504599 -0.246530
+v -162.689957 -139.701279 16.999599 1.000000 1.000000 1.000000
+vn 0.736765 -0.488774 -0.467201
+v -162.804550 -139.617554 16.602200 1.000000 1.000000 1.000000
+vn 0.909542 -0.342953 -0.234768
+v -162.991226 -140.274765 16.930199 1.000000 1.000000 1.000000
+vn 0.313906 -0.057197 -0.947730
+v -153.944092 -140.809174 17.557400 1.000000 1.000000 1.000000
+vn 0.275598 -0.148603 -0.949717
+v -153.797333 -143.147766 17.874599 1.000000 1.000000 1.000000
+vn 0.575107 -0.351323 -0.738799
+v -154.085724 -145.039825 18.288399 1.000000 1.000000 1.000000
+vn 0.093305 -0.227382 -0.969325
+v -154.681824 -145.603546 18.251598 1.000000 1.000000 1.000000
+vn 0.787179 -0.409324 -0.461305
+v -153.874573 -145.155640 18.632797 1.000000 1.000000 1.000000
+vn 0.503653 -0.468468 -0.725859
+v -154.478409 -145.755630 18.402599 1.000000 1.000000 1.000000
+vn 0.669006 -0.182472 -0.720511
+v -153.552704 -143.185425 18.025597 1.000000 1.000000 1.000000
+vn 0.071972 -0.264862 -0.961597
+v -155.637131 -146.733765 18.472797 1.000000 1.000000 1.000000
+vn 0.720297 -0.551212 -0.421115
+v -154.283997 -145.902145 18.747200 1.000000 1.000000 1.000000
+vn 0.377717 -0.560814 -0.736762
+v -155.478775 -146.938873 18.623997 1.000000 1.000000 1.000000
+vn 0.878946 -0.445826 -0.169392
+v -153.756134 -145.219818 19.025997 1.000000 1.000000 1.000000
+vn 0.910025 -0.316549 -0.267679
+v -153.441986 -144.407745 18.913399 1.000000 1.000000 1.000000
+vn 0.554700 -0.686779 -0.469726
+v -155.326843 -147.135620 18.968399 1.000000 1.000000 1.000000
+vn 0.739356 -0.638059 -0.215019
+v -154.640625 -146.622147 19.245197 1.000000 1.000000 1.000000
+vn 0.426313 -0.756694 -0.495653
+v -155.982178 -147.647705 19.083797 1.000000 1.000000 1.000000
+vn 0.641042 -0.746817 -0.177002
+v -155.241882 -147.247253 19.361597 1.000000 1.000000 1.000000
+vn 0.844107 -0.510587 0.163660
+v -154.164246 -145.991440 19.955799 1.000000 1.000000 1.000000
+vn 0.902453 -0.403674 0.150415
+v -153.744537 -145.226807 19.841400 1.000000 1.000000 1.000000
+vn 0.769196 -0.620989 0.150701
+v -154.631607 -146.630508 20.060799 1.000000 1.000000 1.000000
+vn 0.676760 -0.720235 0.152504
+v -155.234146 -147.257019 20.176998 1.000000 1.000000 1.000000
+vn 0.567113 -0.809100 0.154081
+v -155.904938 -147.781662 20.292400 1.000000 1.000000 1.000000
+vn 0.633352 -0.603209 0.484773
+v -155.330719 -147.131439 20.645397 1.000000 1.000000 1.000000
+vn 0.442357 -0.883344 0.154995
+v -156.645233 -148.204437 20.408798 1.000000 1.000000 1.000000
+vn 0.398809 -0.899262 -0.179666
+v -156.650375 -148.190491 19.593399 1.000000 1.000000 1.000000
+vn 0.526942 -0.830946 -0.178495
+v -155.912659 -147.770493 19.476801 1.000000 1.000000 1.000000
+vn 0.545818 -0.700961 0.459061
+v -155.984756 -147.642120 20.760597 1.000000 1.000000 1.000000
+vn 0.304013 -0.939615 0.157159
+v -157.430603 -148.507233 20.524998 1.000000 1.000000 1.000000
+vn 0.433657 -0.754296 0.492930
+v -156.705734 -148.053757 20.877197 1.000000 1.000000 1.000000
+vn 0.452692 -0.480753 0.750964
+v -156.109634 -147.424454 21.098400 1.000000 1.000000 1.000000
+vn 0.298985 -0.828065 0.474253
+v -157.471786 -148.348160 20.993397 1.000000 1.000000 1.000000
+vn 0.282602 -0.594640 0.752688
+v -157.534882 -148.101196 21.330997 1.000000 1.000000 1.000000
+vn 0.170098 -0.958081 0.230539
+v -158.241699 -148.684433 20.640198 1.000000 1.000000 1.000000
+vn 0.253970 -0.949613 -0.183668
+v -157.434448 -148.493271 19.709599 1.000000 1.000000 1.000000
+vn 0.088999 -0.891224 0.444746
+v -158.961411 -148.572815 21.208797 1.000000 1.000000 1.000000
+vn 0.117539 -0.626614 0.770415
+v -158.962708 -148.316071 21.546600 1.000000 1.000000 1.000000
+vn 0.188158 -0.295867 0.936514
+v -158.320251 -148.025833 21.586800 1.000000 1.000000 1.000000
+vn 0.273553 -0.243657 0.930484
+v -156.891144 -147.596085 21.355400 1.000000 1.000000 1.000000
+vn -0.055848 -0.864776 0.499042
+v -159.775101 -148.518402 21.325397 1.000000 1.000000 1.000000
+vn -0.118817 -0.979311 0.163804
+v -159.795700 -148.680252 20.857197 1.000000 1.000000 1.000000
+vn -0.087894 -0.658133 0.747754
+v -160.503815 -148.091431 21.778999 1.000000 1.000000 1.000000
+vn 0.054646 -0.313462 0.948027
+v -160.443298 -147.858414 21.919598 1.000000 1.000000 1.000000
+vn 0.219260 0.166848 0.961294
+v -160.377640 -147.608643 21.923397 1.000000 1.000000 1.000000
+vn 0.271951 0.069643 0.959788
+v -162.247055 -146.534225 22.270397 1.000000 1.000000 1.000000
+vn -0.090674 -0.297139 0.950519
+v -162.401566 -146.732376 22.266598 1.000000 1.000000 1.000000
+vn 0.281636 -0.029987 0.959053
+v -163.544846 -144.720306 22.617397 1.000000 1.000000 1.000000
+vn -0.251789 -0.262714 0.931442
+v -163.759857 -144.831924 22.613800 1.000000 1.000000 1.000000
+vn -0.239831 -0.581353 0.777502
+v -161.917465 -147.411896 22.010399 1.000000 1.000000 1.000000
+vn -0.382417 -0.556442 0.737651
+v -162.544464 -146.917953 22.125999 1.000000 1.000000 1.000000
+vn -0.549905 -0.696581 0.460847
+v -162.697678 -147.113297 21.788200 1.000000 1.000000 1.000000
+vn -0.441838 -0.768472 0.462850
+v -162.043640 -147.629578 21.672600 1.000000 1.000000 1.000000
+vn -0.313354 -0.809756 0.496090
+v -161.325226 -148.041199 21.556400 1.000000 1.000000 1.000000
+vn -0.472153 -0.427569 0.770880
+v -163.573166 -145.671921 22.356800 1.000000 1.000000 1.000000
+vn -0.630703 -0.605031 0.485954
+v -163.275757 -146.504929 21.903599 1.000000 1.000000 1.000000
+vn -0.614983 -0.273646 0.739536
+v -164.247803 -144.151001 22.589397 1.000000 1.000000 1.000000
+vn -0.774224 -0.412331 0.480168
+v -164.174423 -145.048203 22.135399 1.000000 1.000000 1.000000
+vn -0.725435 -0.519099 0.451974
+v -163.770157 -145.814240 22.018997 1.000000 1.000000 1.000000
+vn -0.830300 -0.536469 0.151006
+v -163.896332 -145.904938 21.550598 1.000000 1.000000 1.000000
+vn -0.748626 -0.645127 0.152872
+v -163.389053 -146.613754 21.435398 1.000000 1.000000 1.000000
+vn -0.895416 -0.419477 0.149231
+v -164.310898 -145.119354 21.667198 1.000000 1.000000 1.000000
+vn -0.909325 -0.379622 -0.170337
+v -164.299301 -145.112381 20.851597 1.000000 1.000000 1.000000
+vn -0.773207 -0.609990 -0.173389
+v -163.380051 -146.605392 20.619797 1.000000 1.000000 1.000000
+vn -0.849718 -0.498365 -0.172079
+v -163.886032 -145.897949 20.735197 1.000000 1.000000 1.000000
+vn -0.679950 -0.711979 -0.175371
+v -162.786514 -147.229111 20.504398 1.000000 1.000000 1.000000
+vn -0.650123 -0.743982 0.154373
+v -162.795532 -147.240280 21.320000 1.000000 1.000000 1.000000
+vn -0.570270 -0.802007 -0.177702
+v -162.117020 -147.756546 20.388798 1.000000 1.000000 1.000000
+vn -0.534654 -0.830711 0.155129
+v -162.123459 -147.767700 21.204399 1.000000 1.000000 1.000000
+vn -0.714502 -0.505652 -0.483532
+v -163.280914 -146.509109 20.226801 1.000000 1.000000 1.000000
+vn -0.642987 -0.613966 -0.457836
+v -162.701538 -147.118866 20.111397 1.000000 1.000000 1.000000
+vn -0.407910 -0.899338 0.157484
+v -161.387024 -148.191895 21.088200 1.000000 1.000000 1.000000
+vn -0.547953 -0.697120 -0.462354
+v -162.046219 -147.633759 19.995800 1.000000 1.000000 1.000000
+vn -0.447604 -0.875990 -0.179699
+v -161.381882 -148.179321 20.272598 1.000000 1.000000 1.000000
+vn -0.311483 -0.932860 -0.180971
+v -160.606812 -148.483521 20.157597 1.000000 1.000000 1.000000
+vn -0.268511 -0.950286 0.157666
+v -160.609390 -148.496078 20.973000 1.000000 1.000000 1.000000
+vn -0.196483 -0.861463 0.468269
+v -160.568176 -148.338394 21.441399 1.000000 1.000000 1.000000
+vn -0.436919 -0.751191 -0.494787
+v -161.327805 -148.046768 19.879597 1.000000 1.000000 1.000000
+vn -0.178277 -0.965693 -0.188822
+v -159.793121 -148.666306 20.041599 1.000000 1.000000 1.000000
+vn -0.320890 -0.822840 -0.469003
+v -160.569473 -148.343979 19.764397 1.000000 1.000000 1.000000
+vn -0.004210 -0.999595 0.028162
+v -158.960129 -148.775131 20.330597 1.000000 1.000000 1.000000
+vn -0.021866 -0.961401 -0.274283
+v -158.960129 -148.723511 19.924999 1.000000 1.000000 1.000000
+vn 0.175902 -0.983214 -0.048458
+v -158.236557 -148.720718 20.230198 1.000000 1.000000 1.000000
+vn -0.178016 -0.860268 -0.477755
+v -159.776382 -148.523972 19.648598 1.000000 1.000000 1.000000
+vn 0.044936 -0.897121 -0.439494
+v -158.259735 -148.526764 19.431599 1.000000 1.000000 1.000000
+vn 0.181890 -0.846393 -0.500535
+v -157.470505 -148.353745 19.316399 1.000000 1.000000 1.000000
+vn -0.168809 -0.592393 -0.787766
+v -159.744202 -148.270035 19.303999 1.000000 1.000000 1.000000
+vn -0.033684 -0.665718 -0.745443
+v -158.290634 -148.272812 19.086998 1.000000 1.000000 1.000000
+vn -0.317068 -0.591706 -0.741183
+v -160.505096 -148.097000 19.419998 1.000000 1.000000 1.000000
+vn -0.238037 -0.214085 -0.947368
+v -160.438156 -147.840271 19.268799 1.000000 1.000000 1.000000
+vn -0.117838 -0.288417 -0.950226
+v -158.322815 -148.007706 18.935999 1.000000 1.000000 1.000000
+vn 0.181864 -0.639168 -0.747255
+v -156.798447 -147.823517 18.855797 1.000000 1.000000 1.000000
+vn -0.310405 -0.102602 -0.945051
+v -162.389969 -146.718414 19.615799 1.000000 1.000000 1.000000
+vn -0.416651 -0.456142 -0.786343
+v -161.921326 -147.416092 19.651199 1.000000 1.000000 1.000000
+vn -0.542952 -0.412477 -0.731483
+v -162.548325 -146.922134 19.766800 1.000000 1.000000 1.000000
+vn -0.317273 0.017443 -0.948174
+v -163.744400 -144.823547 19.962997 1.000000 1.000000 1.000000
+vn -0.572924 -0.252606 -0.779711
+v -163.578323 -145.674713 19.997597 1.000000 1.000000 1.000000
+vn -0.670511 -0.175788 -0.720773
+v -163.965851 -144.939362 20.113998 1.000000 1.000000 1.000000
+vn -0.307275 0.100557 -0.946293
+v -164.189865 -143.294266 20.194395 1.000000 1.000000 1.000000
+vn -0.789364 -0.416187 -0.451324
+v -163.775299 -145.817032 20.341999 1.000000 1.000000 1.000000
+vn -0.839428 -0.308396 -0.447496
+v -164.179565 -145.050995 20.458599 1.000000 1.000000 1.000000
+vn -0.693078 0.009036 -0.720806
+v -164.433212 -143.338913 20.345398 1.000000 1.000000 1.000000
+vn -0.859875 -0.185828 -0.475482
+v -164.479553 -144.230530 20.574799 1.000000 1.000000 1.000000
+vn -0.235531 0.210227 -0.948857
+v -164.107468 -140.984985 20.528999 1.000000 1.000000 1.000000
+vn -0.909074 -0.068386 -0.410984
+v -164.666245 -143.380783 20.689800 1.000000 1.000000 1.000000
+vn -0.621292 0.131347 -0.772492
+v -164.479553 -141.751022 20.564198 1.000000 1.000000 1.000000
+vn -0.954881 -0.245248 -0.167501
+v -164.605728 -144.273788 20.967800 1.000000 1.000000 1.000000
+vn -0.943803 -0.295199 0.148641
+v -164.618607 -144.277985 21.783398 1.000000 1.000000 1.000000
+vn -0.978167 -0.020702 -0.206787
+v -164.872238 -142.614731 21.185200 1.000000 1.000000 1.000000
+vn -0.971294 -0.174485 0.161689
+v -164.810425 -143.407288 21.898399 1.000000 1.000000 1.000000
+vn -0.882458 0.128017 -0.452637
+v -164.715164 -141.725906 20.908600 1.000000 1.000000 1.000000
+vn -0.633299 0.267278 -0.726289
+v -164.345657 -140.920807 20.680000 1.000000 1.000000 1.000000
+vn -0.857058 0.256171 -0.447021
+v -164.576126 -140.859406 21.024597 1.000000 1.000000 1.000000
+vn -0.978928 0.113571 -0.169714
+v -164.847778 -141.710556 21.301800 1.000000 1.000000 1.000000
+vn -0.987876 -0.051820 0.146343
+v -164.885101 -142.616135 22.000599 1.000000 1.000000 1.000000
+vn -0.968181 0.202528 0.146995
+v -164.717743 -140.821747 22.233200 1.000000 1.000000 1.000000
+vn -0.986422 0.073670 0.146779
+v -164.860641 -141.709167 22.117199 1.000000 1.000000 1.000000
+vn -0.955323 0.241790 -0.169989
+v -164.704865 -140.824524 21.417599 1.000000 1.000000 1.000000
+vn -0.887217 -0.107535 0.448646
+v -164.734467 -142.609161 22.468998 1.000000 1.000000 1.000000
+vn -0.896382 0.025769 0.442533
+v -164.710007 -141.725906 22.585598 1.000000 1.000000 1.000000
+vn -0.842501 -0.291768 0.452840
+v -164.473114 -144.229141 22.251598 1.000000 1.000000 1.000000
+vn -0.645971 -0.130525 0.752120
+v -164.497574 -142.599380 22.806799 1.000000 1.000000 1.000000
+vn -0.870292 0.136099 0.473359
+v -164.570969 -140.860809 22.701397 1.000000 1.000000 1.000000
+vn -0.932766 0.328414 0.148634
+v -164.462814 -139.969193 22.348400 1.000000 1.000000 1.000000
+vn -0.857446 0.258716 0.444806
+v -164.321198 -140.030579 22.816595 1.000000 1.000000 1.000000
+vn -0.635091 0.134340 0.760666
+v -164.102325 -140.126862 23.154400 1.000000 1.000000 1.000000
+vn -0.651957 -0.045544 0.756887
+v -164.474411 -141.752426 22.923397 1.000000 1.000000 1.000000
+vn -0.880853 0.449052 0.149831
+v -164.095886 -139.157104 22.464397 1.000000 1.000000 1.000000
+vn -0.803274 0.357257 0.476570
+v -163.964554 -139.239426 22.932800 1.000000 1.000000 1.000000
+vn -0.607803 0.315758 0.728610
+v -163.329834 -138.678497 23.385197 1.000000 1.000000 1.000000
+vn -0.329711 0.066743 0.941720
+v -163.153442 -138.827805 23.525799 1.000000 1.000000 1.000000
+vn -0.370406 -0.052917 0.927361
+v -164.124207 -140.980804 23.179798 1.000000 1.000000 1.000000
+vn -0.308997 -0.183160 0.933259
+v -164.206604 -143.298447 22.844997 1.000000 1.000000 1.000000
+vn 0.083394 -0.254449 0.963484
+v -162.965485 -138.986877 23.529598 1.000000 1.000000 1.000000
+vn 0.189668 -0.199413 0.961385
+v -163.892456 -141.043594 23.183598 1.000000 1.000000 1.000000
+vn -0.025715 -0.264151 0.964138
+v -161.336807 -137.520370 23.876598 1.000000 1.000000 1.000000
+vn -0.293258 0.223313 0.929586
+v -161.447540 -137.291534 23.872999 1.000000 1.000000 1.000000
+vn -0.117531 -0.247774 0.961662
+v -160.001694 -137.008286 24.107998 1.000000 1.000000 1.000000
+vn -0.209813 0.283932 0.935607
+v -160.048035 -136.754333 24.104198 1.000000 1.000000 1.000000
+vn -0.206708 -0.179169 0.961858
+v -157.958466 -137.018051 24.442799 1.000000 1.000000 1.000000
+vn -0.069105 0.347768 0.935030
+v -157.909546 -136.765503 24.438999 1.000000 1.000000 1.000000
+vn -0.266352 -0.086529 0.959984
+v -156.031113 -137.951523 24.788799 1.000000 1.000000 1.000000
+vn -0.272780 -0.625965 0.730588
+v -158.009964 -137.280380 24.288198 1.000000 1.000000 1.000000
+vn -0.520450 -0.460948 0.718790
+v -156.176590 -138.167816 24.634199 1.000000 1.000000 1.000000
+vn -0.283482 0.011909 0.958903
+v -154.622604 -139.666397 25.135799 1.000000 1.000000 1.000000
+vn -0.660398 -0.230831 0.714557
+v -154.837616 -139.797562 24.981398 1.000000 1.000000 1.000000
+vn -0.272607 0.097809 0.957141
+v -154.105026 -141.095230 25.367199 1.000000 1.000000 1.000000
+vn -0.697866 -0.005851 0.716205
+v -154.344498 -141.156616 25.212599 1.000000 1.000000 1.000000
+vn -0.205005 0.186813 0.960767
+v -154.044525 -143.308228 25.701998 1.000000 1.000000 1.000000
+vn -0.666806 0.223714 0.710860
+v -154.286560 -143.262161 25.547398 1.000000 1.000000 1.000000
+vn -0.897797 -0.071466 0.434573
+v -154.573669 -141.216614 24.864998 1.000000 1.000000 1.000000
+vn -0.884071 -0.241202 0.400300
+v -154.764221 -140.555222 24.749798 1.000000 1.000000 1.000000
+vn -0.883887 0.337830 0.323442
+v -154.675385 -143.888687 25.314798 1.000000 1.000000 1.000000
+vn -0.873671 0.222864 0.432470
+v -154.519592 -143.217514 25.199598 1.000000 1.000000 1.000000
+vn -0.952808 0.032072 0.301875
+v -154.452652 -142.524033 25.083799 1.000000 1.000000 1.000000
+vn -0.882861 -0.469588 0.006580
+v -155.195526 -140.018021 23.809399 1.000000 1.000000 1.000000
+vn -0.943769 -0.328918 0.033374
+v -154.929016 -140.624985 23.925598 1.000000 1.000000 1.000000
+vn -0.991021 -0.133537 0.006752
+v -154.653503 -141.843109 24.142998 1.000000 1.000000 1.000000
+vn -0.999431 0.032814 -0.007752
+v -154.629028 -142.517059 24.259399 1.000000 1.000000 1.000000
+vn -0.962278 0.267469 0.049805
+v -154.842758 -143.830078 24.490599 1.000000 1.000000 1.000000
+vn -0.920441 0.081694 -0.382250
+v -154.506729 -143.218918 23.523197 1.000000 1.000000 1.000000
+vn -0.856245 0.298874 -0.421330
+v -154.905853 -144.543091 23.754398 1.000000 1.000000 1.000000
+vn -0.941808 -0.243079 -0.232188
+v -154.695984 -141.247299 23.585800 1.000000 1.000000 1.000000
+vn -0.863842 -0.452764 -0.220868
+v -155.151764 -139.991516 23.354597 1.000000 1.000000 1.000000
+vn -0.834124 -0.031127 -0.550697
+v -154.438492 -142.524033 23.407200 1.000000 1.000000 1.000000
+vn -0.849360 -0.271177 -0.452826
+v -154.560806 -141.212433 23.188400 1.000000 1.000000 1.000000
+vn -0.727559 -0.152401 -0.668904
+v -154.227341 -141.792892 22.955799 1.000000 1.000000 1.000000
+vn -0.763537 -0.466500 -0.446529
+v -155.030731 -139.916168 22.956997 1.000000 1.000000 1.000000
+vn -0.604269 -0.342244 -0.719534
+v -154.529907 -140.454773 22.738400 1.000000 1.000000 1.000000
+vn -0.235501 -0.120282 -0.964402
+v -154.056107 -143.305435 23.052399 1.000000 1.000000 1.000000
+vn -0.203358 -0.194144 -0.959663
+v -154.116623 -141.098007 22.717800 1.000000 1.000000 1.000000
+vn -0.743681 0.129078 -0.655955
+v -154.435913 -143.973785 23.303398 1.000000 1.000000 1.000000
+vn -0.526660 -0.546540 -0.651095
+v -155.201965 -139.173843 22.505798 1.000000 1.000000 1.000000
+vn -0.131468 -0.241289 -0.961507
+v -154.632904 -139.671982 22.486397 1.000000 1.000000 1.000000
+vn -0.666789 -0.604933 -0.435257
+v -155.389938 -139.331528 22.840599 1.000000 1.000000 1.000000
+vn -0.502058 -0.718217 -0.481770
+v -156.307907 -138.361771 22.609997 1.000000 1.000000 1.000000
+vn -0.312925 -0.586746 -0.746865
+v -156.167572 -138.153854 22.275200 1.000000 1.000000 1.000000
+vn -0.024080 -0.285731 -0.958007
+v -156.037537 -137.962692 22.139397 1.000000 1.000000 1.000000
+vn -0.802813 -0.596151 0.009724
+v -155.540573 -139.457092 23.692799 1.000000 1.000000 1.000000
+vn -0.594909 -0.769121 -0.233528
+v -156.390320 -138.483154 23.007397 1.000000 1.000000 1.000000
+vn -0.836074 -0.340629 0.430060
+v -155.042313 -139.923141 24.633598 1.000000 1.000000 1.000000
+vn -0.784943 -0.526224 0.327038
+v -155.400238 -139.339890 24.517199 1.000000 1.000000 1.000000
+vn -0.631466 -0.773834 0.049315
+v -156.419922 -138.527802 23.462200 1.000000 1.000000 1.000000
+vn -0.485408 -0.825015 -0.289362
+v -156.914322 -138.127335 22.892799 1.000000 1.000000 1.000000
+vn -0.613613 -0.670977 0.416257
+v -156.315643 -138.374313 24.286598 1.000000 1.000000 1.000000
+vn -0.345597 -0.936966 0.051553
+v -157.505264 -137.901306 23.231400 1.000000 1.000000 1.000000
+vn -0.742136 -0.570155 0.352360
+v -155.826385 -138.822220 24.401798 1.000000 1.000000 1.000000
+vn -0.514447 -0.775484 0.366018
+v -156.855087 -138.007339 24.171799 1.000000 1.000000 1.000000
+vn -0.367808 -0.818594 -0.441158
+v -156.848648 -137.993393 22.495197 1.000000 1.000000 1.000000
+vn -0.415385 -0.843806 0.339775
+v -157.444763 -137.721313 24.055599 1.000000 1.000000 1.000000
+vn -0.079453 -0.996802 -0.008571
+v -158.707779 -137.625031 23.000198 1.000000 1.000000 1.000000
+vn -0.169407 -0.709468 -0.684074
+v -157.358490 -137.465958 22.044197 1.000000 1.000000 1.000000
+vn -0.125107 -0.903560 -0.409790
+v -158.056305 -137.516190 22.264000 1.000000 1.000000 1.000000
+vn -0.285172 -0.843878 0.454474
+v -158.058884 -137.530151 23.940399 1.000000 1.000000 1.000000
+vn 0.119597 -0.992805 0.005969
+v -159.329620 -137.627823 22.883598 1.000000 1.000000 1.000000
+vn 0.246500 -0.937333 -0.246263
+v -159.880676 -137.654327 22.326599 1.000000 1.000000 1.000000
+vn 0.146293 -0.701715 -0.697276
+v -159.361816 -137.164566 21.696598 1.000000 1.000000 1.000000
+vn 0.007061 -0.815240 -0.579081
+v -158.694901 -137.418518 22.147999 1.000000 1.000000 1.000000
+vn 0.343575 -0.938518 0.033777
+v -160.462616 -137.885956 22.666397 1.000000 1.000000 1.000000
+vn -0.071695 -0.943246 0.324264
+v -158.696198 -137.433868 23.824598 1.000000 1.000000 1.000000
+vn 0.051661 -0.885197 0.462338
+v -159.905136 -137.520370 23.605799 1.000000 1.000000 1.000000
+vn 0.498766 -0.866712 0.006549
+v -161.031677 -138.153854 22.550198 1.000000 1.000000 1.000000
+vn 0.479775 -0.846739 -0.229892
+v -161.054855 -138.105011 22.095398 1.000000 1.000000 1.000000
+vn 0.244063 -0.871665 0.425009
+v -160.521835 -137.704559 23.490597 1.000000 1.000000 1.000000
+vn -0.018193 -0.668538 0.743456
+v -159.952774 -137.270599 23.953398 1.000000 1.000000 1.000000
+vn 0.234764 -0.635863 0.735231
+v -161.222229 -137.757584 23.722198 1.000000 1.000000 1.000000
+vn 0.482762 -0.496854 0.721164
+v -162.772354 -139.152908 23.375000 1.000000 1.000000 1.000000
+vn 0.357042 -0.818527 0.450037
+v -161.114075 -137.983627 23.374397 1.000000 1.000000 1.000000
+vn 0.555566 -0.760966 0.335079
+v -161.663834 -138.351990 23.257999 1.000000 1.000000 1.000000
+vn 0.599610 -0.714921 0.359659
+v -162.155655 -138.795715 23.142597 1.000000 1.000000 1.000000
+vn 0.649836 -0.265518 0.712189
+v -163.652985 -141.107773 23.028999 1.000000 1.000000 1.000000
+vn 0.859935 -0.394298 0.324100
+v -163.226837 -140.510574 22.796398 1.000000 1.000000 1.000000
+vn 0.857707 -0.277546 0.432789
+v -163.423813 -141.169174 22.681198 1.000000 1.000000 1.000000
+vn 0.698270 -0.584040 0.413904
+v -162.586960 -139.310593 23.027397 1.000000 1.000000 1.000000
+vn 0.798653 -0.486532 0.354174
+v -162.943588 -139.881287 22.912598 1.000000 1.000000 1.000000
+vn 0.943068 -0.328818 0.050011
+v -163.062042 -140.581741 21.972198 1.000000 1.000000 1.000000
+vn 0.800394 -0.597579 0.047623
+v -162.446625 -139.429199 22.202999 1.000000 1.000000 1.000000
+vn 0.631365 -0.775418 0.010198
+v -161.560837 -138.508270 22.433598 1.000000 1.000000 1.000000
+vn 0.490305 -0.740603 -0.459466
+v -161.119232 -137.971069 21.697800 1.000000 1.000000 1.000000
+vn 0.633763 -0.638236 -0.437035
+v -161.671555 -138.340836 21.581398 1.000000 1.000000 1.000000
+vn 0.277621 -0.832771 -0.478976
+v -159.907715 -137.506424 21.929199 1.000000 1.000000 1.000000
+vn 0.794273 -0.562177 -0.230406
+v -162.487823 -139.394302 21.748199 1.000000 1.000000 1.000000
+vn 0.742696 -0.476369 -0.470612
+v -162.597260 -139.300827 21.350800 1.000000 1.000000 1.000000
+vn 0.568664 -0.504261 -0.649878
+v -161.810608 -138.131531 21.246597 1.000000 1.000000 1.000000
+vn 0.355622 -0.578231 -0.734290
+v -160.605530 -137.447815 21.479198 1.000000 1.000000 1.000000
+vn 0.610527 -0.302207 -0.732071
+v -162.783936 -139.141754 21.015999 1.000000 1.000000 1.000000
+vn 0.255005 -0.128125 -0.958414
+v -161.331665 -137.531540 21.227200 1.000000 1.000000 1.000000
+vn 0.303944 -0.033354 -0.952106
+v -162.956467 -138.995239 20.880199 1.000000 1.000000 1.000000
+vn 0.844281 -0.457676 -0.278788
+v -162.834152 -139.949661 21.633598 1.000000 1.000000 1.000000
+vn 0.834495 -0.353422 -0.422742
+v -162.955170 -139.874313 21.236000 1.000000 1.000000 1.000000
+vn 0.202950 -0.194303 -0.959717
+v -159.999130 -137.020844 21.458599 1.000000 1.000000 1.000000
+vn 0.121918 -0.222047 -0.967384
+v -157.961044 -137.030609 21.793198 1.000000 1.000000 1.000000
+vn -0.306462 0.014631 -0.951770
+v -154.849197 -145.420761 23.398598 1.000000 1.000000 1.000000
+vn -0.630475 0.262397 -0.730513
+v -155.029449 -145.286804 23.534397 1.000000 1.000000 1.000000
+vn 0.264755 -0.115130 0.957418
+v -163.971008 -143.255203 22.848797 1.000000 1.000000 1.000000
+vn -0.914902 0.365567 -0.171219
+v -164.449951 -139.974762 21.532799 1.000000 1.000000 1.000000
+vn -0.798208 0.364824 -0.479341
+v -164.327637 -140.029190 21.139599 1.000000 1.000000 1.000000
+vn -0.017790 -0.300135 -0.953731
+v -156.897583 -147.579330 18.704800 1.000000 1.000000 1.000000
+vn 0.318454 -0.824208 -0.468260
+v -156.703171 -148.059326 19.200199 1.000000 1.000000 1.000000
+vn 0.597807 -0.330517 0.730332
+v -154.920013 -146.348648 20.866798 1.000000 1.000000 1.000000
+vn 0.333548 -0.161213 0.928847
+v -155.625549 -146.747711 21.123600 1.000000 1.000000 1.000000
+vn 0.734303 -0.495551 0.463928
+v -154.743622 -146.521683 20.528999 1.000000 1.000000 1.000000
+vn 0.640814 -0.089289 0.762486
+v -153.797333 -144.276581 20.535000 1.000000 1.000000 1.000000
+vn 0.433431 -0.090532 0.896628
+v -154.667664 -145.614716 20.902397 1.000000 1.000000 1.000000
+vn 0.775670 -0.322153 0.542728
+v -153.879715 -145.152847 20.309799 1.000000 1.000000 1.000000
+vn 0.947336 -0.318794 -0.030399
+v -153.396912 -144.424484 19.319000 1.000000 1.000000 1.000000
+vn 0.079333 0.651397 -0.754578
+v -159.661804 -147.078415 16.327797 1.000000 1.000000 1.000000
+vn 0.234169 0.953468 0.189906
+v -160.030014 -147.022598 17.089199 1.000000 1.000000 1.000000
+vn -0.114750 0.681238 -0.723013
+v -158.357590 -147.065857 16.327999 1.000000 1.000000 1.000000
+vn 0.462710 0.782891 0.415911
+v -161.195190 -146.684921 17.570795 1.000000 1.000000 1.000000
+vn 0.482058 0.875620 0.030174
+v -161.110214 -146.517487 16.746597 1.000000 1.000000 1.000000
+vn 0.251861 0.843932 0.473650
+v -160.059631 -147.160736 17.482998 1.000000 1.000000 1.000000
+vn 0.034382 0.966802 0.253204
+v -158.855835 -147.149567 17.008400 1.000000 1.000000 1.000000
+vn -0.201377 0.961570 0.186628
+v -158.201797 -147.072830 16.966400 1.000000 1.000000 1.000000
+vn -0.376768 0.622959 -0.685542
+v -156.866669 -146.503540 16.327198 1.000000 1.000000 1.000000
+vn 0.004148 0.883635 0.468158
+v -158.851974 -147.291901 17.401997 1.000000 1.000000 1.000000
+vn 0.381597 0.553999 0.739911
+v -161.308487 -146.909576 17.918598 1.000000 1.000000 1.000000
+vn 0.213332 0.624708 0.751152
+v -160.114990 -147.409103 17.830597 1.000000 1.000000 1.000000
+vn 0.004910 0.660128 0.751137
+v -158.842957 -147.547241 17.749798 1.000000 1.000000 1.000000
+vn -0.239001 0.894046 0.378892
+v -157.595398 -147.051895 17.325199 1.000000 1.000000 1.000000
+vn -0.407423 0.811946 0.418031
+v -157.035339 -146.809113 17.291599 1.000000 1.000000 1.000000
+vn -0.525315 0.476934 -0.704683
+v -155.916519 -145.726334 16.326797 1.000000 1.000000 1.000000
+vn -0.278982 0.618947 0.734217
+v -156.933624 -147.039337 17.639198 1.000000 1.000000 1.000000
+vn 0.541231 0.423435 0.726479
+v -162.344910 -146.079361 18.014797 1.000000 1.000000 1.000000
+vn 0.680238 0.391323 0.619792
+v -163.033707 -145.164017 18.101801 1.000000 1.000000 1.000000
+vn 0.691920 0.567633 0.446139
+v -162.180115 -145.896561 17.667198 1.000000 1.000000 1.000000
+vn 0.603011 0.683141 0.411943
+v -161.711472 -146.327728 17.618000 1.000000 1.000000 1.000000
+vn 0.851693 0.302780 0.427720
+v -163.132843 -144.439835 17.808399 1.000000 1.000000 1.000000
+vn 0.725649 0.368508 0.581065
+v -162.835434 -145.025864 17.754200 1.000000 1.000000 1.000000
+vn 0.917574 0.107891 0.382645
+v -163.497208 -143.165894 17.922600 1.000000 1.000000 1.000000
+vn 0.864255 0.503046 -0.002701
+v -162.687378 -144.921219 16.929798 1.000000 1.000000 1.000000
+vn 0.950898 0.308866 -0.019871
+v -163.185638 -143.760300 17.040199 1.000000 1.000000 1.000000
+vn 0.805146 -0.195889 0.559792
+v -163.486908 -141.488708 18.077198 1.000000 1.000000 1.000000
+vn 0.983656 -0.009487 0.179808
+v -163.425110 -142.491959 17.588997 1.000000 1.000000 1.000000
+vn 0.547928 0.285510 -0.786294
+v -162.917847 -144.714706 16.326797 1.000000 1.000000 1.000000
+vn 0.938007 0.304248 -0.166058
+v -163.234558 -143.777054 16.585400 1.000000 1.000000 1.000000
+vn 0.782290 0.622652 -0.018082
+v -162.330750 -145.441681 16.877197 1.000000 1.000000 1.000000
+vn 0.492235 0.098501 -0.864871
+v -163.485626 -143.266357 16.326797 1.000000 1.000000 1.000000
+vn 0.463052 0.427278 -0.776541
+v -162.225174 -145.681686 16.326797 1.000000 1.000000 1.000000
+vn 0.991126 0.030948 -0.129275
+v -163.430267 -142.491959 16.703598 1.000000 1.000000 1.000000
+vn 0.995110 -0.098604 -0.005787
+v -163.377472 -142.168228 17.189198 1.000000 1.000000 1.000000
+vn 0.962519 -0.141040 -0.231656
+v -163.363312 -141.513824 16.798199 1.000000 1.000000 1.000000
+vn 0.522993 -0.093677 -0.847173
+v -163.510086 -141.247299 16.327599 1.000000 1.000000 1.000000
+vn 0.634541 0.772360 0.028601
+v -161.605896 -146.172836 16.793598 1.000000 1.000000 1.000000
+vn 0.278346 0.533902 -0.798418
+v -161.147552 -146.584457 16.326797 1.000000 1.000000 1.000000
+vn 0.762409 0.598289 0.246541
+v -162.088699 -145.794708 17.273399 1.000000 1.000000 1.000000
+vn -0.054111 0.218008 0.974446
+v -156.826767 -147.280731 17.793800 1.000000 1.000000 1.000000
+vn -0.489738 0.466411 0.736626
+v -155.440155 -145.830978 17.550800 1.000000 1.000000 1.000000
+vn -0.568176 0.745768 0.347860
+v -156.510056 -146.488190 17.259998 1.000000 1.000000 1.000000
+vn -0.602249 0.592176 0.535372
+v -155.615250 -145.659363 17.203197 1.000000 1.000000 1.000000
+vn -0.299376 0.933092 0.199285
+v -155.011429 -144.509598 16.941799 1.000000 1.000000 1.000000
+vn -0.091260 0.787844 0.609076
+v -154.729462 -144.656113 17.533600 1.000000 1.000000 1.000000
+vn -0.821943 0.545395 0.164174
+v -155.355179 -145.070526 16.783398 1.000000 1.000000 1.000000
+vn -0.087363 -0.238220 0.967274
+v -162.983505 -146.110046 42.791580 1.000000 1.000000 1.000000
+vn -0.466666 -0.491862 0.735048
+v -163.152161 -146.269119 42.651176 1.000000 1.000000 1.000000
+vn -0.286230 -0.554013 0.781756
+v -161.950943 -147.386780 42.467777 1.000000 1.000000 1.000000
+vn 0.252787 0.016578 0.967380
+v -163.238419 -145.311920 42.883377 1.000000 1.000000 1.000000
+vn -0.269380 -0.217140 0.938235
+v -163.799759 -144.735641 42.964779 1.000000 1.000000 1.000000
+vn -0.526579 -0.395186 0.752690
+v -163.627243 -145.584000 42.739178 1.000000 1.000000 1.000000
+vn -0.036781 -0.337135 0.940738
+v -161.170731 -147.569565 42.514977 1.000000 1.000000 1.000000
+vn 0.194643 0.162831 0.967264
+v -160.395660 -147.604462 42.422779 1.000000 1.000000 1.000000
+vn 0.216584 -0.066096 0.974024
+v -164.035370 -142.579849 43.189777 1.000000 1.000000 1.000000
+vn -0.438014 -0.021868 0.898702
+v -164.375259 -142.052414 43.189777 1.000000 1.000000 1.000000
+vn -0.586738 -0.230236 0.776357
+v -164.265823 -144.082626 42.902977 1.000000 1.000000 1.000000
+vn -0.743196 -0.493034 0.452303
+v -163.826797 -145.722137 42.401379 1.000000 1.000000 1.000000
+vn -0.790114 -0.383529 0.478148
+v -164.218201 -144.942154 42.486580 1.000000 1.000000 1.000000
+vn -0.581194 -0.159606 0.797959
+v -164.440933 -143.241241 42.985378 1.000000 1.000000 1.000000
+vn -0.880971 -0.163386 0.444066
+v -164.675247 -143.278915 42.647579 1.000000 1.000000 1.000000
+vn -0.850761 -0.278836 0.445484
+v -164.492432 -144.157974 42.565178 1.000000 1.000000 1.000000
+vn -0.949278 -0.277529 0.147812
+v -164.636627 -144.205414 42.096779 1.000000 1.000000 1.000000
+vn -0.904948 -0.398444 0.149372
+v -164.355957 -145.010529 42.018181 1.000000 1.000000 1.000000
+vn -0.977689 -0.150050 0.147003
+v -164.824600 -143.304031 42.179379 1.000000 1.000000 1.000000
+vn -0.988930 -0.017234 0.147379
+v -164.891541 -142.384506 42.259579 1.000000 1.000000 1.000000
+vn -0.879473 -0.041990 0.474092
+v -164.739624 -142.384506 42.727978 1.000000 1.000000 1.000000
+vn -0.874314 0.071431 0.480077
+v -164.682983 -141.490097 42.805779 1.000000 1.000000 1.000000
+vn -0.982094 0.116899 0.147735
+v -164.833618 -141.466385 42.337379 1.000000 1.000000 1.000000
+vn -0.878380 0.196252 0.435814
+v -164.510452 -140.626389 42.879978 1.000000 1.000000 1.000000
+vn -0.957840 0.246514 0.147560
+v -164.655945 -140.581741 42.411579 1.000000 1.000000 1.000000
+vn -0.475337 0.102439 0.873820
+v -164.294159 -140.609650 43.189777 1.000000 1.000000 1.000000
+vn 0.420596 -0.155229 0.893870
+v -163.604065 -140.965454 43.189777 1.000000 1.000000 1.000000
+vn 0.410111 -0.276493 0.869115
+v -163.019562 -139.797562 43.187378 1.000000 1.000000 1.000000
+vn -0.508273 0.336752 0.792627
+v -163.540985 -138.611526 43.189377 1.000000 1.000000 1.000000
+vn 0.354019 -0.378827 0.855079
+v -162.185257 -138.770599 43.189777 1.000000 1.000000 1.000000
+vn -0.396446 0.561551 0.726286
+v -162.053940 -137.022232 43.185780 1.000000 1.000000 1.000000
+vn 0.350347 -0.474888 0.807303
+v -161.591736 -138.298965 43.189777 1.000000 1.000000 1.000000
+vn 0.261553 -0.556844 0.788362
+v -161.013657 -137.986420 43.182579 1.000000 1.000000 1.000000
+vn -0.202724 0.668727 0.715337
+v -160.517975 -136.249237 43.188580 1.000000 1.000000 1.000000
+vn 0.140075 -0.597418 0.789602
+v -160.099548 -137.637573 43.189777 1.000000 1.000000 1.000000
+vn 0.113320 0.717532 0.687246
+v -158.116821 -136.009232 43.189777 1.000000 1.000000 1.000000
+vn -0.055457 -0.608282 0.791782
+v -158.685883 -137.542694 43.189178 1.000000 1.000000 1.000000
+vn -0.326330 -0.494406 0.805650
+v -156.734070 -138.218033 43.189777 1.000000 1.000000 1.000000
+vn 0.485283 0.567671 0.665018
+v -155.225143 -137.407349 43.188377 1.000000 1.000000 1.000000
+vn -0.513142 -0.458112 0.725823
+v -155.818665 -139.066406 43.189777 1.000000 1.000000 1.000000
+vn 0.595613 0.453786 0.662815
+v -154.480972 -138.204086 43.188580 1.000000 1.000000 1.000000
+vn -0.637074 -0.299846 0.710091
+v -155.109268 -140.177094 43.188377 1.000000 1.000000 1.000000
+vn 0.696593 0.299226 0.652090
+v -153.637680 -139.669189 43.189777 1.000000 1.000000 1.000000
+vn 0.753576 0.147433 0.640614
+v -153.185776 -140.982193 43.189579 1.000000 1.000000 1.000000
+vn -0.720964 -0.151892 0.676121
+v -154.715302 -141.379868 43.189777 1.000000 1.000000 1.000000
+vn -0.705159 0.044271 0.707666
+v -154.623886 -142.614731 43.189377 1.000000 1.000000 1.000000
+vn 0.796556 -0.109480 0.594569
+v -153.114960 -143.373795 43.186760 1.000000 1.000000 1.000000
+vn -0.764521 -0.300220 0.570416
+v -155.039734 -144.484497 43.189377 1.000000 1.000000 1.000000
+vn 0.348852 -0.779432 0.520373
+v -153.680161 -145.221222 43.189579 1.000000 1.000000 1.000000
+vn -0.916116 0.372476 0.148301
+v -164.359818 -139.716629 42.485180 1.000000 1.000000 1.000000
+vn -0.811697 0.311205 0.494267
+v -164.222061 -139.783600 42.953377 1.000000 1.000000 1.000000
+vn -0.978074 -0.121570 -0.169093
+v -164.811722 -143.301239 41.363777 1.000000 1.000000 1.000000
+vn -0.913230 -0.369981 -0.170658
+v -164.344376 -145.004944 41.202778 1.000000 1.000000 1.000000
+vn -0.953653 -0.248660 -0.169454
+v -164.625031 -144.201233 41.281380 1.000000 1.000000 1.000000
+vn -0.842582 -0.517012 0.150843
+v -163.954269 -145.811447 41.933178 1.000000 1.000000 1.000000
+vn -0.855721 -0.488283 -0.171234
+v -163.942673 -145.804474 41.117577 1.000000 1.000000 1.000000
+vn -0.839048 -0.309290 -0.447593
+v -164.223343 -144.944946 40.809578 1.000000 1.000000 1.000000
+vn -0.858544 -0.192122 -0.475386
+v -164.497574 -144.159378 40.888180 1.000000 1.000000 1.000000
+vn -0.891647 -0.084085 -0.444854
+v -164.680389 -143.280304 40.970779 1.000000 1.000000 1.000000
+vn -0.687561 -0.026344 -0.725648
+v -164.446075 -143.242630 40.626179 1.000000 1.000000 1.000000
+vn -0.655975 -0.199355 -0.727980
+v -164.008331 -144.838898 40.464977 1.000000 1.000000 1.000000
+vn -0.777247 -0.405642 -0.480980
+v -163.831955 -145.726334 40.724380 1.000000 1.000000 1.000000
+vn -0.777486 -0.604580 -0.173203
+v -163.436691 -146.537018 41.029579 1.000000 1.000000 1.000000
+vn -0.721562 -0.522022 -0.454798
+v -163.336273 -146.442139 40.636379 1.000000 1.000000 1.000000
+vn -0.584975 -0.355714 -0.728884
+v -163.157303 -146.273300 40.291977 1.000000 1.000000 1.000000
+vn -0.315755 -0.026113 -0.948481
+v -163.784317 -144.727280 40.313980 1.000000 1.000000 1.000000
+vn -0.203297 0.065942 -0.976894
+v -164.202744 -143.202164 40.475178 1.000000 1.000000 1.000000
+vn -0.505132 -0.429668 -0.748483
+v -162.593399 -146.880280 40.201378 1.000000 1.000000 1.000000
+vn -0.289249 -0.084283 -0.953536
+v -162.970627 -146.097488 40.140980 1.000000 1.000000 1.000000
+vn -0.640017 -0.617234 -0.457603
+v -162.747894 -147.074219 40.545776 1.000000 1.000000 1.000000
+vn -0.683082 -0.709067 -0.174993
+v -162.834152 -147.183060 40.938980 1.000000 1.000000 1.000000
+vn -0.536958 -0.685672 -0.491457
+v -162.080978 -147.610031 40.452980 1.000000 1.000000 1.000000
+vn -0.573135 -0.800207 -0.176594
+v -162.151794 -147.731430 40.846176 1.000000 1.000000 1.000000
+vn -0.272757 -0.196224 -0.941860
+v -161.822205 -147.167709 39.957581 1.000000 1.000000 1.000000
+vn -0.365555 -0.546279 -0.753624
+v -161.264709 -147.795609 40.015377 1.000000 1.000000 1.000000
+vn -0.449179 -0.875488 -0.178211
+v -161.416641 -148.161194 40.752979 1.000000 1.000000 1.000000
+vn -0.434634 -0.770930 -0.465575
+v -161.362564 -148.030029 40.359779 1.000000 1.000000 1.000000
+vn -0.545884 -0.823447 0.154744
+v -162.159515 -147.742599 41.661579 1.000000 1.000000 1.000000
+vn -0.311888 -0.932936 -0.179880
+v -160.627411 -148.476547 40.656979 1.000000 1.000000 1.000000
+vn -0.417722 -0.895014 0.156391
+v -161.421783 -148.173752 41.568378 1.000000 1.000000 1.000000
+vn -0.312486 -0.808781 -0.498223
+v -160.591370 -148.338394 40.263977 1.000000 1.000000 1.000000
+vn -0.164243 -0.969700 -0.180849
+v -159.800858 -148.664902 40.558178 1.000000 1.000000 1.000000
+vn -0.276847 -0.947833 0.158011
+v -160.631271 -148.490494 41.472580 1.000000 1.000000 1.000000
+vn -0.211428 -0.857889 0.468322
+v -160.590073 -148.331421 41.940781 1.000000 1.000000 1.000000
+vn -0.330823 -0.802282 0.496890
+v -161.359985 -148.024445 42.036777 1.000000 1.000000 1.000000
+vn -0.067296 -0.863020 0.500668
+v -159.781525 -148.516998 41.841980 1.000000 1.000000 1.000000
+vn -0.125262 -0.979526 0.157603
+v -159.802139 -148.678864 41.373779 1.000000 1.000000 1.000000
+vn -0.082685 -0.614500 0.784572
+v -160.524414 -148.085846 42.278580 1.000000 1.000000 1.000000
+vn -0.459779 -0.757345 0.463716
+v -162.078400 -147.604462 42.129978 1.000000 1.000000 1.000000
+vn 0.110798 -0.664952 0.738622
+v -158.957550 -148.316071 42.078777 1.000000 1.000000 1.000000
+vn 0.118391 -0.283638 0.951595
+v -158.960129 -148.073288 42.219177 1.000000 1.000000 1.000000
+vn 0.094064 -0.874172 0.476419
+v -158.956253 -148.572815 41.740978 1.000000 1.000000 1.000000
+vn 0.028873 -0.986014 0.164141
+v -158.954971 -148.737457 41.272579 1.000000 1.000000 1.000000
+vn 0.220838 -0.944204 0.244357
+v -157.923706 -148.630020 41.146580 1.000000 1.000000 1.000000
+vn 0.337032 -0.812164 0.476234
+v -157.156372 -148.243515 41.509979 1.000000 1.000000 1.000000
+vn 0.299202 -0.563312 0.770167
+v -157.232330 -148.000732 41.847778 1.000000 1.000000 1.000000
+vn 0.193564 -0.316464 0.928646
+v -158.035706 -147.977005 42.093178 1.000000 1.000000 1.000000
+vn 0.389450 -0.495839 0.776191
+v -156.503601 -147.665848 41.739979 1.000000 1.000000 1.000000
+vn 0.359418 -0.919958 0.156511
+v -157.107437 -148.398392 41.041580 1.000000 1.000000 1.000000
+vn 0.479346 -0.746190 0.461983
+v -156.396744 -147.894684 41.402378 1.000000 1.000000 1.000000
+vn 0.579085 -0.652344 0.488986
+v -155.689926 -147.431442 41.292580 1.000000 1.000000 1.000000
+vn 0.551631 -0.403154 0.730185
+v -155.219986 -146.682144 41.519379 1.000000 1.000000 1.000000
+vn 0.310978 -0.195731 0.930044
+v -155.956436 -147.024002 41.770779 1.000000 1.000000 1.000000
+vn 0.494477 -0.855219 0.155221
+v -156.327225 -148.041199 40.933979 1.000000 1.000000 1.000000
+vn 0.315418 -0.931250 -0.182439
+v -157.111298 -148.385849 40.226177 1.000000 1.000000 1.000000
+vn 0.456500 -0.871417 -0.179559
+v -156.333664 -148.028625 40.118580 1.000000 1.000000 1.000000
+vn 0.617834 -0.771118 0.153813
+v -155.602371 -147.565384 40.824181 1.000000 1.000000 1.000000
+vn 0.578712 -0.795595 -0.179224
+v -155.610092 -147.552826 40.008778 1.000000 1.000000 1.000000
+vn 0.244104 -0.805582 -0.539862
+v -157.155075 -148.249100 39.832977 1.000000 1.000000 1.000000
+vn 0.332957 -0.775777 -0.536013
+v -156.394180 -147.900269 39.725380 1.000000 1.000000 1.000000
+vn 0.750574 -0.660286 -0.025720
+v -154.693405 -146.758881 40.259178 1.000000 1.000000 1.000000
+vn 0.494785 -0.733020 -0.466764
+v -155.687347 -147.435623 39.615578 1.000000 1.000000 1.000000
+vn 0.667963 -0.712292 -0.215560
+v -154.961212 -146.976547 39.897778 1.000000 1.000000 1.000000
+vn 0.020975 -0.652234 -0.757728
+v -157.993225 -148.221191 39.593376 1.000000 1.000000 1.000000
+vn 0.319146 -0.594341 -0.738177
+v -155.823822 -147.226318 39.271179 1.000000 1.000000 1.000000
+vn 0.092199 -0.892250 -0.442028
+v -157.949448 -148.473740 39.937981 1.000000 1.000000 1.000000
+vn -0.116052 -0.241645 -0.963400
+v -158.960129 -148.055145 39.568581 1.000000 1.000000 1.000000
+vn 0.009149 -0.318048 -0.948030
+v -157.310852 -147.752350 39.337578 1.000000 1.000000 1.000000
+vn -0.169834 -0.636339 -0.752482
+v -159.750641 -148.268631 39.820580 1.000000 1.000000 1.000000
+vn -0.172961 -0.160434 -0.971774
+v -160.457458 -147.834671 39.768379 1.000000 1.000000 1.000000
+vn -0.161050 -0.861814 -0.480977
+v -159.782822 -148.522583 40.165176 1.000000 1.000000 1.000000
+vn -0.011904 -0.969443 -0.245029
+v -158.954971 -148.723511 40.457176 1.000000 1.000000 1.000000
+vn 0.211678 -0.976277 -0.045557
+v -157.917267 -148.666306 40.736580 1.000000 1.000000 1.000000
+vn 0.059253 -0.298347 -0.952617
+v -155.966736 -147.008652 39.119980 1.000000 1.000000 1.000000
+vn 0.382810 -0.457283 -0.802713
+v -154.997253 -146.449112 39.115978 1.000000 1.000000 1.000000
+vn 0.630985 -0.632272 -0.449544
+v -154.824738 -146.624924 39.460579 1.000000 1.000000 1.000000
+vn -0.321962 0.086402 -0.942802
+v -155.346161 -146.091904 38.970177 1.000000 1.000000 1.000000
+vn 0.181397 -0.257995 -0.948965
+v -154.314896 -144.939362 38.735378 1.000000 1.000000 1.000000
+vn 0.553562 -0.396796 -0.732204
+v -154.096024 -145.060760 38.886578 1.000000 1.000000 1.000000
+vn 0.697064 -0.527149 -0.486020
+v -154.305878 -145.934235 39.346378 1.000000 1.000000 1.000000
+vn 0.814416 -0.551559 -0.180307
+v -154.196442 -146.017960 39.739380 1.000000 1.000000 1.000000
+vn 0.780728 -0.432340 -0.451161
+v -153.884872 -145.176575 39.230980 1.000000 1.000000 1.000000
+vn 0.881868 -0.439046 -0.171896
+v -153.766418 -145.242157 39.624180 1.000000 1.000000 1.000000
+vn 0.565444 -0.265381 -0.780926
+v -153.792175 -144.280762 38.770180 1.000000 1.000000 1.000000
+vn 0.832829 -0.324453 -0.448471
+v -153.568146 -144.363083 39.114777 1.000000 1.000000 1.000000
+vn 0.933066 -0.316751 -0.170462
+v -153.441986 -144.409149 39.507778 1.000000 1.000000 1.000000
+vn -0.360252 -0.047459 -0.931647
+v -154.246658 -144.113327 38.624378 1.000000 1.000000 1.000000
+vn -0.270836 -0.134489 -0.953185
+v -153.985291 -142.616135 38.394180 1.000000 1.000000 1.000000
+vn 0.278925 -0.158603 -0.947125
+v -153.752258 -142.628693 38.389179 1.000000 1.000000 1.000000
+vn -0.218051 -0.202486 -0.954701
+v -154.116623 -141.091034 38.162979 1.000000 1.000000 1.000000
+vn 0.305268 -0.079001 -0.948984
+v -153.890030 -141.032425 38.157776 1.000000 1.000000 1.000000
+vn -0.103559 -0.254072 -0.961625
+v -154.984375 -139.091522 37.828178 1.000000 1.000000 1.000000
+vn 0.325065 0.041326 -0.944788
+v -154.797699 -138.940826 37.823181 1.000000 1.000000 1.000000
+vn -0.016973 -0.270642 -0.962530
+v -155.982178 -138.007339 37.596977 1.000000 1.000000 1.000000
+vn 0.750585 -0.627349 0.207498
+v -154.719162 -146.733765 40.669178 1.000000 1.000000 1.000000
+vn 0.844073 -0.512768 0.156875
+v -154.186142 -146.024933 40.554977 1.000000 1.000000 1.000000
+vn 0.682319 -0.577712 0.447984
+v -155.056473 -146.867722 41.181580 1.000000 1.000000 1.000000
+vn 0.774809 -0.441498 0.452493
+v -154.309738 -145.931442 41.023376 1.000000 1.000000 1.000000
+vn 0.902978 -0.403166 0.148619
+v -153.754837 -145.247742 40.439579 1.000000 1.000000 1.000000
+vn 0.820203 -0.316001 0.476875
+v -153.890030 -145.173782 40.907978 1.000000 1.000000 1.000000
+vn 0.595635 -0.251681 0.762807
+v -154.504150 -145.783554 41.360977 1.000000 1.000000 1.000000
+vn 0.680155 -0.109913 0.724781
+v -153.797333 -144.277985 41.129379 1.000000 1.000000 1.000000
+vn 0.323137 -0.088219 0.942231
+v -155.164627 -146.278885 41.615761 1.000000 1.000000 1.000000
+vn 0.948987 -0.278758 0.147369
+v -153.430389 -144.413330 40.323380 1.000000 1.000000 1.000000
+vn 0.133561 0.228080 0.964438
+v -158.961411 -147.815140 42.222977 1.000000 1.000000 1.000000
+vn 0.067079 0.243077 0.967685
+v -157.381668 -147.526306 41.991978 1.000000 1.000000 1.000000
+vn -0.554437 -0.670974 0.492334
+v -162.744034 -147.070038 42.222778 1.000000 1.000000 1.000000
+vn -0.663568 -0.593111 0.455958
+v -163.331116 -146.437943 42.313377 1.000000 1.000000 1.000000
+vn -0.760051 -0.631712 0.152517
+v -163.445709 -146.545395 41.844978 1.000000 1.000000 1.000000
+vn -0.660980 -0.734609 0.153149
+v -162.843170 -147.194214 41.754379 1.000000 1.000000 1.000000
+vn -0.253929 0.110631 -0.960875
+v -164.210464 -141.562653 40.633179 1.000000 1.000000 1.000000
+vn -0.877776 0.036793 -0.477657
+v -164.744781 -142.384506 41.050980 1.000000 1.000000 1.000000
+vn -0.663247 0.159569 -0.731192
+v -164.453812 -141.524979 40.784378 1.000000 1.000000 1.000000
+vn -0.881538 0.153657 -0.446409
+v -164.689407 -141.488708 41.128777 1.000000 1.000000 1.000000
+vn -0.985438 0.009465 -0.169771
+v -164.878677 -142.384506 41.444180 1.000000 1.000000 1.000000
+vn -0.836603 0.266405 -0.478669
+v -164.515594 -140.624985 41.202980 1.000000 1.000000 1.000000
+vn -0.975265 0.142487 -0.168984
+v -164.820740 -141.469177 41.521980 1.000000 1.000000 1.000000
+vn -0.947591 0.270463 -0.170062
+v -164.643066 -140.584518 41.596176 1.000000 1.000000 1.000000
+vn -0.902934 0.394384 -0.170795
+v -164.348236 -139.722214 41.669579 1.000000 1.000000 1.000000
+vn -0.808198 0.378977 -0.450769
+v -164.227203 -139.780823 41.276581 1.000000 1.000000 1.000000
+vn -0.263145 0.178887 -0.948026
+v -164.232361 -141.751022 25.565798 1.000000 1.000000 1.000000
+vn 0.226691 0.134895 -0.964580
+v -163.999313 -141.778931 25.570799 1.000000 1.000000 1.000000
+vn 0.187905 0.206552 -0.960223
+v -163.801056 -143.976578 25.236198 1.000000 1.000000 1.000000
+vn -0.163388 0.263455 -0.950734
+v -163.543564 -139.482208 25.911798 1.000000 1.000000 1.000000
+vn -0.319626 0.061142 -0.945569
+v -164.023788 -144.051926 25.231199 1.000000 1.000000 1.000000
+vn 0.306847 0.004955 -0.951746
+v -163.342712 -139.610580 25.916998 1.000000 1.000000 1.000000
+vn -0.040066 0.294475 -0.954819
+v -162.051361 -137.714325 26.258999 1.000000 1.000000 1.000000
+vn 0.271861 -0.095393 -0.957597
+v -161.916183 -137.920837 26.263998 1.000000 1.000000 1.000000
+vn 0.050894 0.304727 -0.951079
+v -160.736847 -136.978989 26.490398 1.000000 1.000000 1.000000
+vn 0.229368 -0.167215 -0.958869
+v -160.659607 -137.217590 26.495398 1.000000 1.000000 1.000000
+vn 0.185452 0.255075 -0.948970
+v -158.622803 -136.674805 26.824999 1.000000 1.000000 1.000000
+vn 0.153461 -0.204997 -0.966657
+v -158.639542 -136.927368 26.829998 1.000000 1.000000 1.000000
+vn 0.281289 0.159003 -0.946359
+v -156.507462 -137.343170 27.170998 1.000000 1.000000 1.000000
+vn 0.018363 -0.285808 -0.958111
+v -156.618195 -137.565018 27.176197 1.000000 1.000000 1.000000
+vn 0.315069 0.042926 -0.948097
+v -154.826019 -138.898956 27.518198 1.000000 1.000000 1.000000
+vn 0.620699 0.299491 -0.724595
+v -154.630325 -138.737106 27.669197 1.000000 1.000000 1.000000
+vn 0.324487 -0.040747 -0.945012
+v -154.102463 -140.297089 27.749598 1.000000 1.000000 1.000000
+vn 0.509131 0.357634 -0.782869
+v -155.147888 -138.102234 27.552799 1.000000 1.000000 1.000000
+vn 0.443955 0.509498 -0.737099
+v -156.390320 -137.107361 27.321999 1.000000 1.000000 1.000000
+vn 0.681070 0.121900 -0.722000
+v -153.873291 -140.200806 27.900599 1.000000 1.000000 1.000000
+vn 0.275473 -0.162124 -0.947539
+v -153.749680 -142.577057 28.084198 1.000000 1.000000 1.000000
+vn 0.635701 -0.012255 -0.771838
+v -153.528244 -141.744049 28.119398 1.000000 1.000000 1.000000
+vn 0.878073 0.239269 -0.414414
+v -153.651840 -140.107330 28.244999 1.000000 1.000000 1.000000
+vn 0.806569 0.345461 -0.479691
+v -153.994308 -139.317566 28.129999 1.000000 1.000000 1.000000
+vn 0.675689 -0.142078 -0.723366
+v -153.503769 -142.586838 28.235197 1.000000 1.000000 1.000000
+vn 0.891072 0.040326 -0.452068
+v -153.292633 -141.717545 28.463799 1.000000 1.000000 1.000000
+vn 0.956612 0.204981 -0.207064
+v -153.305496 -140.811966 28.740398 1.000000 1.000000 1.000000
+vn 0.889707 0.423814 -0.169717
+v -153.878433 -139.246399 28.522999 1.000000 1.000000 1.000000
+vn 0.761183 0.464224 -0.452876
+v -154.441071 -138.580826 28.013798 1.000000 1.000000 1.000000
+vn 0.816789 0.550368 -0.173065
+v -154.335495 -138.492920 28.406799 1.000000 1.000000 1.000000
+vn 0.920041 0.356043 0.163577
+v -153.515366 -140.050125 29.453598 1.000000 1.000000 1.000000
+vn 0.868664 0.471952 0.150611
+v -153.866852 -139.239426 29.338598 1.000000 1.000000 1.000000
+vn 0.732664 0.657867 -0.174396
+v -154.889114 -137.816177 28.290398 1.000000 1.000000 1.000000
+vn 0.705343 0.692178 0.152907
+v -154.880096 -137.806412 29.105799 1.000000 1.000000 1.000000
+vn 0.794964 0.587250 0.152215
+v -154.325195 -138.484558 29.222399 1.000000 1.000000 1.000000
+vn 0.689511 0.562823 -0.455856
+v -154.981812 -137.919449 27.897198 1.000000 1.000000 1.000000
+vn 0.596015 0.637378 -0.488379
+v -155.595932 -137.350143 27.781998 1.000000 1.000000 1.000000
+vn 0.633249 0.753689 -0.175921
+v -155.517395 -137.234329 28.174999 1.000000 1.000000 1.000000
+vn 0.516329 0.837807 -0.177436
+v -156.213928 -136.754333 28.059599 1.000000 1.000000 1.000000
+vn 0.600395 0.784519 0.155100
+v -155.509674 -137.223175 28.990599 1.000000 1.000000 1.000000
+vn 0.500533 0.731077 -0.463674
+v -156.277023 -136.881317 27.666599 1.000000 1.000000 1.000000
+vn 0.387616 0.904076 -0.180004
+v -156.963242 -136.388763 27.944998 1.000000 1.000000 1.000000
+vn 0.479295 0.863631 0.156261
+v -156.208786 -136.743179 28.875198 1.000000 1.000000 1.000000
+vn 0.490593 0.719455 0.491633
+v -155.599808 -137.355728 29.458799 1.000000 1.000000 1.000000
+vn 0.390128 0.795142 0.464274
+v -156.280884 -136.886887 29.343399 1.000000 1.000000 1.000000
+vn 0.257961 0.828298 0.497372
+v -157.010880 -136.529694 29.228798 1.000000 1.000000 1.000000
+vn 0.347200 0.924524 0.157187
+v -156.958099 -136.374802 28.760599 1.000000 1.000000 1.000000
+vn 0.239043 0.622477 0.745239
+v -156.392883 -137.112930 29.681198 1.000000 1.000000 1.000000
+vn 0.603824 0.652804 0.457431
+v -154.985672 -137.923630 29.574198 1.000000 1.000000 1.000000
+vn 0.371766 0.511005 0.775025
+v -155.151764 -138.106415 29.911999 1.000000 1.000000 1.000000
+vn 0.675023 0.555353 0.485723
+v -154.446213 -138.585007 29.690598 1.000000 1.000000 1.000000
+vn 0.545473 0.385856 0.744026
+v -154.206741 -139.445938 30.144598 1.000000 1.000000 1.000000
+vn 0.189795 0.305623 0.933045
+v -154.811859 -138.887802 30.168999 1.000000 1.000000 1.000000
+vn 0.020009 0.315823 0.948607
+v -156.498459 -137.326416 29.821798 1.000000 1.000000 1.000000
+vn 0.031510 0.624985 0.780001
+v -157.841309 -136.533875 29.450399 1.000000 1.000000 1.000000
+vn 0.137079 0.872341 0.469287
+v -157.791092 -136.282715 29.112598 1.000000 1.000000 1.000000
+vn -0.026035 0.844021 0.535678
+v -158.588043 -136.158524 28.997398 1.000000 1.000000 1.000000
+vn -0.245864 0.590220 0.768890
+v -160.156189 -136.531082 29.102798 1.000000 1.000000 1.000000
+vn -0.132013 0.424089 0.895947
+v -158.621521 -136.656662 29.475798 1.000000 1.000000 1.000000
+vn 0.204191 0.966134 0.157767
+v -157.758896 -136.122253 28.644398 1.000000 1.000000 1.000000
+vn 0.249229 0.951349 -0.181163
+v -157.761490 -136.136200 27.828798 1.000000 1.000000 1.000000
+vn 0.102173 0.978053 -0.181586
+v -158.579025 -136.007828 27.713598 1.000000 1.000000 1.000000
+vn 0.055572 0.985731 0.158891
+v -158.577744 -135.993881 28.529198 1.000000 1.000000 1.000000
+vn 0.388055 0.794599 -0.466932
+v -157.009583 -136.524109 27.551798 1.000000 1.000000 1.000000
+vn 0.265694 0.825400 -0.498118
+v -157.789795 -136.277130 27.435799 1.000000 1.000000 1.000000
+vn 0.135196 0.871520 -0.471354
+v -158.588043 -136.151550 27.320599 1.000000 1.000000 1.000000
+vn -0.048843 0.982127 -0.181770
+v -159.408173 -136.006439 27.597799 1.000000 1.000000 1.000000
+vn -0.120424 0.833813 0.538753
+v -159.399155 -136.157135 28.881599 1.000000 1.000000 1.000000
+vn -0.096008 0.982659 0.158628
+v -159.409454 -135.992477 28.413198 1.000000 1.000000 1.000000
+vn -0.014507 0.876961 -0.480343
+v -159.399155 -136.150146 27.204599 1.000000 1.000000 1.000000
+vn -0.203853 0.953941 -0.220091
+v -160.234726 -136.133423 27.481199 1.000000 1.000000 1.000000
+vn -0.239723 0.957907 0.157944
+v -160.237305 -136.119461 28.296598 1.000000 1.000000 1.000000
+vn 0.181599 0.641279 -0.745509
+v -158.604782 -136.408295 26.975998 1.000000 1.000000 1.000000
+vn 0.034660 0.612181 -0.789958
+v -159.382416 -136.406906 26.860197 1.000000 1.000000 1.000000
+vn -0.240566 0.866440 -0.437504
+v -160.896500 -136.483643 26.985798 1.000000 1.000000 1.000000
+vn -0.448393 0.876148 -0.176944
+v -161.698593 -136.699921 27.263798 1.000000 1.000000 1.000000
+vn -0.374395 0.911411 0.170757
+v -160.944138 -136.334335 28.194399 1.000000 1.000000 1.000000
+vn -0.280380 0.834987 0.473480
+v -160.206406 -136.281311 28.764999 1.000000 1.000000 1.000000
+vn -0.471650 0.746643 0.469118
+v -161.634216 -136.833878 28.547598 1.000000 1.000000 1.000000
+vn -0.405647 0.524489 0.748573
+v -161.526077 -137.062714 28.885399 1.000000 1.000000 1.000000
+vn -0.500466 0.851732 0.155202
+v -161.703751 -136.688751 28.079399 1.000000 1.000000 1.000000
+vn -0.584334 0.648721 0.487560
+v -162.328171 -137.292938 28.431398 1.000000 1.000000 1.000000
+vn -0.535613 0.355801 0.765849
+v -162.792953 -138.040833 28.652798 1.000000 1.000000 1.000000
+vn -0.249373 0.253854 0.934544
+v -160.741989 -136.960846 29.140999 1.000000 1.000000 1.000000
+vn -0.323110 0.184607 0.928181
+v -162.061661 -137.698975 28.909798 1.000000 1.000000 1.000000
+vn -0.679967 0.575655 0.454165
+v -162.956467 -137.853851 28.314999 1.000000 1.000000 1.000000
+vn -0.744251 0.464685 0.479749
+v -163.501068 -138.499908 28.199598 1.000000 1.000000 1.000000
+vn -0.646521 0.235686 0.725578
+v -163.752136 -139.351059 28.421997 1.000000 1.000000 1.000000
+vn -0.618768 0.770455 0.153379
+v -162.415726 -137.158981 27.963198 1.000000 1.000000 1.000000
+vn -0.722401 0.674657 0.151575
+v -163.060745 -137.735260 27.846598 1.000000 1.000000 1.000000
+vn -0.809196 0.568011 0.150215
+v -163.619522 -138.398041 27.731398 1.000000 1.000000 1.000000
+vn -0.813675 0.372365 0.446405
+v -163.955551 -139.221283 28.084198 1.000000 1.000000 1.000000
+vn -0.878873 0.453116 0.149222
+v -164.086868 -139.138962 27.615999 1.000000 1.000000 1.000000
+vn -0.581318 0.794170 -0.177099
+v -162.407990 -137.170151 27.147598 1.000000 1.000000 1.000000
+vn -0.362743 0.787738 -0.497882
+v -161.636795 -136.828278 26.870798 1.000000 1.000000 1.000000
+vn -0.489227 0.738769 -0.463548
+v -162.332031 -137.287354 26.754599 1.000000 1.000000 1.000000
+vn -0.689179 0.702921 -0.175883
+v -163.051727 -137.745026 27.031199 1.000000 1.000000 1.000000
+vn -0.112877 0.656586 -0.745757
+v -160.817947 -136.726425 26.641399 1.000000 1.000000 1.000000
+vn -0.310190 0.597168 -0.739711
+v -162.194275 -137.496658 26.409998 1.000000 1.000000 1.000000
+vn -0.590982 0.661641 -0.461489
+v -162.960327 -137.849670 26.637999 1.000000 1.000000 1.000000
+vn -0.780785 0.599993 -0.174309
+v -163.609222 -138.406418 26.915798 1.000000 1.000000 1.000000
+vn -0.664993 0.566260 -0.486964
+v -163.504929 -138.495712 26.522799 1.000000 1.000000 1.000000
+vn -0.855415 0.488314 -0.172668
+v -164.075287 -139.145935 26.800398 1.000000 1.000000 1.000000
+vn -0.375037 0.485071 -0.789971
+v -162.796814 -138.036652 26.293598 1.000000 1.000000 1.000000
+vn -0.531015 0.425626 -0.732711
+v -163.755997 -139.348251 26.062798 1.000000 1.000000 1.000000
+vn -0.754133 0.475655 -0.452809
+v -163.960693 -139.218491 26.407398 1.000000 1.000000 1.000000
+vn -0.913565 0.368706 -0.171625
+v -164.439636 -139.944061 26.685799 1.000000 1.000000 1.000000
+vn -0.812402 0.370472 -0.450281
+v -164.316040 -139.998489 26.292599 1.000000 1.000000 1.000000
+vn -0.931644 0.331660 0.148464
+v -164.451233 -139.938492 27.501398 1.000000 1.000000 1.000000
+vn -0.549248 0.296746 -0.781197
+v -164.097168 -140.096161 25.948198 1.000000 1.000000 1.000000
+vn -0.839674 0.259814 -0.476911
+v -164.569672 -140.835678 26.176598 1.000000 1.000000 1.000000
+vn -0.664548 0.184623 -0.724079
+v -164.476974 -141.723114 25.716799 1.000000 1.000000 1.000000
+vn 0.310012 0.529358 -0.789729
+v -157.091980 -136.764099 27.207399 1.000000 1.000000 1.000000
+vn -0.281482 -0.023275 0.959284
+v -155.001114 -139.044083 30.172798 1.000000 1.000000 1.000000
+vn -0.283676 0.062454 0.956884
+v -154.308456 -140.383606 30.403999 1.000000 1.000000 1.000000
+vn 0.262946 0.237918 0.935016
+v -154.087006 -140.290115 30.400398 1.000000 1.000000 1.000000
+vn -0.230014 0.158575 0.960181
+v -153.971146 -142.567307 30.738798 1.000000 1.000000 1.000000
+vn 0.440002 0.135651 0.887692
+v -153.732941 -142.577057 30.734999 1.000000 1.000000 1.000000
+vn -0.691898 0.137682 0.708746
+v -154.217041 -142.557526 30.584198 1.000000 1.000000 1.000000
+vn -0.138789 0.233263 0.962458
+v -154.492569 -144.784485 31.084799 1.000000 1.000000 1.000000
+vn 0.336159 -0.002809 0.941801
+v -154.278839 -144.898895 31.080999 1.000000 1.000000 1.000000
+vn -0.577401 0.392912 0.715702
+v -154.712723 -144.665878 30.930199 1.000000 1.000000 1.000000
+vn -0.033550 0.264369 0.963838
+v -155.812241 -146.580276 31.431999 1.000000 1.000000 1.000000
+vn 0.335338 -0.162983 0.927893
+v -155.660309 -146.779816 31.428198 1.000000 1.000000 1.000000
+vn -0.367616 0.574729 0.731126
+v -155.968018 -146.373764 31.277399 1.000000 1.000000 1.000000
+vn 0.060750 0.266347 0.961961
+v -157.023743 -147.375626 31.663198 1.000000 1.000000 1.000000
+vn 0.267417 -0.237366 0.933887
+v -156.929764 -147.614227 31.659599 1.000000 1.000000 1.000000
+vn -0.129016 0.657255 0.742543
+v -157.120316 -147.130035 31.508799 1.000000 1.000000 1.000000
+vn 0.163876 0.214775 0.962817
+v -159.024490 -147.816544 31.997999 1.000000 1.000000 1.000000
+vn -0.245150 0.853363 0.460079
+v -157.213013 -146.895630 31.160999 1.000000 1.000000 1.000000
+vn -0.427135 0.800204 0.420986
+v -156.643951 -146.578888 31.045799 1.000000 1.000000 1.000000
+vn 0.129765 0.667391 0.733315
+v -159.024490 -147.548645 31.843399 1.000000 1.000000 1.000000
+vn 0.241957 0.133710 0.961030
+v -161.087036 -147.328171 32.343998 1.000000 1.000000 1.000000
+vn 0.093586 0.884480 0.457096
+v -159.023209 -147.293289 31.495798 1.000000 1.000000 1.000000
+vn -0.137177 0.936289 0.323334
+v -158.380753 -147.247253 31.379799 1.000000 1.000000 1.000000
+vn 0.222686 0.912549 0.343022
+v -159.660522 -147.241669 31.610798 1.000000 1.000000 1.000000
+vn 0.411673 0.553617 0.723902
+v -160.985336 -147.084000 32.189400 1.000000 1.000000 1.000000
+vn 0.279854 0.041826 0.959131
+v -162.787811 -145.959351 32.691200 1.000000 1.000000 1.000000
+vn 0.599595 0.352817 0.718335
+v -162.602402 -145.783554 32.536598 1.000000 1.000000 1.000000
+vn 0.287372 -0.044441 0.956788
+v -163.564148 -144.674255 32.922398 1.000000 1.000000 1.000000
+vn 0.682156 0.136400 0.718372
+v -163.340134 -144.561218 32.767998 1.000000 1.000000 1.000000
+vn 0.241207 -0.143310 0.959834
+v -164.037949 -142.521255 33.257198 1.000000 1.000000 1.000000
+vn 0.867286 0.239779 0.436259
+v -163.126419 -144.452393 32.420197 1.000000 1.000000 1.000000
+vn 0.699785 -0.093437 0.708216
+v -163.792038 -142.512878 33.102600 1.000000 1.000000 1.000000
+vn 0.819777 0.405496 0.404399
+v -162.816132 -145.057968 32.305000 1.000000 1.000000 1.000000
+vn 0.941913 0.149288 0.300854
+v -163.490768 -143.199387 32.639000 1.000000 1.000000 1.000000
+vn 0.772451 0.635047 0.005843
+v -162.293411 -145.487732 31.364599 1.000000 1.000000 1.000000
+vn 0.862000 0.505841 0.032868
+v -162.668076 -144.953323 31.480799 1.000000 1.000000 1.000000
+vn 0.901033 -0.053872 0.430393
+v -163.556427 -142.505905 32.754997 1.000000 1.000000 1.000000
+vn 0.932911 -0.163729 0.320734
+v -163.529388 -141.813828 32.869999 1.000000 1.000000 1.000000
+vn 0.603346 -0.354859 0.714177
+v -163.430267 -140.372437 33.448601 1.000000 1.000000 1.000000
+vn 0.947528 0.319607 0.006435
+v -163.167618 -143.821701 31.698198 1.000000 1.000000 1.000000
+vn 0.877251 0.419107 -0.234050
+v -163.013107 -144.395187 31.141199 1.000000 1.000000 1.000000
+vn 0.756350 0.614252 -0.225010
+v -162.330750 -145.525406 30.909798 1.000000 1.000000 1.000000
+vn 0.665134 0.746665 0.009395
+v -161.850510 -145.960754 31.248198 1.000000 1.000000 1.000000
+vn 0.653314 0.607601 -0.451665
+v -162.436325 -145.624466 30.512398 1.000000 1.000000 1.000000
+vn 0.526124 0.727122 -0.441006
+v -161.974121 -146.118423 30.395798 1.000000 1.000000 1.000000
+vn 0.778975 0.429474 -0.456891
+v -163.139282 -144.459366 30.743599 1.000000 1.000000 1.000000
+vn 0.812120 0.188246 -0.552291
+v -163.504929 -143.202164 30.962399 1.000000 1.000000 1.000000
+vn 0.919637 0.092998 -0.381601
+v -163.569305 -142.505905 31.078398 1.000000 1.000000 1.000000
+vn 0.520210 0.452135 -0.724539
+v -163.025986 -145.207275 30.293798 1.000000 1.000000 1.000000
+vn 0.682108 0.287693 -0.672281
+v -163.574463 -143.964035 30.511198 1.000000 1.000000 1.000000
+vn 0.399210 0.639934 -0.656595
+v -162.128616 -146.313766 30.060999 1.000000 1.000000 1.000000
+vn 0.156560 0.228713 -0.960822
+v -163.552567 -144.668671 30.272999 1.000000 1.000000 1.000000
+vn 0.075922 0.261335 -0.962258
+v -162.778793 -145.950974 30.041798 1.000000 1.000000 1.000000
+vn 0.204436 0.162226 -0.965344
+v -164.026367 -142.521255 30.607798 1.000000 1.000000 1.000000
+vn 0.755265 0.013313 -0.655285
+v -163.779160 -141.783112 30.858797 1.000000 1.000000 1.000000
+vn -0.286060 0.144535 -0.947248
+v -164.259399 -142.528229 30.602598 1.000000 1.000000 1.000000
+vn -0.325621 0.020728 -0.945273
+v -163.763718 -144.776123 30.267998 1.000000 1.000000 1.000000
+vn -0.311220 -0.062717 -0.948266
+v -162.953888 -146.118423 30.036598 1.000000 1.000000 1.000000
+vn -0.039284 0.283961 -0.958031
+v -161.081894 -147.315628 29.694599 1.000000 1.000000 1.000000
+vn -0.269151 -0.177242 -0.946648
+v -161.178452 -147.545837 29.689398 1.000000 1.000000 1.000000
+vn -0.168114 0.194355 -0.966418
+v -159.024490 -147.803986 29.348398 1.000000 1.000000 1.000000
+vn -0.166051 -0.266825 -0.949332
+v -159.025787 -148.056549 29.343399 1.000000 1.000000 1.000000
+vn 0.178107 0.636424 -0.750495
+v -160.991760 -147.099335 29.830399 1.000000 1.000000 1.000000
+vn 0.010088 0.728315 -0.685168
+v -159.696564 -147.510971 29.599598 1.000000 1.000000 1.000000
+vn 0.336919 0.806185 -0.486366
+v -160.893921 -146.864929 30.165199 1.000000 1.000000 1.000000
+vn 0.181115 0.876997 -0.445055
+v -160.295242 -147.106323 30.050398 1.000000 1.000000 1.000000
+vn -0.076176 0.908869 -0.410067
+v -159.023209 -147.308640 29.819199 1.000000 1.000000 1.000000
+vn -0.295998 0.655283 -0.694975
+v -157.677795 -147.363052 29.251799 1.000000 1.000000 1.000000
+vn -0.241033 0.151704 -0.958587
+v -157.027603 -147.364456 29.013798 1.000000 1.000000 1.000000
+vn -0.188334 0.794059 -0.577929
+v -158.379471 -147.261200 29.703199 1.000000 1.000000 1.000000
+vn -0.450534 0.756750 -0.473654
+v -157.207870 -146.908188 29.484398 1.000000 1.000000 1.000000
+vn -0.471882 0.495937 -0.728953
+v -156.513916 -146.811905 29.034599 1.000000 1.000000 1.000000
+vn -0.277472 0.077360 -0.957614
+v -155.818665 -146.570511 28.782398 1.000000 1.000000 1.000000
+vn -0.635426 0.624913 -0.453561
+v -156.108353 -146.186783 29.252998 1.000000 1.000000 1.000000
+vn -0.662408 0.383348 -0.643630
+v -155.462036 -145.877029 28.801798 1.000000 1.000000 1.000000
+vn -0.443399 0.862939 -0.242350
+v -157.261932 -146.770035 29.881998 1.000000 1.000000 1.000000
+vn -0.647435 0.727712 -0.226414
+v -156.197189 -146.069580 29.650599 1.000000 1.000000 1.000000
+vn -0.536870 0.842994 0.033639
+v -156.735352 -146.415619 30.221598 1.000000 1.000000 1.000000
+vn -0.333399 0.942767 0.005974
+v -157.796234 -146.917953 30.438999 1.000000 1.000000 1.000000
+vn -0.751560 0.498512 -0.432022
+v -155.638428 -145.702606 29.136599 1.000000 1.000000 1.000000
+vn -0.776143 0.630476 0.010101
+v -155.778763 -145.564468 29.988998 1.000000 1.000000 1.000000
+vn -0.669614 0.742684 0.006200
+v -156.229370 -146.027725 30.105398 1.000000 1.000000 1.000000
+vn -0.889625 0.396949 -0.225828
+v -155.037170 -144.491470 29.303398 1.000000 1.000000 1.000000
+vn -0.823114 0.323526 -0.466706
+v -154.912277 -144.558441 28.905998 1.000000 1.000000 1.000000
+vn -0.902150 0.428747 0.047979
+v -155.082230 -144.466354 29.758198 1.000000 1.000000 1.000000
+vn -0.660803 0.180189 -0.728609
+v -154.698563 -144.672852 28.571199 1.000000 1.000000 1.000000
+vn -0.305715 -0.024251 -0.951814
+v -154.502869 -144.778900 28.435398 1.000000 1.000000 1.000000
+vn -0.141227 0.989936 -0.009043
+v -158.405228 -147.057480 30.555599 1.000000 1.000000 1.000000
+vn 0.133359 0.989698 0.052095
+v -159.634766 -147.051895 30.786598 1.000000 1.000000 1.000000
+vn 0.336146 0.866481 0.369075
+v -160.291382 -147.092361 31.726999 1.000000 1.000000 1.000000
+vn 0.459875 0.781354 0.421901
+v -160.887482 -146.852371 31.841799 1.000000 1.000000 1.000000
+vn 0.454683 0.889295 0.049178
+v -160.814087 -146.676559 31.017399 1.000000 1.000000 1.000000
+vn 0.296826 0.908787 -0.293257
+v -160.255325 -146.961197 30.447998 1.000000 1.000000 1.000000
+vn 0.418035 0.876607 -0.238343
+v -160.835983 -146.728180 30.562599 1.000000 1.000000 1.000000
+vn 0.609384 0.707104 0.358686
+v -161.450119 -146.520279 31.957199 1.000000 1.000000 1.000000
+vn 0.661626 0.672160 0.332342
+v -161.965103 -146.107254 32.072399 1.000000 1.000000 1.000000
+vn 0.751605 0.495927 0.434909
+v -162.426025 -145.614716 32.188999 1.000000 1.000000 1.000000
+vn -0.523625 0.725865 0.446024
+v -156.117371 -146.175629 30.929798 1.000000 1.000000 1.000000
+vn -0.701655 0.631153 0.330644
+v -155.647430 -145.692841 30.813198 1.000000 1.000000 1.000000
+vn -0.733970 0.579178 0.354740
+v -155.249603 -145.150055 30.697998 1.000000 1.000000 1.000000
+vn -0.802184 0.435236 0.408742
+v -154.923874 -144.551468 30.582598 1.000000 1.000000 1.000000
+vn -0.879750 0.322115 0.349689
+v -154.681824 -143.913788 30.467798 1.000000 1.000000 1.000000
+vn -0.988443 0.143404 0.049143
+v -154.697266 -143.202164 29.527399 1.000000 1.000000 1.000000
+vn -0.199410 0.240071 -0.950053
+v -163.862854 -140.178482 30.948599 1.000000 1.000000 1.000000
+vn -0.082615 0.286349 -0.954557
+v -162.606262 -138.206879 31.295799 1.000000 1.000000 1.000000
+vn 0.303473 0.043563 -0.951844
+v -163.646561 -140.276154 30.953798 1.000000 1.000000 1.000000
+vn 0.283159 -0.060091 -0.957189
+v -162.446625 -138.391068 31.300999 1.000000 1.000000 1.000000
+vn 0.005439 0.308151 -0.951322
+v -161.396042 -137.284561 31.527199 1.000000 1.000000 1.000000
+vn 0.506608 -0.464457 -0.726380
+v -161.769409 -138.098038 31.552998 1.000000 1.000000 1.000000
+vn 0.687771 -0.340000 -0.641383
+v -162.758194 -139.108261 31.320198 1.000000 1.000000 1.000000
+vn 0.251850 -0.136797 -0.958049
+v -161.290466 -137.509216 31.532198 1.000000 1.000000 1.000000
+vn 0.145710 0.276225 -0.949983
+v -159.341217 -136.672012 31.861799 1.000000 1.000000 1.000000
+vn 0.181897 -0.183411 -0.966061
+v -159.325775 -136.923172 31.866999 1.000000 1.000000 1.000000
+vn 0.255969 0.194837 -0.946847
+v -157.160233 -137.020844 32.207798 1.000000 1.000000 1.000000
+vn 0.059890 -0.281143 -0.957795
+v -157.242630 -137.258057 32.212997 1.000000 1.000000 1.000000
+vn 0.306107 0.082456 -0.948420
+v -155.299820 -138.314316 32.555000 1.000000 1.000000 1.000000
+vn 0.573601 0.377073 -0.727184
+v -155.126007 -138.124557 32.706001 1.000000 1.000000 1.000000
+vn 0.326996 0.000028 -0.945026
+v -154.407593 -139.592438 32.786400 1.000000 1.000000 1.000000
+vn 0.453595 0.420521 -0.785757
+v -155.718246 -137.573395 32.589600 1.000000 1.000000 1.000000
+vn 0.367035 0.564012 -0.739713
+v -157.073959 -136.771088 32.359001 1.000000 1.000000 1.000000
+vn 0.658285 0.206816 -0.723801
+v -154.191299 -139.464066 32.937401 1.000000 1.000000 1.000000
+vn 0.294977 -0.126002 -0.947160
+v -153.771576 -141.798462 33.120998 1.000000 1.000000 1.000000
+vn 0.632041 0.067682 -0.771973
+v -153.656982 -140.941742 33.156197 1.000000 1.000000 1.000000
+vn 0.839901 0.349835 -0.414948
+v -153.984009 -139.338501 33.281998 1.000000 1.000000 1.000000
+vn 0.753636 0.447337 -0.481584
+v -154.423035 -138.605942 33.166798 1.000000 1.000000 1.000000
+vn 0.688817 -0.055281 -0.722825
+v -153.525665 -141.773361 33.271999 1.000000 1.000000 1.000000
+vn 0.216845 -0.227074 -0.949429
+v -154.018768 -144.171921 33.466999 1.000000 1.000000 1.000000
+vn 0.878724 0.152996 -0.452146
+v -153.426529 -140.880341 33.500801 1.000000 1.000000 1.000000
+vn 0.922504 0.325415 -0.207587
+v -153.553986 -139.985931 33.777199 1.000000 1.000000 1.000000
+vn 0.826557 0.536561 -0.170016
+v -154.317474 -138.519440 33.559799 1.000000 1.000000 1.000000
+vn 0.691285 0.560526 -0.456000
+v -154.958633 -137.943161 33.050598 1.000000 1.000000 1.000000
+vn 0.735517 0.654475 -0.175151
+v -154.864655 -137.839905 33.443596 1.000000 1.000000 1.000000
+vn 0.798612 0.582410 0.151714
+v -154.307159 -138.511063 34.375397 1.000000 1.000000 1.000000
+vn 0.865830 0.472426 0.164778
+v -153.856552 -139.261749 34.490601 1.000000 1.000000 1.000000
+vn 0.708830 0.688489 0.153434
+v -154.855637 -137.830139 34.259201 1.000000 1.000000 1.000000
+vn 0.603090 0.782644 0.154113
+v -155.490372 -137.239914 34.142799 1.000000 1.000000 1.000000
+vn 0.635430 0.751823 -0.176041
+v -155.498093 -137.251068 33.327198 1.000000 1.000000 1.000000
+vn 0.605391 0.649949 -0.459421
+v -155.576614 -137.366882 32.934196 1.000000 1.000000 1.000000
+vn 0.500359 0.712713 -0.491611
+v -156.256409 -136.893875 32.818798 1.000000 1.000000 1.000000
+vn 0.521111 0.834903 -0.177144
+v -156.193329 -136.768280 33.211800 1.000000 1.000000 1.000000
+vn 0.484013 0.861064 0.155883
+v -156.186890 -136.755737 34.027397 1.000000 1.000000 1.000000
+vn 0.392113 0.902293 -0.179206
+v -156.943924 -136.395737 33.096596 1.000000 1.000000 1.000000
+vn 0.390826 0.793439 -0.466594
+v -156.991562 -136.529694 32.703400 1.000000 1.000000 1.000000
+vn 0.350832 0.923093 0.157532
+v -156.940063 -136.381775 33.911999 1.000000 1.000000 1.000000
+vn 0.252501 0.950454 -0.181330
+v -157.731873 -136.143173 32.981796 1.000000 1.000000 1.000000
+vn 0.382459 0.780435 0.494618
+v -156.260284 -136.899445 34.495598 1.000000 1.000000 1.000000
+vn 0.271003 0.841271 0.467782
+v -156.992859 -136.536667 34.380398 1.000000 1.000000 1.000000
+vn 0.207864 0.965300 0.158078
+v -157.729294 -136.129227 33.797398 1.000000 1.000000 1.000000
+vn 0.133198 0.856588 0.498513
+v -157.762772 -136.289688 34.265598 1.000000 1.000000 1.000000
+vn 0.145418 0.648320 0.747352
+v -157.076538 -136.776657 34.717999 1.000000 1.000000 1.000000
+vn 0.506058 0.728673 0.461456
+v -155.580490 -137.371063 34.611000 1.000000 1.000000 1.000000
+vn 0.294302 0.555207 0.777902
+v -155.722107 -137.577576 34.948799 1.000000 1.000000 1.000000
+vn 0.592314 0.640250 0.489125
+v -154.962494 -137.947342 34.727398 1.000000 1.000000 1.000000
+vn 0.486693 0.453196 0.746822
+v -154.617447 -138.765015 35.181396 1.000000 1.000000 1.000000
+vn 0.143601 0.327471 0.933885
+v -155.286942 -138.301758 35.205799 1.000000 1.000000 1.000000
+vn -0.027009 0.315630 0.948498
+v -157.155075 -137.004105 34.858597 1.000000 1.000000 1.000000
+vn -0.060880 0.623648 0.779331
+v -158.584183 -136.416656 34.487198 1.000000 1.000000 1.000000
+vn 0.007923 0.882796 0.469689
+v -158.566162 -136.161316 34.149399 1.000000 1.000000 1.000000
+vn -0.150065 0.832099 0.533940
+v -159.370834 -136.154343 34.034401 1.000000 1.000000 1.000000
+vn -0.329262 0.551039 0.766774
+v -160.877182 -136.755737 34.139599 1.000000 1.000000 1.000000
+vn -0.193185 0.404427 0.893934
+v -159.341217 -136.652466 34.512596 1.000000 1.000000 1.000000
+vn 0.060316 0.985486 0.158677
+v -158.554565 -135.996674 33.681198 1.000000 1.000000 1.000000
+vn 0.106602 0.977553 -0.181732
+v -158.555847 -136.010620 32.865601 1.000000 1.000000 1.000000
+vn -0.042609 0.982428 -0.181714
+v -159.379837 -136.005035 32.750599 1.000000 1.000000 1.000000
+vn -0.090002 0.983389 0.157627
+v -159.381134 -135.991089 33.565998 1.000000 1.000000 1.000000
+vn 0.268975 0.841031 -0.469382
+v -157.761490 -136.284103 32.588799 1.000000 1.000000 1.000000
+vn 0.141376 0.854475 -0.499886
+v -158.566162 -136.154343 32.472599 1.000000 1.000000 1.000000
+vn 0.005473 0.881600 -0.471965
+v -159.372116 -136.148758 32.357399 1.000000 1.000000 1.000000
+vn -0.192353 0.964432 -0.181302
+v -160.202545 -136.125046 32.634598 1.000000 1.000000 1.000000
+vn -0.241276 0.808040 0.537455
+v -160.174210 -136.272949 33.918396 1.000000 1.000000 1.000000
+vn -0.238612 0.958214 0.157765
+v -160.205109 -136.111084 33.450199 1.000000 1.000000 1.000000
+vn -0.143034 0.865534 -0.479993
+v -160.175507 -136.265961 32.241600 1.000000 1.000000 1.000000
+vn -0.340931 0.914187 -0.219154
+v -161.005936 -136.373413 32.517998 1.000000 1.000000 1.000000
+vn -0.376618 0.913190 0.155705
+v -161.009796 -136.360855 33.333599 1.000000 1.000000 1.000000
+vn 0.085695 0.659352 -0.746935
+v -159.356674 -136.405502 32.012798 1.000000 1.000000 1.000000
+vn -0.056129 0.610018 -0.790397
+v -160.126587 -136.518524 31.896999 1.000000 1.000000 1.000000
+vn -0.363667 0.823509 -0.435406
+v -161.616196 -136.818527 32.022797 1.000000 1.000000 1.000000
+vn -0.567304 0.804483 -0.175995
+v -162.383530 -137.150604 32.300598 1.000000 1.000000 1.000000
+vn -0.500923 0.848849 0.168912
+v -161.683151 -136.677597 33.231400 1.000000 1.000000 1.000000
+vn -0.398254 0.787428 0.470480
+v -160.958298 -136.514343 33.801796 1.000000 1.000000 1.000000
+vn -0.572363 0.674657 0.466089
+v -162.303711 -137.273392 33.584396 1.000000 1.000000 1.000000
+vn -0.476842 0.465529 0.745590
+v -162.167236 -137.484100 33.922199 1.000000 1.000000 1.000000
+vn -0.614579 0.773775 0.153509
+v -162.391251 -137.139450 33.116196 1.000000 1.000000 1.000000
+vn -0.668516 0.564118 0.484622
+v -162.933289 -137.830139 33.468201 1.000000 1.000000 1.000000
+vn -0.580048 0.283331 0.763720
+v -163.300217 -138.639435 33.689598 1.000000 1.000000 1.000000
+vn -0.284431 0.220078 0.933094
+v -161.405045 -137.267822 34.177998 1.000000 1.000000 1.000000
+vn -0.345555 0.140797 0.927776
+v -162.617859 -138.194321 33.946598 1.000000 1.000000 1.000000
+vn -0.719027 0.678185 0.151873
+v -163.037582 -137.710144 33.000000 1.000000 1.000000 1.000000
+vn -0.752273 0.480724 0.450545
+v -163.485626 -138.478973 33.351799 1.000000 1.000000 1.000000
+vn -0.799909 0.364142 0.477019
+v -163.943954 -139.198959 33.236397 1.000000 1.000000 1.000000
+vn -0.806859 0.571365 0.150072
+v -163.604065 -138.377106 32.883598 1.000000 1.000000 1.000000
+vn -0.877076 0.456746 0.148732
+v -164.074005 -139.115234 32.768196 1.000000 1.000000 1.000000
+vn -0.685630 0.706222 -0.176528
+v -163.028564 -137.721313 32.184399 1.000000 1.000000 1.000000
+vn -0.472036 0.729818 -0.494518
+v -162.307571 -137.269211 31.907598 1.000000 1.000000 1.000000
+vn -0.588449 0.664598 -0.460475
+v -162.937149 -137.825958 31.791401 1.000000 1.000000 1.000000
+vn -0.778001 0.603353 -0.175157
+v -163.593765 -138.385483 32.068001 1.000000 1.000000 1.000000
+vn -0.208289 0.635394 -0.743566
+v -161.509338 -137.047363 31.678198 1.000000 1.000000 1.000000
+vn -0.393809 0.550343 -0.736232
+v -162.774933 -138.012939 31.446798 1.000000 1.000000 1.000000
+vn -0.440914 0.431639 -0.786945
+v -163.304077 -138.636642 31.330399 1.000000 1.000000 1.000000
+vn -0.676886 0.576214 -0.458041
+v -163.489487 -138.476166 31.674999 1.000000 1.000000 1.000000
+vn -0.735877 0.474135 -0.483405
+v -163.947815 -139.196167 31.559599 1.000000 1.000000 1.000000
+vn -0.853190 0.491894 -0.173514
+v -164.062408 -139.122223 31.952599 1.000000 1.000000 1.000000
+vn -0.585862 0.353276 -0.729357
+v -164.090729 -140.076630 31.099798 1.000000 1.000000 1.000000
+vn -0.585144 0.224142 -0.779337
+v -164.334061 -140.867783 30.984999 1.000000 1.000000 1.000000
+vn -0.811428 0.373921 -0.449185
+v -164.309616 -139.978958 31.444199 1.000000 1.000000 1.000000
+vn -0.854921 0.263400 -0.446913
+v -164.563248 -140.803604 31.329599 1.000000 1.000000 1.000000
+vn -0.912013 0.372905 -0.170808
+v -164.431915 -139.923141 31.837399 1.000000 1.000000 1.000000
+vn -0.930583 0.334893 0.147855
+v -164.443497 -139.918961 32.652798 1.000000 1.000000 1.000000
+vn -0.684137 0.098795 -0.722631
+v -164.505310 -142.536606 30.753599 1.000000 1.000000 1.000000
+vn 0.230027 0.566336 -0.791423
+v -157.811691 -136.533875 32.244198 1.000000 1.000000 1.000000
+vn -0.275454 -0.058697 0.959521
+v -155.455597 -138.484558 35.209599 1.000000 1.000000 1.000000
+vn -0.290407 0.025678 0.956559
+v -154.600708 -139.709656 35.440796 1.000000 1.000000 1.000000
+vn 0.226420 0.269404 0.936032
+v -154.392136 -139.584076 35.437199 1.000000 1.000000 1.000000
+vn -0.249881 0.127673 0.959822
+v -153.991730 -141.822189 35.775578 1.000000 1.000000 1.000000
+vn 0.415580 0.189980 0.889494
+v -153.754837 -141.797073 35.771778 1.000000 1.000000 1.000000
+vn -0.171825 0.213026 0.961819
+v -154.229919 -144.096588 36.121578 1.000000 1.000000 1.000000
+vn 0.333272 0.039131 0.942018
+v -154.003311 -144.178909 36.117779 1.000000 1.000000 1.000000
+vn -0.072328 0.257755 0.963499
+v -155.311401 -146.069580 36.468781 1.000000 1.000000 1.000000
+vn -0.626730 0.314894 0.712777
+v -154.462952 -144.011459 35.966980 1.000000 1.000000 1.000000
+vn 0.354987 -0.118530 0.927327
+v -155.136307 -146.245392 36.464981 1.000000 1.000000 1.000000
+vn -0.446979 0.520560 0.727480
+v -155.491653 -145.888199 36.314178 1.000000 1.000000 1.000000
+vn 0.021093 0.271589 0.962182
+v -156.410904 -147.036545 36.700180 1.000000 1.000000 1.000000
+vn 0.299413 -0.200948 0.932723
+v -156.288605 -147.258408 36.696381 1.000000 1.000000 1.000000
+vn -0.223954 0.633502 0.740621
+v -156.538376 -146.807709 36.545578 1.000000 1.000000 1.000000
+vn 0.131472 0.234178 0.963263
+v -158.339554 -147.769104 37.034779 1.000000 1.000000 1.000000
+vn 0.190632 -0.304637 0.933197
+v -158.307373 -148.024445 37.030979 1.000000 1.000000 1.000000
+vn 0.220691 0.163226 0.961589
+v -160.443298 -147.589111 37.380779 1.000000 1.000000 1.000000
+vn 0.030081 0.677948 0.734494
+v -158.371750 -147.503983 36.880180 1.000000 1.000000 1.000000
+vn 0.327546 0.603287 0.727158
+v -160.373779 -147.332352 37.226181 1.000000 1.000000 1.000000
+vn 0.270684 0.076091 0.959656
+v -162.299850 -146.485397 37.727978 1.000000 1.000000 1.000000
+vn 0.544536 0.426559 0.722169
+v -162.138916 -146.283066 37.573380 1.000000 1.000000 1.000000
+vn 0.290870 -0.007670 0.956732
+v -163.230698 -145.325867 37.959381 1.000000 1.000000 1.000000
+vn 0.657614 0.221795 0.719966
+v -163.023422 -145.180756 37.804779 1.000000 1.000000 1.000000
+vn 0.258840 -0.111341 0.959481
+v -163.971008 -143.262161 38.293976 1.000000 1.000000 1.000000
+vn 0.705882 -0.004609 0.708314
+v -163.727661 -143.218918 38.139378 1.000000 1.000000 1.000000
+vn 0.828140 0.348711 0.438845
+v -162.825150 -145.041229 37.456978 1.000000 1.000000 1.000000
+vn 0.757812 0.508654 0.408647
+v -162.441467 -145.595169 37.341980 1.000000 1.000000 1.000000
+vn 0.186907 -0.201417 0.961508
+v -163.877014 -140.976624 38.639977 1.000000 1.000000 1.000000
+vn 0.946395 -0.044889 0.319876
+v -163.556427 -142.486359 37.906979 1.000000 1.000000 1.000000
+vn 0.646784 -0.273981 0.711762
+v -163.638824 -141.044983 38.485378 1.000000 1.000000 1.000000
+vn 0.900840 0.060363 0.429935
+v -163.494629 -143.175659 37.791779 1.000000 1.000000 1.000000
+vn 0.915076 0.266873 0.302349
+v -163.343994 -143.853790 37.675781 1.000000 1.000000 1.000000
+vn 0.960155 0.279339 -0.008523
+v -163.175339 -143.796585 36.851578 1.000000 1.000000 1.000000
+vn 0.997781 0.044694 0.049359
+v -163.378754 -142.480789 37.082581 1.000000 1.000000 1.000000
+vn 0.924581 -0.150656 0.349932
+v -163.526825 -141.787308 38.022980 1.000000 1.000000 1.000000
+vn 0.872811 -0.271913 0.405294
+v -163.409653 -141.109177 38.137779 1.000000 1.000000 1.000000
+vn 0.967749 -0.247529 0.046807
+v -163.238419 -141.158005 37.313377 1.000000 1.000000 1.000000
+vn 0.834924 -0.424366 0.350449
+v -163.204941 -140.451965 38.253178 1.000000 1.000000 1.000000
+vn 0.899981 0.208987 -0.382568
+v -163.508789 -143.178452 36.115181 1.000000 1.000000 1.000000
+vn 0.898390 0.439146 0.006825
+v -162.944870 -144.421692 36.734978 1.000000 1.000000 1.000000
+vn 0.908227 -0.017944 -0.418093
+v -163.540985 -141.785904 36.346581 1.000000 1.000000 1.000000
+vn 0.814502 0.529902 -0.236201
+v -162.719574 -144.967270 36.177979 1.000000 1.000000 1.000000
+vn 0.635331 0.372442 -0.676492
+v -163.329834 -144.624023 35.547997 1.000000 1.000000 1.000000
+vn 0.779664 0.290687 -0.554640
+v -163.356873 -143.857986 35.999176 1.000000 1.000000 1.000000
+vn 0.747383 0.108350 -0.655499
+v -163.807495 -142.493347 35.895576 1.000000 1.000000 1.000000
+vn 0.713432 0.527263 -0.461528
+v -162.836731 -145.049606 35.780380 1.000000 1.000000 1.000000
+vn 0.665470 0.710947 -0.227385
+v -161.902023 -145.987259 35.946579 1.000000 1.000000 1.000000
+vn 0.787344 0.615642 0.032769
+v -162.307571 -145.469589 36.517578 1.000000 1.000000 1.000000
+vn 0.450201 0.515673 -0.728972
+v -162.630737 -145.775162 35.330597 1.000000 1.000000 1.000000
+vn 0.562230 0.690099 -0.455697
+v -161.993423 -146.100281 35.549198 1.000000 1.000000 1.000000
+vn 0.416943 0.792733 -0.444671
+v -161.473282 -146.521683 35.432598 1.000000 1.000000 1.000000
+vn 0.678676 0.734421 0.004917
+v -161.868546 -145.944000 36.401379 1.000000 1.000000 1.000000
+vn 0.554581 0.832072 0.009777
+v -161.370285 -146.347260 36.284981 1.000000 1.000000 1.000000
+vn 0.676954 0.590400 0.439500
+v -161.984421 -146.089111 37.225777 1.000000 1.000000 1.000000
+vn 0.562580 0.754748 0.337430
+v -161.466858 -146.509109 37.109177 1.000000 1.000000 1.000000
+vn 0.503943 0.784125 0.362201
+v -160.905502 -146.842606 36.993980 1.000000 1.000000 1.000000
+vn 0.322282 0.945292 0.050562
+v -160.255325 -146.903992 36.054176 1.000000 1.000000 1.000000
+vn 0.341796 0.838303 0.424763
+v -160.305542 -147.088181 36.878578 1.000000 1.000000 1.000000
+vn 0.206912 0.904628 0.372606
+v -159.683685 -147.237488 36.763779 1.000000 1.000000 1.000000
+vn 0.087129 0.934543 0.345019
+v -159.041229 -147.293289 36.647778 1.000000 1.000000 1.000000
+vn -0.013877 0.998557 0.051869
+v -159.039948 -147.100739 35.823380 1.000000 1.000000 1.000000
+vn 0.160344 0.942114 -0.294468
+v -159.665665 -147.103531 35.484798 1.000000 1.000000 1.000000
+vn 0.288197 0.927148 -0.239456
+v -160.269501 -146.957016 35.599396 1.000000 1.000000 1.000000
+vn -0.285529 0.958328 -0.008955
+v -157.820709 -146.924927 35.592400 1.000000 1.000000 1.000000
+vn 0.049860 0.893504 -0.446278
+v -159.686264 -147.252823 35.087399 1.000000 1.000000 1.000000
+vn -0.037507 0.888023 0.458267
+v -158.402634 -147.250031 36.532578 1.000000 1.000000 1.000000
+vn -0.208474 0.888065 -0.409732
+v -158.401352 -147.265381 34.855999 1.000000 1.000000 1.000000
+vn -0.465400 0.885077 0.006412
+v -157.234894 -146.696091 35.475800 1.000000 1.000000 1.000000
+vn 0.215990 0.844647 -0.489816
+v -160.309402 -147.102142 35.201996 1.000000 1.000000 1.000000
+vn 0.082621 0.653916 -0.752042
+v -160.377640 -147.349106 34.867199 1.000000 1.000000 1.000000
+vn -0.097212 0.723120 -0.683847
+v -159.042526 -147.565384 34.636398 1.000000 1.000000 1.000000
+vn 0.301709 0.686229 -0.661862
+v -161.602036 -146.737946 35.098000 1.000000 1.000000 1.000000
+vn -0.080549 0.275635 -0.957882
+v -160.440720 -147.576538 34.731400 1.000000 1.000000 1.000000
+vn -0.195187 0.172312 -0.965511
+v -158.340851 -147.755142 34.385399 1.000000 1.000000 1.000000
+vn -0.388224 0.611234 -0.689692
+v -157.062378 -147.121674 34.288799 1.000000 1.000000 1.000000
+vn 0.036632 0.268788 -0.962502
+v -162.292130 -146.475632 35.078598 1.000000 1.000000 1.000000
+vn -0.327897 -0.021202 -0.944476
+v -163.416092 -145.457031 35.304798 1.000000 1.000000 1.000000
+vn 0.121368 0.246269 -0.961572
+v -163.220398 -145.318893 35.309799 1.000000 1.000000 1.000000
+vn -0.300062 -0.102231 -0.948426
+v -162.445328 -146.666794 35.073399 1.000000 1.000000 1.000000
+vn -0.304024 0.107493 -0.946581
+v -164.188583 -143.302643 35.639378 1.000000 1.000000 1.000000
+vn 0.178645 0.186584 -0.966060
+v -163.959412 -143.260773 35.644577 1.000000 1.000000 1.000000
+vn 0.293913 0.081766 -0.952329
+v -163.865433 -140.980804 35.990578 1.000000 1.000000 1.000000
+vn 0.684253 -0.052189 -0.727375
+v -163.652985 -141.040802 36.126381 1.000000 1.000000 1.000000
+vn 0.289156 -0.024014 -0.956981
+v -162.912689 -138.936630 36.337776 1.000000 1.000000 1.000000
+vn 0.728401 -0.249244 -0.638208
+v -163.131561 -139.692902 36.357178 1.000000 1.000000 1.000000
+vn 0.871726 -0.161230 -0.462708
+v -163.422531 -141.106384 36.461178 1.000000 1.000000 1.000000
+vn 0.955617 -0.107846 -0.274165
+v -163.401932 -141.804047 36.743980 1.000000 1.000000 1.000000
+vn 0.836672 -0.343170 -0.426865
+v -162.926849 -139.825470 36.691780 1.000000 1.000000 1.000000
+vn 0.949746 -0.218771 -0.223880
+v -163.288635 -141.144058 36.858578 1.000000 1.000000 1.000000
+vn 0.567629 -0.394565 -0.722576
+v -162.277954 -138.545944 36.589779 1.000000 1.000000 1.000000
+vn -0.039536 0.304519 -0.951685
+v -162.011444 -137.685028 36.563980 1.000000 1.000000 1.000000
+vn -0.122916 0.272563 -0.954254
+v -163.094223 -138.777573 36.332581 1.000000 1.000000 1.000000
+vn 0.269585 -0.103678 -0.957379
+v -161.878845 -137.892929 36.568977 1.000000 1.000000 1.000000
+vn 0.103444 0.292827 -0.950553
+v -160.051910 -136.773880 36.898579 1.000000 1.000000 1.000000
+vn 0.207170 -0.159193 -0.965266
+v -160.005554 -137.022232 36.903778 1.000000 1.000000 1.000000
+vn 0.224561 0.225782 -0.947942
+v -157.847733 -136.798981 37.244579 1.000000 1.000000 1.000000
+vn 0.100533 -0.270160 -0.957552
+v -157.899231 -137.045959 37.249779 1.000000 1.000000 1.000000
+vn 0.291806 0.121046 -0.948787
+v -155.841843 -137.805023 37.591778 1.000000 1.000000 1.000000
+vn 0.515609 0.448193 -0.730253
+v -155.693787 -137.591537 37.742779 1.000000 1.000000 1.000000
+vn 0.389536 0.477018 -0.787855
+v -156.350403 -137.132477 37.626381 1.000000 1.000000 1.000000
+vn 0.281573 0.607291 -0.742909
+v -157.793655 -136.538055 37.395779 1.000000 1.000000 1.000000
+vn 0.624026 0.289588 -0.725762
+v -154.600708 -138.780365 37.974178 1.000000 1.000000 1.000000
+vn 0.617180 0.146659 -0.773033
+v -153.884872 -140.165924 38.192978 1.000000 1.000000 1.000000
+vn 0.785291 0.455178 -0.419679
+v -154.410172 -138.626877 38.318779 1.000000 1.000000 1.000000
+vn 0.685840 0.542066 -0.485580
+v -154.938034 -137.965485 38.203579 1.000000 1.000000 1.000000
+vn 0.693557 0.040232 -0.719277
+v -153.650558 -140.969635 38.308979 1.000000 1.000000 1.000000
+vn 0.850976 0.262807 -0.454722
+v -153.663422 -140.071045 38.537579 1.000000 1.000000 1.000000
+vn 0.872317 0.442144 -0.208738
+v -153.901611 -139.203140 38.813980 1.000000 1.000000 1.000000
+vn 0.746824 0.642137 -0.172960
+v -154.842758 -137.863632 38.596581 1.000000 1.000000 1.000000
+vn 0.608278 0.647696 -0.458789
+v -155.550873 -137.386414 38.087379 1.000000 1.000000 1.000000
+vn 0.639591 0.748387 -0.175615
+v -155.471039 -137.272003 38.480579 1.000000 1.000000 1.000000
+vn 0.713003 0.684163 0.153453
+v -154.833755 -137.853851 39.412178 1.000000 1.000000 1.000000
+vn 0.795632 0.582591 0.166003
+v -154.294296 -138.531982 39.527378 1.000000 1.000000 1.000000
+vn 0.607067 0.779446 0.154706
+v -155.463318 -137.260849 39.295979 1.000000 1.000000 1.000000
+vn 0.486919 0.859292 0.156613
+v -156.166290 -136.768280 39.179581 1.000000 1.000000 1.000000
+vn 0.523872 0.832905 -0.178401
+v -156.171448 -136.780853 38.363979 1.000000 1.000000 1.000000
+vn 0.507627 0.726064 -0.463838
+v -156.235809 -136.907822 37.970978 1.000000 1.000000 1.000000
+vn 0.393516 0.774965 -0.494545
+v -156.968384 -136.539459 37.855579 1.000000 1.000000 1.000000
+vn 0.396207 0.900630 -0.178567
+v -156.922043 -136.405502 38.248581 1.000000 1.000000 1.000000
+vn 0.355008 0.921542 0.157256
+v -156.916885 -136.392944 39.064178 1.000000 1.000000 1.000000
+vn 0.257173 0.949492 -0.179796
+v -157.712555 -136.147369 38.133377 1.000000 1.000000 1.000000
+vn 0.272111 0.840377 -0.468746
+v -157.742157 -136.286911 37.740181 1.000000 1.000000 1.000000
+vn 0.213201 0.964177 0.157826
+v -157.709976 -136.133423 38.948776 1.000000 1.000000 1.000000
+vn 0.110592 0.977152 -0.181501
+v -158.524948 -136.013412 38.018578 1.000000 1.000000 1.000000
+vn 0.265814 0.826305 0.496551
+v -156.970963 -136.546432 39.532379 1.000000 1.000000 1.000000
+vn 0.145689 0.871330 0.468571
+v -157.743454 -136.293884 39.417179 1.000000 1.000000 1.000000
+vn 0.064231 0.985353 0.157965
+v -158.523666 -135.999466 38.834179 1.000000 1.000000 1.000000
+vn 0.005712 0.867054 0.498182
+v -158.536545 -136.162720 39.302376 1.000000 1.000000 1.000000
+vn -0.038084 0.982599 -0.181792
+v -159.356674 -136.003647 37.902378 1.000000 1.000000 1.000000
+vn 0.143145 0.870339 -0.471189
+v -158.535263 -136.157135 37.625580 1.000000 1.000000 1.000000
+vn 0.144284 0.591243 -0.793482
+v -158.554565 -136.412476 37.280979 1.000000 1.000000 1.000000
+vn 0.014170 0.865421 -0.500845
+v -159.348938 -136.147369 37.509377 1.000000 1.000000 1.000000
+vn -0.085295 0.983645 0.158642
+v -159.357956 -135.989685 38.717979 1.000000 1.000000 1.000000
+vn -0.186993 0.965495 -0.181254
+v -160.175507 -136.119461 37.787376 1.000000 1.000000 1.000000
+vn -0.122677 0.874848 0.468606
+v -159.348938 -136.154343 39.186180 1.000000 1.000000 1.000000
+vn -0.232917 0.959608 0.157806
+v -160.176804 -136.105499 38.602779 1.000000 1.000000 1.000000
+vn -0.270370 0.802128 0.532438
+v -160.147186 -136.267365 39.071178 1.000000 1.000000 1.000000
+vn -0.124539 0.872800 -0.471922
+v -160.148468 -136.260391 37.394180 1.000000 1.000000 1.000000
+vn -0.331292 0.926069 -0.180670
+v -160.975021 -136.360855 37.671379 1.000000 1.000000 1.000000
+vn -0.011990 0.664686 -0.747027
+v -160.100830 -136.512939 37.049778 1.000000 1.000000 1.000000
+vn -0.268422 0.836834 -0.477135
+v -160.929977 -136.496201 37.278378 1.000000 1.000000 1.000000
+vn -0.375408 0.913598 0.156227
+v -160.978882 -136.346909 38.486977 1.000000 1.000000 1.000000
+vn -0.468290 0.856288 -0.217890
+v -161.738510 -136.725037 37.554779 1.000000 1.000000 1.000000
+vn -0.503242 0.850197 0.154634
+v -161.744934 -136.712479 38.370377 1.000000 1.000000 1.000000
+vn -0.145546 0.597081 -0.788866
+v -160.850143 -136.737595 36.933777 1.000000 1.000000 1.000000
+vn -0.478124 0.764935 -0.431591
+v -162.288269 -137.255249 37.059578 1.000000 1.000000 1.000000
+vn -0.673329 0.718556 -0.174085
+v -163.006683 -137.697586 37.337379 1.000000 1.000000 1.000000
+vn -0.615082 0.770499 0.167351
+v -162.371948 -137.125504 38.268181 1.000000 1.000000 1.000000
+vn -0.506669 0.724601 0.467162
+v -161.674133 -136.857590 38.838577 1.000000 1.000000 1.000000
+vn -0.356158 0.765750 0.535517
+v -160.927399 -136.501785 38.955177 1.000000 1.000000 1.000000
+vn -0.660794 0.591268 0.462336
+v -162.912689 -137.807816 38.621178 1.000000 1.000000 1.000000
+vn -0.405916 0.501618 0.763945
+v -161.564697 -137.085037 39.176376 1.000000 1.000000 1.000000
+vn -0.537632 0.398383 0.743130
+v -162.750473 -137.996185 38.958977 1.000000 1.000000 1.000000
+vn -0.715457 0.681940 0.151917
+v -163.015686 -137.687820 38.152977 1.000000 1.000000 1.000000
+vn -0.739972 0.470691 0.480511
+v -163.466309 -138.452454 38.505180 1.000000 1.000000 1.000000
+vn -0.614121 0.206387 0.761748
+v -163.727661 -139.307800 38.726379 1.000000 1.000000 1.000000
+vn -0.313263 0.181137 0.932232
+v -162.021759 -137.669678 39.214779 1.000000 1.000000 1.000000
+vn -0.804233 0.574905 0.150642
+v -163.583466 -138.349197 38.036781 1.000000 1.000000 1.000000
+vn -0.810607 0.378527 0.446805
+v -163.931091 -139.176636 38.388580 1.000000 1.000000 1.000000
+vn -0.875319 0.459993 0.149076
+v -164.061127 -139.092911 37.920380 1.000000 1.000000 1.000000
+vn -0.152510 0.609218 0.778200
+v -159.334778 -136.409683 39.523979 1.000000 1.000000 1.000000
+vn -0.250455 0.374304 0.892843
+v -160.055771 -136.755737 39.549377 1.000000 1.000000 1.000000
+vn 0.049227 0.661820 0.748045
+v -157.794952 -136.543640 39.754780 1.000000 1.000000 1.000000
+vn 0.211173 0.590018 0.779285
+v -156.352982 -137.138046 39.985580 1.000000 1.000000 1.000000
+vn -0.073437 0.309344 0.948110
+v -157.843872 -136.780853 39.895378 1.000000 1.000000 1.000000
+vn 0.397103 0.791263 0.464987
+v -156.238388 -136.913406 39.647778 1.000000 1.000000 1.000000
+vn 0.496450 0.715134 0.492058
+v -155.554733 -137.392014 39.764378 1.000000 1.000000 1.000000
+vn 0.618853 0.633658 0.464218
+v -154.941895 -137.969666 39.880379 1.000000 1.000000 1.000000
+vn 0.417919 0.513052 0.749748
+v -155.109268 -138.151062 40.218178 1.000000 1.000000 1.000000
+vn 0.747263 0.481730 0.457749
+v -154.022629 -139.277100 40.097778 1.000000 1.000000 1.000000
+vn 0.519232 0.390243 0.760334
+v -154.228638 -139.405472 40.435577 1.000000 1.000000 1.000000
+vn 0.186145 0.296151 0.936827
+v -154.783539 -138.929657 40.473976 1.000000 1.000000 1.000000
+vn 0.093891 0.342776 0.934713
+v -155.831543 -137.791061 40.242577 1.000000 1.000000 1.000000
+vn 0.641779 0.243662 0.727151
+v -153.655701 -140.971039 40.667976 1.000000 1.000000 1.000000
+vn 0.801056 0.359203 0.478834
+v -153.669861 -140.073837 40.214378 1.000000 1.000000 1.000000
+vn 0.261679 0.196236 0.944995
+v -153.873291 -141.028244 40.808578 1.000000 1.000000 1.000000
+vn 0.685891 0.069492 0.724379
+v -153.511505 -142.641251 40.899380 1.000000 1.000000 1.000000
+vn 0.870005 0.136791 0.473688
+v -153.293930 -141.773361 40.445377 1.000000 1.000000 1.000000
+vn 0.860241 0.249905 0.444447
+v -153.425247 -140.911041 40.330379 1.000000 1.000000 1.000000
+vn 0.961464 0.232122 0.147331
+v -153.278473 -140.873367 39.861977 1.000000 1.000000 1.000000
+vn 0.921864 0.357574 0.149361
+v -153.528244 -140.013840 39.746178 1.000000 1.000000 1.000000
+vn 0.983599 0.104346 0.147122
+v -153.143280 -141.756607 39.977180 1.000000 1.000000 1.000000
+vn 0.896770 0.018862 0.442096
+v -153.274612 -142.653809 40.561577 1.000000 1.000000 1.000000
+vn 0.988926 -0.023580 0.146524
+v -153.123978 -142.660782 40.093376 1.000000 1.000000 1.000000
+vn 0.983540 -0.063955 -0.168996
+v -153.136841 -142.660782 39.277779 1.000000 1.000000 1.000000
+vn 0.966906 0.191125 -0.169009
+v -153.291351 -140.876144 39.046577 1.000000 1.000000 1.000000
+vn 0.983474 0.063972 -0.169373
+v -153.156158 -141.758011 39.161579 1.000000 1.000000 1.000000
+vn 0.977318 -0.152139 0.147317
+v -153.219254 -143.546814 40.207977 1.000000 1.000000 1.000000
+vn 0.876420 -0.090796 0.472910
+v -153.368591 -143.516129 40.676376 1.000000 1.000000 1.000000
+vn 0.966863 -0.191236 -0.169132
+v -153.232117 -143.544037 39.392578 1.000000 1.000000 1.000000
+vn 0.870698 -0.213094 0.443256
+v -153.573303 -144.361694 40.791779 1.000000 1.000000 1.000000
+vn 0.310035 0.121885 0.942880
+v -153.735519 -142.630096 41.039978 1.000000 1.000000 1.000000
+vn 0.335075 0.035880 0.941508
+v -154.009766 -144.199844 41.269978 1.000000 1.000000 1.000000
+vn 0.879985 0.014587 -0.474778
+v -153.288773 -141.771957 38.768578 1.000000 1.000000 1.000000
+vn 0.885455 0.135721 -0.444466
+v -153.420090 -140.909637 38.653378 1.000000 1.000000 1.000000
+vn 0.932994 0.317450 -0.169555
+v -153.539825 -140.019409 38.930580 1.000000 1.000000 1.000000
+vn 0.890430 -0.095841 -0.444915
+v -153.269455 -142.653809 38.884781 1.000000 1.000000 1.000000
+vn 0.853555 -0.211749 -0.476031
+v -153.362152 -143.517517 38.999378 1.000000 1.000000 1.000000
+vn 0.671619 -0.136134 -0.728282
+v -153.506363 -142.641251 38.540176 1.000000 1.000000 1.000000
+vn 0.866920 0.475348 0.149981
+v -153.891312 -139.196167 39.629578 1.000000 1.000000 1.000000
+vn -0.775564 0.606579 -0.174822
+v -163.574463 -138.357574 37.221378 1.000000 1.000000 1.000000
+vn -0.570293 0.658295 -0.491339
+v -162.916550 -137.803635 36.944378 1.000000 1.000000 1.000000
+vn -0.674917 0.579016 -0.457414
+v -163.470169 -138.448273 36.828178 1.000000 1.000000 1.000000
+vn -0.851796 0.494649 -0.172526
+v -164.049530 -139.099899 37.104778 1.000000 1.000000 1.000000
+vn -0.298263 0.600701 -0.741753
+v -162.153076 -137.465958 36.714981 1.000000 1.000000 1.000000
+vn -0.468122 0.492892 -0.733430
+v -163.286057 -138.610123 36.483578 1.000000 1.000000 1.000000
+vn -0.496908 0.369978 -0.784983
+v -163.731522 -139.305008 36.367180 1.000000 1.000000 1.000000
+vn -0.749814 0.481877 -0.453401
+v -163.936234 -139.173843 36.711777 1.000000 1.000000 1.000000
+vn -0.793464 0.374182 -0.480003
+v -164.299301 -139.955231 36.596378 1.000000 1.000000 1.000000
+vn -0.910386 0.376526 -0.171537
+v -164.421616 -139.899414 36.989380 1.000000 1.000000 1.000000
+vn -0.628893 0.274696 -0.727348
+v -164.328918 -140.848251 36.136578 1.000000 1.000000 1.000000
+vn -0.231823 0.212550 -0.949252
+v -164.090729 -140.916611 35.985378 1.000000 1.000000 1.000000
+vn -0.610783 0.148353 -0.777776
+v -164.470551 -141.668701 36.021778 1.000000 1.000000 1.000000
+vn -0.853890 0.266691 -0.446931
+v -164.559387 -140.784058 36.480980 1.000000 1.000000 1.000000
+vn -0.691069 0.011892 -0.722691
+v -164.431915 -143.347290 35.790379 1.000000 1.000000 1.000000
+vn -0.928801 0.339617 0.148283
+v -164.434494 -139.893845 37.804977 1.000000 1.000000 1.000000
+vn 0.885675 -0.464213 0.009270
+v -162.763336 -139.930115 37.544178 1.000000 1.000000 1.000000
+vn -0.240898 -0.211395 -0.947249
+v -160.506393 -147.819336 34.726196 1.000000 1.000000 1.000000
+vn -0.301266 0.759955 -0.575941
+v -157.769211 -147.124466 34.739998 1.000000 1.000000 1.000000
+vn -0.553351 0.687669 -0.470015
+v -156.652969 -146.601212 34.521198 1.000000 1.000000 1.000000
+vn -0.538086 0.430111 -0.724891
+v -155.977036 -146.403076 34.071396 1.000000 1.000000 1.000000
+vn -0.261316 0.120630 -0.957686
+v -156.417343 -147.025391 34.050598 1.000000 1.000000 1.000000
+vn -0.561247 0.791560 -0.241733
+v -156.723770 -146.471436 34.918800 1.000000 1.000000 1.000000
+vn -0.741088 0.633062 -0.223653
+v -155.756866 -145.621674 34.687401 1.000000 1.000000 1.000000
+vn -0.715873 0.535216 -0.448408
+v -155.655167 -145.723541 34.290001 1.000000 1.000000 1.000000
+vn -0.649087 0.759988 0.033232
+v -156.247406 -146.043076 35.258400 1.000000 1.000000 1.000000
+vn -0.272071 0.906408 0.323113
+v -157.773071 -147.110504 36.416580 1.000000 1.000000 1.000000
+vn -0.764411 0.644702 0.005953
+v -155.794205 -145.584000 35.142197 1.000000 1.000000 1.000000
+vn -0.366221 0.810039 0.457950
+v -156.659393 -146.588654 36.197777 1.000000 1.000000 1.000000
+vn -0.853235 0.521437 0.009721
+v -155.405396 -145.057968 35.025799 1.000000 1.000000 1.000000
+vn -0.811997 0.397144 -0.427712
+v -155.249603 -145.175171 34.173401 1.000000 1.000000 1.000000
+vn -0.708702 0.294618 -0.641048
+v -155.053909 -145.321686 33.838799 1.000000 1.000000 1.000000
+vn -0.933750 0.278883 -0.224354
+v -154.805420 -143.885895 34.340199 1.000000 1.000000 1.000000
+vn -0.859134 0.215796 -0.464027
+v -154.674103 -143.934723 33.942799 1.000000 1.000000 1.000000
+vn -0.949967 0.308795 0.046988
+v -154.854340 -143.869141 34.794998 1.000000 1.000000 1.000000
+vn -0.286287 0.041702 -0.957236
+v -155.319122 -146.061218 33.819397 1.000000 1.000000 1.000000
+vn -0.299180 -0.062713 -0.952134
+v -154.240219 -144.092392 33.472198 1.000000 1.000000 1.000000
+vn -0.536244 0.733437 0.417746
+v -156.135391 -146.192383 36.082779 1.000000 1.000000 1.000000
+vn -0.620965 0.647293 0.442057
+v -155.664169 -145.713776 35.966576 1.000000 1.000000 1.000000
+vn -0.780538 0.532169 0.327959
+v -155.259903 -145.166809 35.849979 1.000000 1.000000 1.000000
+vn -0.805423 0.477317 0.351371
+v -154.932877 -144.569595 35.734779 1.000000 1.000000 1.000000
+vn -0.853283 0.327136 0.406066
+v -154.686981 -143.929138 35.619377 1.000000 1.000000 1.000000
+vn 0.571433 0.315786 0.757459
+v -153.901611 -140.136627 35.398796 1.000000 1.000000 1.000000
+vn 0.805655 0.380586 0.453954
+v -153.682739 -140.041733 35.060997 1.000000 1.000000 1.000000
+vn 0.700269 0.545222 0.460821
+v -154.428192 -138.610123 34.843597 1.000000 1.000000 1.000000
+vn 0.645747 0.075100 0.759849
+v -153.510223 -142.610550 35.746376 1.000000 1.000000 1.000000
+vn 0.844160 0.159371 0.511854
+v -153.296494 -141.748230 35.293598 1.000000 1.000000 1.000000
+vn 0.822768 0.237397 0.516426
+v -153.431671 -140.883133 35.177597 1.000000 1.000000 1.000000
+vn 0.681633 -0.108380 0.723623
+v -153.790878 -144.255661 35.977180 1.000000 1.000000 1.000000
+vn 0.876852 -0.087263 0.472775
+v -153.366028 -143.495193 35.524799 1.000000 1.000000 1.000000
+vn 0.896738 0.022016 0.442015
+v -153.274612 -142.620316 35.408600 1.000000 1.000000 1.000000
+vn 0.988824 -0.020509 0.147669
+v -153.122681 -142.627304 34.940399 1.000000 1.000000 1.000000
+vn 0.983065 0.108096 0.147980
+v -153.144562 -141.732895 34.825199 1.000000 1.000000 1.000000
+vn 0.960173 0.237184 0.147684
+v -153.284912 -140.844070 34.709396 1.000000 1.000000 1.000000
+vn 0.965750 0.196672 -0.169252
+v -153.297775 -140.846848 33.893799 1.000000 1.000000 1.000000
+vn 0.983219 0.067995 -0.169285
+v -153.157440 -141.732895 34.009796 1.000000 1.000000 1.000000
+vn 0.921586 0.358310 0.149308
+v -153.541122 -139.980347 34.592796 1.000000 1.000000 1.000000
+vn 0.895539 0.023497 -0.444362
+v -153.290054 -141.748230 33.616600 1.000000 1.000000 1.000000
+vn 0.983749 -0.060996 -0.168869
+v -153.135559 -142.627304 34.124798 1.000000 1.000000 1.000000
+vn 0.874865 -0.096350 -0.474687
+v -153.268173 -142.621704 33.731796 1.000000 1.000000 1.000000
+vn 0.870478 -0.208387 -0.445917
+v -153.359573 -143.496597 33.848000 1.000000 1.000000 1.000000
+vn 0.599422 -0.186880 -0.778312
+v -153.592606 -143.450546 33.503399 1.000000 1.000000 1.000000
+vn 0.967571 -0.187628 -0.169120
+v -153.229538 -143.523102 34.240997 1.000000 1.000000 1.000000
+vn 0.834528 -0.320663 -0.448038
+v -153.560425 -144.339371 33.962601 1.000000 1.000000 1.000000
+vn 0.608781 -0.314564 -0.728310
+v -153.785736 -144.257050 33.618198 1.000000 1.000000 1.000000
+vn 0.934274 -0.313528 -0.169803
+v -153.435547 -144.385406 34.355797 1.000000 1.000000 1.000000
+vn 0.977911 -0.148054 0.147548
+v -153.216660 -143.525894 35.056599 1.000000 1.000000 1.000000
+vn 0.949825 -0.275520 0.148058
+v -153.422668 -144.389603 35.171196 1.000000 1.000000 1.000000
+vn 0.871303 -0.209628 0.443720
+v -153.566864 -144.336578 35.639580 1.000000 1.000000 1.000000
+vn 0.822689 -0.311914 0.475281
+v -153.877151 -145.144485 35.754776 1.000000 1.000000 1.000000
+vn 0.905120 -0.398441 0.148335
+v -153.741959 -145.217026 35.286598 1.000000 1.000000 1.000000
+vn 0.598715 -0.245309 0.762472
+v -154.483551 -145.750061 36.207977 1.000000 1.000000 1.000000
+vn 0.884076 -0.434753 -0.171460
+v -153.753540 -145.211456 34.471001 1.000000 1.000000 1.000000
+vn 0.671678 -0.137987 -0.727879
+v -163.444412 -140.366852 31.089598 1.000000 1.000000 1.000000
+vn 0.843070 -0.270009 -0.465111
+v -163.224258 -140.465927 31.424398 1.000000 1.000000 1.000000
+vn 0.783837 -0.448290 -0.429693
+v -162.572800 -139.270111 31.654999 1.000000 1.000000 1.000000
+vn 0.898544 -0.131759 -0.418639
+v -163.426392 -141.121735 31.309599 1.000000 1.000000 1.000000
+vn 0.987952 0.154581 -0.007513
+v -163.316956 -143.167297 31.814798 1.000000 1.000000 1.000000
+vn 0.934361 -0.228015 -0.273822
+v -163.291214 -141.159409 31.707199 1.000000 1.000000 1.000000
+vn 0.995519 -0.080423 0.049746
+v -163.354294 -141.834747 32.045799 1.000000 1.000000 1.000000
+vn 0.913726 -0.338686 -0.224490
+v -163.095520 -140.523132 31.821798 1.000000 1.000000 1.000000
+vn 0.927798 -0.369905 0.048597
+v -163.049164 -140.544067 32.276596 1.000000 1.000000 1.000000
+vn 0.898913 -0.265066 0.348849
+v -163.413528 -141.125916 32.986198 1.000000 1.000000 1.000000
+vn 0.829693 -0.382312 0.406752
+v -163.212662 -140.470108 33.100998 1.000000 1.000000 1.000000
+vn 0.609616 0.239915 0.755519
+v -153.669861 -140.911041 30.361998 1.000000 1.000000 1.000000
+vn 0.849573 0.273520 0.451013
+v -153.440689 -140.848251 30.024199 1.000000 1.000000 1.000000
+vn 0.767586 0.448530 0.457856
+v -153.999451 -139.320358 29.806799 1.000000 1.000000 1.000000
+vn 0.650047 -0.006428 0.759867
+v -153.593903 -143.418457 30.709599 1.000000 1.000000 1.000000
+vn 0.858713 0.051931 0.509819
+v -153.272034 -142.596603 30.256798 1.000000 1.000000 1.000000
+vn 0.847731 0.131479 0.513874
+v -153.299072 -141.718933 30.140799 1.000000 1.000000 1.000000
+vn 0.660191 -0.193739 0.725682
+v -154.078003 -145.007736 30.940399 1.000000 1.000000 1.000000
+vn 0.858455 -0.197003 0.473545
+v -153.560425 -144.317047 30.487997 1.000000 1.000000 1.000000
+vn 0.892030 -0.091322 0.442655
+v -153.360870 -143.464493 30.371798 1.000000 1.000000 1.000000
+vn 0.978395 -0.145070 0.147305
+v -153.211517 -143.493790 29.903599 1.000000 1.000000 1.000000
+vn 0.989064 -0.016249 0.146590
+v -153.121399 -142.602173 29.788399 1.000000 1.000000 1.000000
+vn 0.982466 0.113463 0.147944
+v -153.148438 -141.702194 29.672598 1.000000 1.000000 1.000000
+vn 0.983974 -0.057213 -0.168883
+v -153.134277 -142.602173 28.972799 1.000000 1.000000 1.000000
+vn 0.951214 -0.270991 0.147502
+v -153.417526 -144.368683 30.019798 1.000000 1.000000 1.000000
+vn 0.935644 -0.309239 -0.170120
+v -153.429108 -144.364487 29.204199 1.000000 1.000000 1.000000
+vn 0.968213 -0.184153 -0.169268
+v -153.224396 -143.491013 29.087999 1.000000 1.000000 1.000000
+vn 0.982993 0.072446 -0.168752
+v -153.160019 -141.703583 28.856998 1.000000 1.000000 1.000000
+vn 0.960158 0.237001 0.148079
+v -153.293930 -140.809174 29.555798 1.000000 1.000000 1.000000
+vn 0.891221 -0.089744 -0.444602
+v -153.266876 -142.596603 28.579798 1.000000 1.000000 1.000000
+vn 0.855097 -0.205540 -0.475986
+v -153.354431 -143.464493 28.694998 1.000000 1.000000 1.000000
+vn 0.835360 -0.317497 -0.448742
+v -153.555283 -144.319839 28.810999 1.000000 1.000000 1.000000
+vn 0.567697 -0.260820 -0.780828
+v -153.780594 -144.238907 28.466599 1.000000 1.000000 1.000000
+vn 0.836316 -0.319257 0.445702
+v -153.865570 -145.120758 30.602798 1.000000 1.000000 1.000000
+vn 0.906571 -0.395174 0.148215
+v -153.730377 -145.194702 30.134399 1.000000 1.000000 1.000000
+vn 0.885748 -0.431293 -0.171572
+v -153.741959 -145.187729 29.318798 1.000000 1.000000 1.000000
+vn 0.113145 0.248828 -0.961916
+v -163.195938 -145.360764 25.004799 1.000000 1.000000 1.000000
+vn -0.317888 -0.023146 -0.947846
+v -163.390335 -145.500290 24.999798 1.000000 1.000000 1.000000
+vn 0.715373 0.198219 -0.670037
+v -163.734100 -143.274734 25.474199 1.000000 1.000000 1.000000
+vn 0.578224 0.380248 -0.721851
+v -163.346573 -144.587738 25.256798 1.000000 1.000000 1.000000
+vn 0.486318 0.580144 -0.653397
+v -162.597260 -145.815628 25.024199 1.000000 1.000000 1.000000
+vn 0.002714 0.286375 -0.958114
+v -161.685715 -146.962601 24.657799 1.000000 1.000000 1.000000
+vn -0.292977 -0.141648 -0.945569
+v -161.810608 -147.177475 24.652599 1.000000 1.000000 1.000000
+vn -0.138018 0.213642 -0.967113
+v -159.709427 -147.749573 24.311598 1.000000 1.000000 1.000000
+vn -0.203748 -0.242080 -0.948622
+v -159.741623 -147.999329 24.306599 1.000000 1.000000 1.000000
+vn -0.216642 0.181357 -0.959258
+v -157.675217 -147.608643 23.976999 1.000000 1.000000 1.000000
+vn -0.396786 0.554372 -0.731596
+v -157.095840 -147.138412 23.997599 1.000000 1.000000 1.000000
+vn -0.264441 0.112520 -0.957815
+v -156.377441 -147.000275 23.745598 1.000000 1.000000 1.000000
+vn -0.197298 0.690350 -0.696053
+v -158.320251 -147.512360 24.214998 1.000000 1.000000 1.000000
+vn -0.337197 0.811491 -0.477264
+v -157.796234 -147.131439 24.447599 1.000000 1.000000 1.000000
+vn -0.603446 0.466479 -0.646722
+v -155.937119 -146.366791 23.764999 1.000000 1.000000 1.000000
+vn -0.541706 0.705051 -0.457666
+v -156.616913 -146.578888 24.216198 1.000000 1.000000 1.000000
+vn -0.772953 0.426428 -0.469790
+v -155.226425 -145.141678 23.869198 1.000000 1.000000 1.000000
+vn -0.676738 0.593706 -0.435360
+v -156.089035 -146.168655 24.099798 1.000000 1.000000 1.000000
+vn -0.539330 0.810347 -0.229044
+v -156.689011 -146.449112 24.613798 1.000000 1.000000 1.000000
+vn -0.829628 0.509222 -0.228935
+v -155.342300 -145.056580 24.266598 1.000000 1.000000 1.000000
+vn -0.683788 0.729614 0.009863
+v -156.211349 -146.009583 24.951998 1.000000 1.000000 1.000000
+vn -0.872810 0.402127 -0.276579
+v -155.030731 -144.477509 24.151999 1.000000 1.000000 1.000000
+vn -0.837961 0.543588 0.048301
+v -155.384796 -145.025864 24.721399 1.000000 1.000000 1.000000
+vn -0.559987 0.828479 0.006117
+v -156.716049 -146.403076 25.068598 1.000000 1.000000 1.000000
+vn -0.410712 0.911141 0.033723
+v -157.267090 -146.712845 25.184799 1.000000 1.000000 1.000000
+vn -0.306838 0.851925 0.424351
+v -157.196274 -146.888657 26.008999 1.000000 1.000000 1.000000
+vn -0.116498 0.878868 0.462623
+v -157.800110 -147.117477 26.124199 1.000000 1.000000 1.000000
+vn 0.002353 0.945421 0.325842
+v -159.001328 -147.293289 26.342999 1.000000 1.000000 1.000000
+vn -0.192294 0.981321 0.005655
+v -158.380753 -147.053299 25.402199 1.000000 1.000000 1.000000
+vn -0.313996 0.917262 -0.245022
+v -157.833588 -146.986328 24.845198 1.000000 1.000000 1.000000
+vn 0.226141 0.643297 0.731457
+v -159.675964 -147.498413 26.806599 1.000000 1.000000 1.000000
+vn -0.031331 0.668234 0.743291
+v -157.737015 -147.364456 26.471798 1.000000 1.000000 1.000000
+vn 0.222301 0.861611 0.456300
+v -159.642487 -147.244461 26.458799 1.000000 1.000000 1.000000
+vn 0.058464 0.910455 -0.409455
+v -159.645065 -147.259811 24.782398 1.000000 1.000000 1.000000
+vn 0.005503 0.999942 -0.009251
+v -159.001328 -147.102142 25.518599 1.000000 1.000000 1.000000
+vn 0.353485 0.870857 0.341551
+v -160.268204 -147.099335 26.573999 1.000000 1.000000 1.000000
+vn 0.307812 0.842385 -0.442311
+v -160.879761 -146.871902 25.013599 1.000000 1.000000 1.000000
+vn 0.276843 0.959526 0.051645
+v -160.219284 -146.915161 25.749798 1.000000 1.000000 1.000000
+vn 0.458086 0.809282 0.367722
+v -160.873322 -146.857956 26.690199 1.000000 1.000000 1.000000
+vn 0.486615 0.494227 0.720379
+v -161.560837 -146.747711 27.152599 1.000000 1.000000 1.000000
+vn 0.425484 0.856880 -0.291067
+v -160.821823 -146.733765 25.411198 1.000000 1.000000 1.000000
+vn 0.576128 0.815880 0.049162
+v -161.340683 -146.369583 25.980598 1.000000 1.000000 1.000000
+vn 0.565030 0.711034 0.418535
+v -161.434662 -146.531433 26.804998 1.000000 1.000000 1.000000
+vn 0.701420 0.617811 0.355416
+v -161.950943 -146.121216 26.920198 1.000000 1.000000 1.000000
+vn 0.643287 0.273055 0.715278
+v -163.000229 -145.221222 27.499798 1.000000 1.000000 1.000000
+vn 0.539365 0.808547 -0.235240
+v -161.367706 -146.417023 25.525799 1.000000 1.000000 1.000000
+vn 0.760820 0.648892 0.009671
+v -162.276672 -145.507263 26.211199 1.000000 1.000000 1.000000
+vn 0.747248 0.575837 0.331712
+v -162.407990 -145.635635 27.035599 1.000000 1.000000 1.000000
+vn 0.449937 0.751026 -0.483236
+v -161.442383 -146.544006 25.128399 1.000000 1.000000 1.000000
+vn 0.622481 0.648551 -0.438063
+v -162.418304 -145.643997 25.358999 1.000000 1.000000 1.000000
+vn 0.269423 0.606344 -0.748170
+v -161.568558 -146.761673 24.793598 1.000000 1.000000 1.000000
+vn 0.117229 0.719882 -0.684125
+v -160.337738 -147.360275 24.562599 1.000000 1.000000 1.000000
+vn 0.730247 0.515563 -0.448256
+v -162.814835 -145.087280 25.475401 1.000000 1.000000 1.000000
+vn 0.831618 0.508852 -0.222443
+v -162.697678 -145.004944 25.872999 1.000000 1.000000 1.000000
+vn 0.829612 0.325231 -0.453837
+v -163.364594 -143.828690 25.706799 1.000000 1.000000 1.000000
+vn 0.830250 0.083483 -0.551104
+v -163.569305 -142.529633 25.925598 1.000000 1.000000 1.000000
+vn 0.924343 0.302581 -0.232454
+v -163.231979 -143.784027 26.104399 1.000000 1.000000 1.000000
+vn 0.920405 0.389581 0.032879
+v -162.960327 -144.388214 26.443998 1.000000 1.000000 1.000000
+vn 0.849966 0.526803 0.005974
+v -162.655197 -144.974243 26.327799 1.000000 1.000000 1.000000
+vn 0.923641 -0.023568 -0.382535
+v -163.544846 -141.830566 26.041599 1.000000 1.000000 1.000000
+vn 0.980580 0.195997 0.006961
+v -163.311813 -143.193802 26.661398 1.000000 1.000000 1.000000
+vn 0.751119 -0.081880 -0.655069
+v -163.663300 -141.084061 25.821798 1.000000 1.000000 1.000000
+vn 0.873672 -0.243538 -0.421173
+v -163.229401 -140.481277 26.272799 1.000000 1.000000 1.000000
+vn 0.999517 0.030105 -0.007671
+v -163.378754 -142.522644 26.777798 1.000000 1.000000 1.000000
+vn 0.646280 -0.221430 -0.730267
+v -163.153442 -139.729187 26.052799 1.000000 1.000000 1.000000
+vn 0.800384 -0.375164 -0.467587
+v -162.947449 -139.860352 26.387598 1.000000 1.000000 1.000000
+vn 0.897438 -0.344670 -0.275333
+v -163.100662 -140.538483 26.670399 1.000000 1.000000 1.000000
+vn 0.977275 -0.206030 0.049857
+v -163.247437 -141.197083 27.008999 1.000000 1.000000 1.000000
+vn 0.634422 -0.426087 -0.644949
+v -162.315292 -138.585007 26.283398 1.000000 1.000000 1.000000
+vn 0.862294 -0.452626 -0.227111
+v -162.827713 -139.935699 26.784998 1.000000 1.000000 1.000000
+vn 0.872367 -0.486557 0.047308
+v -162.782654 -139.963608 27.239798 1.000000 1.000000 1.000000
+vn 0.953426 0.028581 0.300271
+v -163.555145 -142.529633 27.602198 1.000000 1.000000 1.000000
+vn 0.886947 -0.166799 0.430701
+v -163.531967 -141.833359 27.717999 1.000000 1.000000 1.000000
+vn 0.891273 0.128014 0.435023
+v -163.351715 -143.824493 27.383398 1.000000 1.000000 1.000000
+vn 0.680271 -0.181193 0.710212
+v -163.766281 -141.805435 28.065798 1.000000 1.000000 1.000000
+vn 0.904313 -0.280651 0.321642
+v -163.418671 -141.151031 27.833199 1.000000 1.000000 1.000000
+vn 0.216774 -0.173034 0.960765
+v -164.012192 -141.777542 28.220398 1.000000 1.000000 1.000000
+vn 0.695305 0.049254 0.717026
+v -163.577026 -143.901230 27.730997 1.000000 1.000000 1.000000
+vn 0.548701 -0.429333 0.717356
+v -163.139282 -139.738953 28.411798 1.000000 1.000000 1.000000
+vn 0.866097 0.296439 0.402493
+v -163.119965 -144.470535 27.268198 1.000000 1.000000 1.000000
+vn 0.811125 0.393767 0.432462
+v -162.803253 -145.080292 27.151999 1.000000 1.000000 1.000000
+vn 0.278493 -0.080389 0.957068
+v -163.812637 -143.980774 27.885599 1.000000 1.000000 1.000000
+vn 0.283901 0.006593 0.958831
+v -163.204941 -145.367737 27.654398 1.000000 1.000000 1.000000
+vn 0.259613 0.103070 0.960197
+v -161.692154 -146.973755 27.307198 1.000000 1.000000 1.000000
+vn 0.193517 0.192899 0.961947
+v -159.710724 -147.762131 26.961199 1.000000 1.000000 1.000000
+vn 0.098903 0.256044 0.961592
+v -157.672653 -147.621185 26.626398 1.000000 1.000000 1.000000
+vn -0.281345 0.618804 0.733435
+v -156.501038 -146.783997 26.240599 1.000000 1.000000 1.000000
+vn 0.308501 -0.204121 0.929065
+v -156.247406 -147.231888 26.391399 1.000000 1.000000 1.000000
+vn 0.005838 0.265650 0.964052
+v -156.372284 -147.011444 26.395199 1.000000 1.000000 1.000000
+vn 0.230245 -0.269562 0.935053
+v -157.609558 -147.870956 26.622599 1.000000 1.000000 1.000000
+vn 0.333402 -0.045464 0.941688
+v -154.641907 -145.572845 26.044197 1.000000 1.000000 1.000000
+vn -0.102175 0.248555 0.963214
+v -154.838898 -145.427734 26.047998 1.000000 1.000000 1.000000
+vn 0.364975 0.076306 0.927885
+v -153.808914 -143.352875 25.698198 1.000000 1.000000 1.000000
+vn -0.516801 0.463981 0.719471
+v -155.042313 -145.277039 25.893398 1.000000 1.000000 1.000000
+vn 0.296214 0.202335 0.933444
+v -153.871994 -141.035233 25.363398 1.000000 1.000000 1.000000
+vn 0.231514 0.278075 0.932242
+v -154.415314 -139.538025 25.132198 1.000000 1.000000 1.000000
+vn 0.065820 0.309581 0.948592
+v -155.890762 -137.742233 24.784998 1.000000 1.000000 1.000000
+vn -0.829860 0.433011 0.351900
+v -154.917435 -144.537506 25.430998 1.000000 1.000000 1.000000
+vn -0.647697 0.672431 0.358226
+v -155.634567 -145.678894 25.660999 1.000000 1.000000 1.000000
+vn -0.736699 0.535969 0.412325
+v -155.238007 -145.133316 25.545799 1.000000 1.000000 1.000000
+vn -0.606735 0.720774 0.335199
+v -156.098053 -146.157486 25.776398 1.000000 1.000000 1.000000
+vn -0.415591 0.791056 0.448904
+v -156.623352 -146.566330 25.892799 1.000000 1.000000 1.000000
+vn 0.856874 -0.378130 0.350406
+v -163.217819 -140.486847 27.949398 1.000000 1.000000 1.000000
+vn -0.068658 0.812773 -0.578521
+v -159.001328 -147.308640 24.666401 1.000000 1.000000 1.000000
+vn -0.597764 0.288790 -0.747850
+v -155.434998 -145.846329 18.497597 1.000000 1.000000 1.000000
+vn -0.653791 0.603549 -0.456383
+v -156.078735 -146.158890 18.948595 1.000000 1.000000 1.000000
+vn -0.839115 0.490106 -0.235970
+v -155.362900 -145.091461 19.124798 1.000000 1.000000 1.000000
+vn -0.290939 0.253847 -0.922451
+v -156.991562 -147.347702 18.709797 1.000000 1.000000 1.000000
+vn -0.446149 0.704410 -0.552048
+v -157.174393 -146.892838 19.180399 1.000000 1.000000 1.000000
+vn -0.676529 0.694780 -0.244109
+v -156.167572 -146.043076 19.345997 1.000000 1.000000 1.000000
+vn -0.894898 0.445280 0.029717
+v -155.093811 -144.490067 19.465199 1.000000 1.000000 1.000000
+vn -0.783578 0.621284 0.003371
+v -155.753006 -145.535172 19.684599 1.000000 1.000000 1.000000
+vn -0.564029 0.822720 0.070728
+v -156.700592 -146.390518 19.916199 1.000000 1.000000 1.000000
+vn -0.451538 0.865146 -0.218256
+v -157.229752 -146.756088 19.577797 1.000000 1.000000 1.000000
+vn -0.460248 0.796797 0.391518
+v -156.606613 -146.553757 20.740597 1.000000 1.000000 1.000000
+vn -0.295913 0.841527 0.451961
+v -157.179535 -146.880280 20.856998 1.000000 1.000000 1.000000
+vn -0.178005 0.886645 0.426820
+v -157.787231 -147.114685 20.973198 1.000000 1.000000 1.000000
+vn -0.435174 0.900332 0.005112
+v -157.250351 -146.704468 20.032597 1.000000 1.000000 1.000000
+vn -0.555142 0.701830 0.446377
+v -156.087753 -146.147720 20.625198 1.000000 1.000000 1.000000
+vn -0.170400 0.653876 0.737164
+v -157.085556 -147.114685 21.204597 1.000000 1.000000 1.000000
+vn -0.358277 0.573018 0.737080
+v -155.935822 -146.344467 20.972797 1.000000 1.000000 1.000000
+vn 0.014618 0.886312 0.462857
+v -158.414230 -147.251434 21.088398 1.000000 1.000000 1.000000
+vn 0.067983 0.665965 0.742878
+v -158.383331 -147.505386 21.435999 1.000000 1.000000 1.000000
+vn -0.273368 0.961342 0.033036
+v -157.834869 -146.929108 20.148800 1.000000 1.000000 1.000000
+vn 0.140647 0.935205 0.324977
+v -159.616730 -147.248642 21.305199 1.000000 1.000000 1.000000
+vn 0.317639 0.607112 0.728368
+v -160.310684 -147.351898 21.768799 1.000000 1.000000 1.000000
+vn 0.135281 0.240971 0.961058
+v -158.351135 -147.769104 21.590599 1.000000 1.000000 1.000000
+vn 0.551921 0.426126 0.716798
+v -162.088699 -146.329117 22.115799 1.000000 1.000000 1.000000
+vn 0.492608 0.791106 0.362613
+v -160.847565 -146.870514 21.536400 1.000000 1.000000 1.000000
+vn 0.329856 0.842902 0.425101
+v -160.246307 -147.106323 21.421200 1.000000 1.000000 1.000000
+vn 0.674546 0.187918 0.713915
+v -163.322098 -144.604492 22.462997 1.000000 1.000000 1.000000
+vn 0.696601 -0.038251 0.716438
+v -163.727661 -143.211945 22.694199 1.000000 1.000000 1.000000
+vn 0.900741 0.015442 0.434082
+v -163.495911 -143.170090 22.346600 1.000000 1.000000 1.000000
+vn 0.897883 0.184757 0.399589
+v -163.346573 -143.844025 22.231400 1.000000 1.000000 1.000000
+vn 0.949239 -0.092017 0.300797
+v -163.534546 -141.855682 22.565399 1.000000 1.000000 1.000000
+vn 0.911298 0.411711 0.005544
+v -162.950027 -144.410538 21.291000 1.000000 1.000000 1.000000
+vn 0.962872 0.267857 0.033602
+v -163.177902 -143.785416 21.407200 1.000000 1.000000 1.000000
+vn 0.856499 0.285742 0.429838
+v -163.109680 -144.494247 22.115200 1.000000 1.000000 1.000000
+vn 0.840554 0.541642 0.009669
+v -162.641022 -144.995178 21.174400 1.000000 1.000000 1.000000
+vn 0.891370 0.396174 -0.220241
+v -162.996368 -144.434250 20.836197 1.000000 1.000000 1.000000
+vn 0.955504 0.182734 -0.231562
+v -163.371033 -143.146362 21.067398 1.000000 1.000000 1.000000
+vn 0.997446 0.071073 0.007072
+v -163.377472 -142.549164 21.624397 1.000000 1.000000 1.000000
+vn 0.995234 -0.097217 -0.007682
+v -163.358170 -141.875214 21.740997 1.000000 1.000000 1.000000
+vn 0.865152 0.216173 -0.452528
+v -163.508789 -143.171478 20.669998 1.000000 1.000000 1.000000
+vn 0.793580 0.415763 -0.444266
+v -163.121262 -144.499832 20.438599 1.000000 1.000000 1.000000
+vn 0.706501 0.559012 -0.434006
+v -162.799393 -145.109604 20.322195 1.000000 1.000000 1.000000
+vn 0.735707 0.106089 -0.668940
+v -163.804916 -142.568695 20.437399 1.000000 1.000000 1.000000
+vn 0.626362 0.302726 -0.718350
+v -163.587326 -143.924957 20.219997 1.000000 1.000000 1.000000
+vn 0.833834 -0.020294 -0.551642
+v -163.547424 -141.854279 20.888798 1.000000 1.000000 1.000000
+vn 0.561868 0.513203 -0.648789
+v -162.997665 -145.253311 19.987400 1.000000 1.000000 1.000000
+vn 0.217038 0.180855 -0.959263
+v -163.959412 -143.253799 20.199398 1.000000 1.000000 1.000000
+vn 0.148941 0.232268 -0.961181
+v -163.533249 -144.714706 19.967999 1.000000 1.000000 1.000000
+vn 0.243798 0.105110 -0.964113
+v -163.880875 -141.046387 20.533997 1.000000 1.000000 1.000000
+vn 0.020301 0.243396 -0.969714
+v -162.239334 -146.524460 19.620800 1.000000 1.000000 1.000000
+vn 0.296461 0.686268 -0.664189
+v -161.550537 -146.774231 19.641197 1.000000 1.000000 1.000000
+vn -0.084467 0.274248 -0.957942
+v -160.375061 -147.597473 19.273998 1.000000 1.000000 1.000000
+vn 0.591191 0.705324 -0.391167
+v -161.945801 -146.144928 20.091599 1.000000 1.000000 1.000000
+vn 0.328302 0.683806 -0.651634
+v -161.424362 -146.555161 19.975998 1.000000 1.000000 1.000000
+vn 0.204387 0.847604 -0.489687
+v -160.250183 -147.120270 19.744598 1.000000 1.000000 1.000000
+vn 0.072609 0.654629 -0.752455
+v -160.314545 -147.368637 19.409798 1.000000 1.000000 1.000000
+vn -0.103673 0.709653 -0.696882
+v -158.967850 -147.565384 19.177399 1.000000 1.000000 1.000000
+vn -0.197467 0.164529 -0.966404
+v -158.352432 -147.756546 18.941200 1.000000 1.000000 1.000000
+vn 0.039369 0.906662 -0.420016
+v -159.618027 -147.263992 19.628597 1.000000 1.000000 1.000000
+vn 0.341619 0.913634 -0.220383
+v -160.211563 -146.975159 20.141998 1.000000 1.000000 1.000000
+vn 0.316733 0.947796 0.036924
+v -160.197388 -146.922134 20.596798 1.000000 1.000000 1.000000
+vn 0.532716 0.845025 0.046339
+v -161.323944 -146.380737 20.828197 1.000000 1.000000 1.000000
+vn -0.212960 0.850322 -0.481249
+v -158.411652 -147.265381 19.411797 1.000000 1.000000 1.000000
+vn -0.052707 0.997678 -0.043141
+v -158.971710 -147.100739 20.364397 1.000000 1.000000 1.000000
+vn -0.191968 0.950981 -0.242452
+v -158.429688 -147.116089 19.809200 1.000000 1.000000 1.000000
+vn 0.551734 0.762777 0.337285
+v -161.417923 -146.542603 21.652599 1.000000 1.000000 1.000000
+vn 0.668689 0.600612 0.438316
+v -161.936783 -146.133774 21.768200 1.000000 1.000000 1.000000
+vn 0.774762 0.522881 0.355443
+v -162.396408 -145.650986 21.883400 1.000000 1.000000 1.000000
+vn 0.689361 0.724251 0.015542
+v -161.822205 -145.987259 20.943798 1.000000 1.000000 1.000000
+vn 0.680412 0.686647 -0.256038
+v -161.855667 -146.030518 20.488998 1.000000 1.000000 1.000000
+vn 0.818144 0.473183 0.326708
+v -162.789093 -145.102615 21.998798 1.000000 1.000000 1.000000
+vn -0.161833 0.065212 -0.984661
+v -155.786484 -146.539810 18.477997 1.000000 1.000000 1.000000
+vn -0.124290 0.282153 -0.951284
+v -163.140564 -138.838959 20.875000 1.000000 1.000000 1.000000
+vn 0.003562 0.297189 -0.954812
+v -161.439804 -137.308289 21.222198 1.000000 1.000000 1.000000
+vn 0.095440 0.296688 -0.950193
+v -160.045471 -136.772476 21.453598 1.000000 1.000000 1.000000
+vn 0.221814 0.229056 -0.947804
+v -157.912109 -136.783630 21.788200 1.000000 1.000000 1.000000
+vn 0.302126 0.122178 -0.945406
+v -155.899780 -137.757584 22.134197 1.000000 1.000000 1.000000
+vn 0.512758 0.447093 -0.732930
+v -155.754288 -137.542694 22.285198 1.000000 1.000000 1.000000
+vn 0.317970 0.002711 -0.948097
+v -154.429474 -139.547791 22.481400 1.000000 1.000000 1.000000
+vn 0.657243 0.218466 -0.721321
+v -154.215759 -139.415237 22.632397 1.000000 1.000000 1.000000
+vn 0.314702 -0.080921 -0.945735
+v -153.888733 -141.039413 22.712799 1.000000 1.000000 1.000000
+vn 0.554189 0.289054 -0.780591
+v -154.649628 -138.710602 22.515999 1.000000 1.000000 1.000000
+vn 0.692119 0.034871 -0.720941
+v -153.649261 -140.978012 22.863800 1.000000 1.000000 1.000000
+vn 0.249987 -0.194974 -0.948415
+v -153.825638 -143.350082 23.047398 1.000000 1.000000 1.000000
+vn 0.628619 -0.091730 -0.772285
+v -153.502487 -142.557526 23.082600 1.000000 1.000000 1.000000
+vn 0.902552 0.126284 -0.411645
+v -153.418808 -140.918015 23.208199 1.000000 1.000000 1.000000
+vn 0.845729 0.240112 -0.476539
+v -153.659561 -140.085007 23.093197 1.000000 1.000000 1.000000
+vn 0.650613 -0.226397 -0.724878
+v -153.583603 -143.396118 23.198399 1.000000 1.000000 1.000000
+vn 0.889228 -0.072412 -0.451697
+v -153.265594 -142.567307 23.426998 1.000000 1.000000 1.000000
+vn 0.974967 0.082531 -0.206463
+v -153.165161 -141.667313 23.703598 1.000000 1.000000 1.000000
+vn 0.937089 0.305694 -0.168566
+v -153.535965 -140.031982 23.486198 1.000000 1.000000 1.000000
+vn 0.817279 0.361471 -0.448768
+v -154.009766 -139.289658 22.976997 1.000000 1.000000 1.000000
+vn 0.882596 0.437583 -0.171890
+v -153.893890 -139.218491 23.369999 1.000000 1.000000 1.000000
+vn 0.958220 0.235670 0.162089
+v -153.277191 -140.881744 24.416798 1.000000 1.000000 1.000000
+vn 0.922888 0.355115 0.148897
+v -153.523087 -140.026382 24.301798 1.000000 1.000000 1.000000
+vn 0.984278 -0.051625 -0.168911
+v -153.132980 -142.571487 23.820198 1.000000 1.000000 1.000000
+vn 0.872112 -0.201318 -0.445973
+v -153.350571 -143.440781 23.542999 1.000000 1.000000 1.000000
+vn 0.820618 -0.312588 -0.478409
+v -153.546265 -144.287735 23.658001 1.000000 1.000000 1.000000
+vn 0.968752 -0.180517 -0.170095
+v -153.219254 -143.465897 23.935999 1.000000 1.000000 1.000000
+vn 0.936750 -0.305832 -0.170197
+v -153.420090 -144.332397 24.051197 1.000000 1.000000 1.000000
+vn 0.982481 0.114243 0.147242
+v -153.152298 -141.665909 24.518999 1.000000 1.000000 1.000000
+vn 0.878079 0.163723 0.449635
+v -153.302933 -141.684052 24.987398 1.000000 1.000000 1.000000
+vn 0.821188 0.345437 0.454230
+v -153.664703 -140.086395 24.769999 1.000000 1.000000 1.000000
+vn 0.989165 -0.010957 0.146398
+v -153.120117 -142.571487 24.635599 1.000000 1.000000 1.000000
+vn 0.896341 0.031182 0.442267
+v -153.270737 -142.565903 25.103998 1.000000 1.000000 1.000000
+vn 0.635885 0.171026 0.752596
+v -153.538544 -141.711960 25.325199 1.000000 1.000000 1.000000
+vn 0.594420 0.312332 0.741022
+v -153.884872 -140.181274 25.107798 1.000000 1.000000 1.000000
+vn 0.744615 0.461618 0.482138
+v -154.014908 -139.292450 24.653799 1.000000 1.000000 1.000000
+vn 0.440562 0.457075 0.772650
+v -154.653503 -138.714783 24.875198 1.000000 1.000000 1.000000
+vn 0.866160 0.476599 0.150400
+v -153.882309 -139.211517 24.185598 1.000000 1.000000 1.000000
+vn 0.687916 0.565647 0.454768
+v -154.465530 -138.557114 24.537399 1.000000 1.000000 1.000000
+vn 0.792653 0.590539 0.151542
+v -154.345795 -138.456635 24.068998 1.000000 1.000000 1.000000
+vn 0.586884 0.645769 0.488415
+v -155.002411 -137.905487 24.421997 1.000000 1.000000 1.000000
+vn 0.730019 0.660737 -0.174640
+v -154.905853 -137.796646 23.138199 1.000000 1.000000 1.000000
+vn 0.702543 0.694859 0.153638
+v -154.896835 -137.786880 23.953798 1.000000 1.000000 1.000000
+vn 0.814578 0.553417 -0.173760
+v -154.356094 -138.465012 23.253597 1.000000 1.000000 1.000000
+vn 0.759450 0.466691 -0.453250
+v -154.461670 -138.554321 22.860397 1.000000 1.000000 1.000000
+vn 0.628899 0.757296 -0.176035
+v -155.536713 -137.218994 23.022797 1.000000 1.000000 1.000000
+vn 0.678429 0.551874 -0.484943
+v -154.998550 -137.899902 22.745197 1.000000 1.000000 1.000000
+vn 0.596290 0.787765 0.154483
+v -155.528992 -137.207825 23.838398 1.000000 1.000000 1.000000
+vn 0.499875 0.733150 0.461103
+v -155.617828 -137.340378 24.306599 1.000000 1.000000 1.000000
+vn 0.513118 0.839593 -0.178308
+v -156.231949 -136.745956 22.908199 1.000000 1.000000 1.000000
+vn 0.598849 0.656213 -0.459090
+v -155.615250 -137.334793 22.629799 1.000000 1.000000 1.000000
+vn 0.497898 0.732795 -0.463798
+v -156.295044 -136.872940 22.514999 1.000000 1.000000 1.000000
+vn 0.475796 0.865561 0.156278
+v -156.225510 -136.733414 23.723799 1.000000 1.000000 1.000000
+vn 0.384122 0.905649 -0.179586
+v -156.991562 -136.377594 22.792000 1.000000 1.000000 1.000000
+vn 0.383258 0.482939 -0.787327
+v -156.407043 -137.098984 22.170597 1.000000 1.000000 1.000000
+vn 0.382551 0.779637 -0.495803
+v -157.037918 -136.512939 22.398800 1.000000 1.000000 1.000000
+vn 0.273664 0.611274 -0.742598
+v -157.861908 -136.522720 21.939198 1.000000 1.000000 1.000000
+vn 0.261447 0.843403 -0.469379
+v -157.811691 -136.271561 22.283798 1.000000 1.000000 1.000000
+vn 0.244490 0.952653 -0.180769
+v -157.784653 -136.130615 22.676800 1.000000 1.000000 1.000000
+vn 0.342601 0.926304 0.156798
+v -156.987701 -136.365036 23.607599 1.000000 1.000000 1.000000
+vn 0.200281 0.967000 0.157473
+v -157.782074 -136.116669 23.492397 1.000000 1.000000 1.000000
+vn 0.096107 0.978684 -0.181496
+v -158.606064 -136.006439 22.560999 1.000000 1.000000 1.000000
+vn 0.114876 0.870364 -0.478822
+v -158.615082 -136.150146 22.167797 1.000000 1.000000 1.000000
+vn 0.049512 0.986264 0.157583
+v -158.606064 -135.992477 23.376400 1.000000 1.000000 1.000000
+vn -0.096352 0.982825 0.157387
+v -159.442932 -135.996674 23.259800 1.000000 1.000000 1.000000
+vn -0.061566 0.973602 -0.219794
+v -159.441635 -136.010620 22.444395 1.000000 1.000000 1.000000
+vn 0.126375 0.857617 0.498521
+v -157.812973 -136.277130 23.960598 1.000000 1.000000 1.000000
+vn -0.002539 0.882816 0.469711
+v -158.616364 -136.155746 23.844801 1.000000 1.000000 1.000000
+vn -0.155335 0.866407 0.474563
+v -159.431335 -136.159927 23.728201 1.000000 1.000000 1.000000
+vn -0.237661 0.956099 0.171440
+v -160.169067 -136.104111 23.157597 1.000000 1.000000 1.000000
+vn -0.111598 0.891778 -0.438495
+v -160.140747 -136.258987 21.948997 1.000000 1.000000 1.000000
+vn -0.316501 0.931655 -0.178456
+v -160.962158 -136.355270 22.226997 1.000000 1.000000 1.000000
+vn -0.372926 0.914536 0.156682
+v -160.966019 -136.342712 23.042599 1.000000 1.000000 1.000000
+vn -0.359543 0.805013 0.471893
+v -160.915802 -136.497589 23.510799 1.000000 1.000000 1.000000
+vn -0.169271 0.616182 0.769199
+v -159.413315 -136.415268 24.065998 1.000000 1.000000 1.000000
+vn -0.325960 0.574101 0.751104
+v -160.837280 -136.738983 23.848598 1.000000 1.000000 1.000000
+vn -0.487352 0.722314 0.490664
+v -161.661255 -136.849228 23.394600 1.000000 1.000000 1.000000
+vn -0.463242 0.867837 -0.179624
+v -161.725632 -136.715271 22.110798 1.000000 1.000000 1.000000
+vn -0.504611 0.849276 0.155235
+v -161.730774 -136.704102 22.926399 1.000000 1.000000 1.000000
+vn -0.244388 0.830660 -0.500279
+v -160.918381 -136.492020 21.834000 1.000000 1.000000 1.000000
+vn -0.622852 0.767169 0.153319
+v -162.442749 -137.179916 22.809799 1.000000 1.000000 1.000000
+vn -0.378388 0.798574 -0.468083
+v -161.663834 -136.843628 21.717800 1.000000 1.000000 1.000000
+vn -0.585413 0.790823 -0.178577
+v -162.435028 -137.191071 21.994400 1.000000 1.000000 1.000000
+vn -0.593868 0.661439 0.458060
+v -162.353912 -137.312469 23.278198 1.000000 1.000000 1.000000
+vn -0.480359 0.422034 0.768858
+v -162.214874 -137.521774 23.615999 1.000000 1.000000 1.000000
+vn -0.674217 0.558441 0.483295
+v -162.974487 -137.871994 23.162800 1.000000 1.000000 1.000000
+vn -0.725285 0.671530 0.151690
+v -163.078781 -137.753387 22.694599 1.000000 1.000000 1.000000
+vn -0.756571 0.474361 0.450092
+v -163.515228 -138.519440 23.047398 1.000000 1.000000 1.000000
+vn -0.811368 0.564781 0.150682
+v -163.634964 -138.417572 22.579197 1.000000 1.000000 1.000000
+vn -0.070336 0.625175 0.777309
+v -158.631821 -136.412476 24.182598 1.000000 1.000000 1.000000
+vn 0.130211 0.612153 0.779945
+v -157.120316 -136.759918 24.413601 1.000000 1.000000 1.000000
+vn 0.327264 0.584455 0.742503
+v -155.758148 -137.546890 24.644398 1.000000 1.000000 1.000000
+vn 0.375329 0.783875 0.494639
+v -156.297623 -136.878525 24.191998 1.000000 1.000000 1.000000
+vn 0.263977 0.843919 0.467030
+v -157.039200 -136.518524 24.075798 1.000000 1.000000 1.000000
+vn -0.692008 0.700047 -0.176236
+v -163.069763 -137.763168 21.878998 1.000000 1.000000 1.000000
+vn -0.783023 0.597198 -0.173867
+v -163.624664 -138.427338 21.763599 1.000000 1.000000 1.000000
+vn -0.491946 0.736274 -0.464640
+v -162.356491 -137.308289 21.601200 1.000000 1.000000 1.000000
+vn -0.580389 0.650402 -0.490027
+v -162.978348 -137.867813 21.486000 1.000000 1.000000 1.000000
+vn -0.857700 0.484075 -0.173268
+v -164.085587 -139.164078 21.648998 1.000000 1.000000 1.000000
+vn -0.682721 0.570803 -0.456153
+v -163.520386 -138.515259 21.370598 1.000000 1.000000 1.000000
+vn -0.301919 0.531419 -0.791479
+v -162.218735 -137.516190 21.256798 1.000000 1.000000 1.000000
+vn -0.465834 0.490767 -0.736306
+v -163.333694 -138.674316 21.025997 1.000000 1.000000 1.000000
+vn -0.755654 0.472426 -0.453652
+v -163.969711 -139.236633 21.255798 1.000000 1.000000 1.000000
+vn -0.503172 0.364783 -0.783423
+v -163.764999 -139.365005 20.911400 1.000000 1.000000 1.000000
+vn -0.220147 0.633280 -0.741951
+v -161.553116 -137.071075 21.373199 1.000000 1.000000 1.000000
+vn -0.015658 0.665764 -0.745998
+v -160.093109 -136.511551 21.604597 1.000000 1.000000 1.000000
+vn 0.124963 0.602278 -0.788445
+v -158.631821 -136.405502 21.823399 1.000000 1.000000 1.000000
+vn 0.642282 -0.093578 0.760735
+v -153.776733 -144.206818 25.672798 1.000000 1.000000 1.000000
+vn 0.646672 0.086761 0.757818
+v -153.507645 -142.557526 25.441799 1.000000 1.000000 1.000000
+vn 0.877277 -0.081200 0.473066
+v -153.355713 -143.439392 25.219801 1.000000 1.000000 1.000000
+vn 0.628087 -0.276113 0.727509
+v -154.456512 -145.709595 25.903599 1.000000 1.000000 1.000000
+vn 0.824863 -0.305050 0.475968
+v -153.857834 -145.102615 25.451199 1.000000 1.000000 1.000000
+vn 0.873200 -0.202788 0.443169
+v -153.551422 -144.286346 25.334999 1.000000 1.000000 1.000000
+vn 0.952223 -0.267667 0.147059
+v -153.408508 -144.337982 24.866798 1.000000 1.000000 1.000000
+vn 0.978943 -0.141505 0.147126
+v -153.206375 -143.468689 24.751598 1.000000 1.000000 1.000000
+vn 0.908284 -0.391064 0.148623
+v -153.721375 -145.175171 24.982998 1.000000 1.000000 1.000000
+vn 0.887814 -0.426904 -0.171873
+v -153.732941 -145.168198 24.167398 1.000000 1.000000 1.000000
+vn 0.913201 -0.139517 -0.382882
+v -163.436691 -141.166382 21.004597 1.000000 1.000000 1.000000
+vn 0.733002 -0.175620 -0.657165
+v -163.459869 -140.408707 20.785000 1.000000 1.000000 1.000000
+vn 0.047993 0.268919 0.961966
+v -156.986420 -147.358871 21.359200 1.000000 1.000000 1.000000
+vn -0.035210 0.272093 0.961626
+v -155.778763 -146.549576 21.127399 1.000000 1.000000 1.000000
+vn -0.497155 0.461019 0.735050
+v -155.066788 -145.314713 20.751598 1.000000 1.000000 1.000000
+vn -0.697263 0.556324 0.452026
+v -155.259903 -145.169601 20.403999 1.000000 1.000000 1.000000
+vn -0.111668 0.252084 0.961241
+v -154.863358 -145.466797 20.906197 1.000000 1.000000 1.000000
+vn 0.258538 0.194150 0.946289
+v -153.927353 -140.803604 20.208199 1.000000 1.000000 1.000000
+vn 0.195548 0.249237 0.948494
+v -154.520889 -139.345474 20.003998 1.000000 1.000000 1.000000
+vn 0.119415 0.286645 0.950566
+v -155.442734 -138.139908 19.811199 1.000000 1.000000 1.000000
+vn 0.901113 0.062928 0.428994
+v -163.507507 -143.089157 42.627380 1.000000 1.000000 1.000000
+vn 0.939515 0.300823 0.163761
+v -163.192078 -143.731003 41.720577 1.000000 1.000000 1.000000
+vn 0.937024 -0.064717 0.343216
+v -163.557724 -142.378922 42.707779 1.000000 1.000000 1.000000
+vn 0.897514 0.227359 0.377858
+v -163.360733 -143.786819 42.544979 1.000000 1.000000 1.000000
+vn 0.764306 0.080055 0.639866
+v -163.740540 -143.126816 42.975178 1.000000 1.000000 1.000000
+vn 0.990133 0.140120 0.001867
+v -163.332413 -143.061249 41.803177 1.000000 1.000000 1.000000
+vn 0.844322 0.524815 -0.108119
+v -162.684814 -144.925415 41.556976 1.000000 1.000000 1.000000
+vn 0.957750 0.189242 -0.216570
+v -163.382614 -143.069626 41.348377 1.000000 1.000000 1.000000
+vn 0.835979 -0.189784 0.514899
+v -163.512650 -141.668701 42.785580 1.000000 1.000000 1.000000
+vn 0.770679 0.207914 0.602350
+v -163.358170 -144.516571 42.813980 1.000000 1.000000 1.000000
+vn 0.852403 -0.299218 0.428810
+v -163.376190 -140.983597 42.859779 1.000000 1.000000 1.000000
+vn 0.654733 0.500226 0.566656
+v -162.617859 -145.765411 42.640778 1.000000 1.000000 1.000000
+vn 0.817783 0.385580 0.427270
+v -162.832870 -145.028671 42.381180 1.000000 1.000000 1.000000
+vn 0.779533 0.626361 0.000140
+v -162.306290 -145.470978 41.468781 1.000000 1.000000 1.000000
+vn 0.738317 0.509989 0.441361
+v -162.440186 -145.597961 42.293179 1.000000 1.000000 1.000000
+vn 0.675726 0.737136 0.005026
+v -161.858246 -145.953766 41.378178 1.000000 1.000000 1.000000
+vn 0.493993 0.699009 0.517067
+v -161.571136 -146.739349 42.457378 1.000000 1.000000 1.000000
+vn 0.669737 0.619842 0.408959
+v -161.972824 -146.098892 42.202579 1.000000 1.000000 1.000000
+vn 0.538067 0.841506 0.048495
+v -161.349686 -146.361206 41.285378 1.000000 1.000000 1.000000
+vn 0.671508 0.695669 -0.255190
+v -161.891708 -145.995636 40.923378 1.000000 1.000000 1.000000
+vn 0.716925 0.628222 -0.302251
+v -162.344910 -145.508652 41.013977 1.000000 1.000000 1.000000
+vn 0.545757 0.718016 -0.431975
+v -161.981842 -146.110046 40.525978 1.000000 1.000000 1.000000
+vn 0.247568 0.935569 -0.251837
+v -160.228287 -146.970978 40.641579 1.000000 1.000000 1.000000
+vn 0.301689 0.951532 0.059745
+v -160.214127 -146.916550 41.096378 1.000000 1.000000 1.000000
+vn 0.555117 0.717852 0.420160
+v -161.444962 -146.523071 42.109779 1.000000 1.000000 1.000000
+vn 0.464468 0.781034 0.417439
+v -160.874619 -146.856552 42.016579 1.000000 1.000000 1.000000
+vn 0.298184 0.856350 0.421605
+v -160.263046 -147.102142 41.920578 1.000000 1.000000 1.000000
+vn 0.030676 0.998064 0.054103
+v -158.967850 -147.100739 40.896378 1.000000 1.000000 1.000000
+vn -0.017800 0.970179 -0.241737
+v -158.966568 -147.156540 40.441578 1.000000 1.000000 1.000000
+vn 0.299614 0.605350 0.737416
+v -160.328720 -147.347702 42.268181 1.000000 1.000000 1.000000
+vn 0.086167 0.901842 0.423386
+v -158.966568 -147.291901 41.720779 1.000000 1.000000 1.000000
+vn -0.218090 0.974397 0.054652
+v -158.200516 -147.021194 40.770378 1.000000 1.000000 1.000000
+vn -0.119201 0.914114 0.387540
+v -158.168320 -147.209564 41.594578 1.000000 1.000000 1.000000
+vn 0.109821 0.657406 0.745491
+v -158.963989 -147.548645 42.068378 1.000000 1.000000 1.000000
+vn -0.118555 0.663612 0.738623
+v -157.461502 -147.272354 41.837357 1.000000 1.000000 1.000000
+vn -0.306453 0.602648 0.736819
+v -156.237091 -146.594223 41.619957 1.000000 1.000000 1.000000
+vn -0.225649 0.862205 0.453525
+v -157.537460 -147.030975 41.489777 1.000000 1.000000 1.000000
+vn -0.401200 0.826604 0.394671
+v -156.933624 -146.753296 41.382179 1.000000 1.000000 1.000000
+vn -0.020941 0.268724 0.962990
+v -156.094193 -146.811905 41.774578 1.000000 1.000000 1.000000
+vn -0.127040 0.227363 0.965488
+v -154.513168 -144.830521 41.389977 1.000000 1.000000 1.000000
+vn -0.717946 0.610526 0.334382
+v -155.517395 -145.917496 41.464977 1.000000 1.000000 1.000000
+vn -0.576806 0.396327 0.714297
+v -154.733322 -144.709137 41.235378 1.000000 1.000000 1.000000
+vn -0.232435 0.165776 0.958380
+v -153.973709 -142.617523 41.043777 1.000000 1.000000 1.000000
+vn -0.687127 0.158362 0.709068
+v -154.219620 -142.604980 40.889179 1.000000 1.000000 1.000000
+vn -0.270267 0.084943 0.959031
+v -154.106323 -141.088242 40.812378 1.000000 1.000000 1.000000
+vn -0.290719 -0.010820 0.956747
+v -154.974091 -139.084549 40.477779 1.000000 1.000000 1.000000
+vn -0.607902 0.647989 0.458875
+v -155.688644 -145.743073 41.117378 1.000000 1.000000 1.000000
+vn -0.721553 0.558708 0.408909
+v -155.276642 -145.194702 41.003178 1.000000 1.000000 1.000000
+vn -0.412143 0.708290 0.573117
+v -156.372284 -146.386337 41.272377 1.000000 1.000000 1.000000
+vn -0.708527 0.705101 -0.028656
+v -155.991196 -145.800278 40.337177 1.000000 1.000000 1.000000
+vn -0.500908 0.863814 0.053996
+v -157.013458 -146.583069 40.557777 1.000000 1.000000 1.000000
+vn -0.703872 0.673410 0.226014
+v -155.785202 -145.645401 40.723579 1.000000 1.000000 1.000000
+vn -0.910407 0.413588 -0.010232
+v -155.100266 -144.506821 40.063377 1.000000 1.000000 1.000000
+vn -0.958488 0.281267 0.046789
+v -154.859497 -143.887283 39.947178 1.000000 1.000000 1.000000
+vn -0.895716 0.308504 0.320186
+v -154.692123 -143.948685 40.771580 1.000000 1.000000 1.000000
+vn -0.775752 0.458220 0.433871
+v -154.943176 -144.593323 40.887779 1.000000 1.000000 1.000000
+vn -0.854630 0.508246 -0.106269
+v -155.422134 -145.084473 40.178780 1.000000 1.000000 1.000000
+vn -0.237563 0.938197 -0.251695
+v -158.191498 -147.075623 40.315578 1.000000 1.000000 1.000000
+vn -0.388779 0.810891 -0.437386
+v -157.532303 -147.044922 39.813179 1.000000 1.000000 1.000000
+vn -0.240631 0.839019 -0.488000
+v -158.165741 -147.223526 39.917976 1.000000 1.000000 1.000000
+vn -0.057008 0.868682 -0.492079
+v -158.965271 -147.307251 40.044178 1.000000 1.000000 1.000000
+vn 0.155014 0.858711 -0.488453
+v -160.266922 -147.116089 40.243980 1.000000 1.000000 1.000000
+vn 0.057234 0.561373 -0.825581
+v -160.332581 -147.363052 39.909180 1.000000 1.000000 1.000000
+vn -0.275469 0.607862 -0.744729
+v -158.121979 -147.477478 39.583378 1.000000 1.000000 1.000000
+vn -0.124556 0.782465 -0.610111
+v -158.963989 -147.565384 39.709377 1.000000 1.000000 1.000000
+vn -0.420051 0.457632 -0.783665
+v -156.819046 -146.996078 39.370781 1.000000 1.000000 1.000000
+vn -0.001995 0.250132 -0.968210
+v -161.067719 -147.322601 39.869377 1.000000 1.000000 1.000000
+vn 0.363105 0.644882 -0.672519
+v -161.580139 -146.753296 40.098377 1.000000 1.000000 1.000000
+vn 0.143332 0.315758 -0.937951
+v -162.795532 -145.931442 40.145981 1.000000 1.000000 1.000000
+vn 0.587806 0.294864 -0.753352
+v -163.601486 -143.864960 40.533577 1.000000 1.000000 1.000000
+vn 0.817059 0.377382 -0.435887
+v -163.156021 -144.416107 40.789780 1.000000 1.000000 1.000000
+vn 0.880416 0.184206 -0.436962
+v -163.520386 -143.091949 40.950779 1.000000 1.000000 1.000000
+vn 0.620591 0.099803 -0.777757
+v -163.810059 -142.380325 40.696381 1.000000 1.000000 1.000000
+vn 0.927229 -0.109347 -0.358176
+v -163.526825 -141.665909 41.108978 1.000000 1.000000 1.000000
+vn 0.983736 0.066507 -0.166854
+v -163.432831 -142.377533 41.428577 1.000000 1.000000 1.000000
+vn 0.187536 0.005238 -0.982244
+v -163.978729 -141.597549 40.638378 1.000000 1.000000 1.000000
+vn 0.647835 -0.189951 -0.737718
+v -163.374893 -140.200806 40.921978 1.000000 1.000000 1.000000
+vn -0.229794 0.228605 -0.946010
+v -163.421249 -139.271530 40.852978 1.000000 1.000000 1.000000
+vn 0.346893 -0.037549 -0.937153
+v -163.574463 -140.103134 40.785980 1.000000 1.000000 1.000000
+vn 0.774283 -0.303208 -0.555473
+v -163.158600 -140.308258 41.256779 1.000000 1.000000 1.000000
+vn 0.654781 -0.408729 -0.635769
+v -162.623001 -138.932449 41.063778 1.000000 1.000000 1.000000
+vn 0.225215 -0.114477 -0.967560
+v -162.272812 -138.222229 40.995579 1.000000 1.000000 1.000000
+vn -0.110621 0.262277 -0.958631
+v -162.424728 -138.031067 40.990578 1.000000 1.000000 1.000000
+vn -0.023159 0.313174 -0.949413
+v -160.442017 -136.877121 41.178379 1.000000 1.000000 1.000000
+vn 0.214110 -0.228541 -0.949698
+v -161.063858 -137.390610 41.122379 1.000000 1.000000 1.000000
+vn 0.081960 0.262915 -0.961332
+v -158.930511 -136.659454 41.294579 1.000000 1.000000 1.000000
+vn 0.080368 -0.193248 -0.977853
+v -158.933090 -136.913406 41.299580 1.000000 1.000000 1.000000
+vn 0.151737 0.250877 -0.956053
+v -157.447327 -136.914795 41.400578 1.000000 1.000000 1.000000
+vn 0.155544 0.118713 -0.980670
+v -156.061996 -137.633392 41.499977 1.000000 1.000000 1.000000
+vn 0.425939 0.516692 -0.742702
+v -155.924240 -137.412933 41.650978 1.000000 1.000000 1.000000
+vn 0.220736 0.132800 -0.966250
+v -154.979233 -138.688263 41.586178 1.000000 1.000000 1.000000
+vn 0.557172 0.384422 -0.736057
+v -154.789963 -138.516647 41.737179 1.000000 1.000000 1.000000
+vn -0.146928 -0.100086 -0.984071
+v -155.158188 -138.851532 41.591377 1.000000 1.000000 1.000000
+vn -0.371577 -0.474642 -0.797900
+v -155.813522 -138.460831 41.682777 1.000000 1.000000 1.000000
+vn 0.624989 0.609874 -0.487280
+v -155.191666 -137.701767 42.037376 1.000000 1.000000 1.000000
+vn 0.663287 0.197881 -0.721730
+v -153.954407 -139.981735 41.818977 1.000000 1.000000 1.000000
+vn 0.287677 0.055626 -0.956111
+v -154.180984 -140.087799 41.667976 1.000000 1.000000 1.000000
+vn 0.716431 0.528172 -0.455808
+v -154.608429 -138.350601 42.081779 1.000000 1.000000 1.000000
+vn 0.771456 0.414162 -0.483038
+v -154.119202 -139.085938 42.123978 1.000000 1.000000 1.000000
+vn 0.288878 -0.037994 -0.956612
+v -153.745819 -142.360794 41.768978 1.000000 1.000000 1.000000
+vn -0.222511 -0.142796 -0.964416
+v -154.394714 -140.188248 41.673180 1.000000 1.000000 1.000000
+vn 0.684187 -0.027290 -0.728796
+v -153.498627 -142.360794 41.919979 1.000000 1.000000 1.000000
+vn 0.113300 -0.728593 -0.675511
+v -154.150101 -144.960297 41.896378 1.000000 1.000000 1.000000
+vn -0.212619 -0.038670 -0.976370
+v -153.978867 -142.360794 41.773979 1.000000 1.000000 1.000000
+vn 0.610280 -0.153340 -0.777204
+v -153.681442 -143.891464 41.974960 1.000000 1.000000 1.000000
+vn -0.458376 -0.520113 -0.720676
+v -154.468094 -144.795654 41.874977 1.000000 1.000000 1.000000
+vn 0.896806 -0.042729 -0.440355
+v -153.261734 -142.360794 42.264580 1.000000 1.000000 1.000000
+vn 0.857303 0.298077 -0.419740
+v -153.736801 -139.878494 42.163578 1.000000 1.000000 1.000000
+vn 0.828927 0.124616 -0.545299
+v -153.323532 -141.444061 42.230179 1.000000 1.000000 1.000000
+vn 0.870149 -0.215221 -0.443306
+v -153.452286 -143.957047 42.319378 1.000000 1.000000 1.000000
+vn 0.949396 -0.228744 -0.215231
+v -153.323532 -143.993332 42.712578 1.000000 1.000000 1.000000
+vn 0.341632 -0.904224 -0.256254
+v -153.766418 -145.175171 42.640179 1.000000 1.000000 1.000000
+vn 0.984036 -0.022167 -0.176585
+v -153.129120 -142.360794 42.657578 1.000000 1.000000 1.000000
+vn 0.972644 0.107450 -0.205954
+v -153.192215 -141.423126 42.623177 1.000000 1.000000 1.000000
+vn 0.933613 0.264845 -0.241297
+v -153.354431 -140.606842 42.590778 1.000000 1.000000 1.000000
+vn 0.864563 0.471510 -0.173808
+v -154.005890 -139.010590 42.517178 1.000000 1.000000 1.000000
+vn 0.779620 0.592683 -0.202283
+v -154.506729 -138.257111 42.474979 1.000000 1.000000 1.000000
+vn 0.688860 0.696237 -0.201804
+v -155.104126 -137.594330 42.430580 1.000000 1.000000 1.000000
+vn 0.582905 0.789281 -0.193024
+v -155.716949 -137.080841 42.388580 1.000000 1.000000 1.000000
+vn 0.453535 0.879147 0.146307
+v -156.446960 -136.568756 42.745377 1.000000 1.000000 1.000000
+vn 0.539050 0.703694 -0.462861
+v -155.791626 -137.199448 41.995579 1.000000 1.000000 1.000000
+vn 0.459026 0.857561 -0.232131
+v -156.467560 -136.616211 42.339779 1.000000 1.000000 1.000000
+vn 0.424951 0.756659 -0.496874
+v -156.524200 -136.745956 41.946777 1.000000 1.000000 1.000000
+vn 0.323000 0.917132 -0.233537
+v -157.264511 -136.277130 42.289177 1.000000 1.000000 1.000000
+vn 0.340600 0.939430 0.038233
+v -157.250351 -136.226898 42.694580 1.000000 1.000000 1.000000
+vn 0.308176 0.827828 -0.468752
+v -157.303131 -136.413879 41.895981 1.000000 1.000000 1.000000
+vn 0.177359 0.955614 -0.235258
+v -158.096222 -136.067825 42.236378 1.000000 1.000000 1.000000
+vn 0.255596 0.611737 -0.748631
+v -157.373947 -136.659454 41.551579 1.000000 1.000000 1.000000
+vn 0.176329 0.847215 -0.501134
+v -158.116821 -136.210159 41.843178 1.000000 1.000000 1.000000
+vn 0.074245 0.660725 -0.746947
+v -158.926651 -136.392944 41.445580 1.000000 1.000000 1.000000
+vn 0.028574 0.971526 -0.235204
+v -158.921494 -135.992477 42.183178 1.000000 1.000000 1.000000
+vn 0.172199 0.982885 -0.065462
+v -158.089783 -136.016205 42.641777 1.000000 1.000000 1.000000
+vn 0.043155 0.880522 -0.472036
+v -158.924072 -136.136200 41.790176 1.000000 1.000000 1.000000
+vn -0.121703 0.964338 -0.235032
+v -159.776382 -136.046906 42.126179 1.000000 1.000000 1.000000
+vn -0.010489 0.999671 0.023412
+v -158.921494 -135.940857 42.588779 1.000000 1.000000 1.000000
+vn -0.144192 0.988294 0.049831
+v -159.781525 -135.995270 42.531776 1.000000 1.000000 1.000000
+vn -0.276579 0.944566 -0.176913
+v -160.611969 -136.233887 42.067177 1.000000 1.000000 1.000000
+vn -0.092744 0.876362 -0.472640
+v -159.758362 -136.189224 41.733177 1.000000 1.000000 1.000000
+vn -0.045007 0.644547 -0.763239
+v -159.727463 -136.444580 41.388580 1.000000 1.000000 1.000000
+vn -0.220994 0.835609 -0.502911
+v -160.574631 -136.373413 41.673981 1.000000 1.000000 1.000000
+vn -0.226899 0.564082 -0.793932
+v -161.260849 -136.917587 41.268181 1.000000 1.000000 1.000000
+vn -0.410243 0.881864 -0.232414
+v -161.412781 -136.550613 42.005779 1.000000 1.000000 1.000000
+vn -0.355440 0.808153 -0.469629
+v -161.358704 -136.683182 41.612778 1.000000 1.000000 1.000000
+vn -0.393546 0.540602 -0.743553
+v -162.585663 -137.827347 41.141579 1.000000 1.000000 1.000000
+vn -0.461927 0.735083 -0.496263
+v -162.089996 -137.111542 41.549580 1.000000 1.000000 1.000000
+vn -0.669701 0.584426 -0.458199
+v -163.328552 -138.265488 41.418381 1.000000 1.000000 1.000000
+vn -0.577434 0.673597 -0.461343
+v -162.740173 -137.632004 41.485977 1.000000 1.000000 1.000000
+vn -0.476931 0.453220 -0.753080
+v -163.149582 -138.434311 41.073978 1.000000 1.000000 1.000000
+vn -0.653116 0.739467 -0.163185
+v -162.826431 -137.523163 41.879177 1.000000 1.000000 1.000000
+vn -0.565461 0.811495 -0.147408
+v -162.162094 -136.988754 41.942780 1.000000 1.000000 1.000000
+vn -0.444417 0.894992 0.038511
+v -161.432083 -136.504578 42.411377 1.000000 1.000000 1.000000
+vn -0.656055 0.733974 0.175709
+v -162.834152 -137.512009 42.694580 1.000000 1.000000 1.000000
+vn -0.758999 0.627376 -0.174127
+v -163.428970 -138.170609 41.811577 1.000000 1.000000 1.000000
+vn -0.768813 0.618837 0.161145
+v -163.437988 -138.162231 42.627178 1.000000 1.000000 1.000000
+vn -0.839837 0.514819 -0.172150
+v -163.938812 -138.908737 41.741577 1.000000 1.000000 1.000000
+vn -0.858545 0.488637 0.155350
+v -163.950409 -138.901749 42.557178 1.000000 1.000000 1.000000
+vn -0.731956 0.478351 -0.485202
+v -163.828094 -138.986877 41.348579 1.000000 1.000000 1.000000
+vn -0.553287 0.285194 -0.782648
+v -164.010910 -139.888260 40.931976 1.000000 1.000000 1.000000
+vn 0.943966 -0.245669 -0.220399
+v -163.255157 -141.021271 41.580578 1.000000 1.000000 1.000000
+vn 0.992766 0.038867 -0.113602
+v -163.381332 -142.377533 41.883377 1.000000 1.000000 1.000000
+vn 0.988772 -0.124177 0.083127
+v -163.337555 -141.695221 41.961178 1.000000 1.000000 1.000000
+vn -0.104321 0.865168 -0.490511
+v -162.629440 -145.776566 40.281776 1.000000 1.000000 1.000000
+vn 0.335928 0.758887 -0.557892
+v -160.879761 -146.870514 40.339977 1.000000 1.000000 1.000000
+vn -0.579690 0.678762 -0.450824
+v -156.364563 -146.397491 39.595779 1.000000 1.000000 1.000000
+vn -0.553528 0.416630 -0.721128
+v -155.696365 -146.136566 39.150177 1.000000 1.000000 1.000000
+vn -0.711194 0.535501 -0.455457
+v -155.679626 -145.752838 39.440781 1.000000 1.000000 1.000000
+vn -0.732446 0.632991 -0.250690
+v -155.780045 -145.649597 39.838181 1.000000 1.000000 1.000000
+vn -0.713154 0.301429 -0.632892
+v -155.070648 -145.352386 38.991779 1.000000 1.000000 1.000000
+vn -0.799135 0.408485 -0.441048
+v -155.266342 -145.203094 39.326576 1.000000 1.000000 1.000000
+vn -0.865360 0.190882 -0.463375
+v -154.679245 -143.952866 39.094978 1.000000 1.000000 1.000000
+vn -0.946615 0.240707 -0.214429
+v -154.810562 -143.904037 39.492378 1.000000 1.000000 1.000000
+vn -0.674789 0.088179 -0.732724
+v -154.453949 -144.036575 38.760178 1.000000 1.000000 1.000000
+vn -0.796016 -0.383277 -0.468462
+v -154.792542 -144.622635 42.119778 1.000000 1.000000 1.000000
+vn -0.925946 -0.332225 -0.179584
+v -155.004974 -144.508209 42.600380 1.000000 1.000000 1.000000
+vn 0.120558 -0.241400 0.962908
+v -163.351715 -139.603607 28.566399 1.000000 1.000000 1.000000
+vn -0.336241 0.024735 0.941451
+v -163.559006 -139.472443 28.562599 1.000000 1.000000 1.000000
+vn -0.358243 -0.099166 0.928347
+v -164.249084 -141.749634 28.216599 1.000000 1.000000 1.000000
+vn 0.013823 -0.265475 0.964019
+v -161.922607 -137.909668 28.913601 1.000000 1.000000 1.000000
+vn -0.647489 0.053011 0.760229
+v -164.335358 -140.899872 28.191198 1.000000 1.000000 1.000000
+vn -0.080220 -0.261149 0.961960
+v -160.663467 -137.205032 29.144798 1.000000 1.000000 1.000000
+vn -0.179063 -0.203794 0.962499
+v -158.639542 -136.913406 29.479597 1.000000 1.000000 1.000000
+vn -0.251233 -0.118531 0.960642
+v -156.611755 -137.553864 29.825598 1.000000 1.000000 1.000000
+vn -0.450227 -0.524808 0.722407
+v -156.728928 -137.789673 29.670998 1.000000 1.000000 1.000000
+vn -0.622219 -0.312747 0.717658
+v -155.198105 -139.205933 30.018198 1.000000 1.000000 1.000000
+vn -0.690255 -0.092854 0.717584
+v -154.538910 -140.481277 30.249399 1.000000 1.000000 1.000000
+vn -0.881148 -0.184545 0.435341
+v -154.759079 -140.573364 29.901798 1.000000 1.000000 1.000000
+vn -0.844969 -0.351666 0.402938
+v -155.030731 -139.945465 29.786598 1.000000 1.000000 1.000000
+vn -0.949917 -0.089460 0.299424
+v -154.473251 -141.850098 30.120598 1.000000 1.000000 1.000000
+vn -0.813564 -0.581438 0.006583
+v -155.525116 -139.478027 28.846201 1.000000 1.000000 1.000000
+vn -0.893342 -0.448137 0.033367
+v -155.185226 -140.038956 28.962399 1.000000 1.000000 1.000000
+vn -0.783399 -0.445671 0.433202
+v -155.384796 -139.362213 29.670597 1.000000 1.000000 1.000000
+vn -0.714784 -0.699275 0.009885
+v -155.937119 -138.972916 28.729799 1.000000 1.000000 1.000000
+vn -0.796363 -0.562201 -0.223017
+v -155.485214 -139.444534 28.391399 1.000000 1.000000 1.000000
+vn -0.902818 -0.361542 -0.232823
+v -154.876236 -140.622192 28.622799 1.000000 1.000000 1.000000
+vn -0.966011 -0.258394 0.007398
+v -154.757797 -141.205444 29.179798 1.000000 1.000000 1.000000
+vn -0.895483 0.111403 0.430929
+v -154.452652 -142.547760 30.236597 1.000000 1.000000 1.000000
+vn -0.920307 0.222548 0.321726
+v -154.523453 -143.235657 30.351599 1.000000 1.000000 1.000000
+vn -0.995710 -0.092210 -0.007653
+v -154.649628 -141.869629 29.296398 1.000000 1.000000 1.000000
+vn -0.923627 -0.035160 -0.381678
+v -154.439774 -142.547760 28.559998 1.000000 1.000000 1.000000
+vn -0.699689 -0.243381 -0.671715
+v -154.343216 -141.093826 27.992598 1.000000 1.000000 1.000000
+vn -0.822920 -0.136721 -0.551462
+v -154.460373 -141.848709 28.443998 1.000000 1.000000 1.000000
+vn -0.755216 0.034456 -0.654570
+v -154.274979 -143.284500 28.340399 1.000000 1.000000 1.000000
+vn -0.887890 0.188144 -0.419826
+v -154.668961 -143.917984 28.791199 1.000000 1.000000 1.000000
+vn -0.215765 -0.149027 -0.965006
+v -153.982727 -142.567307 28.089199 1.000000 1.000000 1.000000
+vn -0.917703 0.286541 -0.275164
+v -154.801559 -143.870544 29.188799 1.000000 1.000000 1.000000
+vn -0.805986 -0.377624 -0.455836
+v -154.746201 -140.567780 28.225199 1.000000 1.000000 1.000000
+vn -0.172804 -0.217953 -0.960539
+v -154.320038 -140.389175 27.754599 1.000000 1.000000 1.000000
+vn -0.551053 -0.417134 -0.722731
+v -154.810562 -139.812897 27.775398 1.000000 1.000000 1.000000
+vn -0.693015 -0.562803 -0.450537
+v -155.374481 -139.352448 27.993799 1.000000 1.000000 1.000000
+vn -0.095197 -0.255982 -0.961983
+v -155.011429 -139.052444 27.523199 1.000000 1.000000 1.000000
+vn -0.444077 -0.611397 -0.654973
+v -155.637131 -138.642227 27.542599 1.000000 1.000000 1.000000
+vn -0.575744 -0.689416 -0.439572
+v -155.804504 -138.826416 27.877398 1.000000 1.000000 1.000000
+vn -0.480674 -0.844384 -0.236577
+v -156.901443 -138.134323 28.044197 1.000000 1.000000 1.000000
+vn -0.394128 -0.780266 -0.485642
+v -156.834488 -138.001770 27.646799 1.000000 1.000000 1.000000
+vn -0.223614 -0.622322 -0.750141
+v -156.722473 -137.774323 27.311998 1.000000 1.000000 1.000000
+vn -0.362334 -0.885603 -0.290553
+v -157.465363 -137.858047 27.929598 1.000000 1.000000 1.000000
+vn -0.244468 -0.861964 -0.444131
+v -157.417725 -137.717117 27.531998 1.000000 1.000000 1.000000
+vn -0.517077 -0.854489 0.049794
+v -156.925903 -138.183151 28.498999 1.000000 1.000000 1.000000
+vn -0.706490 -0.625512 0.331071
+v -155.813522 -138.836166 29.553999 1.000000 1.000000 1.000000
+vn -0.514333 -0.747501 0.420362
+v -156.840927 -138.014328 29.323399 1.000000 1.000000 1.000000
+vn -0.205815 -0.977179 0.052554
+v -158.078201 -137.721313 28.268198 1.000000 1.000000 1.000000
+vn -0.657160 -0.663841 0.357011
+v -156.300186 -138.386871 29.438599 1.000000 1.000000 1.000000
+vn -0.288953 -0.894100 0.342185
+v -158.040863 -137.534332 29.092398 1.000000 1.000000 1.000000
+vn 0.068385 -0.997624 -0.008390
+v -159.305176 -137.625031 28.036999 1.000000 1.000000 1.000000
+vn -0.398266 -0.840322 0.367754
+v -157.421585 -137.729675 29.208599 1.000000 1.000000 1.000000
+vn -0.178341 -0.656816 0.732658
+v -158.657562 -137.179916 29.324999 1.000000 1.000000 1.000000
+vn 0.080155 -0.663924 0.743492
+v -160.582352 -137.457581 28.990198 1.000000 1.000000 1.000000
+vn 0.181880 -0.868256 0.461575
+v -160.505096 -137.698975 28.642599 1.000000 1.000000 1.000000
+vn 0.324894 -0.597691 0.732946
+v -161.779709 -138.127335 28.758999 1.000000 1.000000 1.000000
+vn 0.368316 -0.828012 0.422776
+v -161.092194 -137.972473 28.527399 1.000000 1.000000 1.000000
+vn 0.470700 -0.760282 0.447676
+v -161.643234 -138.336639 28.411198 1.000000 1.000000 1.000000
+vn 0.655977 -0.677607 0.332480
+v -162.141479 -138.781754 28.294798 1.000000 1.000000 1.000000
+vn 0.693016 -0.626968 0.355866
+v -162.574081 -139.295242 28.179398 1.000000 1.000000 1.000000
+vn 0.731948 -0.681297 0.009321
+v -162.020462 -138.921280 27.470398 1.000000 1.000000 1.000000
+vn 0.771638 -0.486590 0.409639
+v -162.935867 -139.867325 28.064198 1.000000 1.000000 1.000000
+vn 0.616038 -0.787700 0.005109
+v -161.540237 -138.491531 27.586998 1.000000 1.000000 1.000000
+vn 0.594918 -0.770857 -0.227710
+v -161.571136 -138.446884 27.132198 1.000000 1.000000 1.000000
+vn 0.475117 -0.879303 0.033009
+v -161.011078 -138.142685 27.703199 1.000000 1.000000 1.000000
+vn 0.068059 -0.943369 0.324688
+v -159.318054 -137.433868 28.861399 1.000000 1.000000 1.000000
+vn 0.263899 -0.964531 0.006130
+v -159.921875 -137.719910 27.920597 1.000000 1.000000 1.000000
+vn 0.379867 -0.892178 -0.244375
+v -160.463898 -137.827347 27.363598 1.000000 1.000000 1.000000
+vn -0.158744 -0.875190 0.456993
+v -158.674301 -137.435257 28.977198 1.000000 1.000000 1.000000
+vn 0.009081 -0.911571 -0.411042
+v -158.673004 -137.421310 27.300798 1.000000 1.000000 1.000000
+vn 0.394671 -0.786174 -0.475569
+v -160.508957 -137.685028 26.965998 1.000000 1.000000 1.000000
+vn 0.128159 -0.805659 -0.578351
+v -159.318054 -137.419907 27.184799 1.000000 1.000000 1.000000
+vn 0.247155 -0.675021 -0.695170
+v -160.010712 -137.266418 26.733398 1.000000 1.000000 1.000000
+vn -0.063758 -0.726141 -0.684583
+v -157.988068 -137.267822 27.080999 1.000000 1.000000 1.000000
+vn 0.435800 -0.526817 -0.729755
+v -161.208069 -137.729675 26.516199 1.000000 1.000000 1.000000
+vn 0.590207 -0.666985 -0.454739
+v -161.650955 -138.324097 26.734598 1.000000 1.000000 1.000000
+vn 0.716044 -0.547756 -0.432716
+v -162.151794 -138.771988 26.618198 1.000000 1.000000 1.000000
+vn -0.843495 0.251611 0.474562
+v -164.310898 -140.001282 27.969599 1.000000 1.000000 1.000000
+vn -0.884502 0.147515 0.442601
+v -164.564529 -140.837082 27.853399 1.000000 1.000000 1.000000
+vn -0.880818 0.025453 0.472770
+v -164.707443 -141.696609 27.738199 1.000000 1.000000 1.000000
+vn -0.640196 -0.127115 0.757622
+v -164.500153 -142.564499 27.960199 1.000000 1.000000 1.000000
+vn -0.967241 0.206804 0.147229
+v -164.711304 -140.796616 27.385199 1.000000 1.000000 1.000000
+vn -0.985962 0.078926 0.147140
+v -164.858063 -141.678467 27.269999 1.000000 1.000000 1.000000
+vn -0.892435 -0.087571 0.442597
+v -164.735764 -142.574280 27.622398 1.000000 1.000000 1.000000
+vn -0.623001 -0.210733 0.753301
+v -164.416473 -143.407288 27.843599 1.000000 1.000000 1.000000
+vn -0.280618 -0.220793 0.934079
+v -164.040527 -144.057510 27.881798 1.000000 1.000000 1.000000
+vn -0.865550 -0.218796 0.450502
+v -164.649506 -143.451935 27.505798 1.000000 1.000000 1.000000
+vn -0.571496 -0.349838 0.742298
+v -163.973572 -144.908661 27.626198 1.000000 1.000000 1.000000
+vn -0.987734 -0.051160 0.147524
+v -164.887695 -142.579849 27.153999 1.000000 1.000000 1.000000
+vn -0.973253 -0.176028 0.147623
+v -164.798859 -143.481247 27.037399 1.000000 1.000000 1.000000
+vn -0.940989 -0.296576 0.163040
+v -164.625031 -144.254257 26.935198 1.000000 1.000000 1.000000
+vn -0.796480 -0.397632 0.455532
+v -164.187302 -145.018890 27.288399 1.000000 1.000000 1.000000
+vn -0.985583 -0.010596 -0.168859
+v -164.874802 -142.579849 26.338598 1.000000 1.000000 1.000000
+vn -0.967622 -0.143943 -0.207338
+v -164.785965 -143.478455 26.221998 1.000000 1.000000 1.000000
+vn -0.915241 -0.365551 -0.169431
+v -164.313477 -145.083084 26.004599 1.000000 1.000000 1.000000
+vn -0.897649 -0.414413 0.149960
+v -164.325058 -145.088669 26.820198 1.000000 1.000000 1.000000
+vn -0.711854 -0.509429 0.483473
+v -163.788177 -145.786331 27.172199 1.000000 1.000000 1.000000
+vn -0.832969 -0.532394 0.150731
+v -163.915634 -145.875626 26.703999 1.000000 1.000000 1.000000
+vn -0.851723 -0.494864 -0.172274
+v -163.904053 -145.868652 25.888399 1.000000 1.000000 1.000000
+vn -0.827765 -0.293474 -0.478203
+v -164.192444 -145.021683 25.611597 1.000000 1.000000 1.000000
+vn -0.892347 -0.182779 -0.412684
+v -164.484711 -144.206818 25.726599 1.000000 1.000000 1.000000
+vn -0.791133 -0.413380 -0.450806
+v -163.793335 -145.789124 25.495398 1.000000 1.000000 1.000000
+vn -0.775573 -0.606957 -0.173465
+v -163.395493 -146.584457 25.771999 1.000000 1.000000 1.000000
+vn -0.751104 -0.642497 0.151792
+v -163.405792 -146.594223 26.587399 1.000000 1.000000 1.000000
+vn -0.647685 -0.610422 0.455948
+v -163.292496 -146.485397 27.055798 1.000000 1.000000 1.000000
+vn -0.683620 -0.708687 -0.174434
+v -162.804550 -147.210968 25.656601 1.000000 1.000000 1.000000
+vn -0.653343 -0.741285 0.153751
+v -162.813553 -147.222137 26.472198 1.000000 1.000000 1.000000
+vn -0.540143 -0.684449 0.489668
+v -162.715714 -147.096542 26.940399 1.000000 1.000000 1.000000
+vn -0.726610 -0.516008 -0.453623
+v -163.296356 -146.489578 25.378798 1.000000 1.000000 1.000000
+vn -0.640578 -0.259135 -0.722848
+v -163.595062 -145.646805 25.150799 1.000000 1.000000 1.000000
+vn -0.532779 -0.323686 -0.781904
+v -163.118683 -146.319351 25.034401 1.000000 1.000000 1.000000
+vn -0.638848 -0.596437 -0.485938
+v -162.719574 -147.102142 25.263599 1.000000 1.000000 1.000000
+vn -0.574633 -0.798909 -0.177597
+v -162.140198 -147.741196 25.541199 1.000000 1.000000 1.000000
+vn -0.479929 -0.479523 -0.734660
+v -161.941925 -147.402130 24.803598 1.000000 1.000000 1.000000
+vn -0.551096 -0.695047 -0.461740
+v -162.068100 -147.619797 25.148199 1.000000 1.000000 1.000000
+vn -0.347587 -0.506830 -0.788864
+v -161.263428 -147.796997 24.688999 1.000000 1.000000 1.000000
+vn -0.444874 -0.765164 -0.465415
+v -161.361282 -148.031433 25.033398 1.000000 1.000000 1.000000
+vn -0.451919 -0.874070 -0.178244
+v -161.415344 -148.162582 25.426598 1.000000 1.000000 1.000000
+vn -0.539634 -0.827383 0.155669
+v -162.146637 -147.753754 26.356798 1.000000 1.000000 1.000000
+vn -0.411784 -0.897774 0.156320
+v -161.420502 -148.175140 26.242199 1.000000 1.000000 1.000000
+vn -0.274372 -0.948620 0.157605
+v -160.637711 -148.486298 26.125998 1.000000 1.000000 1.000000
+vn -0.317133 -0.931255 -0.179416
+v -160.635132 -148.473740 25.310398 1.000000 1.000000 1.000000
+vn -0.324740 -0.804676 -0.497032
+v -160.597794 -148.335602 24.917398 1.000000 1.000000 1.000000
+vn -0.174040 -0.967997 -0.180811
+v -159.827881 -148.660721 25.195198 1.000000 1.000000 1.000000
+vn -0.201629 -0.860857 0.467194
+v -160.596512 -148.328629 26.594198 1.000000 1.000000 1.000000
+vn -0.062619 -0.864787 0.498220
+v -159.808578 -148.512817 26.478998 1.000000 1.000000 1.000000
+vn -0.128894 -0.979068 0.157521
+v -159.830460 -148.674683 26.010799 1.000000 1.000000 1.000000
+vn -0.317481 -0.808683 0.495214
+v -161.358704 -148.025833 26.710398 1.000000 1.000000 1.000000
+vn -0.084783 -0.620132 0.779903
+v -160.530853 -148.083054 26.931999 1.000000 1.000000 1.000000
+vn 0.067641 -0.880179 0.469798
+v -159.000031 -148.574219 26.363199 1.000000 1.000000 1.000000
+vn 0.116939 -0.618946 0.776679
+v -159.000031 -148.317459 26.700998 1.000000 1.000000 1.000000
+vn -0.024442 -0.983123 -0.181305
+v -159.000031 -148.724899 25.079399 1.000000 1.000000 1.000000
+vn 0.022567 -0.987105 0.158474
+v -159.000031 -148.738861 25.894798 1.000000 1.000000 1.000000
+vn 0.218772 -0.852522 0.474705
+v -158.187637 -148.510025 26.246599 1.000000 1.000000 1.000000
+vn 0.214468 -0.602877 0.768468
+v -158.221100 -148.256073 26.584398 1.000000 1.000000 1.000000
+vn 0.094679 -0.342538 0.934721
+v -159.744202 -148.018875 26.957399 1.000000 1.000000 1.000000
+vn 0.366740 -0.550393 0.750046
+v -156.821625 -147.827713 26.366999 1.000000 1.000000 1.000000
+vn -0.042887 -0.313223 0.948711
+v -161.819611 -147.192825 27.303398 1.000000 1.000000 1.000000
+vn 0.509339 -0.389997 0.767122
+v -155.495514 -146.945862 26.134399 1.000000 1.000000 1.000000
+vn 0.537275 -0.686946 0.489326
+v -156.006638 -147.657471 25.912998 1.000000 1.000000 1.000000
+vn 0.638598 -0.620074 0.455743
+v -155.344879 -147.143997 25.796598 1.000000 1.000000 1.000000
+vn 0.710938 -0.512697 0.481362
+v -154.760361 -146.539810 25.681198 1.000000 1.000000 1.000000
+vn 0.416578 -0.777506 0.471112
+v -156.727631 -148.063522 26.029198 1.000000 1.000000 1.000000
+vn 0.437368 -0.885650 0.155991
+v -156.667114 -148.214218 25.560999 1.000000 1.000000 1.000000
+vn 0.563664 -0.811386 0.154713
+v -155.926819 -147.796997 25.444799 1.000000 1.000000 1.000000
+vn 0.674693 -0.722106 0.152815
+v -155.247025 -147.269577 25.328199 1.000000 1.000000 1.000000
+vn 0.523798 -0.832950 -0.178412
+v -155.933258 -147.785843 24.629198 1.000000 1.000000 1.000000
+vn 0.307493 -0.936038 0.171119
+v -157.447327 -148.510025 25.675999 1.000000 1.000000 1.000000
+vn 0.383121 -0.906415 -0.177848
+v -156.672272 -148.201645 24.745398 1.000000 1.000000 1.000000
+vn 0.304384 -0.811630 -0.498605
+v -156.725067 -148.069092 24.352398 1.000000 1.000000 1.000000
+vn 0.434879 -0.770397 -0.466228
+v -156.002777 -147.663055 24.236198 1.000000 1.000000 1.000000
+vn 0.639556 -0.747991 -0.177421
+v -155.256042 -147.259811 24.512798 1.000000 1.000000 1.000000
+vn 0.737987 -0.651741 -0.174954
+v -154.658646 -146.640274 24.397398 1.000000 1.000000 1.000000
+vn 0.769068 -0.621154 0.150672
+v -154.648346 -146.650040 25.212999 1.000000 1.000000 1.000000
+vn 0.543217 -0.700236 -0.463233
+v -155.341019 -147.148178 24.119598 1.000000 1.000000 1.000000
+vn 0.265948 -0.616745 -0.740876
+v -156.127670 -147.443985 23.891598 1.000000 1.000000 1.000000
+vn 0.339551 -0.509434 -0.790685
+v -155.491653 -146.950043 23.775198 1.000000 1.000000 1.000000
+vn 0.624310 -0.610045 -0.487937
+v -154.756500 -146.544006 24.004398 1.000000 1.000000 1.000000
+vn 0.821215 -0.543757 -0.173017
+v -154.146225 -145.938431 24.281998 1.000000 1.000000 1.000000
+vn 0.499171 -0.459039 -0.734923
+v -154.452652 -145.712387 23.544399 1.000000 1.000000 1.000000
+vn 0.719764 -0.524188 -0.455155
+v -154.255661 -145.857498 23.888998 1.000000 1.000000 1.000000
+vn 0.018271 -0.296689 -0.954799
+v -156.256409 -147.216553 23.740599 1.000000 1.000000 1.000000
+vn 0.144397 -0.273534 -0.950962
+v -154.656082 -145.563080 23.393398 1.000000 1.000000 1.000000
+vn 0.527061 -0.331219 -0.782624
+v -154.065125 -144.990997 23.429798 1.000000 1.000000 1.000000
+vn 0.785756 -0.422236 -0.452000
+v -153.852692 -145.105408 23.774199 1.000000 1.000000 1.000000
+vn -0.073444 -0.300795 -0.950857
+v -157.613419 -147.852814 23.971998 1.000000 1.000000 1.000000
+vn -0.227983 -0.627478 -0.744510
+v -159.776382 -148.264450 24.457598 1.000000 1.000000 1.000000
+vn -0.079764 -0.607914 -0.789986
+v -159.000031 -148.323059 24.341799 1.000000 1.000000 1.000000
+vn -0.198943 -0.860129 -0.469681
+v -159.809860 -148.518402 24.802198 1.000000 1.000000 1.000000
+vn -0.050443 -0.875623 -0.480354
+v -159.000031 -148.581192 24.686199 1.000000 1.000000 1.000000
+vn 0.176666 -0.881349 -0.438192
+v -157.485962 -148.357925 24.467398 1.000000 1.000000 1.000000
+vn 0.133892 -0.966190 -0.220339
+v -158.167038 -148.659332 24.962799 1.000000 1.000000 1.000000
+vn 0.064356 -0.663312 -0.745570
+v -157.549042 -148.110962 24.122999 1.000000 1.000000 1.000000
+vn 0.169652 -0.972723 0.158200
+v -158.165741 -148.673279 25.778198 1.000000 1.000000 1.000000
+vn 0.847018 -0.509976 0.149947
+v -154.135941 -145.946793 25.097601 1.000000 1.000000 1.000000
+vn 0.786865 -0.424161 0.448253
+v -154.260818 -145.853302 25.565798 1.000000 1.000000 1.000000
+vn -0.210939 -0.292299 0.932773
+v -163.404510 -145.510056 27.650599 1.000000 1.000000 1.000000
+vn -0.406960 -0.484970 0.774072
+v -163.114822 -146.315170 27.393599 1.000000 1.000000 1.000000
+vn -0.284080 -0.604973 0.743845
+v -161.939346 -147.397949 27.162798 1.000000 1.000000 1.000000
+vn -0.446608 -0.765579 0.463065
+v -162.065521 -147.614227 26.824999 1.000000 1.000000 1.000000
+vn -0.688562 -0.078815 -0.720882
+v -164.259399 -144.131470 25.382198 1.000000 1.000000 1.000000
+vn -0.633587 0.052011 -0.771921
+v -164.505310 -142.565903 25.600998 1.000000 1.000000 1.000000
+vn -0.892082 0.015917 -0.451594
+v -164.742203 -142.574280 25.945398 1.000000 1.000000 1.000000
+vn -0.883238 0.146063 -0.445596
+v -164.712585 -141.695221 26.061398 1.000000 1.000000 1.000000
+vn -0.978248 0.119096 -0.169844
+v -164.845200 -141.679871 26.454399 1.000000 1.000000 1.000000
+vn -0.954272 0.245688 -0.170304
+v -164.698425 -140.800797 26.569599 1.000000 1.000000 1.000000
+vn -0.087015 -0.729844 -0.678053
+v -158.262314 -137.212006 41.488579 1.000000 1.000000 1.000000
+vn -0.243280 -0.846482 -0.473585
+v -157.650757 -137.629211 41.876179 1.000000 1.000000 1.000000
+vn 0.025623 -0.910457 -0.412809
+v -158.939514 -137.408737 41.770180 1.000000 1.000000 1.000000
+vn -0.200073 -0.564522 -0.800803
+v -156.928482 -137.659897 41.592178 1.000000 1.000000 1.000000
+vn 0.243410 -0.697104 -0.674387
+v -160.318420 -137.348740 41.319378 1.000000 1.000000 1.000000
+vn -0.508440 -0.730502 -0.455911
+v -156.448242 -138.254318 41.975777 1.000000 1.000000 1.000000
+vn -0.602941 -0.293004 -0.742031
+v -154.595551 -140.283142 41.808979 1.000000 1.000000 1.000000
+vn -0.718159 -0.575321 -0.391476
+v -155.507095 -139.169662 42.061977 1.000000 1.000000 1.000000
+vn -0.285927 -0.933193 -0.217707
+v -157.691956 -137.772934 42.273579 1.000000 1.000000 1.000000
+vn -0.745654 -0.635011 -0.201893
+v -155.613953 -139.267334 42.459377 1.000000 1.000000 1.000000
+vn -0.458195 -0.888488 -0.025409
+v -157.113876 -138.078506 42.779179 1.000000 1.000000 1.000000
+vn -0.774971 -0.311676 -0.549798
+v -154.814438 -140.384995 42.143780 1.000000 1.000000 1.000000
+vn -0.857276 -0.482532 -0.179558
+v -155.236725 -139.833847 42.501778 1.000000 1.000000 1.000000
+vn -0.639509 -0.762341 0.099319
+v -156.098053 -138.808273 42.869778 1.000000 1.000000 1.000000
+vn -0.315790 -0.944244 -0.093167
+v -157.707397 -137.825958 42.728378 1.000000 1.000000 1.000000
+vn -0.898091 -0.174241 -0.403823
+v -154.484833 -141.631027 42.210381 1.000000 1.000000 1.000000
+vn -0.751652 -0.151723 -0.641872
+v -154.249222 -141.593353 41.875580 1.000000 1.000000 1.000000
+vn -0.926404 0.028482 -0.375452
+v -154.435913 -142.359390 42.244579 1.000000 1.000000 1.000000
+vn -0.765359 0.138300 -0.628569
+v -154.357376 -143.696121 41.964779 1.000000 1.000000 1.000000
+vn -0.971620 0.045176 -0.232194
+v -154.574966 -142.359390 42.642178 1.000000 1.000000 1.000000
+vn -0.866696 0.185055 -0.463241
+v -154.587845 -143.630539 42.299580 1.000000 1.000000 1.000000
+vn -0.945694 0.208435 -0.249436
+v -154.721741 -143.591461 42.696980 1.000000 1.000000 1.000000
+vn -0.163065 -0.986365 0.022234
+v -158.327972 -137.671066 42.675579 1.000000 1.000000 1.000000
+vn 0.114064 -0.993473 -0.000097
+v -159.579407 -137.654327 42.565578 1.000000 1.000000 1.000000
+vn -0.020019 -0.965142 -0.260961
+v -158.942108 -137.559448 42.167778 1.000000 1.000000 1.000000
+vn 0.333304 -0.942008 0.039118
+v -160.201248 -137.795258 42.506378 1.000000 1.000000 1.000000
+vn 0.101738 -0.959271 -0.263531
+v -159.585846 -137.599899 42.110779 1.000000 1.000000 1.000000
+vn 0.559400 -0.826845 0.058294
+v -161.357422 -138.357574 42.381977 1.000000 1.000000 1.000000
+vn 0.554976 -0.802129 -0.220434
+v -161.384445 -138.310135 41.927177 1.000000 1.000000 1.000000
+vn 0.155674 -0.908401 -0.388037
+v -159.603867 -137.450607 41.713379 1.000000 1.000000 1.000000
+vn 0.375842 -0.738711 -0.559507
+v -160.877182 -137.842697 41.592979 1.000000 1.000000 1.000000
+vn 0.438399 -0.520368 -0.732819
+v -161.586578 -137.965485 41.194977 1.000000 1.000000 1.000000
+vn 0.632221 -0.644538 -0.429961
+v -161.975403 -138.598969 41.466179 1.000000 1.000000 1.000000
+vn 0.789352 -0.608320 -0.082883
+v -162.301132 -139.238037 42.250977 1.000000 1.000000 1.000000
+vn 0.735123 -0.505022 -0.452268
+v -162.444046 -139.102692 41.398579 1.000000 1.000000 1.000000
+vn 0.767623 -0.597430 -0.232019
+v -162.339767 -139.201752 41.796181 1.000000 1.000000 1.000000
+vn 0.864557 -0.501820 -0.026799
+v -162.680954 -139.787796 42.180977 1.000000 1.000000 1.000000
+vn 0.929998 -0.366870 0.022578
+v -162.986084 -140.393356 42.108978 1.000000 1.000000 1.000000
+vn 0.652261 0.087287 0.752952
+v -153.506363 -142.358002 20.276600 1.000000 1.000000 1.000000
+vn 0.874030 -0.184907 0.449312
+v -153.573303 -144.358902 20.197399 1.000000 1.000000 1.000000
+vn 0.634457 0.260153 0.727863
+v -153.712357 -140.738007 20.067600 1.000000 1.000000 1.000000
+vn 0.890961 0.032764 0.452896
+v -153.269455 -142.358002 19.938795 1.000000 1.000000 1.000000
+vn 0.865140 0.167490 0.472736
+v -153.323532 -141.502655 19.833000 1.000000 1.000000 1.000000
+vn 0.539459 0.412137 0.734253
+v -154.331635 -139.218491 19.863598 1.000000 1.000000 1.000000
+vn 0.851145 0.276654 0.446111
+v -153.484467 -140.668259 19.729797 1.000000 1.000000 1.000000
+vn 0.790812 0.381872 0.478320
+v -153.752258 -139.858963 19.627800 1.000000 1.000000 1.000000
+vn 0.982521 0.141654 0.120779
+v -153.172897 -141.480331 19.364799 1.000000 1.000000 1.000000
+vn 0.988928 0.017325 0.147378
+v -153.117538 -142.358002 19.470398 1.000000 1.000000 1.000000
+vn 0.973953 -0.108311 0.199211
+v -153.174179 -143.242630 19.578800 1.000000 1.000000 1.000000
+vn 0.985657 -0.001895 -0.168749
+v -153.130417 -142.358002 18.654999 1.000000 1.000000 1.000000
+vn 0.962911 0.212564 -0.166192
+v -153.350571 -140.627792 18.445999 1.000000 1.000000 1.000000
+vn 0.952342 0.266412 0.148557
+v -153.337692 -140.623596 19.261597 1.000000 1.000000 1.000000
+vn 0.912825 0.370975 -0.170672
+v -153.624802 -139.798950 18.343998 1.000000 1.000000 1.000000
+vn 0.909091 0.388968 0.149186
+v -153.613220 -139.793365 19.159397 1.000000 1.000000 1.000000
+vn 0.877746 0.174476 -0.446230
+v -153.478027 -140.666855 18.052998 1.000000 1.000000 1.000000
+vn 0.895060 0.040915 -0.444066
+v -153.317093 -141.501266 18.155998 1.000000 1.000000 1.000000
+vn 0.681442 0.072355 -0.728287
+v -153.707199 -140.736618 17.708397 1.000000 1.000000 1.000000
+vn 0.832838 0.278195 -0.478528
+v -153.747116 -139.856171 17.950798 1.000000 1.000000 1.000000
+vn 0.857030 -0.046693 -0.513147
+v -153.263016 -142.358002 18.261799 1.000000 1.000000 1.000000
+vn 0.869779 -0.196726 -0.452530
+v -153.318375 -143.220306 18.370197 1.000000 1.000000 1.000000
+vn 0.972856 -0.151671 -0.174776
+v -153.185776 -143.241241 18.763199 1.000000 1.000000 1.000000
+vn 0.945636 -0.258741 0.197040
+v -153.429108 -144.411926 19.729000 1.000000 1.000000 1.000000
+vn 0.632802 0.259920 -0.729385
+v -154.326477 -139.215714 17.504398 1.000000 1.000000 1.000000
+vn 0.819017 0.440152 -0.368073
+v -154.124344 -139.080368 17.848797 1.000000 1.000000 1.000000
+vn 0.546599 0.409813 -0.730262
+v -155.288223 -137.957123 17.311398 1.000000 1.000000 1.000000
+vn 0.766260 0.502346 -0.400617
+v -154.587845 -138.382690 17.750999 1.000000 1.000000 1.000000
+vn 0.848773 0.517036 0.110717
+v -154.000748 -138.996628 19.057400 1.000000 1.000000 1.000000
+vn 0.720561 0.672052 -0.170701
+v -155.038452 -137.661301 18.049000 1.000000 1.000000 1.000000
+vn 0.788815 0.604620 0.110480
+v -154.475830 -138.282227 18.959599 1.000000 1.000000 1.000000
+vn 0.661852 0.593947 -0.457360
+v -155.127289 -137.767349 17.655998 1.000000 1.000000 1.000000
+vn 0.747036 0.487573 0.451896
+v -154.129486 -139.083145 19.525799 1.000000 1.000000 1.000000
+vn 0.660606 0.574547 0.483213
+v -154.591690 -138.386871 19.427799 1.000000 1.000000 1.000000
+vn 0.683213 0.714170 0.152257
+v -155.029449 -137.651535 18.864597 1.000000 1.000000 1.000000
+vn 0.587576 0.666767 0.458451
+v -155.131149 -137.771530 19.332798 1.000000 1.000000 1.000000
+vn 0.610423 0.770297 -0.184461
+v -155.670609 -137.115723 17.955200 1.000000 1.000000 1.000000
+vn 0.562434 0.683278 -0.465618
+v -155.746567 -137.234329 17.562199 1.000000 1.000000 1.000000
+vn 0.453873 0.860296 -0.232140
+v -156.377441 -136.665039 17.862198 1.000000 1.000000 1.000000
+vn 0.458087 0.888769 -0.015682
+v -156.356842 -136.618988 18.267799 1.000000 1.000000 1.000000
+vn 0.576816 0.800915 0.160680
+v -155.664169 -137.104568 18.770798 1.000000 1.000000 1.000000
+vn 0.475433 0.730573 0.490130
+v -155.749146 -137.238525 19.238998 1.000000 1.000000 1.000000
+vn 0.405658 0.534974 0.741110
+v -155.292084 -137.961304 19.670597 1.000000 1.000000 1.000000
+vn 0.370998 0.808967 0.455997
+v -156.439240 -136.798981 19.146000 1.000000 1.000000 1.000000
+vn 0.240234 0.607945 0.756763
+v -156.546097 -137.027832 19.483797 1.000000 1.000000 1.000000
+vn 0.371577 0.909494 0.186418
+v -156.737930 -136.471085 18.632999 1.000000 1.000000 1.000000
+vn 0.097993 0.645316 0.757604
+v -157.604401 -136.595261 19.349998 1.000000 1.000000 1.000000
+vn 0.201865 0.858353 0.471678
+v -157.545181 -136.348297 19.012199 1.000000 1.000000 1.000000
+vn -0.111117 0.617496 0.778686
+v -159.091446 -136.398529 19.179199 1.000000 1.000000 1.000000
+vn 0.061744 0.865798 0.496570
+v -158.312515 -136.187820 18.925999 1.000000 1.000000 1.000000
+vn -0.356891 0.523823 0.773459
+v -161.313629 -136.951080 18.933399 1.000000 1.000000 1.000000
+vn -0.537134 0.663433 0.520907
+v -162.098999 -137.125504 18.518997 1.000000 1.000000 1.000000
+vn -0.768578 0.425316 0.477906
+v -163.776596 -138.917099 18.298798 1.000000 1.000000 1.000000
+vn -0.600500 0.605205 0.522615
+v -162.722137 -137.623642 18.445000 1.000000 1.000000 1.000000
+vn -0.714018 0.534054 0.452730
+v -163.283478 -138.220825 18.371799 1.000000 1.000000 1.000000
+vn -0.772668 0.616427 0.151667
+v -163.396790 -138.112000 17.903599 1.000000 1.000000 1.000000
+vn -0.848689 0.507163 0.150045
+v -163.902756 -138.826416 17.830597 1.000000 1.000000 1.000000
+vn -0.679951 0.717295 0.152165
+v -162.819992 -137.499451 17.976597 1.000000 1.000000 1.000000
+vn -0.574192 0.807210 0.136804
+v -162.181396 -136.987366 18.050598 1.000000 1.000000 1.000000
+vn -0.634366 0.750823 -0.183971
+v -162.810974 -137.509216 17.161198 1.000000 1.000000 1.000000
+vn -0.453657 0.877414 0.156014
+v -161.477142 -136.570145 18.127399 1.000000 1.000000 1.000000
+vn -0.443796 0.876033 -0.188711
+v -161.472000 -136.582718 17.311798 1.000000 1.000000 1.000000
+vn -0.752110 0.635488 -0.174600
+v -163.387772 -138.120361 17.087997 1.000000 1.000000 1.000000
+vn -0.549283 0.687766 -0.474621
+v -162.725998 -137.619446 16.767998 1.000000 1.000000 1.000000
+vn -0.826802 0.519875 -0.214778
+v -163.892456 -138.833389 17.014999 1.000000 1.000000 1.000000
+vn -0.654150 0.576308 -0.489855
+v -163.288635 -138.216644 16.695000 1.000000 1.000000 1.000000
+vn -0.472165 0.284255 -0.834422
+v -163.770157 -139.239426 16.326797 1.000000 1.000000 1.000000
+vn -0.288963 0.331239 -0.898210
+v -162.760773 -138.112000 16.326797 1.000000 1.000000 1.000000
+vn -0.328917 0.618222 -0.713874
+v -161.974121 -137.336197 16.497597 1.000000 1.000000 1.000000
+vn -0.070119 0.252800 -0.964974
+v -161.841507 -137.560837 16.346600 1.000000 1.000000 1.000000
+vn -0.367808 0.790395 -0.489891
+v -161.415344 -136.713882 16.918800 1.000000 1.000000 1.000000
+vn -0.120330 0.646437 -0.753419
+v -160.591370 -136.648285 16.655399 1.000000 1.000000 1.000000
+vn 0.025912 0.292840 -0.955810
+v -160.520554 -136.903641 16.504398 1.000000 1.000000 1.000000
+vn -0.230286 0.851569 -0.470954
+v -160.659607 -136.402710 16.999798 1.000000 1.000000 1.000000
+vn -0.289310 0.939892 -0.181392
+v -160.698227 -136.264572 17.392998 1.000000 1.000000 1.000000
+vn -0.095003 0.860356 -0.500761
+v -159.885818 -136.210159 17.081200 1.000000 1.000000 1.000000
+vn 0.051033 0.602379 -0.796577
+v -159.091446 -136.392944 16.820000 1.000000 1.000000 1.000000
+vn 0.151665 0.246941 -0.957088
+v -158.370468 -136.701309 16.753597 1.000000 1.000000 1.000000
+vn -0.146542 0.972383 -0.181649
+v -159.906418 -136.067825 17.474400 1.000000 1.000000 1.000000
+vn 0.033967 0.880688 -0.472477
+v -159.095306 -136.136200 17.164600 1.000000 1.000000 1.000000
+vn -0.321884 0.933719 0.156717
+v -160.702087 -136.250626 18.208397 1.000000 1.000000 1.000000
+vn -0.180228 0.970825 0.158167
+v -159.907715 -136.053879 18.289799 1.000000 1.000000 1.000000
+vn -0.034077 0.986937 0.157462
+v -159.097885 -135.978531 18.373199 1.000000 1.000000 1.000000
+vn 0.001270 0.983374 -0.181586
+v -159.096588 -135.992477 17.557598 1.000000 1.000000 1.000000
+vn 0.165610 0.866324 -0.471229
+v -158.311234 -136.180847 17.248997 1.000000 1.000000 1.000000
+vn 0.182798 0.642097 -0.744511
+v -158.340851 -136.436203 16.904598 1.000000 1.000000 1.000000
+vn 0.228200 0.206428 -0.951479
+v -156.979980 -137.100388 16.928799 1.000000 1.000000 1.000000
+vn 0.357596 0.566638 -0.742325
+v -156.884705 -136.853409 17.079800 1.000000 1.000000 1.000000
+vn 0.307481 0.854698 -0.418266
+v -157.543884 -136.341309 17.335400 1.000000 1.000000 1.000000
+vn 0.169631 0.969522 -0.176783
+v -158.295776 -136.038528 17.642197 1.000000 1.000000 1.000000
+vn 0.113217 0.980943 0.157904
+v -158.294495 -136.024582 18.457600 1.000000 1.000000 1.000000
+vn 0.265555 0.956435 0.121296
+v -157.506561 -136.189224 18.543999 1.000000 1.000000 1.000000
+vn 0.408608 0.800861 -0.437792
+v -156.794571 -136.616211 17.424400 1.000000 1.000000 1.000000
+vn -0.065279 0.880747 0.469067
+v -159.095306 -136.141785 18.841400 1.000000 1.000000 1.000000
+vn -0.210922 0.820783 0.530874
+v -159.884537 -136.217133 18.758198 1.000000 1.000000 1.000000
+vn -0.297340 0.792055 0.533140
+v -160.658310 -136.408295 18.676800 1.000000 1.000000 1.000000
+vn -0.434780 0.772289 0.463181
+v -161.412781 -136.719452 18.595798 1.000000 1.000000 1.000000
+vn 0.427667 0.459483 -0.778445
+v -155.880463 -137.445023 17.217598 1.000000 1.000000 1.000000
+vn -0.208657 -0.177478 0.961750
+v -157.896667 -137.033401 39.899178 1.000000 1.000000 1.000000
+vn -0.113936 -0.242797 0.963363
+v -160.008133 -137.009689 39.553177 1.000000 1.000000 1.000000
+vn -0.264479 -0.092393 0.959955
+v -155.974457 -137.997574 40.246380 1.000000 1.000000 1.000000
+vn -0.513082 -0.461038 0.724010
+v -156.123810 -138.211060 40.091778 1.000000 1.000000 1.000000
+vn -0.641030 -0.263450 0.720885
+v -155.171066 -139.245010 40.323177 1.000000 1.000000 1.000000
+vn -0.699594 -0.053001 0.712572
+v -154.345795 -141.149628 40.657780 1.000000 1.000000 1.000000
+vn -0.803079 -0.401722 0.440096
+v -155.360321 -139.398499 39.975380 1.000000 1.000000 1.000000
+vn -0.721446 -0.558289 0.409669
+v -155.778763 -138.873856 39.860378 1.000000 1.000000 1.000000
+vn -0.904075 0.251427 0.345589
+v -154.529907 -143.277527 40.656178 1.000000 1.000000 1.000000
+vn -0.910300 0.098489 0.402061
+v -154.455231 -142.592407 40.541378 1.000000 1.000000 1.000000
+vn -0.918610 -0.001145 0.395164
+v -154.470673 -141.893356 40.425377 1.000000 1.000000 1.000000
+vn -0.997315 0.048661 0.054722
+v -154.631607 -142.582642 39.717178 1.000000 1.000000 1.000000
+vn -0.980474 -0.193548 0.034781
+v -154.747482 -141.254288 39.485779 1.000000 1.000000 1.000000
+vn -0.904804 -0.138482 0.402681
+v -154.574966 -141.209641 40.310181 1.000000 1.000000 1.000000
+vn -0.863633 -0.502523 -0.040113
+v -155.201965 -140.006851 39.253380 1.000000 1.000000 1.000000
+vn -0.964010 -0.166462 -0.207306
+v -154.697266 -141.241730 39.030979 1.000000 1.000000 1.000000
+vn -0.831334 -0.389284 -0.396664
+v -154.755203 -140.538483 38.517578 1.000000 1.000000 1.000000
+vn -0.895984 -0.325356 0.302253
+v -154.768082 -140.544067 40.194180 1.000000 1.000000 1.000000
+vn -0.744112 -0.667250 0.032782
+v -155.903641 -139.009201 39.035980 1.000000 1.000000 1.000000
+vn -0.626384 -0.779497 0.005248
+v -156.371002 -138.568268 38.919777 1.000000 1.000000 1.000000
+vn -0.769643 -0.594208 -0.233595
+v -155.460754 -139.479416 38.696381 1.000000 1.000000 1.000000
+vn -0.614913 -0.754893 -0.228075
+v -156.340103 -138.523621 38.464981 1.000000 1.000000 1.000000
+vn -0.675161 -0.573860 -0.463511
+v -155.350037 -139.388733 38.298779 1.000000 1.000000 1.000000
+vn -0.512011 -0.726650 -0.458067
+v -156.256409 -138.403625 38.067581 1.000000 1.000000 1.000000
+vn -0.358627 -0.819756 -0.446527
+v -156.802307 -138.021301 37.950981 1.000000 1.000000 1.000000
+vn -0.494267 -0.869255 0.009851
+v -156.893723 -138.202682 38.803379 1.000000 1.000000 1.000000
+vn -0.634787 -0.634942 0.440334
+v -156.265427 -138.414780 39.744179 1.000000 1.000000 1.000000
+vn -0.507335 -0.793205 0.336804
+v -156.808746 -138.033859 39.627579 1.000000 1.000000 1.000000
+vn -0.251782 -0.966499 0.049847
+v -158.042145 -137.729675 38.572578 1.000000 1.000000 1.000000
+vn -0.218842 -0.945907 -0.239518
+v -158.030563 -137.675262 38.117779 1.000000 1.000000 1.000000
+vn -0.282563 -0.623961 0.728581
+v -157.950729 -137.292938 39.744579 1.000000 1.000000 1.000000
+vn -0.446587 -0.817404 0.363883
+v -157.389404 -137.743637 39.512379 1.000000 1.000000 1.000000
+vn -0.280211 -0.859867 0.426744
+v -158.003525 -137.542694 39.396980 1.000000 1.000000 1.000000
+vn -0.138993 -0.917352 0.373023
+v -158.633102 -137.439438 39.282181 1.000000 1.000000 1.000000
+vn -0.017614 -0.938066 0.346009
+v -159.278122 -137.432480 39.166176 1.000000 1.000000 1.000000
+vn 0.020255 -0.678730 0.734109
+v -159.959198 -137.270599 39.398579 1.000000 1.000000 1.000000
+vn 0.087488 -0.994845 0.051270
+v -159.266541 -137.623642 38.341778 1.000000 1.000000 1.000000
+vn 0.355448 -0.934658 -0.008449
+v -160.472916 -137.888748 38.110779 1.000000 1.000000 1.000000
+vn 0.102560 -0.882946 0.458135
+v -159.911575 -137.521774 39.050980 1.000000 1.000000 1.000000
+vn -0.090371 -0.951343 -0.294585
+v -158.642120 -137.574799 38.003178 1.000000 1.000000 1.000000
+vn 0.016029 -0.894885 -0.446009
+v -158.631821 -137.424088 37.605778 1.000000 1.000000 1.000000
+vn 0.272847 -0.871112 -0.408312
+v -159.914154 -137.507828 37.374378 1.000000 1.000000 1.000000
+vn 0.526911 -0.849896 0.006395
+v -161.041977 -138.160828 37.994179 1.000000 1.000000 1.000000
+vn 0.337022 -0.884265 0.323252
+v -160.532135 -137.708740 38.934978 1.000000 1.000000 1.000000
+vn 0.700814 -0.712591 0.032777
+v -161.987000 -138.885010 37.776779 1.000000 1.000000 1.000000
+vn 0.615031 -0.750984 -0.240333
+v -161.537659 -138.421768 37.437180 1.000000 1.000000 1.000000
+vn 0.424332 -0.782241 0.456115
+v -161.609756 -138.310135 38.716179 1.000000 1.000000 1.000000
+vn 0.782575 -0.581195 -0.223135
+v -162.449203 -139.342682 37.205780 1.000000 1.000000 1.000000
+vn 0.806658 -0.590996 0.005143
+v -162.409286 -139.377563 37.660576 1.000000 1.000000 1.000000
+vn 0.587400 -0.694431 0.415605
+v -162.106735 -138.745468 38.601181 1.000000 1.000000 1.000000
+vn 0.269968 -0.616887 0.739302
+v -161.743652 -138.100830 39.063980 1.000000 1.000000 1.000000
+vn 0.664086 -0.604158 0.440435
+v -162.547043 -139.257568 38.484978 1.000000 1.000000 1.000000
+vn 0.482587 -0.489842 0.726061
+v -162.729858 -139.095703 38.832581 1.000000 1.000000 1.000000
+vn -0.001063 -0.272511 0.962152
+v -161.885284 -137.881775 39.218578 1.000000 1.000000 1.000000
+vn 0.091252 -0.252421 0.963305
+v -162.921707 -138.928268 38.987179 1.000000 1.000000 1.000000
+vn 0.813511 -0.480155 0.328102
+v -162.915268 -139.832443 38.368378 1.000000 1.000000 1.000000
+vn 0.750752 -0.486635 -0.446719
+v -162.557343 -139.247787 36.808380 1.000000 1.000000 1.000000
+vn 0.600577 -0.648705 -0.467428
+v -161.617477 -138.298965 37.039581 1.000000 1.000000 1.000000
+vn 0.355268 -0.737333 -0.574565
+v -160.535995 -137.694794 37.258377 1.000000 1.000000 1.000000
+vn 0.431111 -0.583701 -0.688067
+v -161.241531 -137.749207 36.807178 1.000000 1.000000 1.000000
+vn 0.150286 -0.713807 -0.684027
+v -159.292297 -137.160385 37.154778 1.000000 1.000000 1.000000
+vn -0.033863 -0.658256 -0.752032
+v -157.948166 -137.277588 37.385578 1.000000 1.000000 1.000000
+vn -0.251503 -0.705998 -0.662052
+v -156.687714 -137.795258 37.616379 1.000000 1.000000 1.000000
+vn -0.153382 -0.858372 -0.489562
+v -157.999664 -137.528748 37.720379 1.000000 1.000000 1.000000
+vn -0.412044 -0.544224 -0.730780
+v -155.599808 -138.681290 37.848976 1.000000 1.000000 1.000000
+vn -0.607431 -0.417629 -0.675732
+v -154.829895 -139.776627 38.066376 1.000000 1.000000 1.000000
+vn -0.633440 -0.252906 -0.731295
+v -154.330338 -141.146851 38.298779 1.000000 1.000000 1.000000
+vn -0.674765 -0.088918 -0.732657
+v -154.204178 -142.604980 38.530178 1.000000 1.000000 1.000000
+vn -0.853667 -0.236569 -0.463992
+v -154.562088 -141.206848 38.633579 1.000000 1.000000 1.000000
+vn -0.886347 -0.039252 -0.461354
+v -154.442352 -142.592407 38.864979 1.000000 1.000000 1.000000
+vn -0.974777 0.003393 -0.223156
+v -154.580124 -142.585449 39.262379 1.000000 1.000000 1.000000
+vn -0.361689 0.095048 0.927441
+v -163.107101 -138.766403 38.983379 1.000000 1.000000 1.000000
+vn -0.329701 -0.060043 0.942174
+v -164.107468 -140.912430 38.636177 1.000000 1.000000 1.000000
+vn -0.318237 -0.185211 0.929743
+v -164.206604 -143.305435 38.290176 1.000000 1.000000 1.000000
+vn -0.687308 0.064992 0.723452
+v -164.323776 -140.851044 38.495579 1.000000 1.000000 1.000000
+vn -0.639128 -0.110051 0.761186
+v -164.500153 -142.512878 38.264778 1.000000 1.000000 1.000000
+vn -0.841049 0.258349 0.475282
+v -164.294159 -139.958023 38.273178 1.000000 1.000000 1.000000
+vn -0.882912 0.154061 0.443545
+v -164.552933 -140.785461 38.157978 1.000000 1.000000 1.000000
+vn -0.880427 0.032032 0.473098
+v -164.701004 -141.639404 38.043179 1.000000 1.000000 1.000000
+vn -0.965631 0.214132 0.147321
+v -164.699722 -140.743591 37.689579 1.000000 1.000000 1.000000
+vn -0.985335 0.086278 0.147209
+v -164.851639 -141.621262 37.574978 1.000000 1.000000 1.000000
+vn -0.892994 -0.078884 0.443101
+v -164.737061 -142.519852 37.926979 1.000000 1.000000 1.000000
+vn -0.988155 -0.042512 0.147455
+v -164.888977 -142.524033 37.458778 1.000000 1.000000 1.000000
+vn -0.858243 -0.195578 0.474518
+v -164.659805 -143.387756 37.811981 1.000000 1.000000 1.000000
+vn -0.974215 -0.170653 0.147591
+v -164.809158 -143.415649 37.343578 1.000000 1.000000 1.000000
+vn -0.839836 -0.308383 0.446739
+v -164.469254 -144.241699 37.695976 1.000000 1.000000 1.000000
+vn -0.582834 -0.283058 0.761698
+v -164.243942 -144.164948 38.033779 1.000000 1.000000 1.000000
+vn -0.951466 -0.257002 -0.169299
+v -164.601868 -144.287735 36.412178 1.000000 1.000000 1.000000
+vn -0.943159 -0.297046 0.149045
+v -164.614746 -144.291931 37.227779 1.000000 1.000000 1.000000
+vn -0.977162 -0.129573 -0.168420
+v -164.796280 -143.412872 36.528179 1.000000 1.000000 1.000000
+vn -0.896078 -0.417901 0.149678
+v -164.304459 -145.134705 37.111179 1.000000 1.000000 1.000000
+vn -0.778163 -0.431520 0.456348
+v -164.167984 -145.062149 37.579376 1.000000 1.000000 1.000000
+vn -0.899345 -0.384311 -0.208529
+v -164.292877 -145.127731 36.295578 1.000000 1.000000 1.000000
+vn -0.832649 -0.528613 0.165120
+v -163.943954 -145.826797 37.008980 1.000000 1.000000 1.000000
+vn -0.661861 -0.590613 0.461645
+v -163.333694 -146.435165 37.361977 1.000000 1.000000 1.000000
+vn -0.543467 -0.360527 0.758066
+v -163.954269 -144.950531 37.917179 1.000000 1.000000 1.000000
+vn -0.453829 -0.484257 0.748020
+v -163.154739 -146.267731 37.699776 1.000000 1.000000 1.000000
+vn -0.788615 -0.590475 -0.171538
+v -163.437988 -146.534225 36.078178 1.000000 1.000000 1.000000
+vn -0.757752 -0.634522 0.152292
+v -163.446991 -146.544006 36.893776 1.000000 1.000000 1.000000
+vn -0.546139 -0.679402 0.490047
+v -162.758194 -147.057480 37.245979 1.000000 1.000000 1.000000
+vn -0.253612 -0.574241 0.778414
+v -161.977982 -147.370026 37.467178 1.000000 1.000000 1.000000
+vn -0.206941 -0.283208 0.936466
+v -163.430267 -145.466797 37.955578 1.000000 1.000000 1.000000
+vn -0.119391 -0.336357 0.934136
+v -162.456924 -146.680740 37.724178 1.000000 1.000000 1.000000
+vn -0.660001 -0.735333 0.153894
+v -162.857330 -147.181671 36.777580 1.000000 1.000000 1.000000
+vn -0.453025 -0.761705 0.463222
+v -162.105438 -147.586319 37.129379 1.000000 1.000000 1.000000
+vn -0.689375 -0.702975 -0.174896
+v -162.848312 -147.171890 35.961979 1.000000 1.000000 1.000000
+vn -0.547013 -0.822604 0.155237
+v -162.187836 -147.724457 36.661179 1.000000 1.000000 1.000000
+vn -0.324974 -0.805398 0.495707
+v -161.398605 -148.006302 37.013977 1.000000 1.000000 1.000000
+vn -0.459567 -0.869838 -0.179389
+v -161.456543 -148.143051 35.730179 1.000000 1.000000 1.000000
+vn -0.420346 -0.893733 0.156688
+v -161.461700 -148.155609 36.545776 1.000000 1.000000 1.000000
+vn -0.581748 -0.793891 -0.176934
+v -162.180115 -147.711899 35.845581 1.000000 1.000000 1.000000
+vn -0.721440 -0.495466 -0.483774
+v -163.337555 -146.439346 35.685181 1.000000 1.000000 1.000000
+vn -0.651451 -0.605137 -0.457626
+v -162.762054 -147.063065 35.569000 1.000000 1.000000 1.000000
+vn -0.558001 -0.690048 -0.460943
+v -162.108017 -147.591904 35.452599 1.000000 1.000000 1.000000
+vn -0.546110 -0.413145 -0.728749
+v -162.606262 -146.867722 35.224396 1.000000 1.000000 1.000000
+vn -0.814280 -0.403239 -0.417549
+v -163.821640 -145.741684 35.800377 1.000000 1.000000 1.000000
+vn -0.642990 -0.249087 -0.724238
+v -163.622086 -145.602142 35.455799 1.000000 1.000000 1.000000
+vn -0.866671 -0.208087 -0.453412
+v -164.475693 -144.244492 36.019180 1.000000 1.000000 1.000000
+vn -0.625730 -0.107224 -0.772635
+v -164.249084 -144.166351 35.674576 1.000000 1.000000 1.000000
+vn -0.892562 -0.079286 -0.443900
+v -164.666245 -143.389145 36.134979 1.000000 1.000000 1.000000
+vn -0.878823 0.040902 -0.475393
+v -164.742203 -142.519852 36.250179 1.000000 1.000000 1.000000
+vn -0.881605 0.152578 -0.446646
+v -164.706146 -141.639404 36.366379 1.000000 1.000000 1.000000
+vn -0.985422 -0.002082 -0.170115
+v -164.876099 -142.524033 36.643181 1.000000 1.000000 1.000000
+vn -0.977353 0.126213 -0.169857
+v -164.838760 -141.622665 36.759377 1.000000 1.000000 1.000000
+vn -0.952442 0.253328 -0.169347
+v -164.686844 -140.747787 36.874176 1.000000 1.000000 1.000000
+vn -0.422905 -0.450183 -0.786439
+v -161.980545 -147.375626 35.107998 1.000000 1.000000 1.000000
+vn -0.325263 -0.586859 -0.741485
+v -160.577194 -148.074677 34.877396 1.000000 1.000000 1.000000
+vn -0.447414 -0.745484 -0.494039
+v -161.399902 -148.011902 35.337196 1.000000 1.000000 1.000000
+vn -0.333423 -0.818728 -0.467454
+v -160.645432 -148.321655 35.221798 1.000000 1.000000 1.000000
+vn -0.325840 -0.928297 -0.179143
+v -160.682770 -148.458405 35.614979 1.000000 1.000000 1.000000
+vn -0.187730 -0.580009 -0.792683
+v -159.826599 -148.256073 34.762596 1.000000 1.000000 1.000000
+vn -0.206556 -0.857748 -0.470748
+v -159.861359 -148.510025 35.107201 1.000000 1.000000 1.000000
+vn -0.036535 -0.663978 -0.746859
+v -158.277756 -148.271423 34.531197 1.000000 1.000000 1.000000
+vn -0.124803 -0.284510 -0.950515
+v -158.309937 -148.006302 34.380196 1.000000 1.000000 1.000000
+vn -0.078226 -0.862347 -0.500238
+v -159.050247 -148.579788 34.990997 1.000000 1.000000 1.000000
+vn -0.182235 -0.966433 -0.181103
+v -159.881958 -148.652359 35.500198 1.000000 1.000000 1.000000
+vn -0.034648 -0.982794 -0.181427
+v -159.051544 -148.723511 35.383999 1.000000 1.000000 1.000000
+vn -0.136575 -0.977981 0.157796
+v -159.883240 -148.666306 36.315781 1.000000 1.000000 1.000000
+vn 0.012261 -0.987280 0.158518
+v -159.051544 -148.737457 36.199577 1.000000 1.000000 1.000000
+vn -0.282843 -0.946155 0.157452
+v -160.686630 -148.472351 36.430378 1.000000 1.000000 1.000000
+vn 0.114875 -0.976481 -0.182453
+v -158.228836 -148.669083 35.268997 1.000000 1.000000 1.000000
+vn 0.060269 -0.879547 -0.471980
+v -158.245575 -148.525375 34.875801 1.000000 1.000000 1.000000
+vn 0.262640 -0.947636 -0.181674
+v -157.415146 -148.487701 35.153000 1.000000 1.000000 1.000000
+vn 0.162050 -0.974052 0.157993
+v -158.226257 -148.683044 36.084381 1.000000 1.000000 1.000000
+vn 0.057666 -0.880961 0.469662
+v -159.050247 -148.572815 36.667778 1.000000 1.000000 1.000000
+vn 0.191826 -0.845652 0.498072
+v -158.246857 -148.519791 36.552780 1.000000 1.000000 1.000000
+vn 0.308733 -0.938097 0.157029
+v -157.412567 -148.500259 35.968578 1.000000 1.000000 1.000000
+vn 0.320579 -0.824842 0.465688
+v -157.452484 -148.342590 36.436779 1.000000 1.000000 1.000000
+vn 0.100057 -0.617660 0.780054
+v -159.048965 -148.316071 37.005577 1.000000 1.000000 1.000000
+vn 0.292307 -0.563214 0.772882
+v -157.516861 -148.095612 36.774578 1.000000 1.000000 1.000000
+vn -0.069638 -0.864050 0.498566
+v -159.860077 -148.504440 36.783981 1.000000 1.000000 1.000000
+vn -0.097474 -0.656573 0.747937
+v -160.575912 -148.069092 37.236378 1.000000 1.000000 1.000000
+vn 0.050522 -0.313175 0.948351
+v -160.511536 -147.836075 37.376976 1.000000 1.000000 1.000000
+vn 0.379905 -0.522043 0.763638
+v -156.781708 -147.808167 36.657978 1.000000 1.000000 1.000000
+vn 0.453802 -0.757677 0.469030
+v -156.686432 -148.042587 36.320179 1.000000 1.000000 1.000000
+vn 0.508469 -0.433245 0.744149
+v -155.540573 -146.986328 36.440578 1.000000 1.000000 1.000000
+vn 0.617922 -0.634444 0.464385
+v -155.391220 -147.185852 36.102779 1.000000 1.000000 1.000000
+vn 0.706147 -0.518235 0.482482
+v -154.797699 -146.584457 35.986778 1.000000 1.000000 1.000000
+vn 0.559801 -0.811218 0.168964
+v -155.973175 -147.827713 35.749779 1.000000 1.000000 1.000000
+vn 0.666857 -0.729286 0.153117
+v -155.295959 -147.314224 35.634579 1.000000 1.000000 1.000000
+vn 0.763721 -0.627616 0.151092
+v -154.686981 -146.696091 35.518398 1.000000 1.000000 1.000000
+vn 0.783238 -0.430301 0.448753
+v -154.289139 -145.896561 35.870178 1.000000 1.000000 1.000000
+vn 0.843128 -0.516366 0.150003
+v -154.164246 -145.990051 35.402000 1.000000 1.000000 1.000000
+vn 0.622484 -0.762934 -0.174487
+v -155.303680 -147.303055 34.819000 1.000000 1.000000 1.000000
+vn 0.732587 -0.657710 -0.175311
+v -154.695984 -146.686325 34.702797 1.000000 1.000000 1.000000
+vn 0.405598 -0.887493 -0.218739
+v -156.629776 -148.180725 35.036400 1.000000 1.000000 1.000000
+vn 0.422502 -0.796177 -0.433122
+v -156.047852 -147.692352 34.541199 1.000000 1.000000 1.000000
+vn 0.522975 -0.695575 -0.492618
+v -155.387360 -147.191437 34.425999 1.000000 1.000000 1.000000
+vn 0.206295 -0.853213 -0.479030
+v -157.451187 -148.348160 34.759998 1.000000 1.000000 1.000000
+vn 0.440773 -0.883863 0.156539
+v -156.624634 -148.193283 35.851978 1.000000 1.000000 1.000000
+vn 0.101331 -0.605474 -0.789388
+v -157.515579 -148.101196 34.415398 1.000000 1.000000 1.000000
+vn 0.253716 -0.619236 -0.743085
+v -156.170151 -147.471893 34.196598 1.000000 1.000000 1.000000
+vn 0.017167 -0.306986 -0.951559
+v -156.297623 -147.243057 34.045601 1.000000 1.000000 1.000000
+vn 0.432210 -0.522812 -0.734753
+v -154.967636 -146.414230 33.965199 1.000000 1.000000 1.000000
+vn 0.103196 -0.280118 -0.954403
+v -155.147888 -146.232849 33.814198 1.000000 1.000000 1.000000
+vn 0.470378 -0.401751 -0.785710
+v -154.478409 -145.752838 33.848801 1.000000 1.000000 1.000000
+vn -0.191865 -0.174816 -0.965726
+v -154.003311 -141.823578 33.126198 1.000000 1.000000 1.000000
+vn -0.139200 -0.237994 -0.961240
+v -154.611008 -139.715225 32.791397 1.000000 1.000000 1.000000
+vn -0.056561 -0.265825 -0.962361
+v -155.463318 -138.494308 32.560196 1.000000 1.000000 1.000000
+vn 0.766737 -0.424981 -0.481150
+v -153.871994 -145.147278 34.077999 1.000000 1.000000 1.000000
+vn 0.715281 -0.530163 -0.455303
+v -154.283997 -145.899353 34.193398 1.000000 1.000000 1.000000
+vn 0.633624 -0.623051 -0.458615
+v -154.793839 -146.588654 34.309799 1.000000 1.000000 1.000000
+vn 0.817049 -0.549730 -0.173863
+v -154.174561 -145.981674 34.586399 1.000000 1.000000 1.000000
+vn -0.208886 -0.858604 0.468151
+v -160.642868 -148.314682 36.898781 1.000000 1.000000 1.000000
+vn 0.595383 -0.802768 0.032888
+v -161.522217 -138.477585 32.739998 1.000000 1.000000 1.000000
+vn 0.400641 -0.916210 0.006784
+v -160.496078 -137.898514 32.957397 1.000000 1.000000 1.000000
+vn 0.205808 -0.923687 0.323181
+v -159.933456 -137.525955 33.898201 1.000000 1.000000 1.000000
+vn 0.503637 -0.829130 -0.242679
+v -161.018814 -138.085480 32.400398 1.000000 1.000000 1.000000
+vn 0.307085 -0.833673 0.459008
+v -161.076736 -137.964096 33.679398 1.000000 1.000000 1.000000
+vn 0.719194 -0.694790 0.005085
+v -162.002441 -138.903152 32.623798 1.000000 1.000000 1.000000
+vn 0.696208 -0.681233 -0.226311
+v -162.038498 -138.862686 32.168999 1.000000 1.000000 1.000000
+vn -0.029105 -0.888134 0.458661
+v -159.296158 -137.432480 34.014198 1.000000 1.000000 1.000000
+vn -0.080335 -0.674517 0.733875
+v -159.310318 -137.177124 34.361801 1.000000 1.000000 1.000000
+vn 0.482965 -0.768410 0.419871
+v -161.623932 -138.321304 33.564400 1.000000 1.000000 1.000000
+vn 0.176696 -0.646368 0.742285
+v -161.183609 -137.736649 34.027199 1.000000 1.000000 1.000000
+vn 0.816565 -0.577170 0.009851
+v -162.423447 -139.398499 32.507401 1.000000 1.000000 1.000000
+vn 0.573403 -0.688294 0.444366
+v -162.124756 -138.763611 33.448196 1.000000 1.000000 1.000000
+vn 0.408425 -0.549052 0.729199
+v -162.285690 -138.576645 33.795799 1.000000 1.000000 1.000000
+vn -0.147927 -0.224985 0.963068
+v -159.327057 -136.910614 34.516399 1.000000 1.000000 1.000000
+vn -0.041185 -0.269543 0.962107
+v -161.295609 -137.498047 34.181599 1.000000 1.000000 1.000000
+vn -0.231868 -0.148623 0.961326
+v -157.238754 -137.245499 34.862396 1.000000 1.000000 1.000000
+vn -0.370526 -0.579789 0.725642
+v -157.325027 -137.496658 34.707798 1.000000 1.000000 1.000000
+vn -0.573197 -0.390494 0.720389
+v -155.629410 -138.674316 35.055000 1.000000 1.000000 1.000000
+vn -0.671604 -0.179358 0.718874
+v -154.815720 -139.839417 35.286400 1.000000 1.000000 1.000000
+vn -0.790584 -0.457779 0.406712
+v -155.370621 -139.381744 34.823601 1.000000 1.000000 1.000000
+vn -0.715594 -0.545027 0.436888
+v -155.795502 -138.855713 34.707397 1.000000 1.000000 1.000000
+vn -0.613928 -0.714185 0.336202
+v -156.286026 -138.399445 34.590797 1.000000 1.000000 1.000000
+vn -0.558595 -0.747052 0.360396
+v -156.825485 -138.024094 34.475601 1.000000 1.000000 1.000000
+vn -0.704387 0.049183 0.708110
+v -154.237640 -141.848709 35.620979 1.000000 1.000000 1.000000
+vn -0.941835 0.104546 0.319401
+v -154.453949 -142.567307 35.388397 1.000000 1.000000 1.000000
+vn -0.903277 -0.003899 0.429040
+v -154.471970 -141.873825 35.273399 1.000000 1.000000 1.000000
+vn -0.930781 -0.208842 0.300053
+v -154.580124 -141.185913 35.157398 1.000000 1.000000 1.000000
+vn -0.849442 -0.294403 0.437922
+v -155.022995 -139.963608 34.938599 1.000000 1.000000 1.000000
+vn -0.912972 0.208986 0.350439
+v -154.527328 -143.260773 35.504601 1.000000 1.000000 1.000000
+vn -0.998590 0.018241 0.049843
+v -154.631607 -142.558929 34.564198 1.000000 1.000000 1.000000
+vn -0.976104 -0.217145 -0.008359
+v -154.751343 -141.231964 34.333199 1.000000 1.000000 1.000000
+vn -0.924912 -0.380125 0.006553
+v -154.941895 -140.590118 34.216599 1.000000 1.000000 1.000000
+vn -0.911699 -0.151123 -0.382055
+v -154.457809 -141.872421 33.596798 1.000000 1.000000 1.000000
+vn -0.905118 0.074023 -0.418667
+v -154.514450 -143.263580 33.827999 1.000000 1.000000 1.000000
+vn -0.826790 -0.561579 0.032363
+v -155.512253 -139.497559 33.999199 1.000000 1.000000 1.000000
+vn -0.847880 -0.475264 -0.234997
+v -155.132431 -140.029190 33.659599 1.000000 1.000000 1.000000
+vn -0.727243 -0.686363 0.004968
+v -155.920380 -138.991058 33.882999 1.000000 1.000000 1.000000
+vn -0.712999 -0.663792 -0.225860
+v -155.883041 -138.951981 33.428200 1.000000 1.000000 1.000000
+vn -0.748062 -0.478834 -0.459479
+v -155.010132 -139.956635 33.262001 1.000000 1.000000 1.000000
+vn -0.797051 -0.240870 -0.553798
+v -154.567245 -141.183121 33.480797 1.000000 1.000000 1.000000
+vn -0.611176 -0.791443 0.009023
+v -156.391602 -138.552917 33.766598 1.000000 1.000000 1.000000
+vn -0.473013 -0.761537 -0.443080
+v -156.277023 -138.386871 32.914200 1.000000 1.000000 1.000000
+vn -0.609584 -0.650127 -0.453589
+v -155.785202 -138.845947 33.030800 1.000000 1.000000 1.000000
+vn -0.389915 -0.919479 0.050255
+v -157.469223 -137.915253 33.535797 1.000000 1.000000 1.000000
+vn -0.402041 -0.812055 0.423001
+v -157.407425 -137.735260 34.360199 1.000000 1.000000 1.000000
+vn -0.059723 -0.996867 0.051850
+v -158.669144 -137.629211 33.305000 1.000000 1.000000 1.000000
+vn -0.354988 -0.903776 -0.239108
+v -157.451187 -137.863632 33.081001 1.000000 1.000000 1.000000
+vn -0.228440 -0.928434 -0.292960
+v -158.044724 -137.672470 32.966400 1.000000 1.000000 1.000000
+vn -0.271691 -0.888460 0.369896
+v -158.017685 -137.539902 34.245399 1.000000 1.000000 1.000000
+vn -0.155473 -0.925668 0.344915
+v -158.656281 -137.438049 34.129196 1.000000 1.000000 1.000000
+vn 0.213473 -0.976915 -0.008144
+v -159.897415 -137.714325 33.073997 1.000000 1.000000 1.000000
+vn 0.142616 -0.900513 -0.410776
+v -159.296158 -137.418518 32.337601 1.000000 1.000000 1.000000
+vn -0.114790 -0.887776 -0.445731
+v -158.015121 -137.525955 32.568798 1.000000 1.000000 1.000000
+vn 0.342834 -0.634840 -0.692418
+v -160.641571 -137.461761 31.770399 1.000000 1.000000 1.000000
+vn 0.244535 -0.778720 -0.577753
+v -159.936035 -137.512009 32.221596 1.000000 1.000000 1.000000
+vn 0.043977 -0.726229 -0.686045
+v -158.636963 -137.165955 32.117996 1.000000 1.000000 1.000000
+vn 0.502940 -0.723346 -0.473099
+v -161.081894 -137.950134 32.002800 1.000000 1.000000 1.000000
+vn 0.677364 -0.581039 -0.451190
+v -162.133759 -138.752457 31.771599 1.000000 1.000000 1.000000
+vn -0.351854 -0.665029 -0.658738
+v -156.135391 -138.180359 32.579597 1.000000 1.000000 1.000000
+vn -0.130582 -0.646906 -0.751306
+v -157.318588 -137.479904 32.348801 1.000000 1.000000 1.000000
+vn -0.276742 -0.827257 -0.488936
+v -157.402267 -137.721313 32.683598 1.000000 1.000000 1.000000
+vn -0.486164 -0.484964 -0.726949
+v -155.169785 -139.217102 32.812199 1.000000 1.000000 1.000000
+vn -0.659804 -0.330526 -0.674842
+v -154.545349 -140.417099 33.029598 1.000000 1.000000 1.000000
+vn -0.752976 -0.060786 -0.655235
+v -154.202881 -142.578461 33.377197 1.000000 1.000000 1.000000
+vn -0.679421 0.094878 -0.727589
+v -154.447495 -144.015656 33.607998 1.000000 1.000000 1.000000
+vn -0.947470 0.166902 -0.272846
+v -154.650925 -143.237061 34.225601 1.000000 1.000000 1.000000
+vn 0.053250 -0.261662 0.963689
+v -162.454346 -138.382690 33.950401 1.000000 1.000000 1.000000
+vn -0.335674 -0.018126 0.941804
+v -163.878311 -140.171509 33.599396 1.000000 1.000000 1.000000
+vn 0.155113 -0.223499 0.962283
+v -163.658142 -140.270584 33.603199 1.000000 1.000000 1.000000
+vn -0.672431 0.150846 0.724625
+v -164.085587 -140.079422 33.458801 1.000000 1.000000 1.000000
+vn -0.648574 -0.028726 0.760610
+v -164.467972 -141.700790 33.227997 1.000000 1.000000 1.000000
+vn -0.340482 -0.143279 0.929270
+v -164.276138 -142.529633 33.253399 1.000000 1.000000 1.000000
+vn -0.856267 0.264151 0.443882
+v -164.304459 -139.981735 33.121201 1.000000 1.000000 1.000000
+vn -0.869460 0.142391 0.473038
+v -164.556808 -140.806381 33.006401 1.000000 1.000000 1.000000
+vn -0.966371 0.210264 0.148039
+v -164.703583 -140.764526 32.538200 1.000000 1.000000 1.000000
+vn -0.896032 0.035016 0.442606
+v -164.703583 -141.671494 32.890198 1.000000 1.000000 1.000000
+vn -0.985596 0.083174 0.147251
+v -164.854218 -141.653351 32.421997 1.000000 1.000000 1.000000
+vn -0.876508 -0.084958 0.473830
+v -164.737061 -142.543579 32.775200 1.000000 1.000000 1.000000
+vn -0.988013 -0.045642 0.147471
+v -164.888977 -142.549164 32.306801 1.000000 1.000000 1.000000
+vn -0.873348 -0.199715 0.444272
+v -164.655945 -143.418457 32.659199 1.000000 1.000000 1.000000
+vn -0.616037 -0.206650 0.760128
+v -164.422897 -143.373795 32.996998 1.000000 1.000000 1.000000
+vn -0.973308 -0.175801 0.147532
+v -164.805283 -143.446365 32.190998 1.000000 1.000000 1.000000
+vn -0.828988 -0.327781 0.453144
+v -164.458954 -144.275192 32.542599 1.000000 1.000000 1.000000
+vn -0.588231 -0.288014 0.755667
+v -164.233643 -144.195663 32.880398 1.000000 1.000000 1.000000
+vn -0.517641 -0.420401 0.745192
+v -163.606644 -145.618896 32.662998 1.000000 1.000000 1.000000
+vn -0.245333 -0.253934 0.935590
+v -163.779160 -144.784485 32.918800 1.000000 1.000000 1.000000
+vn -0.166483 -0.316989 0.933703
+v -162.966766 -146.130981 32.687401 1.000000 1.000000 1.000000
+vn -0.333725 -0.534430 0.776539
+v -162.579239 -146.884460 32.430397 1.000000 1.000000 1.000000
+vn 0.003788 -0.315868 0.948796
+v -161.186172 -147.562592 32.340199 1.000000 1.000000 1.000000
+vn -0.192785 -0.636720 0.746606
+v -161.278870 -147.784454 32.199600 1.000000 1.000000 1.000000
+vn 0.007718 -0.624960 0.780619
+v -159.796982 -148.254684 31.968798 1.000000 1.000000 1.000000
+vn 0.144150 -0.326483 0.934147
+v -159.025787 -148.074677 31.994198 1.000000 1.000000 1.000000
+vn -0.438131 -0.751782 0.492813
+v -162.084839 -147.600266 31.977198 1.000000 1.000000 1.000000
+vn -0.331942 -0.820388 0.465594
+v -161.376724 -148.017471 31.861998 1.000000 1.000000 1.000000
+vn -0.196295 -0.844998 0.497440
+v -160.624832 -148.320251 31.747198 1.000000 1.000000 1.000000
+vn -0.556327 -0.692440 0.459377
+v -162.733734 -147.079803 32.092598 1.000000 1.000000 1.000000
+vn -0.656099 -0.738870 0.153639
+v -162.831573 -147.203995 31.624399 1.000000 1.000000 1.000000
+vn -0.543952 -0.824572 0.155555
+v -162.167236 -147.738403 31.508999 1.000000 1.000000 1.000000
+vn -0.416571 -0.895520 0.156567
+v -161.439804 -148.166779 31.393599 1.000000 1.000000 1.000000
+vn -0.278177 -0.947573 0.157237
+v -160.667328 -148.477936 31.278999 1.000000 1.000000 1.000000
+vn -0.072812 -0.880273 0.468847
+v -159.830460 -148.508621 31.630999 1.000000 1.000000 1.000000
+vn -0.455494 -0.872114 -0.178724
+v -161.434662 -148.154221 30.578199 1.000000 1.000000 1.000000
+vn -0.320923 -0.929767 -0.180393
+v -160.663467 -148.463974 30.463398 1.000000 1.000000 1.000000
+vn -0.578510 -0.796320 -0.176638
+v -162.159515 -147.727249 30.693398 1.000000 1.000000 1.000000
+vn -0.549463 -0.676575 -0.490242
+v -162.088699 -147.605850 30.300398 1.000000 1.000000 1.000000
+vn -0.447035 -0.763913 -0.465400
+v -161.379303 -148.023056 30.184998 1.000000 1.000000 1.000000
+vn -0.178962 -0.967032 -0.181169
+v -159.851059 -148.656540 30.347198 1.000000 1.000000 1.000000
+vn -0.329629 -0.820021 -0.467878
+v -160.626129 -148.325836 30.070398 1.000000 1.000000 1.000000
+vn -0.406692 -0.537711 -0.738559
+v -161.281448 -147.788635 29.840599 1.000000 1.000000 1.000000
+vn -0.648519 -0.607594 -0.458534
+v -162.737595 -147.084000 30.415798 1.000000 1.000000 1.000000
+vn -0.482356 -0.389844 -0.784445
+v -162.583099 -146.888657 30.071199 1.000000 1.000000 1.000000
+vn -0.685778 -0.706455 -0.175015
+v -162.823853 -147.194214 30.808798 1.000000 1.000000 1.000000
+vn -0.728434 -0.513100 -0.453996
+v -163.318237 -146.464462 30.532198 1.000000 1.000000 1.000000
+vn -0.598310 -0.338541 -0.726234
+v -163.139282 -146.294235 30.187599 1.000000 1.000000 1.000000
+vn -0.671378 -0.164663 -0.722591
+v -163.987732 -144.889130 30.418999 1.000000 1.000000 1.000000
+vn -0.782334 -0.397294 -0.479699
+v -163.810059 -145.762604 30.648399 1.000000 1.000000 1.000000
+vn -0.778623 -0.603236 -0.172781
+v -163.417389 -146.559357 30.925198 1.000000 1.000000 1.000000
+vn -0.753895 -0.639141 0.152126
+v -163.427673 -146.567719 31.740799 1.000000 1.000000 1.000000
+vn -0.835758 -0.527916 0.151044
+v -163.932373 -145.849121 31.856998 1.000000 1.000000 1.000000
+vn -0.860210 -0.480865 -0.169728
+v -163.920792 -145.840759 31.041401 1.000000 1.000000 1.000000
+vn -0.861061 -0.295265 -0.413996
+v -164.201462 -144.999359 30.763599 1.000000 1.000000 1.000000
+vn -0.894832 -0.415104 0.164211
+v -164.334061 -145.066345 31.972198 1.000000 1.000000 1.000000
+vn -0.941426 -0.265449 -0.207975
+v -164.591553 -144.321228 31.258799 1.000000 1.000000 1.000000
+vn -0.736131 -0.497525 0.458890
+v -163.804916 -145.758423 32.325199 1.000000 1.000000 1.000000
+vn -0.635416 -0.599326 0.486883
+v -163.313095 -146.460281 32.209000 1.000000 1.000000 1.000000
+vn -0.942696 -0.298648 0.148776
+v -164.603149 -144.326813 32.074398 1.000000 1.000000 1.000000
+vn -0.976231 -0.134709 -0.169785
+v -164.792419 -143.443573 31.375399 1.000000 1.000000 1.000000
+vn -0.985458 -0.005465 -0.169833
+v -164.876099 -142.549164 31.491398 1.000000 1.000000 1.000000
+vn -0.894779 0.032774 -0.445305
+v -164.742203 -142.544968 31.098198 1.000000 1.000000 1.000000
+vn -0.886747 -0.096439 -0.452083
+v -164.661087 -143.418457 30.982397 1.000000 1.000000 1.000000
+vn -0.977987 0.122834 -0.168681
+v -164.841339 -141.656143 31.606398 1.000000 1.000000 1.000000
+vn -0.866877 0.151113 -0.475067
+v -164.710007 -141.671494 31.213398 1.000000 1.000000 1.000000
+vn -0.953642 0.248634 -0.169555
+v -164.691986 -140.768707 31.722601 1.000000 1.000000 1.000000
+vn -0.635858 -0.027697 -0.771309
+v -164.428055 -143.375198 30.637798 1.000000 1.000000 1.000000
+vn -0.270791 -0.549061 -0.790699
+v -160.559174 -148.080261 29.725798 1.000000 1.000000 1.000000
+vn -0.134160 -0.652540 -0.745784
+v -159.027069 -148.323059 29.494398 1.000000 1.000000 1.000000
+vn -0.204331 -0.842285 -0.498803
+v -159.831741 -148.514206 29.954199 1.000000 1.000000 1.000000
+vn -0.070791 -0.878632 -0.472223
+v -159.028351 -148.579788 29.838999 1.000000 1.000000 1.000000
+vn -0.030097 -0.982738 -0.182541
+v -159.028351 -148.724899 30.232199 1.000000 1.000000 1.000000
+vn 0.010842 -0.612807 -0.790158
+v -158.250717 -148.267242 29.378599 1.000000 1.000000 1.000000
+vn 0.078796 -0.873846 -0.479775
+v -158.218536 -148.522583 29.723198 1.000000 1.000000 1.000000
+vn 0.121129 -0.975883 -0.181603
+v -158.200516 -148.664902 30.116198 1.000000 1.000000 1.000000
+vn -0.132921 -0.978503 0.157686
+v -159.852341 -148.670486 31.162798 1.000000 1.000000 1.000000
+vn 0.016726 -0.987221 0.158475
+v -159.028351 -148.738861 31.047598 1.000000 1.000000 1.000000
+vn 0.065526 -0.864220 0.498829
+v -159.028351 -148.574219 31.515999 1.000000 1.000000 1.000000
+vn 0.167856 -0.973070 0.157985
+v -158.199219 -148.678864 30.931799 1.000000 1.000000 1.000000
+vn 0.196159 -0.861307 0.468692
+v -158.219818 -148.515610 31.399998 1.000000 1.000000 1.000000
+vn 0.206819 -0.597460 0.774770
+v -158.252014 -148.261658 31.737799 1.000000 1.000000 1.000000
+vn 0.340073 -0.813229 0.472239
+v -157.421585 -148.332809 31.283398 1.000000 1.000000 1.000000
+vn 0.300048 -0.567736 0.766581
+v -157.487244 -148.085846 31.621199 1.000000 1.000000 1.000000
+vn 0.309116 -0.938114 0.156174
+v -157.380386 -148.490494 30.815199 1.000000 1.000000 1.000000
+vn 0.439125 -0.882353 0.169183
+v -156.689011 -148.223969 30.712999 1.000000 1.000000 1.000000
+vn 0.523233 -0.712264 0.467874
+v -156.031113 -147.674225 31.065998 1.000000 1.000000 1.000000
+vn 0.442346 -0.496229 0.747052
+v -156.154709 -147.455154 31.403799 1.000000 1.000000 1.000000
+vn 0.628487 -0.607304 0.485990
+v -155.368057 -147.166321 30.949799 1.000000 1.000000 1.000000
+vn 0.559268 -0.319671 0.764872
+v -154.952194 -146.384933 31.171198 1.000000 1.000000 1.000000
+vn 0.558645 -0.814980 0.154023
+v -155.952560 -147.815140 30.597799 1.000000 1.000000 1.000000
+vn 0.671213 -0.725461 0.152248
+v -155.272781 -147.293289 30.481598 1.000000 1.000000 1.000000
+vn 0.718211 -0.528552 0.452555
+v -154.777100 -146.559357 30.833399 1.000000 1.000000 1.000000
+vn 0.508798 -0.842679 -0.176115
+v -155.960297 -147.802597 29.782198 1.000000 1.000000 1.000000
+vn 0.635487 -0.751549 -0.177005
+v -155.280502 -147.282135 29.665998 1.000000 1.000000 1.000000
+vn 0.766835 -0.623866 0.150850
+v -154.665085 -146.669571 30.365198 1.000000 1.000000 1.000000
+vn 0.418716 -0.761001 -0.495534
+v -156.028534 -147.679794 29.389198 1.000000 1.000000 1.000000
+vn 0.540694 -0.703110 -0.461830
+v -155.364182 -147.170502 29.272999 1.000000 1.000000 1.000000
+vn 0.735750 -0.654283 -0.174886
+v -154.675385 -146.659821 29.549599 1.000000 1.000000 1.000000
+vn 0.819104 -0.546930 -0.173023
+v -154.160385 -145.959351 29.434198 1.000000 1.000000 1.000000
+vn 0.844994 -0.513329 0.149929
+v -154.150101 -145.967728 30.249798 1.000000 1.000000 1.000000
+vn 0.773670 -0.415204 0.478581
+v -154.274979 -145.874237 30.717999 1.000000 1.000000 1.000000
+vn 0.636082 -0.620850 -0.458198
+v -154.773224 -146.563538 29.156399 1.000000 1.000000 1.000000
+vn 0.352812 -0.575314 -0.737928
+v -155.514832 -146.972366 28.928398 1.000000 1.000000 1.000000
+vn 0.409155 -0.459450 -0.788352
+v -154.947037 -146.389114 28.811998 1.000000 1.000000 1.000000
+vn 0.702560 -0.521166 -0.484557
+v -154.269821 -145.878418 29.041199 1.000000 1.000000 1.000000
+vn 0.559058 -0.389766 -0.731804
+v -154.072845 -145.009140 28.581198 1.000000 1.000000 1.000000
+vn 0.784681 -0.425419 -0.450882
+v -153.860413 -145.123550 28.925798 1.000000 1.000000 1.000000
+vn 0.061669 -0.291296 -0.954643
+v -155.670609 -146.765854 28.777399 1.000000 1.000000 1.000000
+vn 0.181264 -0.251890 -0.950629
+v -154.294296 -144.890518 28.430199 1.000000 1.000000 1.000000
+vn -0.028138 -0.307136 -0.951250
+v -156.936203 -147.596085 29.008799 1.000000 1.000000 1.000000
+vn 0.160678 -0.646878 -0.745474
+v -156.839645 -147.841660 29.159798 1.000000 1.000000 1.000000
+vn 0.303693 -0.847205 -0.435908
+v -156.745651 -148.078873 29.504198 1.000000 1.000000 1.000000
+vn 0.273509 -0.936549 -0.219245
+v -157.384247 -148.476547 29.999598 1.000000 1.000000 1.000000
+vn 0.743388 -0.582727 0.328333
+v -162.562500 -139.278503 33.331596 1.000000 1.000000 1.000000
+vn 0.771677 -0.529273 0.352682
+v -162.925568 -139.850571 33.216400 1.000000 1.000000 1.000000
+vn 0.894440 -0.391456 0.216192
+v -163.027283 -140.372437 42.539577 1.000000 1.000000 1.000000
+vn -0.234449 0.796509 -0.557322
+v -155.056473 -144.490067 16.326599 1.000000 1.000000 1.000000
+vn -0.359472 -0.563882 0.743516
+v -1.944058 159.645279 6.000000 1.000000 1.000000 1.000000
+vn -0.543791 -0.482723 0.686491
+v -6.943540 155.999268 6.000000 1.000000 1.000000 1.000000
+vn -0.442026 -0.578177 0.685801
+v -5.551734 154.701614 6.000000 1.000000 1.000000 1.000000
+vn -0.319962 -0.654239 0.685271
+v -3.958540 153.713715 6.000000 1.000000 1.000000 1.000000
+vn -0.512750 -0.432008 0.741928
+v -2.837080 160.432236 6.000000 1.000000 1.000000 1.000000
+vn -0.623434 -0.373316 0.686997
+v -8.083668 157.557861 6.000000 1.000000 1.000000 1.000000
+vn -0.616507 -0.267922 0.740363
+v -3.476198 161.470383 6.000000 1.000000 1.000000 1.000000
+vn -0.680235 -0.254288 0.687472
+v -8.930908 159.322952 6.000000 1.000000 1.000000 1.000000
+vn -0.714238 -0.129699 0.687781
+v -9.454616 161.230377 6.000000 1.000000 1.000000 1.000000
+vn -0.667449 -0.086903 0.739568
+v -3.804674 162.666183 6.000000 1.000000 1.000000 1.000000
+vn -0.725825 -0.002487 0.687875
+v -9.635908 163.210358 6.000000 1.000000 1.000000 1.000000
+vn -0.665724 0.099125 0.739585
+v -3.793280 163.913605 6.000000 1.000000 1.000000 1.000000
+vn -0.715114 0.124842 0.687770
+v -9.468174 165.191727 6.000000 1.000000 1.000000 1.000000
+vn -0.611265 0.279423 0.740458
+v -3.443058 165.102432 6.000000 1.000000 1.000000 1.000000
+vn -0.681946 0.249553 0.687512
+v -8.957532 167.101944 6.000000 1.000000 1.000000 1.000000
+vn -0.504034 0.441938 0.742052
+v -2.785104 166.126602 6.000000 1.000000 1.000000 1.000000
+vn -0.626108 0.368751 0.687031
+v -8.122408 168.874023 6.000000 1.000000 1.000000 1.000000
+vn -0.347923 0.571047 0.743542
+v -1.877894 166.894043 6.000000 1.000000 1.000000 1.000000
+vn -0.446369 0.574817 0.685814
+v -5.610082 171.751190 6.000000 1.000000 1.000000 1.000000
+vn -0.152914 0.649268 0.745029
+v -0.802052 167.339157 6.000000 1.000000 1.000000 1.000000
+vn -0.187951 0.704069 0.684807
+v -2.291162 173.410248 6.000000 1.000000 1.000000 1.000000
+vn 0.061012 0.663973 0.745264
+v 0.346860 167.420074 6.000000 1.000000 1.000000 1.000000
+vn -0.040277 0.727766 0.684642
+v -0.475094 173.700470 6.000000 1.000000 1.000000 1.000000
+vn -0.166659 -0.646079 0.744853
+v -0.876536 159.177841 6.000000 1.000000 1.000000 1.000000
+vn -0.182199 -0.705484 0.684906
+v -2.221548 153.070465 6.000000 1.000000 1.000000 1.000000
+vn -0.034722 -0.728047 0.684648
+v -0.403534 152.794189 6.000000 1.000000 1.000000 1.000000
+vn 0.046395 -0.665190 0.745231
+v 0.270668 159.071793 6.000000 1.000000 1.000000 1.000000
+vn 0.441800 0.502958 0.742864
+v 2.458084 166.496368 6.000000 1.000000 1.000000 1.000000
+vn 0.383341 0.618988 0.685495
+v 4.817148 172.331650 6.000000 1.000000 1.000000 1.000000
+vn 0.266934 0.612327 0.744178
+v 1.466736 167.129852 6.000000 1.000000 1.000000 1.000000
+vn 0.571272 0.352963 0.740989
+v 3.232800 165.572662 6.000000 1.000000 1.000000 1.000000
+vn 0.586505 0.429450 0.686720
+v 7.588154 169.748886 6.000000 1.000000 1.000000 1.000000
+vn 0.252684 0.683246 0.685074
+v 3.144480 173.150726 6.000000 1.000000 1.000000 1.000000
+vn 0.109264 0.720527 0.684764
+v 1.358884 173.612564 6.000000 1.000000 1.000000 1.000000
+vn 0.648519 0.178770 0.739908
+v 3.722068 164.443832 6.000000 1.000000 1.000000 1.000000
+vn 0.654718 0.314638 0.687275
+v 8.586364 168.078674 6.000000 1.000000 1.000000 1.000000
+vn 0.673176 -0.006180 0.739456
+v 3.882398 163.207565 6.000000 1.000000 1.000000 1.000000
+vn 0.722823 0.066277 0.687848
+v 9.629056 164.281967 6.000000 1.000000 1.000000 1.000000
+vn 0.700049 0.192510 0.687657
+v 9.274948 166.234055 6.000000 1.000000 1.000000 1.000000
+vn 0.701358 -0.187732 0.687644
+v 9.295136 160.337357 6.000000 1.000000 1.000000 1.000000
+vn 0.723257 -0.061313 0.687851
+v 9.635868 162.292221 6.000000 1.000000 1.000000 1.000000
+vn 0.645104 -0.190677 0.739921
+v 3.699550 161.975479 6.000000 1.000000 1.000000 1.000000
+vn 0.656863 -0.310019 0.687328
+v 8.619196 158.488541 6.000000 1.000000 1.000000 1.000000
+vn 0.564107 -0.363843 0.741217
+v 3.189772 160.856430 6.000000 1.000000 1.000000 1.000000
+vn 0.589602 -0.425195 0.686716
+v 7.632444 156.809952 6.000000 1.000000 1.000000 1.000000
+vn 0.499549 -0.528705 0.686237
+v 6.370572 155.365784 6.000000 1.000000 1.000000 1.000000
+vn 0.431868 -0.511711 0.742726
+v 2.398358 159.950867 6.000000 1.000000 1.000000 1.000000
+vn 0.388226 -0.615909 0.685519
+v 4.879180 154.204865 6.000000 1.000000 1.000000 1.000000
+vn 0.254070 -0.617345 0.744536
+v 1.395630 159.336914 6.000000 1.000000 1.000000 1.000000
+vn 0.258090 -0.681251 0.685045
+v 3.212162 153.371857 6.000000 1.000000 1.000000 1.000000
+vn 0.114803 -0.719682 0.684746
+v 1.429786 152.896042 6.000000 1.000000 1.000000 1.000000
+vn 0.495601 0.532489 0.686175
+v 6.316434 171.183289 6.000000 1.000000 1.000000 1.000000
+vn 0.700049 0.192510 -0.687657
+v 9.274948 166.234055 0.000000 1.000000 1.000000 1.000000
+vn 0.722823 0.066277 -0.687848
+v 9.629056 164.281967 0.000000 1.000000 1.000000 1.000000
+vn 0.654718 0.314638 -0.687275
+v 8.586364 168.078674 0.000000 1.000000 1.000000 1.000000
+vn 0.586505 0.429450 -0.686720
+v 7.588154 169.748886 0.000000 1.000000 1.000000 1.000000
+vn 0.495601 0.532489 -0.686175
+v 6.316434 171.183289 0.000000 1.000000 1.000000 1.000000
+vn 0.383341 0.618988 -0.685495
+v 4.817148 172.331650 0.000000 1.000000 1.000000 1.000000
+vn 0.252684 0.683246 -0.685074
+v 3.144480 173.150726 0.000000 1.000000 1.000000 1.000000
+vn 0.109264 0.720527 -0.684764
+v 1.358884 173.612564 0.000000 1.000000 1.000000 1.000000
+vn -0.040277 0.727766 -0.684642
+v -0.475094 173.700470 0.000000 1.000000 1.000000 1.000000
+vn -0.187951 0.704070 -0.684807
+v -2.291162 173.410248 0.000000 1.000000 1.000000 1.000000
+vn -0.325208 0.651536 -0.685376
+v -4.023700 172.751648 0.000000 1.000000 1.000000 1.000000
+vn -0.446369 0.574817 -0.685814
+v -5.610082 171.751190 0.000000 1.000000 1.000000 1.000000
+vn -0.325208 0.651536 0.685376
+v -4.023700 172.751648 6.000000 1.000000 1.000000 1.000000
+vn -0.547376 0.478648 -0.686495
+v -6.992966 170.442368 0.000000 1.000000 1.000000 1.000000
+vn -0.626108 0.368751 -0.687031
+v -8.122408 168.874023 0.000000 1.000000 1.000000 1.000000
+vn -0.547376 0.478648 0.686495
+v -6.992966 170.442368 6.000000 1.000000 1.000000 1.000000
+vn -0.681946 0.249553 -0.687512
+v -8.957532 167.101944 0.000000 1.000000 1.000000 1.000000
+vn -0.715114 0.124841 -0.687769
+v -9.468174 165.191727 0.000000 1.000000 1.000000 1.000000
+vn 0.723257 -0.061313 -0.687851
+v 9.635868 162.292221 0.000000 1.000000 1.000000 1.000000
+vn 0.701358 -0.187732 -0.687644
+v 9.295136 160.337357 0.000000 1.000000 1.000000 1.000000
+vn 0.656863 -0.310019 -0.687328
+v 8.619196 158.488541 0.000000 1.000000 1.000000 1.000000
+vn 0.589602 -0.425195 -0.686716
+v 7.632444 156.809952 0.000000 1.000000 1.000000 1.000000
+vn 0.499549 -0.528705 -0.686237
+v 6.370572 155.365784 0.000000 1.000000 1.000000 1.000000
+vn 0.388226 -0.615909 -0.685519
+v 4.879180 154.204865 0.000000 1.000000 1.000000 1.000000
+vn 0.258090 -0.681251 -0.685045
+v 3.212162 153.371857 0.000000 1.000000 1.000000 1.000000
+vn 0.114803 -0.719682 -0.684746
+v 1.429786 152.896042 0.000000 1.000000 1.000000 1.000000
+vn -0.034722 -0.728047 -0.684648
+v -0.403534 152.794189 0.000000 1.000000 1.000000 1.000000
+vn -0.182199 -0.705484 -0.684906
+v -2.221548 153.070465 0.000000 1.000000 1.000000 1.000000
+vn -0.319962 -0.654239 -0.685271
+v -3.958540 153.713715 0.000000 1.000000 1.000000 1.000000
+vn -0.442026 -0.578178 -0.685801
+v -5.551734 154.701614 0.000000 1.000000 1.000000 1.000000
+vn -0.543792 -0.482723 -0.686491
+v -6.943540 155.999268 0.000000 1.000000 1.000000 1.000000
+vn -0.623434 -0.373316 -0.686997
+v -8.083668 157.557861 0.000000 1.000000 1.000000 1.000000
+vn -0.680235 -0.254288 -0.687472
+v -8.930908 159.322952 0.000000 1.000000 1.000000 1.000000
+vn -0.714238 -0.129699 -0.687781
+v -9.454616 161.230377 0.000000 1.000000 1.000000 1.000000
+vn -0.725825 -0.002487 -0.687875
+v -9.635908 163.210358 0.000000 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v 0.020138 163.249435 0.000000 1.000000 1.000000 1.000000
+vn 0.705804 -0.208618 0.676993
+v 3.699550 161.975479 43.157181 1.000000 1.000000 1.000000
+vn 0.735598 -0.006753 0.677385
+v 3.882398 163.207565 43.157181 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v 0.020140 163.249435 43.157181 1.000000 1.000000 1.000000
+vn 0.619337 -0.399466 0.675906
+v 3.189772 160.856430 43.157181 1.000000 1.000000 1.000000
+vn 0.709516 0.195584 0.677004
+v 3.722068 164.443832 43.157181 1.000000 1.000000 1.000000
+vn 0.626822 0.387284 0.676096
+v 3.232800 165.572662 43.157181 1.000000 1.000000 1.000000
+vn 0.487206 0.554649 0.674533
+v 2.458084 166.496368 43.157181 1.000000 1.000000 1.000000
+vn 0.295409 0.677647 0.673445
+v 1.466736 167.129852 43.157181 1.000000 1.000000 1.000000
+vn 0.067717 0.736945 0.672552
+v 0.346862 167.420074 43.157181 1.000000 1.000000 1.000000
+vn -0.169613 0.720171 0.672745
+v -0.802050 167.339157 43.157181 1.000000 1.000000 1.000000
+vn -0.384381 0.630885 0.673970
+v -1.877894 166.894043 43.157181 1.000000 1.000000 1.000000
+vn -0.554626 0.486297 0.675207
+v -2.785104 166.126602 43.157181 1.000000 1.000000 1.000000
+vn -0.669746 0.306156 0.676542
+v -3.443058 165.102432 43.157181 1.000000 1.000000 1.000000
+vn -0.727706 0.108354 0.677277
+v -3.793280 163.913605 43.157181 1.000000 1.000000 1.000000
+vn -0.729557 -0.094989 0.677292
+v -3.804674 162.666183 43.157181 1.000000 1.000000 1.000000
+vn -0.675317 -0.293479 0.676622
+v -3.476198 161.470383 43.157181 1.000000 1.000000 1.000000
+vn -0.564028 -0.475212 0.675312
+v -2.837080 160.432236 43.157181 1.000000 1.000000 1.000000
+vn -0.397113 -0.622926 0.673992
+v -1.944058 159.645279 43.157181 1.000000 1.000000 1.000000
+vn -0.184771 -0.716296 0.672889
+v -0.876534 159.177841 43.157181 1.000000 1.000000 1.000000
+vn 0.281442 -0.683856 0.673150
+v 1.395630 159.336914 43.157181 1.000000 1.000000 1.000000
+vn 0.476078 -0.564094 0.674647
+v 2.398358 159.950867 43.157181 1.000000 1.000000 1.000000
+vn 0.051490 -0.738232 0.672579
+v 0.270668 159.071793 43.157181 1.000000 1.000000 1.000000
+vn -0.359433 -0.563774 0.743617
+v -160.968597 -145.962143 6.000000 1.000000 1.000000 1.000000
+vn -0.543931 -0.482750 0.686361
+v -165.967880 -149.608154 6.000000 1.000000 1.000000 1.000000
+vn -0.441944 -0.578123 0.685901
+v -164.576126 -150.904419 6.000000 1.000000 1.000000 1.000000
+vn -0.320129 -0.654200 0.685230
+v -162.982208 -151.893707 6.000000 1.000000 1.000000 1.000000
+vn -0.166552 -0.646161 0.744806
+v -159.899979 -146.429581 6.000000 1.000000 1.000000 1.000000
+vn -0.512833 -0.432118 0.741806
+v -161.860825 -145.175171 6.000000 1.000000 1.000000 1.000000
+vn -0.623520 -0.373043 0.687067
+v -167.107315 -148.048172 6.000000 1.000000 1.000000 1.000000
+vn -0.616369 -0.268013 0.740444
+v -162.500702 -144.137054 6.000000 1.000000 1.000000 1.000000
+vn -0.680163 -0.254370 0.687513
+v -167.954453 -146.283066 6.000000 1.000000 1.000000 1.000000
+vn -0.667457 -0.086804 0.739572
+v -162.829010 -142.941254 6.000000 1.000000 1.000000 1.000000
+vn -0.714228 -0.129867 0.687759
+v -168.478455 -144.377045 6.000000 1.000000 1.000000 1.000000
+vn -0.665742 0.099174 0.739562
+v -162.817413 -141.693817 6.000000 1.000000 1.000000 1.000000
+vn -0.725819 -0.002599 0.687881
+v -168.660004 -142.397064 6.000000 1.000000 1.000000 1.000000
+vn -0.611276 0.279404 0.740456
+v -162.467224 -140.504990 6.000000 1.000000 1.000000 1.000000
+vn -0.681919 0.249762 0.687464
+v -167.981506 -138.504089 6.000000 1.000000 1.000000 1.000000
+vn -0.715145 0.124800 0.687745
+v -168.492630 -140.415695 6.000000 1.000000 1.000000 1.000000
+vn -0.504242 0.441821 0.741980
+v -161.809326 -139.480820 6.000000 1.000000 1.000000 1.000000
+vn -0.625983 0.368834 0.687100
+v -167.145935 -136.733414 6.000000 1.000000 1.000000 1.000000
+vn -0.347756 0.570912 0.743724
+v -160.901642 -138.711990 6.000000 1.000000 1.000000 1.000000
+vn -0.446540 0.574602 0.685882
+v -164.634048 -133.856232 6.000000 1.000000 1.000000 1.000000
+vn -0.547427 0.478605 0.686485
+v -166.016815 -135.165054 6.000000 1.000000 1.000000 1.000000
+vn -0.152651 0.649445 0.744929
+v -159.826599 -138.268280 6.000000 1.000000 1.000000 1.000000
+vn -0.187675 0.704057 0.684896
+v -161.314926 -132.197174 6.000000 1.000000 1.000000 1.000000
+vn -0.325243 0.651682 0.685221
+v -163.047867 -132.854370 6.000000 1.000000 1.000000 1.000000
+vn 0.060632 0.664181 0.745109
+v -158.676880 -138.187347 6.000000 1.000000 1.000000 1.000000
+vn -0.040579 0.727678 0.684718
+v -159.499573 -131.906952 6.000000 1.000000 1.000000 1.000000
+vn 0.266744 0.612078 0.744452
+v -157.556763 -138.476166 6.000000 1.000000 1.000000 1.000000
+vn 0.252953 0.683222 0.684998
+v -155.879181 -132.455322 6.000000 1.000000 1.000000 1.000000
+vn 0.108993 0.720646 0.684682
+v -157.664917 -131.993454 6.000000 1.000000 1.000000 1.000000
+vn 0.442239 0.502645 0.742814
+v -156.565414 -139.111053 6.000000 1.000000 1.000000 1.000000
+vn 0.383600 0.618769 0.685548
+v -154.206741 -133.275772 6.000000 1.000000 1.000000 1.000000
+vn 0.571447 0.352829 0.740918
+v -155.791626 -140.034775 6.000000 1.000000 1.000000 1.000000
+vn 0.586545 0.429449 0.686687
+v -151.436081 -135.858521 6.000000 1.000000 1.000000 1.000000
+vn 0.495601 0.532444 0.686209
+v -152.708115 -134.424118 6.000000 1.000000 1.000000 1.000000
+vn 0.648541 0.178939 0.739848
+v -155.302383 -141.163589 6.000000 1.000000 1.000000 1.000000
+vn 0.654643 0.314669 0.687333
+v -150.438293 -137.528748 6.000000 1.000000 1.000000 1.000000
+vn 0.673115 -0.006013 0.739513
+v -155.141449 -142.399857 6.000000 1.000000 1.000000 1.000000
+vn 0.722759 0.066430 0.687900
+v -149.395432 -141.324051 6.000000 1.000000 1.000000 1.000000
+vn 0.700055 0.192635 0.687616
+v -149.749481 -139.371979 6.000000 1.000000 1.000000 1.000000
+vn 0.701314 -0.187713 0.687694
+v -149.728882 -145.268661 6.000000 1.000000 1.000000 1.000000
+vn 0.723334 -0.061233 0.687778
+v -149.387695 -143.313797 6.000000 1.000000 1.000000 1.000000
+vn 0.644988 -0.190819 0.739986
+v -155.324280 -143.631943 6.000000 1.000000 1.000000 1.000000
+vn 0.656915 -0.309994 0.687289
+v -150.404816 -147.118866 6.000000 1.000000 1.000000 1.000000
+vn 0.564227 -0.363915 0.741089
+v -155.834122 -144.749603 6.000000 1.000000 1.000000 1.000000
+vn 0.589571 -0.425212 0.686732
+v -151.391022 -148.796066 6.000000 1.000000 1.000000 1.000000
+vn 0.431574 -0.511667 0.742927
+v -156.625916 -145.656570 6.000000 1.000000 1.000000 1.000000
+vn 0.499476 -0.528837 0.686189
+v -152.654037 -150.241638 6.000000 1.000000 1.000000 1.000000
+vn 0.254276 -0.617627 0.744232
+v -157.628860 -146.269119 6.000000 1.000000 1.000000 1.000000
+vn 0.388054 -0.615975 0.685557
+v -154.144943 -151.401154 6.000000 1.000000 1.000000 1.000000
+vn 0.046835 -0.664971 0.745399
+v -158.752838 -146.535629 6.000000 1.000000 1.000000 1.000000
+vn 0.115105 -0.719715 0.684661
+v -157.594101 -152.711380 6.000000 1.000000 1.000000 1.000000
+vn 0.258312 -0.681075 0.685137
+v -155.812241 -152.234161 6.000000 1.000000 1.000000 1.000000
+vn -0.034726 -0.728047 0.684647
+v -159.427475 -152.813232 6.000000 1.000000 1.000000 1.000000
+vn -0.182214 -0.705482 0.684904
+v -161.245392 -152.536957 6.000000 1.000000 1.000000 1.000000
+vn 0.700055 0.192635 -0.687616
+v -149.749481 -139.371979 0.000000 1.000000 1.000000 1.000000
+vn 0.722759 0.066430 -0.687900
+v -149.395432 -141.324051 0.000000 1.000000 1.000000 1.000000
+vn 0.654643 0.314668 -0.687333
+v -150.438293 -137.528748 0.000000 1.000000 1.000000 1.000000
+vn 0.723334 -0.061233 -0.687778
+v -149.387695 -143.313797 0.000000 1.000000 1.000000 1.000000
+vn 0.701314 -0.187713 -0.687694
+v -149.728882 -145.268661 0.000000 1.000000 1.000000 1.000000
+vn 0.586545 0.429449 -0.686687
+v -151.436081 -135.858521 0.000000 1.000000 1.000000 1.000000
+vn 0.495601 0.532444 -0.686209
+v -152.708115 -134.424118 0.000000 1.000000 1.000000 1.000000
+vn 0.383600 0.618769 -0.685548
+v -154.206741 -133.275772 0.000000 1.000000 1.000000 1.000000
+vn 0.252953 0.683222 -0.684998
+v -155.879181 -132.455322 0.000000 1.000000 1.000000 1.000000
+vn 0.108993 0.720646 -0.684682
+v -157.664917 -131.993454 0.000000 1.000000 1.000000 1.000000
+vn -0.040579 0.727678 -0.684718
+v -159.499573 -131.906952 0.000000 1.000000 1.000000 1.000000
+vn -0.187675 0.704057 -0.684896
+v -161.314926 -132.197174 0.000000 1.000000 1.000000 1.000000
+vn -0.325243 0.651682 -0.685221
+v -163.047867 -132.854370 0.000000 1.000000 1.000000 1.000000
+vn -0.446540 0.574602 -0.685882
+v -164.634048 -133.856232 0.000000 1.000000 1.000000 1.000000
+vn -0.547427 0.478605 -0.686485
+v -166.016815 -135.165054 0.000000 1.000000 1.000000 1.000000
+vn -0.625983 0.368834 -0.687100
+v -167.145935 -136.733414 0.000000 1.000000 1.000000 1.000000
+vn -0.681919 0.249762 -0.687463
+v -167.981506 -138.504089 0.000000 1.000000 1.000000 1.000000
+vn 0.656915 -0.309994 -0.687289
+v -150.404816 -147.118866 0.000000 1.000000 1.000000 1.000000
+vn 0.589571 -0.425212 -0.686732
+v -151.391022 -148.796066 0.000000 1.000000 1.000000 1.000000
+vn 0.499476 -0.528837 -0.686189
+v -152.654037 -150.241638 0.000000 1.000000 1.000000 1.000000
+vn 0.388054 -0.615975 -0.685557
+v -154.144943 -151.401154 0.000000 1.000000 1.000000 1.000000
+vn 0.258312 -0.681075 -0.685137
+v -155.812241 -152.234161 0.000000 1.000000 1.000000 1.000000
+vn 0.115105 -0.719715 -0.684661
+v -157.594101 -152.711380 0.000000 1.000000 1.000000 1.000000
+vn -0.034726 -0.728047 -0.684647
+v -159.427475 -152.813232 0.000000 1.000000 1.000000 1.000000
+vn -0.182214 -0.705482 -0.684904
+v -161.245392 -152.536957 0.000000 1.000000 1.000000 1.000000
+vn -0.320129 -0.654200 -0.685230
+v -162.982208 -151.893707 0.000000 1.000000 1.000000 1.000000
+vn -0.441944 -0.578123 -0.685901
+v -164.576126 -150.904419 0.000000 1.000000 1.000000 1.000000
+vn -0.543931 -0.482750 -0.686361
+v -165.967880 -149.608154 0.000000 1.000000 1.000000 1.000000
+vn -0.623520 -0.373043 -0.687067
+v -167.107315 -148.048172 0.000000 1.000000 1.000000 1.000000
+vn -0.680163 -0.254370 -0.687513
+v -167.954453 -146.283066 0.000000 1.000000 1.000000 1.000000
+vn -0.714228 -0.129867 -0.687759
+v -168.478455 -144.377045 0.000000 1.000000 1.000000 1.000000
+vn -0.725819 -0.002599 -0.687881
+v -168.660004 -142.397064 0.000000 1.000000 1.000000 1.000000
+vn -0.715145 0.124800 -0.687745
+v -168.492630 -140.415695 0.000000 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -159.003891 -142.358002 0.000000 1.000000 1.000000 1.000000
+vn 0.705799 -0.208810 0.676939
+v -155.324280 -143.631943 43.157181 1.000000 1.000000 1.000000
+vn 0.735643 -0.006572 0.677337
+v -155.141449 -142.399857 43.157181 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -159.003891 -142.358002 43.157181 1.000000 1.000000 1.000000
+vn 0.619258 -0.399409 0.676012
+v -155.834122 -144.749603 43.157181 1.000000 1.000000 1.000000
+vn 0.709425 0.195738 0.677055
+v -155.302383 -141.163589 43.157181 1.000000 1.000000 1.000000
+vn 0.626894 0.387064 0.676155
+v -155.791626 -140.034775 43.157181 1.000000 1.000000 1.000000
+vn 0.487626 0.554231 0.674574
+v -156.565414 -139.111053 43.157181 1.000000 1.000000 1.000000
+vn 0.295415 0.677868 0.673220
+v -157.556763 -138.476166 43.157181 1.000000 1.000000 1.000000
+vn 0.067268 0.736870 0.672679
+v -158.676880 -138.187347 43.157181 1.000000 1.000000 1.000000
+vn -0.169276 0.720173 0.672827
+v -159.826599 -138.268280 43.157181 1.000000 1.000000 1.000000
+vn -0.384383 0.631044 0.673820
+v -160.901642 -138.711990 43.157181 1.000000 1.000000 1.000000
+vn -0.554748 0.486074 0.675268
+v -161.809326 -139.480820 43.157181 1.000000 1.000000 1.000000
+vn -0.669754 0.306134 0.676543
+v -162.467224 -140.504990 43.157181 1.000000 1.000000 1.000000
+vn -0.727681 0.108401 0.677296
+v -162.817413 -141.693817 43.157181 1.000000 1.000000 1.000000
+vn -0.729574 -0.094883 0.677288
+v -162.829010 -142.941254 43.157181 1.000000 1.000000 1.000000
+vn -0.675314 -0.293644 0.676553
+v -162.500702 -144.137054 43.157181 1.000000 1.000000 1.000000
+vn -0.563936 -0.475178 0.675412
+v -161.860825 -145.175171 43.157181 1.000000 1.000000 1.000000
+vn -0.397177 -0.622976 0.673908
+v -160.968597 -145.962143 43.157181 1.000000 1.000000 1.000000
+vn -0.184629 -0.716296 0.672927
+v -159.899979 -146.429581 43.157181 1.000000 1.000000 1.000000
+vn 0.281441 -0.683610 0.673401
+v -157.628860 -146.269119 43.157181 1.000000 1.000000 1.000000
+vn 0.476011 -0.564350 0.674480
+v -156.625916 -145.656570 43.157181 1.000000 1.000000 1.000000
+vn 0.052001 -0.738322 0.672441
+v -158.752838 -146.535629 43.157181 1.000000 1.000000 1.000000
+vn -0.260757 -0.614700 0.744412
+v 157.590240 -146.253769 6.000000 1.000000 1.000000 1.000000
+vn -0.460543 -0.563401 0.685915
+v 153.184494 -150.709076 6.000000 1.000000 1.000000 1.000000
+vn -0.341675 -0.643067 0.685363
+v 154.747482 -151.751389 6.000000 1.000000 1.000000 1.000000
+vn -0.206218 -0.698788 0.684960
+v 156.464981 -152.454636 6.000000 1.000000 1.000000 1.000000
+vn -0.054198 -0.664722 0.745122
+v 158.711639 -146.531433 6.000000 1.000000 1.000000 1.000000
+vn -0.437310 -0.506836 0.742885
+v 156.592438 -145.628662 6.000000 1.000000 1.000000 1.000000
+vn -0.558647 -0.465291 0.686599
+v 151.831345 -149.363968 6.000000 1.000000 1.000000 1.000000
+vn -0.568136 -0.358049 0.740961
+v 155.810944 -144.713318 6.000000 1.000000 1.000000 1.000000
+vn -0.634563 -0.353961 0.687053
+v 150.736984 -147.766312 6.000000 1.000000 1.000000 1.000000
+vn -0.646836 -0.184172 0.740056
+v 155.311401 -143.588684 6.000000 1.000000 1.000000 1.000000
+vn -0.687500 -0.233693 0.687554
+v 149.942596 -145.973297 6.000000 1.000000 1.000000 1.000000
+vn -0.673278 0.000741 0.739389
+v 155.141449 -142.353821 6.000000 1.000000 1.000000 1.000000
+vn -0.717689 -0.108629 0.687839
+v 149.475250 -144.049149 6.000000 1.000000 1.000000 1.000000
+vn -0.646604 0.185369 0.739960
+v 155.313980 -141.120331 6.000000 1.000000 1.000000 1.000000
+vn -0.711182 0.145841 0.687715
+v 149.576965 -140.089188 6.000000 1.000000 1.000000 1.000000
+vn -0.725591 0.018673 0.687872
+v 149.351654 -142.063583 6.000000 1.000000 1.000000 1.000000
+vn -0.567342 0.359059 0.741080
+v 155.814804 -139.997086 6.000000 1.000000 1.000000 1.000000
+vn -0.674193 0.270085 0.687399
+v 150.143448 -138.197113 6.000000 1.000000 1.000000 1.000000
+vn -0.436768 0.507655 0.742644
+v 156.598892 -139.083145 6.000000 1.000000 1.000000 1.000000
+vn -0.532101 0.495855 0.686291
+v 152.204712 -134.926453 6.000000 1.000000 1.000000 1.000000
+vn -0.614482 0.387799 0.687039
+v 151.030533 -136.455734 6.000000 1.000000 1.000000 1.000000
+vn -0.260137 0.614816 0.744534
+v 157.595398 -138.459442 6.000000 1.000000 1.000000 1.000000
+vn -0.303218 0.662268 0.685172
+v 155.240601 -132.720428 6.000000 1.000000 1.000000 1.000000
+vn -0.427388 0.589069 0.685812
+v 153.626083 -133.666458 6.000000 1.000000 1.000000 1.000000
+vn -0.052908 0.664687 0.745246
+v 158.718079 -138.183151 6.000000 1.000000 1.000000 1.000000
+vn -0.163799 0.709987 0.684900
+v 156.991562 -132.123230 6.000000 1.000000 1.000000 1.000000
+vn 0.160268 0.647739 0.744815
+v 159.866501 -138.278046 6.000000 1.000000 1.000000 1.000000
+vn 0.133828 0.716352 0.684784
+v 160.645432 -132.045090 6.000000 1.000000 1.000000 1.000000
+vn -0.015525 0.728773 0.684579
+v 158.815918 -131.894394 6.000000 1.000000 1.000000 1.000000
+vn 0.353985 0.567192 0.743632
+v 160.937698 -138.734314 6.000000 1.000000 1.000000 1.000000
+vn 0.275792 0.674239 0.685084
+v 162.417007 -132.568344 6.000000 1.000000 1.000000 1.000000
+vn 0.508881 0.436399 0.742021
+v 161.837631 -139.512909 6.000000 1.000000 1.000000 1.000000
+vn 0.512347 0.516372 0.686193
+v 165.530136 -134.644592 6.000000 1.000000 1.000000 1.000000
+vn 0.403459 0.605834 0.685701
+v 164.064987 -133.445999 6.000000 1.000000 1.000000 1.000000
+vn 0.614244 0.273215 0.740309
+v 162.485245 -140.545456 6.000000 1.000000 1.000000 1.000000
+vn 0.599507 0.410870 0.686861
+v 166.758392 -136.122253 6.000000 1.000000 1.000000 1.000000
+vn 0.666602 0.092523 0.739649
+v 162.823853 -141.737076 6.000000 1.000000 1.000000 1.000000
+vn 0.705468 0.171681 0.687634
+v 168.342010 -139.692902 6.000000 1.000000 1.000000 1.000000
+vn 0.663781 0.294793 0.687380
+v 167.707260 -137.825958 6.000000 1.000000 1.000000 1.000000
+vn 0.721156 -0.082542 0.687838
+v 168.586609 -143.644501 6.000000 1.000000 1.000000 1.000000
+vn 0.724422 0.044898 0.687893
+v 168.638123 -141.656143 6.000000 1.000000 1.000000 1.000000
+vn 0.666600 -0.093558 0.739521
+v 162.822571 -142.985901 6.000000 1.000000 1.000000 1.000000
+vn 0.695523 -0.208405 0.687616
+v 168.188797 -145.586792 6.000000 1.000000 1.000000 1.000000
+vn 0.613449 -0.274334 0.740555
+v 162.482681 -144.177521 6.000000 1.000000 1.000000 1.000000
+vn 0.647267 -0.329860 0.687195
+v 167.458786 -147.413300 6.000000 1.000000 1.000000 1.000000
+vn 0.508242 -0.437580 0.741764
+v 161.832489 -145.207275 6.000000 1.000000 1.000000 1.000000
+vn 0.576074 -0.443444 0.686656
+v 166.423645 -149.055603 6.000000 1.000000 1.000000 1.000000
+vn 0.353252 -0.567549 0.743708
+v 160.932541 -145.984467 6.000000 1.000000 1.000000 1.000000
+vn 0.482337 -0.544642 0.686087
+v 165.119431 -150.456512 6.000000 1.000000 1.000000 1.000000
+vn 0.158958 -0.647934 0.744925
+v 159.860077 -146.439346 6.000000 1.000000 1.000000 1.000000
+vn 0.235069 -0.689632 0.684945
+v 161.904587 -152.340210 6.000000 1.000000 1.000000 1.000000
+vn 0.367667 -0.628421 0.685498
+v 163.595062 -151.564407 6.000000 1.000000 1.000000 1.000000
+vn 0.090162 -0.723193 0.684736
+v 160.108551 -152.754623 6.000000 1.000000 1.000000 1.000000
+vn -0.059701 -0.726452 0.684619
+v 158.273895 -152.793701 6.000000 1.000000 1.000000 1.000000
+vn 0.663781 0.294793 -0.687380
+v 167.707260 -137.825958 0.000000 1.000000 1.000000 1.000000
+vn 0.705468 0.171681 -0.687634
+v 168.342010 -139.692902 0.000000 1.000000 1.000000 1.000000
+vn 0.724423 0.044898 -0.687892
+v 168.638123 -141.656143 0.000000 1.000000 1.000000 1.000000
+vn 0.721156 -0.082542 -0.687838
+v 168.586609 -143.644501 0.000000 1.000000 1.000000 1.000000
+vn 0.695523 -0.208405 -0.687616
+v 168.188797 -145.586792 0.000000 1.000000 1.000000 1.000000
+vn 0.647267 -0.329860 -0.687195
+v 167.458786 -147.413300 0.000000 1.000000 1.000000 1.000000
+vn 0.576074 -0.443444 -0.686656
+v 166.423645 -149.055603 0.000000 1.000000 1.000000 1.000000
+vn 0.482337 -0.544642 -0.686087
+v 165.119431 -150.456512 0.000000 1.000000 1.000000 1.000000
+vn 0.367667 -0.628421 -0.685498
+v 163.595062 -151.564407 0.000000 1.000000 1.000000 1.000000
+vn 0.235069 -0.689632 -0.684945
+v 161.904587 -152.340210 0.000000 1.000000 1.000000 1.000000
+vn 0.090162 -0.723193 -0.684736
+v 160.108551 -152.754623 0.000000 1.000000 1.000000 1.000000
+vn -0.059701 -0.726452 -0.684619
+v 158.273895 -152.793701 0.000000 1.000000 1.000000 1.000000
+vn -0.206218 -0.698788 -0.684960
+v 156.464981 -152.454636 0.000000 1.000000 1.000000 1.000000
+vn -0.341675 -0.643067 -0.685363
+v 154.747482 -151.751389 0.000000 1.000000 1.000000 1.000000
+vn -0.460543 -0.563401 -0.685915
+v 153.184494 -150.709076 0.000000 1.000000 1.000000 1.000000
+vn -0.558647 -0.465291 -0.686599
+v 151.831345 -149.363968 0.000000 1.000000 1.000000 1.000000
+vn -0.634563 -0.353961 -0.687053
+v 150.736984 -147.766312 0.000000 1.000000 1.000000 1.000000
+vn -0.687500 -0.233693 -0.687554
+v 149.942596 -145.973297 0.000000 1.000000 1.000000 1.000000
+vn -0.717689 -0.108629 -0.687839
+v 149.475250 -144.049149 0.000000 1.000000 1.000000 1.000000
+vn -0.725591 0.018673 -0.687872
+v 149.351654 -142.063583 0.000000 1.000000 1.000000 1.000000
+vn -0.711182 0.145841 -0.687715
+v 149.576965 -140.089188 0.000000 1.000000 1.000000 1.000000
+vn -0.674193 0.270085 -0.687399
+v 150.143448 -138.197113 0.000000 1.000000 1.000000 1.000000
+vn -0.614482 0.387799 -0.687039
+v 151.030533 -136.455734 0.000000 1.000000 1.000000 1.000000
+vn -0.532101 0.495855 -0.686291
+v 152.204712 -134.926453 0.000000 1.000000 1.000000 1.000000
+vn -0.427388 0.589069 -0.685812
+v 153.626083 -133.666458 0.000000 1.000000 1.000000 1.000000
+vn -0.303218 0.662268 -0.685172
+v 155.240601 -132.720428 0.000000 1.000000 1.000000 1.000000
+vn -0.163799 0.709988 -0.684900
+v 156.991562 -132.123230 0.000000 1.000000 1.000000 1.000000
+vn -0.015525 0.728773 -0.684579
+v 158.815918 -131.894394 0.000000 1.000000 1.000000 1.000000
+vn 0.133828 0.716352 -0.684784
+v 160.645432 -132.045090 0.000000 1.000000 1.000000 1.000000
+vn 0.275792 0.674239 -0.685084
+v 162.417007 -132.568344 0.000000 1.000000 1.000000 1.000000
+vn 0.403459 0.605834 -0.685701
+v 164.064987 -133.445999 0.000000 1.000000 1.000000 1.000000
+vn 0.512347 0.516372 -0.686193
+v 165.530136 -134.644592 0.000000 1.000000 1.000000 1.000000
+vn 0.599507 0.410870 -0.686861
+v 166.758392 -136.122253 0.000000 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v 159.003891 -142.358002 0.000000 1.000000 1.000000 1.000000
+vn 0.728538 -0.102251 0.677331
+v 162.822571 -142.985901 43.157120 1.000000 1.000000 1.000000
+vn 0.728792 0.101155 0.677222
+v 162.823853 -141.737076 43.157120 1.000000 1.000000 1.000000
+vn 0.000002 -0.000002 1.000000
+v 159.003891 -142.358002 43.157120 1.000000 1.000000 1.000000
+vn 0.672314 -0.300659 0.676461
+v 162.482681 -144.177521 43.157120 1.000000 1.000000 1.000000
+vn 0.672742 0.299234 0.676666
+v 162.485245 -140.545456 43.157120 1.000000 1.000000 1.000000
+vn 0.559914 0.480163 0.675234
+v 161.837631 -139.512909 43.157120 1.000000 1.000000 1.000000
+vn 0.391171 0.626776 0.673897
+v 160.937698 -138.734314 43.157120 1.000000 1.000000 1.000000
+vn 0.177673 0.718061 0.672919
+v 159.866501 -138.278046 43.157120 1.000000 1.000000 1.000000
+vn -0.058714 0.737700 0.672570
+v 158.718079 -138.183151 43.157139 1.000000 1.000000 1.000000
+vn -0.288161 0.681049 0.673154
+v 157.595398 -138.459442 43.157139 1.000000 1.000000 1.000000
+vn -0.481372 0.559498 0.674717
+v 156.598892 -139.083145 43.157139 1.000000 1.000000 1.000000
+vn -0.622660 0.394068 0.676021
+v 155.814804 -139.997086 43.157139 1.000000 1.000000 1.000000
+vn -0.707518 0.202832 0.676962
+v 155.313980 -141.120331 43.157139 1.000000 1.000000 1.000000
+vn -0.735572 0.000805 0.677446
+v 155.141449 -142.353821 43.157139 1.000000 1.000000 1.000000
+vn -0.707956 -0.201579 0.676878
+v 155.311401 -143.588684 43.157120 1.000000 1.000000 1.000000
+vn -0.623332 -0.392834 0.676120
+v 155.810944 -144.713318 43.157120 1.000000 1.000000 1.000000
+vn -0.482281 -0.558957 0.674516
+v 156.592438 -145.628662 43.157120 1.000000 1.000000 1.000000
+vn -0.288754 -0.680700 0.673253
+v 157.590240 -146.253769 43.157120 1.000000 1.000000 1.000000
+vn -0.060132 -0.737497 0.672669
+v 158.711639 -146.531433 43.157120 1.000000 1.000000 1.000000
+vn 0.390442 -0.627299 0.673834
+v 160.932541 -145.984467 43.157120 1.000000 1.000000 1.000000
+vn 0.558824 -0.481129 0.675448
+v 161.832489 -145.207275 43.157120 1.000000 1.000000 1.000000
+vn 0.176268 -0.718491 0.672830
+v 159.860077 -146.439346 43.157120 1.000000 1.000000 1.000000
+vn 0.680717 0.530875 0.504773
+v 144.822296 164.012665 45.911160 1.000000 1.000000 1.000000
+vn 0.677648 0.504397 0.535142
+v 144.980652 164.228943 45.472580 1.000000 1.000000 1.000000
+vn 0.531075 0.600886 0.597408
+v 144.710281 164.622437 45.449158 1.000000 1.000000 1.000000
+vn 0.427625 0.665301 0.611974
+v 144.503006 164.305695 46.031960 1.000000 1.000000 1.000000
+vn 0.780984 0.315656 0.538911
+v 144.826157 163.952667 45.970757 1.000000 1.000000 1.000000
+vn 0.818545 0.341869 0.461638
+v 144.854477 163.983383 45.898956 1.000000 1.000000 1.000000
+vn 0.397648 0.692953 0.601409
+v 144.675522 164.641968 45.449158 1.000000 1.000000 1.000000
+vn 0.433392 0.480417 0.762477
+v 144.733459 164.658707 45.398758 1.000000 1.000000 1.000000
+vn 0.461814 0.460010 0.758366
+v 144.477249 164.055923 46.284958 1.000000 1.000000 1.000000
+vn 0.715577 0.108841 0.690003
+v 144.822296 163.587097 46.091560 1.000000 1.000000 1.000000
+vn 0.501334 0.132126 0.855106
+v 144.477249 163.587097 46.434559 1.000000 1.000000 1.000000
+vn 0.287991 0.147529 0.946201
+v 144.474670 163.587097 46.435356 1.000000 1.000000 1.000000
+vn 0.138473 0.317358 0.938141
+v 144.071701 164.089417 46.395958 1.000000 1.000000 1.000000
+vn 0.131588 0.546324 0.827173
+v 144.071701 164.092209 46.394958 1.000000 1.000000 1.000000
+vn 0.501334 -0.132127 0.855106
+v 144.477249 162.853149 46.434559 1.000000 1.000000 1.000000
+vn 0.287880 -0.147655 0.946215
+v 144.474670 162.853149 46.435356 1.000000 1.000000 1.000000
+vn 0.141624 0.150240 0.978453
+v 144.071701 163.587097 46.556160 1.000000 1.000000 1.000000
+vn 0.141612 -0.150623 0.978396
+v 144.071701 162.853149 46.556160 1.000000 1.000000 1.000000
+vn 0.468939 -0.449532 0.760274
+v 144.477249 162.384323 46.284958 1.000000 1.000000 1.000000
+vn 0.138861 -0.266033 0.953910
+v 144.071701 162.352219 46.395958 1.000000 1.000000 1.000000
+vn 0.715576 -0.108839 0.690004
+v 144.822296 162.853149 46.091560 1.000000 1.000000 1.000000
+vn 0.822089 -0.089748 0.562241
+v 144.826157 162.853149 46.087357 1.000000 1.000000 1.000000
+vn 0.822191 0.089954 0.562059
+v 144.826157 163.587097 46.087357 1.000000 1.000000 1.000000
+vn 0.780330 -0.316525 0.539348
+v 144.826157 162.487564 45.970757 1.000000 1.000000 1.000000
+vn 0.926817 -0.059082 0.370835
+v 145.063049 162.853149 45.574558 1.000000 1.000000 1.000000
+vn 0.926744 0.065631 0.369917
+v 145.063049 163.587097 45.574558 1.000000 1.000000 1.000000
+vn 0.905774 0.148683 0.396821
+v 144.880234 163.933136 45.858559 1.000000 1.000000 1.000000
+vn 0.916485 0.097959 0.387891
+v 145.077209 163.613617 45.529358 1.000000 1.000000 1.000000
+vn 0.774880 0.359808 0.519711
+v 144.989670 164.216400 45.473358 1.000000 1.000000 1.000000
+vn 0.813970 0.076904 0.575795
+v 145.119705 163.613617 45.437958 1.000000 1.000000 1.000000
+vn 0.918675 -0.079344 0.386964
+v 145.077209 162.826645 45.529358 1.000000 1.000000 1.000000
+vn 0.657567 0.281425 0.698860
+v 145.028290 164.235931 45.410358 1.000000 1.000000 1.000000
+vn 0.499222 0.047551 0.865168
+v 145.180222 163.613617 45.377357 1.000000 1.000000 1.000000
+vn 0.815913 -0.057644 0.575294
+v 145.119705 162.826645 45.437958 1.000000 1.000000 1.000000
+vn 0.799549 -0.317299 0.509944
+v 145.016708 162.307571 45.480358 1.000000 1.000000 1.000000
+vn 0.681198 -0.258072 0.685105
+v 145.056610 162.292221 45.413757 1.000000 1.000000 1.000000
+vn 0.389209 -0.148274 0.909138
+v 145.108124 162.272690 45.370956 1.000000 1.000000 1.000000
+vn 0.502486 -0.036253 0.863825
+v 145.180222 162.826645 45.377357 1.000000 1.000000 1.000000
+vn 0.734799 -0.446424 0.510663
+v 144.969070 162.223862 45.474758 1.000000 1.000000 1.000000
+vn 0.471134 -0.452063 0.757411
+v 144.782379 161.824783 45.399361 1.000000 1.000000 1.000000
+vn 0.256363 -0.246832 0.934533
+v 144.813278 161.784317 45.367157 1.000000 1.000000 1.000000
+vn 0.903240 -0.162916 0.397010
+v 144.880234 162.507111 45.858559 1.000000 1.000000 1.000000
+vn 0.822126 -0.349934 0.449061
+v 144.854477 162.456879 45.898956 1.000000 1.000000 1.000000
+vn 0.686263 -0.528712 0.499506
+v 144.822296 162.427567 45.911160 1.000000 1.000000 1.000000
+vn 0.580786 -0.564668 0.586377
+v 144.756638 161.858276 45.450359 1.000000 1.000000 1.000000
+vn 0.424437 -0.665491 0.613983
+v 144.503006 162.134552 46.031960 1.000000 1.000000 1.000000
+vn 0.454877 -0.663500 0.594016
+v 144.674240 161.801071 45.449558 1.000000 1.000000 1.000000
+vn 0.224383 -0.753929 0.617449
+v 144.477249 162.123398 46.026958 1.000000 1.000000 1.000000
+vn 0.126837 -0.496868 0.858507
+v 144.071701 162.348038 46.394958 1.000000 1.000000 1.000000
+vn -0.132555 -0.501252 0.855088
+v 141.749084 162.348038 46.394958 1.000000 1.000000 1.000000
+vn 0.104282 -0.798993 0.592229
+v 144.071701 161.944778 45.948959 1.000000 1.000000 1.000000
+vn -0.138856 -0.266033 0.953910
+v 141.749084 162.352219 46.395958 1.000000 1.000000 1.000000
+vn -0.141607 -0.150623 0.978397
+v 141.749084 162.853149 46.556160 1.000000 1.000000 1.000000
+vn -0.287875 -0.147655 0.946217
+v 141.346100 162.853149 46.435356 1.000000 1.000000 1.000000
+vn -0.461369 -0.460243 0.758495
+v 141.343521 162.384323 46.284958 1.000000 1.000000 1.000000
+vn -0.097926 -0.793172 0.601073
+v 141.749084 161.944778 45.948959 1.000000 1.000000 1.000000
+vn 0.058392 -0.804747 0.590740
+v 144.217178 161.660141 45.463360 1.000000 1.000000 1.000000
+vn -0.082869 -0.813298 0.575916
+v 141.603592 161.660141 45.463360 1.000000 1.000000 1.000000
+vn -0.212343 -0.745694 0.631546
+v 141.343521 162.123398 46.026958 1.000000 1.000000 1.000000
+vn -0.282881 -0.738180 0.612429
+v 141.295883 161.710373 45.449558 1.000000 1.000000 1.000000
+vn -0.427464 -0.665382 0.611998
+v 141.317780 162.134552 46.031960 1.000000 1.000000 1.000000
+vn -0.501334 -0.132126 0.855106
+v 141.343521 162.853149 46.434559 1.000000 1.000000 1.000000
+vn -0.397645 -0.692950 0.601414
+v 141.145248 161.798279 45.449158 1.000000 1.000000 1.000000
+vn -0.225270 -0.596707 0.770191
+v 141.281723 161.668518 45.398956 1.000000 1.000000 1.000000
+vn -0.433458 -0.480403 0.762448
+v 141.087311 161.781540 45.398758 1.000000 1.000000 1.000000
+vn -0.531066 -0.600890 0.597411
+v 141.110489 161.817810 45.449158 1.000000 1.000000 1.000000
+vn -0.235478 -0.262341 0.935803
+v 141.058990 161.739670 45.366959 1.000000 1.000000 1.000000
+vn -0.053026 -0.558094 0.828082
+v 141.603592 161.587585 45.387157 1.000000 1.000000 1.000000
+vn -0.064698 -0.678298 0.731933
+v 141.603592 161.614090 45.405560 1.000000 1.000000 1.000000
+vn -0.123281 -0.327309 0.936841
+v 141.264984 161.619675 45.367157 1.000000 1.000000 1.000000
+vn -0.367277 -0.158155 0.916567
+v 140.744843 162.182007 45.369957 1.000000 1.000000 1.000000
+vn -0.057222 -0.066117 0.996170
+v 141.029373 161.695023 45.356159 1.000000 1.000000 1.000000
+vn -0.031363 -0.082939 0.996061
+v 141.246964 161.568054 45.356159 1.000000 1.000000 1.000000
+vn -0.034326 -0.375340 0.926251
+v 141.603592 161.559677 45.368759 1.000000 1.000000 1.000000
+vn -0.008724 -0.097133 0.995233
+v 141.603592 161.499680 45.356159 1.000000 1.000000 1.000000
+vn 0.005062 -0.099827 0.994992
+v 144.217178 161.499680 45.356159 1.000000 1.000000 1.000000
+vn 0.017940 -0.380675 0.924535
+v 144.217178 161.559677 45.368759 1.000000 1.000000 1.000000
+vn -0.653908 -0.000009 0.756574
+v 128.876846 163.220123 45.356178 1.000000 1.000000 1.000000
+vn -0.595337 0.266478 0.757999
+v 128.672897 162.251755 45.356159 1.000000 1.000000 1.000000
+vn -0.264877 -0.355999 0.896161
+v 133.254272 159.715042 45.356159 1.000000 1.000000 1.000000
+vn -0.595335 -0.266482 0.758000
+v 128.672897 164.188477 45.356178 1.000000 1.000000 1.000000
+vn -0.090063 -0.039564 0.995150
+v 140.692062 162.155487 45.356159 1.000000 1.000000 1.000000
+vn -0.421824 -0.491900 0.761642
+v 128.101257 164.965683 45.356178 1.000000 1.000000 1.000000
+vn -0.153461 -0.625649 0.764861
+v 127.275223 165.396851 45.356178 1.000000 1.000000 1.000000
+vn -0.133643 -0.012492 0.990951
+v 140.568451 162.826645 45.356159 1.000000 1.000000 1.000000
+vn -0.048745 0.720042 0.692216
+v 126.816872 170.127029 45.356178 1.000000 1.000000 1.000000
+vn 0.153461 -0.625650 0.764860
+v 126.358528 165.396851 45.356178 1.000000 1.000000 1.000000
+vn -0.135663 0.009940 0.990705
+v 140.568451 163.613617 45.356159 1.000000 1.000000 1.000000
+vn -0.195813 0.708373 0.678133
+v 125.237137 169.912155 45.356178 1.000000 1.000000 1.000000
+vn -0.098851 0.038538 0.994356
+v 140.657288 164.189880 45.356159 1.000000 1.000000 1.000000
+vn -0.379972 0.197577 0.903651
+v 133.254272 170.127029 45.356178 1.000000 1.000000 1.000000
+vn -0.374055 0.631724 0.678975
+v 123.756149 169.278671 45.356178 1.000000 1.000000 1.000000
+vn 0.421823 -0.491903 0.761641
+v 125.532486 164.965683 45.356178 1.000000 1.000000 1.000000
+vn -0.520990 0.515880 0.680027
+v 122.466087 168.267044 45.356178 1.000000 1.000000 1.000000
+vn 0.595336 -0.266480 0.758000
+v 124.960846 164.188477 45.356178 1.000000 1.000000 1.000000
+vn -0.630320 0.372872 0.680928
+v 121.447563 166.941483 45.356178 1.000000 1.000000 1.000000
+vn -0.699861 0.213329 0.681679
+v 120.764168 165.382889 45.356178 1.000000 1.000000 1.000000
+vn 0.653916 -0.000001 0.756567
+v 124.756905 163.220123 45.356178 1.000000 1.000000 1.000000
+vn -0.729893 0.045895 0.682019
+v 120.458519 163.688950 45.356178 1.000000 1.000000 1.000000
+vn 0.595333 0.266481 0.758002
+v 124.960846 162.251755 45.356178 1.000000 1.000000 1.000000
+vn -0.720995 -0.123144 0.681910
+v 120.549805 161.965714 45.356178 1.000000 1.000000 1.000000
+vn -0.669075 -0.310847 0.675065
+v 121.032089 160.322021 45.356178 1.000000 1.000000 1.000000
+vn -0.532336 -0.521487 0.666835
+v 121.244400 160.001083 45.356178 1.000000 1.000000 1.000000
+vn -0.293966 -0.686650 0.664903
+v 121.551079 159.789001 45.356178 1.000000 1.000000 1.000000
+vn -0.074188 -0.724858 0.684892
+v 121.908607 159.715042 45.356178 1.000000 1.000000 1.000000
+vn -0.077337 -0.675120 0.733643
+v 122.196495 159.715042 45.356178 1.000000 1.000000 1.000000
+vn -0.280438 -0.587642 0.758967
+v 122.587112 159.624359 45.356178 1.000000 1.000000 1.000000
+vn -0.449260 -0.535336 0.715248
+v 122.910919 159.371796 45.356178 1.000000 1.000000 1.000000
+vn 0.421817 0.491907 0.761642
+v 125.532486 161.474564 45.356178 1.000000 1.000000 1.000000
+vn -0.410124 -0.611905 0.676292
+v 124.033859 158.358780 45.356178 1.000000 1.000000 1.000000
+vn 0.153465 0.625649 0.764861
+v 126.358528 161.043411 45.356178 1.000000 1.000000 1.000000
+vn -0.216985 -0.704904 0.675298
+v 125.370003 157.718323 45.356159 1.000000 1.000000 1.000000
+vn 0.000001 -0.737898 0.674912
+v 126.816872 157.499252 45.356159 1.000000 1.000000 1.000000
+vn -0.153451 0.625656 0.764858
+v 127.275223 161.043411 45.356159 1.000000 1.000000 1.000000
+vn 0.216929 -0.704903 0.675317
+v 128.263748 157.718323 45.356159 1.000000 1.000000 1.000000
+vn -0.421818 0.491907 0.761641
+v 128.101257 161.474564 45.356159 1.000000 1.000000 1.000000
+vn 0.410133 -0.611932 0.676262
+v 129.600418 158.358780 45.356159 1.000000 1.000000 1.000000
+vn 0.449614 -0.535169 0.715152
+v 130.723083 159.371796 45.356159 1.000000 1.000000 1.000000
+vn 0.077197 -0.675192 0.733591
+v 131.437637 159.715042 45.356159 1.000000 1.000000 1.000000
+vn 0.280505 -0.587384 0.759142
+v 131.046249 159.624359 45.356159 1.000000 1.000000 1.000000
+vn 0.264877 -0.355999 0.896161
+v 152.566498 159.715042 45.356159 1.000000 1.000000 1.000000
+vn -0.669754 -0.262908 0.694485
+v 133.254272 159.461090 45.308380 1.000000 1.000000 1.000000
+vn 0.669754 -0.262908 0.694485
+v 152.566498 159.461090 45.308380 1.000000 1.000000 1.000000
+vn -0.690247 -0.417223 0.591172
+v 133.254272 159.226669 45.168556 1.000000 1.000000 1.000000
+vn 0.690247 -0.417223 0.591172
+v 152.566498 159.226669 45.168556 1.000000 1.000000 1.000000
+vn -0.717685 -0.490139 0.494664
+v 133.254272 158.406219 44.489559 1.000000 1.000000 1.000000
+vn 0.717681 -0.490151 0.494657
+v 152.566498 158.406219 44.489559 1.000000 1.000000 1.000000
+vn -0.101696 -0.973456 0.205040
+v 134.219894 157.499252 43.739559 1.000000 1.000000 1.000000
+vn -0.397548 -0.889849 0.223886
+v 133.737091 157.620651 43.840157 1.000000 1.000000 1.000000
+vn -0.652017 -0.666225 0.361964
+v 133.383026 157.952728 44.114559 1.000000 1.000000 1.000000
+vn 0.101685 -0.973452 0.205063
+v 151.600876 157.499252 43.739559 1.000000 1.000000 1.000000
+vn 0.651809 -0.666327 0.362152
+v 152.437744 157.952728 44.114559 1.000000 1.000000 1.000000
+vn 0.397526 -0.889794 0.224142
+v 152.083694 157.620651 43.840157 1.000000 1.000000 1.000000
+vn 0.061983 -0.061038 0.996209
+v 144.846756 161.741074 45.356159 1.000000 1.000000 1.000000
+vn 0.039776 -0.080442 0.995965
+v 144.635605 161.595947 45.356159 1.000000 1.000000 1.000000
+vn -0.077197 -0.675192 0.733591
+v 154.383133 159.715042 45.356159 1.000000 1.000000 1.000000
+vn 0.135664 -0.009940 0.990705
+v 145.252319 162.826645 45.356159 1.000000 1.000000 1.000000
+vn 0.098873 -0.038546 0.994353
+v 145.163483 162.250366 45.356159 1.000000 1.000000 1.000000
+vn 0.018599 -0.089662 0.995799
+v 144.398712 161.516418 45.356159 1.000000 1.000000 1.000000
+vn -0.280506 -0.587384 0.759142
+v 154.774521 159.624359 45.356159 1.000000 1.000000 1.000000
+vn 0.153387 0.625710 0.764826
+v 158.545547 161.043411 45.356159 1.000000 1.000000 1.000000
+vn -0.449612 -0.535171 0.715151
+v 155.097687 159.371796 45.356159 1.000000 1.000000 1.000000
+vn 0.421730 0.491932 0.761674
+v 157.718994 161.474564 45.356159 1.000000 1.000000 1.000000
+vn -0.410150 -0.611910 0.676271
+v 156.220367 158.358780 45.356159 1.000000 1.000000 1.000000
+vn -0.216952 -0.704906 0.675307
+v 157.556763 157.718323 45.356159 1.000000 1.000000 1.000000
+vn 0.000000 -0.737892 0.674918
+v 159.003891 157.499252 45.356159 1.000000 1.000000 1.000000
+vn -0.153387 0.625710 0.764826
+v 159.462250 161.043411 45.356159 1.000000 1.000000 1.000000
+vn 0.595334 0.266300 0.758065
+v 157.147354 162.251755 45.356159 1.000000 1.000000 1.000000
+vn 0.654062 -0.000001 0.756441
+v 156.943924 163.220123 45.356159 1.000000 1.000000 1.000000
+vn 0.133644 0.012492 0.990951
+v 145.252319 163.613617 45.356159 1.000000 1.000000 1.000000
+vn 0.595336 -0.266299 0.758063
+v 157.147354 164.188477 45.356159 1.000000 1.000000 1.000000
+vn 0.369265 0.158468 0.915714
+v 145.075928 164.258255 45.369957 1.000000 1.000000 1.000000
+vn 0.090074 0.039566 0.995149
+v 145.128708 164.284760 45.356159 1.000000 1.000000 1.000000
+vn 0.156031 -0.313336 0.936736
+v 144.615005 161.646194 45.366959 1.000000 1.000000 1.000000
+vn 0.286369 -0.571660 0.768894
+v 144.594406 161.693619 45.398560 1.000000 1.000000 1.000000
+vn 0.075573 -0.354801 0.931883
+v 144.389709 161.573624 45.367760 1.000000 1.000000 1.000000
+vn 0.158208 -0.770702 0.617243
+v 144.374252 161.668518 45.454559 1.000000 1.000000 1.000000
+vn 0.135743 -0.644220 0.752698
+v 144.380692 161.625259 45.401360 1.000000 1.000000 1.000000
+vn 0.353840 -0.705881 0.613620
+v 144.577667 161.734100 45.448776 1.000000 1.000000 1.000000
+vn 0.033995 -0.681166 0.731339
+v 144.217178 161.614090 45.405560 1.000000 1.000000 1.000000
+vn 0.027024 -0.558805 0.828859
+v 144.217178 161.587585 45.387157 1.000000 1.000000 1.000000
+vn 0.057232 0.066132 0.996168
+v 144.791397 164.745224 45.356159 1.000000 1.000000 1.000000
+vn 0.048745 0.720043 0.692215
+v 159.003891 170.127029 45.356159 1.000000 1.000000 1.000000
+vn 0.235475 0.262322 0.935809
+v 144.761795 164.700577 45.366959 1.000000 1.000000 1.000000
+vn 0.031365 0.082953 0.996060
+v 144.573807 164.872192 45.356159 1.000000 1.000000 1.000000
+vn 0.379974 0.197579 0.903650
+v 152.566498 170.127029 45.356159 1.000000 1.000000 1.000000
+vn 0.421736 -0.491928 0.761673
+v 157.718994 164.965683 45.356159 1.000000 1.000000 1.000000
+vn 0.153391 -0.625707 0.764828
+v 158.545547 165.396851 45.356159 1.000000 1.000000 1.000000
+vn 0.195848 0.708373 0.678124
+v 160.583633 169.912155 45.356159 1.000000 1.000000 1.000000
+vn -0.153391 -0.625707 0.764828
+v 159.462250 165.396851 45.356159 1.000000 1.000000 1.000000
+vn 0.374081 0.631699 0.678984
+v 162.064240 169.278671 45.356159 1.000000 1.000000 1.000000
+vn -0.421736 -0.491928 0.761673
+v 160.288803 164.965683 45.356159 1.000000 1.000000 1.000000
+vn 0.521010 0.515867 0.680022
+v 163.354294 168.267044 45.356159 1.000000 1.000000 1.000000
+vn -0.595336 -0.266294 0.758065
+v 160.860443 164.188477 45.356159 1.000000 1.000000 1.000000
+vn 0.630289 0.372888 0.680949
+v 164.372696 166.941483 45.356159 1.000000 1.000000 1.000000
+vn 0.699772 0.213522 0.681710
+v 165.056351 165.382889 45.356159 1.000000 1.000000 1.000000
+vn -0.654067 -0.000001 0.756437
+v 161.063858 163.220123 45.356159 1.000000 1.000000 1.000000
+vn 0.729934 0.046030 0.681966
+v 165.362762 163.688950 45.356159 1.000000 1.000000 1.000000
+vn 0.720993 -0.123279 0.681888
+v 165.271347 161.965714 45.356159 1.000000 1.000000 1.000000
+vn -0.595334 0.266295 0.758067
+v 160.860443 162.251755 45.356159 1.000000 1.000000 1.000000
+vn 0.668988 -0.311019 0.675072
+v 164.788544 160.322021 45.356159 1.000000 1.000000 1.000000
+vn 0.294037 -0.686674 0.664847
+v 164.269684 159.789001 45.356159 1.000000 1.000000 1.000000
+vn 0.532333 -0.521416 0.666894
+v 164.576126 160.001083 45.356159 1.000000 1.000000 1.000000
+vn 0.074109 -0.724845 0.684915
+v 163.911774 159.715042 45.356159 1.000000 1.000000 1.000000
+vn 0.077197 -0.675193 0.733591
+v 163.624664 159.715042 45.356159 1.000000 1.000000 1.000000
+vn 0.280505 -0.587384 0.759142
+v 163.233276 159.624359 45.356159 1.000000 1.000000 1.000000
+vn 0.449612 -0.535171 0.715151
+v 162.910110 159.371796 45.356159 1.000000 1.000000 1.000000
+vn -0.421730 0.491932 0.761674
+v 160.288803 161.474564 45.356159 1.000000 1.000000 1.000000
+vn 0.410149 -0.611911 0.676271
+v 161.787430 158.358780 45.356159 1.000000 1.000000 1.000000
+vn 0.216950 -0.704907 0.675307
+v 160.451019 157.718323 45.356159 1.000000 1.000000 1.000000
+vn 0.008724 0.097133 0.995233
+v 144.217178 164.940567 45.356159 1.000000 1.000000 1.000000
+vn 0.034326 0.375340 0.926251
+v 144.217178 164.880569 45.368759 1.000000 1.000000 1.000000
+vn 0.123276 0.327312 0.936840
+v 144.555786 164.820572 45.367157 1.000000 1.000000 1.000000
+vn -0.004779 0.100070 0.994969
+v 141.603592 164.940567 45.356159 1.000000 1.000000 1.000000
+vn -0.016449 0.381096 0.924389
+v 141.603592 164.880569 45.368759 1.000000 1.000000 1.000000
+vn -0.074474 0.351867 0.933083
+v 141.431061 164.868011 45.367760 1.000000 1.000000 1.000000
+vn -0.019057 0.091753 0.995599
+v 141.422058 164.923828 45.356159 1.000000 1.000000 1.000000
+vn -0.040033 0.080517 0.995949
+v 141.185165 164.844299 45.356159 1.000000 1.000000 1.000000
+vn -0.156998 0.313156 0.936635
+v 141.205765 164.794052 45.366959 1.000000 1.000000 1.000000
+vn -0.061958 0.061015 0.996212
+v 140.974014 164.699188 45.356159 1.000000 1.000000 1.000000
+vn -0.256349 0.246799 0.934546
+v 141.007492 164.655914 45.367157 1.000000 1.000000 1.000000
+vn 0.225265 0.596707 0.770193
+v 144.539047 164.771729 45.398956 1.000000 1.000000 1.000000
+vn 0.283162 0.738290 0.612166
+v 144.524887 164.729874 45.449558 1.000000 1.000000 1.000000
+vn 0.213664 0.745410 0.631437
+v 144.477249 164.316864 46.026958 1.000000 1.000000 1.000000
+vn -0.141620 0.150240 0.978454
+v 141.749084 163.587097 46.556160 1.000000 1.000000 1.000000
+vn -0.126178 0.542205 0.830718
+v 141.749084 164.092209 46.394958 1.000000 1.000000 1.000000
+vn -0.138469 0.317358 0.938142
+v 141.749084 164.089417 46.395958 1.000000 1.000000 1.000000
+vn 0.098632 0.793225 0.600888
+v 144.071701 164.496857 45.948959 1.000000 1.000000 1.000000
+vn 0.082914 0.813885 0.575080
+v 144.217178 164.780106 45.463360 1.000000 1.000000 1.000000
+vn -0.105414 0.799034 0.591973
+v 141.749084 164.496857 45.948959 1.000000 1.000000 1.000000
+vn -0.058719 0.805061 0.590279
+v 141.603592 164.780106 45.463360 1.000000 1.000000 1.000000
+vn -0.033995 0.681166 0.731339
+v 141.603592 164.826157 45.405560 1.000000 1.000000 1.000000
+vn 0.064698 0.678298 0.731933
+v 144.217178 164.826157 45.405560 1.000000 1.000000 1.000000
+vn -0.225327 0.753608 0.617497
+v 141.343521 164.316864 46.026958 1.000000 1.000000 1.000000
+vn -0.158208 0.770715 0.617226
+v 141.446518 164.771729 45.454559 1.000000 1.000000 1.000000
+vn -0.469153 0.449624 0.760088
+v 141.343521 164.055923 46.284958 1.000000 1.000000 1.000000
+vn -0.287985 0.147529 0.946203
+v 141.346100 163.587097 46.435356 1.000000 1.000000 1.000000
+vn -0.501334 0.132127 0.855106
+v 141.343521 163.587097 46.434559 1.000000 1.000000 1.000000
+vn -0.424674 0.665368 0.613953
+v 141.317780 164.305695 46.031960 1.000000 1.000000 1.000000
+vn -0.780322 0.316519 0.539364
+v 140.994614 163.952667 45.970757 1.000000 1.000000 1.000000
+vn -0.715577 0.108841 0.690003
+v 140.998474 163.587097 46.091560 1.000000 1.000000 1.000000
+vn -0.686146 0.528806 0.499568
+v 140.998474 164.012665 45.911160 1.000000 1.000000 1.000000
+vn -0.580802 0.564701 0.586330
+v 141.064133 164.581970 45.450359 1.000000 1.000000 1.000000
+vn -0.454935 0.663524 0.593945
+v 141.146530 164.639175 45.449558 1.000000 1.000000 1.000000
+vn -0.822025 0.350053 0.449151
+v 140.966293 163.983383 45.898956 1.000000 1.000000 1.000000
+vn -0.734818 0.446425 0.510634
+v 140.851700 164.216400 45.474758 1.000000 1.000000 1.000000
+vn -0.471169 0.452086 0.757376
+v 141.038391 164.615448 45.399361 1.000000 1.000000 1.000000
+vn -0.353890 0.705968 0.613491
+v 141.243103 164.706161 45.448776 1.000000 1.000000 1.000000
+vn -0.286895 0.571075 0.769132
+v 141.226364 164.746613 45.398560 1.000000 1.000000 1.000000
+vn -0.134534 0.639983 0.756520
+v 141.440079 164.814987 45.401360 1.000000 1.000000 1.000000
+vn -0.025854 0.558246 0.829273
+v 141.603592 164.852661 45.387157 1.000000 1.000000 1.000000
+vn 0.053026 0.558094 0.828082
+v 144.217178 164.852661 45.387157 1.000000 1.000000 1.000000
+vn -0.681253 0.258078 0.685048
+v 140.764160 164.148026 45.413757 1.000000 1.000000 1.000000
+vn -0.799565 0.317266 0.509939
+v 140.804062 164.132675 45.480358 1.000000 1.000000 1.000000
+vn -0.903241 0.162889 0.397017
+v 140.940536 163.933136 45.858559 1.000000 1.000000 1.000000
+vn -0.918666 0.079353 0.386982
+v 140.743561 163.613617 45.529358 1.000000 1.000000 1.000000
+vn -0.926816 0.059078 0.370840
+v 140.757721 163.587097 45.574558 1.000000 1.000000 1.000000
+vn -0.926745 -0.065647 0.369911
+v 140.757721 162.853149 45.574558 1.000000 1.000000 1.000000
+vn -0.822088 0.089752 0.562241
+v 140.994614 163.587097 46.087357 1.000000 1.000000 1.000000
+vn -0.822192 -0.089951 0.562058
+v 140.994614 162.853149 46.087357 1.000000 1.000000 1.000000
+vn -0.916490 -0.097959 0.387880
+v 140.743561 162.826645 45.529358 1.000000 1.000000 1.000000
+vn -0.905773 -0.148698 0.396817
+v 140.940536 162.507111 45.858559 1.000000 1.000000 1.000000
+vn -0.715576 -0.108839 0.690004
+v 140.998474 162.853149 46.091560 1.000000 1.000000 1.000000
+vn -0.780989 -0.315670 0.538896
+v 140.994614 162.487564 45.970757 1.000000 1.000000 1.000000
+vn -0.818647 -0.341744 0.461551
+v 140.966293 162.456879 45.898956 1.000000 1.000000 1.000000
+vn -0.680811 -0.530791 0.504735
+v 140.998474 162.427567 45.911160 1.000000 1.000000 1.000000
+vn -0.680079 -0.504927 0.531546
+v 140.840118 162.211288 45.472580 1.000000 1.000000 1.000000
+vn -0.776155 -0.361055 0.516936
+v 140.831100 162.223862 45.473358 1.000000 1.000000 1.000000
+vn -0.658632 -0.279267 0.698723
+v 140.792480 162.205719 45.410358 1.000000 1.000000 1.000000
+vn -0.813992 -0.076991 0.575751
+v 140.701065 162.826645 45.437958 1.000000 1.000000 1.000000
+vn -0.499180 -0.047610 0.865189
+v 140.640549 162.826645 45.377357 1.000000 1.000000 1.000000
+vn -0.815914 0.057650 0.575292
+v 140.701065 163.613617 45.437958 1.000000 1.000000 1.000000
+vn -0.502483 0.036258 0.863826
+v 140.640549 163.613617 45.377357 1.000000 1.000000 1.000000
+vn -0.389227 0.148286 0.909128
+v 140.712662 164.167557 45.370956 1.000000 1.000000 1.000000
+vn 0.141597 0.150036 -0.978488
+v 141.749084 162.853149 45.856159 1.000000 1.000000 1.000000
+vn -0.141606 0.150036 -0.978487
+v 144.071701 162.853149 45.856159 1.000000 1.000000 1.000000
+vn 0.138142 0.344829 -0.928445
+v 141.749084 162.557343 45.761959 1.000000 1.000000 1.000000
+vn 0.288181 0.147499 -0.946148
+v 141.512177 162.853149 45.785156 1.000000 1.000000 1.000000
+vn -0.138152 0.344828 -0.928444
+v 144.071701 162.557343 45.761959 1.000000 1.000000 1.000000
+vn -0.288190 0.147500 -0.946145
+v 144.308594 162.853149 45.785156 1.000000 1.000000 1.000000
+vn 0.125185 0.567245 -0.813979
+v 141.749084 162.555939 45.761360 1.000000 1.000000 1.000000
+vn 0.469704 0.449849 -0.759615
+v 141.510895 162.576874 45.696556 1.000000 1.000000 1.000000
+vn 0.501244 0.132199 -0.855148
+v 141.510895 162.853149 45.784760 1.000000 1.000000 1.000000
+vn 0.435697 0.659742 -0.612298
+v 141.495438 162.430359 45.547760 1.000000 1.000000 1.000000
+vn 0.231132 0.753518 -0.615458
+v 141.510895 162.423386 45.544960 1.000000 1.000000 1.000000
+vn 0.103738 0.799112 -0.592164
+v 141.749084 162.318741 45.498959 1.000000 1.000000 1.000000
+vn 0.066230 0.812590 -0.579061
+v 141.603592 162.034088 45.013359 1.000000 1.000000 1.000000
+vn 0.192237 0.766410 -0.612912
+v 141.507034 162.025726 44.984959 1.000000 1.000000 1.000000
+vn 0.417849 0.667519 -0.616296
+v 141.324203 162.094086 44.967758 1.000000 1.000000 1.000000
+vn 0.540574 0.597749 -0.592009
+v 141.277863 162.128967 44.970158 1.000000 1.000000 1.000000
+vn 0.298866 0.560057 -0.772668
+v 141.379562 162.053619 44.964558 1.000000 1.000000 1.000000
+vn 0.438413 0.482901 -0.758024
+v 141.190308 162.015945 44.800159 1.000000 1.000000 1.000000
+vn 0.288937 0.572415 -0.767369
+v 141.322922 161.921066 44.797558 1.000000 1.000000 1.000000
+vn 0.031719 0.676226 -0.736011
+v 141.603592 161.883392 44.820759 1.000000 1.000000 1.000000
+vn 0.134047 0.635814 -0.760113
+v 141.483856 161.879211 44.807159 1.000000 1.000000 1.000000
+vn 0.159693 0.314187 -0.935834
+v 141.255966 161.764786 44.692158 1.000000 1.000000 1.000000
+vn 0.237470 0.270774 -0.932893
+v 141.087311 161.882004 44.692757 1.000000 1.000000 1.000000
+vn 0.316522 0.213000 -0.924362
+v 140.950836 162.056412 44.696758 1.000000 1.000000 1.000000
+vn 0.570325 0.380891 -0.727771
+v 141.087311 162.161072 44.814957 1.000000 1.000000 1.000000
+vn 0.066736 0.066747 -0.995536
+v 140.931519 161.782928 44.656158 1.000000 1.000000 1.000000
+vn 0.060558 0.082097 -0.994783
+v 140.980453 161.745255 44.656158 1.000000 1.000000 1.000000
+vn 0.093513 0.066332 -0.993406
+v 140.813080 161.950378 44.656158 1.000000 1.000000 1.000000
+vn 0.391427 0.142058 -0.909178
+v 140.851700 162.296417 44.704376 1.000000 1.000000 1.000000
+vn 0.091182 0.049762 -0.994590
+v 140.730682 162.066193 44.656158 1.000000 1.000000 1.000000
+vn 0.115242 0.041861 -0.992455
+v 140.674026 162.222458 44.656158 1.000000 1.000000 1.000000
+vn 0.109562 0.028974 -0.993558
+v 140.618668 162.374557 44.656158 1.000000 1.000000 1.000000
+vn 0.500358 0.033212 -0.865182
+v 140.806641 162.826645 44.726776 1.000000 1.000000 1.000000
+vn 0.039260 0.077270 -0.996237
+v 141.185165 161.593155 44.656158 1.000000 1.000000 1.000000
+vn 0.077392 0.355969 -0.931288
+v 141.456818 161.704788 44.694580 1.000000 1.000000 1.000000
+vn 0.027664 0.098491 -0.994753
+v 141.428497 161.522003 44.656158 1.000000 1.000000 1.000000
+vn 0.015541 0.093984 -0.995452
+v 141.485138 161.506653 44.656158 1.000000 1.000000 1.000000
+vn 0.016803 0.383412 -0.923424
+v 141.603592 161.699219 44.698158 1.000000 1.000000 1.000000
+vn 0.020289 0.554132 -0.832182
+v 141.603592 161.791290 44.759357 1.000000 1.000000 1.000000
+vn 0.002935 0.101623 -0.994819
+v 141.603592 161.499680 44.656158 1.000000 1.000000 1.000000
+vn -0.028420 0.549925 -0.834731
+v 144.217178 161.791290 44.759357 1.000000 1.000000 1.000000
+vn -0.018442 0.385549 -0.922503
+v 144.217178 161.699219 44.698158 1.000000 1.000000 1.000000
+vn -0.029565 0.683245 -0.729590
+v 144.217178 161.883392 44.820759 1.000000 1.000000 1.000000
+vn -0.047128 0.822486 -0.566830
+v 144.217178 162.034088 45.013359 1.000000 1.000000 1.000000
+vn -0.140945 0.639069 -0.756125
+v 144.340775 161.879211 44.806759 1.000000 1.000000 1.000000
+vn -0.075106 0.354855 -0.931900
+v 144.367813 161.704788 44.694580 1.000000 1.000000 1.000000
+vn -0.007562 0.098274 -0.995131
+v 144.217178 161.499680 44.656158 1.000000 1.000000 1.000000
+vn -0.016492 0.104435 -0.994395
+v 144.397430 161.528976 44.656158 1.000000 1.000000 1.000000
+vn -0.029963 0.082852 -0.996111
+v 144.537766 161.551300 44.656158 1.000000 1.000000 1.000000
+vn -0.157706 0.313850 -0.936284
+v 144.564804 161.764786 44.692158 1.000000 1.000000 1.000000
+vn -0.285570 0.572880 -0.768283
+v 144.497849 161.921066 44.797558 1.000000 1.000000 1.000000
+vn 0.654043 -0.000001 -0.756457
+v 156.943924 163.220123 44.656158 1.000000 1.000000 1.000000
+vn 0.595338 -0.266300 -0.758062
+v 157.147354 164.188477 44.656158 1.000000 1.000000 1.000000
+vn -0.051651 0.089847 -0.994615
+v 144.631744 161.605728 44.656158 1.000000 1.000000 1.000000
+vn 0.595334 0.266300 -0.758065
+v 157.147354 162.251755 44.656158 1.000000 1.000000 1.000000
+vn 0.379973 -0.197579 -0.903650
+v 152.566498 159.715042 44.656158 1.000000 1.000000 1.000000
+vn -0.077197 -0.675193 -0.733591
+v 154.383133 159.715042 44.656158 1.000000 1.000000 1.000000
+vn -0.379974 -0.197580 -0.903649
+v 133.254272 159.715042 44.656158 1.000000 1.000000 1.000000
+vn 0.077197 -0.675192 -0.733591
+v 131.437637 159.715042 44.656158 1.000000 1.000000 1.000000
+vn 0.280506 -0.587384 -0.759142
+v 131.046249 159.624359 44.656158 1.000000 1.000000 1.000000
+vn 0.138641 0.007429 -0.990315
+v 140.568451 162.826645 44.656158 1.000000 1.000000 1.000000
+vn 0.449614 -0.535169 -0.715152
+v 130.723083 159.371796 44.656158 1.000000 1.000000 1.000000
+vn -0.595324 0.266485 -0.758008
+v 128.672897 162.251755 44.656158 1.000000 1.000000 1.000000
+vn 0.142293 -0.002075 -0.989822
+v 140.568451 163.613617 44.656158 1.000000 1.000000 1.000000
+vn 0.131666 -0.015199 -0.991178
+v 140.572311 163.744766 44.656158 1.000000 1.000000 1.000000
+vn 0.134762 -0.023246 -0.990605
+v 140.603226 163.923370 44.656158 1.000000 1.000000 1.000000
+vn 0.099836 -0.036810 -0.994323
+v 140.641846 164.148026 44.656158 1.000000 1.000000 1.000000
+vn 0.081722 -0.052254 -0.995284
+v 140.791183 164.478714 44.656158 1.000000 1.000000 1.000000
+vn 0.078350 -0.069893 -0.994473
+v 140.977875 164.693588 44.656158 1.000000 1.000000 1.000000
+vn 0.056291 -0.070464 -0.995925
+v 141.015213 164.735458 44.656158 1.000000 1.000000 1.000000
+vn 0.051641 -0.089836 -0.994617
+v 141.189026 164.834534 44.656158 1.000000 1.000000 1.000000
+vn 0.029956 -0.082823 -0.996114
+v 141.283005 164.888947 44.656158 1.000000 1.000000 1.000000
+vn -0.653899 0.000008 -0.756582
+v 128.876846 163.220123 44.656178 1.000000 1.000000 1.000000
+vn -0.595337 -0.266483 -0.757998
+v 128.672897 164.188477 44.656178 1.000000 1.000000 1.000000
+vn 0.007563 -0.098280 -0.995130
+v 141.603592 164.940567 44.656158 1.000000 1.000000 1.000000
+vn -0.421825 -0.491902 -0.761640
+v 128.101257 164.965683 44.656178 1.000000 1.000000 1.000000
+vn -0.002363 -0.102014 -0.994780
+v 144.217178 164.940567 44.656158 1.000000 1.000000 1.000000
+vn -0.230702 0.408902 -0.882936
+v 133.254272 170.127029 44.656178 1.000000 1.000000 1.000000
+vn -0.048745 0.720043 -0.692216
+v 126.816872 170.127029 44.656178 1.000000 1.000000 1.000000
+vn -0.153462 -0.625650 -0.764861
+v 127.275223 165.396851 44.656178 1.000000 1.000000 1.000000
+vn -0.195813 0.708373 -0.678133
+v 125.237137 169.912155 44.656178 1.000000 1.000000 1.000000
+vn 0.153461 -0.625650 -0.764860
+v 126.358528 165.396851 44.656178 1.000000 1.000000 1.000000
+vn -0.374055 0.631724 -0.678975
+v 123.756149 169.278671 44.656178 1.000000 1.000000 1.000000
+vn 0.421823 -0.491903 -0.761641
+v 125.532486 164.965683 44.656178 1.000000 1.000000 1.000000
+vn -0.520990 0.515880 -0.680027
+v 122.466087 168.267044 44.656178 1.000000 1.000000 1.000000
+vn 0.595336 -0.266480 -0.758000
+v 124.960846 164.188477 44.656178 1.000000 1.000000 1.000000
+vn -0.630320 0.372872 -0.680928
+v 121.447563 166.941483 44.656178 1.000000 1.000000 1.000000
+vn 0.653916 -0.000001 -0.756567
+v 124.756905 163.220123 44.656178 1.000000 1.000000 1.000000
+vn -0.699861 0.213329 -0.681679
+v 120.764168 165.382889 44.656178 1.000000 1.000000 1.000000
+vn 0.595333 0.266481 -0.758002
+v 124.960846 162.251755 44.656178 1.000000 1.000000 1.000000
+vn -0.720995 -0.123144 -0.681910
+v 120.549805 161.965714 44.656178 1.000000 1.000000 1.000000
+vn -0.729893 0.045895 -0.682019
+v 120.458519 163.688950 44.656178 1.000000 1.000000 1.000000
+vn -0.669075 -0.310847 -0.675065
+v 121.032089 160.322021 44.656178 1.000000 1.000000 1.000000
+vn -0.532336 -0.521487 -0.666835
+v 121.244400 160.001083 44.656178 1.000000 1.000000 1.000000
+vn -0.293966 -0.686650 -0.664903
+v 121.551079 159.789001 44.656178 1.000000 1.000000 1.000000
+vn -0.074188 -0.724858 -0.684892
+v 121.908607 159.715042 44.656178 1.000000 1.000000 1.000000
+vn -0.077337 -0.675120 -0.733643
+v 122.196495 159.715042 44.656178 1.000000 1.000000 1.000000
+vn -0.280438 -0.587642 -0.758967
+v 122.587112 159.624359 44.656178 1.000000 1.000000 1.000000
+vn -0.449260 -0.535336 -0.715248
+v 122.910919 159.371796 44.656178 1.000000 1.000000 1.000000
+vn -0.410132 -0.611903 -0.676289
+v 124.033859 158.358780 44.656178 1.000000 1.000000 1.000000
+vn 0.421816 0.491909 -0.761641
+v 125.532486 161.474564 44.656178 1.000000 1.000000 1.000000
+vn -0.216990 -0.704896 -0.675305
+v 125.370003 157.718323 44.656158 1.000000 1.000000 1.000000
+vn 0.153451 0.625659 -0.764856
+v 126.358528 161.043411 44.656178 1.000000 1.000000 1.000000
+vn -0.000001 -0.737896 -0.674914
+v 126.816872 157.499252 44.656158 1.000000 1.000000 1.000000
+vn -0.153465 0.625650 -0.764860
+v 127.275223 161.043411 44.656158 1.000000 1.000000 1.000000
+vn 0.216929 -0.704903 -0.675317
+v 128.263748 157.718323 44.656158 1.000000 1.000000 1.000000
+vn 0.410133 -0.611932 -0.676262
+v 129.600418 158.358780 44.656158 1.000000 1.000000 1.000000
+vn -0.421818 0.491907 -0.761641
+v 128.101257 161.474564 44.656158 1.000000 1.000000 1.000000
+vn 0.421736 -0.491928 -0.761673
+v 157.718994 164.965683 44.656158 1.000000 1.000000 1.000000
+vn 0.230708 0.408910 -0.882931
+v 152.566498 170.127029 44.656158 1.000000 1.000000 1.000000
+vn -0.029134 -0.099001 -0.994661
+v 144.392273 164.918243 44.656158 1.000000 1.000000 1.000000
+vn -0.015753 -0.092606 -0.995578
+v 144.335632 164.934998 44.656158 1.000000 1.000000 1.000000
+vn 0.153391 -0.625707 -0.764828
+v 158.545547 165.396851 44.656158 1.000000 1.000000 1.000000
+vn 0.048745 0.720043 -0.692216
+v 159.003891 170.127029 44.656158 1.000000 1.000000 1.000000
+vn -0.153391 -0.625707 -0.764828
+v 159.462250 165.396851 44.656158 1.000000 1.000000 1.000000
+vn 0.195848 0.708373 -0.678124
+v 160.583633 169.912155 44.656158 1.000000 1.000000 1.000000
+vn 0.374081 0.631699 -0.678985
+v 162.064240 169.278671 44.656158 1.000000 1.000000 1.000000
+vn -0.421736 -0.491928 -0.761673
+v 160.288803 164.965683 44.656158 1.000000 1.000000 1.000000
+vn 0.521010 0.515868 -0.680022
+v 163.354294 168.267044 44.656158 1.000000 1.000000 1.000000
+vn -0.595336 -0.266294 -0.758065
+v 160.860443 164.188477 44.656158 1.000000 1.000000 1.000000
+vn 0.630289 0.372888 -0.680949
+v 164.372696 166.941483 44.656158 1.000000 1.000000 1.000000
+vn 0.699772 0.213522 -0.681710
+v 165.056351 165.382889 44.656158 1.000000 1.000000 1.000000
+vn -0.654067 -0.000001 -0.756437
+v 161.063858 163.220123 44.656158 1.000000 1.000000 1.000000
+vn 0.729934 0.046030 -0.681966
+v 165.362762 163.688950 44.656158 1.000000 1.000000 1.000000
+vn 0.720993 -0.123279 -0.681888
+v 165.271347 161.965714 44.656158 1.000000 1.000000 1.000000
+vn -0.595334 0.266295 -0.758067
+v 160.860443 162.251755 44.656158 1.000000 1.000000 1.000000
+vn 0.668988 -0.311019 -0.675072
+v 164.788544 160.322021 44.656158 1.000000 1.000000 1.000000
+vn 0.532333 -0.521416 -0.666894
+v 164.576126 160.001083 44.656158 1.000000 1.000000 1.000000
+vn 0.294037 -0.686674 -0.664847
+v 164.269684 159.789001 44.656158 1.000000 1.000000 1.000000
+vn 0.074109 -0.724845 -0.684914
+v 163.911774 159.715042 44.656158 1.000000 1.000000 1.000000
+vn 0.077197 -0.675192 -0.733591
+v 163.624664 159.715042 44.656158 1.000000 1.000000 1.000000
+vn 0.280506 -0.587384 -0.759142
+v 163.233276 159.624359 44.656158 1.000000 1.000000 1.000000
+vn 0.449612 -0.535171 -0.715151
+v 162.910110 159.371796 44.656158 1.000000 1.000000 1.000000
+vn -0.421730 0.491932 -0.761674
+v 160.288803 161.474564 44.656158 1.000000 1.000000 1.000000
+vn 0.410149 -0.611911 -0.676271
+v 161.787430 158.358780 44.656158 1.000000 1.000000 1.000000
+vn -0.153387 0.625710 -0.764826
+v 159.462250 161.043411 44.656158 1.000000 1.000000 1.000000
+vn 0.216950 -0.704906 -0.675307
+v 160.451019 157.718323 44.656158 1.000000 1.000000 1.000000
+vn 0.000000 -0.737892 -0.674918
+v 159.003891 157.499252 44.656158 1.000000 1.000000 1.000000
+vn 0.153387 0.625710 -0.764826
+v 158.545547 161.043411 44.656158 1.000000 1.000000 1.000000
+vn -0.216951 -0.704906 -0.675307
+v 157.556763 157.718323 44.656158 1.000000 1.000000 1.000000
+vn 0.421730 0.491932 -0.761674
+v 157.718994 161.474564 44.656158 1.000000 1.000000 1.000000
+vn -0.410150 -0.611910 -0.676271
+v 156.220367 158.358780 44.656158 1.000000 1.000000 1.000000
+vn -0.449612 -0.535171 -0.715151
+v 155.097687 159.371796 44.656158 1.000000 1.000000 1.000000
+vn -0.280505 -0.587384 -0.759142
+v 154.774521 159.624359 44.656158 1.000000 1.000000 1.000000
+vn -0.039263 -0.077277 -0.996236
+v 144.635605 164.847076 44.656158 1.000000 1.000000 1.000000
+vn -0.060166 -0.083150 -0.994719
+v 144.840317 164.694992 44.656158 1.000000 1.000000 1.000000
+vn -0.159693 -0.314193 -0.935832
+v 144.564804 164.675461 44.692158 1.000000 1.000000 1.000000
+vn -0.077607 -0.355649 -0.931392
+v 144.363953 164.735458 44.694580 1.000000 1.000000 1.000000
+vn -0.065614 -0.066508 -0.995626
+v 144.889252 164.658707 44.656158 1.000000 1.000000 1.000000
+vn -0.237154 -0.270727 -0.932987
+v 144.733459 164.558243 44.692757 1.000000 1.000000 1.000000
+vn -0.134048 -0.635832 -0.760098
+v 144.336914 164.561035 44.807159 1.000000 1.000000 1.000000
+vn -0.288955 -0.572404 -0.767371
+v 144.497849 164.519180 44.797558 1.000000 1.000000 1.000000
+vn -0.016610 -0.383126 -0.923547
+v 144.217178 164.741043 44.698158 1.000000 1.000000 1.000000
+vn 0.018458 -0.385479 -0.922532
+v 141.603592 164.741043 44.698158 1.000000 1.000000 1.000000
+vn 0.016490 -0.104410 -0.994398
+v 141.423340 164.911270 44.656158 1.000000 1.000000 1.000000
+vn 0.075109 -0.354846 -0.931903
+v 141.452957 164.735458 44.694580 1.000000 1.000000 1.000000
+vn 0.157709 -0.313843 -0.936285
+v 141.255966 164.675461 44.692158 1.000000 1.000000 1.000000
+vn 0.243054 -0.269019 -0.931962
+v 141.084732 164.555450 44.692757 1.000000 1.000000 1.000000
+vn 0.327497 -0.202037 -0.922999
+v 140.949554 164.379639 44.696758 1.000000 1.000000 1.000000
+vn -0.316506 -0.212842 -0.924404
+v 144.869934 164.383835 44.696758 1.000000 1.000000 1.000000
+vn -0.438420 -0.482909 -0.758015
+v 144.630463 164.424286 44.800159 1.000000 1.000000 1.000000
+vn -0.093759 -0.066229 -0.993390
+v 145.007690 164.489883 44.656158 1.000000 1.000000 1.000000
+vn -0.091179 -0.049759 -0.994591
+v 145.090088 164.374069 44.656158 1.000000 1.000000 1.000000
+vn -0.115244 -0.041862 -0.992455
+v 145.146744 164.217789 44.656158 1.000000 1.000000 1.000000
+vn -0.391428 -0.142057 -0.909178
+v 144.969070 164.143829 44.704376 1.000000 1.000000 1.000000
+vn -0.109560 -0.028975 -0.993558
+v 145.202103 164.065704 44.656158 1.000000 1.000000 1.000000
+vn -0.817047 -0.049626 -0.574431
+v 144.809418 163.613617 44.928757 1.000000 1.000000 1.000000
+vn -0.688610 -0.243789 -0.682922
+v 144.802979 164.074066 44.844158 1.000000 1.000000 1.000000
+vn -0.500357 -0.033213 -0.865182
+v 145.014130 163.613617 44.726776 1.000000 1.000000 1.000000
+vn -0.570311 -0.380917 -0.727769
+v 144.733459 164.279190 44.814957 1.000000 1.000000 1.000000
+vn -0.138641 -0.007429 -0.990315
+v 145.252319 163.613617 44.656158 1.000000 1.000000 1.000000
+vn -0.816674 0.038577 -0.575809
+v 144.809418 162.826645 44.928757 1.000000 1.000000 1.000000
+vn -0.500905 0.024278 -0.865161
+v 145.014130 162.826645 44.726776 1.000000 1.000000 1.000000
+vn -0.142294 0.002075 -0.989822
+v 145.252319 162.826645 44.656158 1.000000 1.000000 1.000000
+vn -0.748897 0.159925 -0.643100
+v 144.826157 162.589432 44.882359 1.000000 1.000000 1.000000
+vn -0.131666 0.015199 -0.991178
+v 145.248459 162.695480 44.656158 1.000000 1.000000 1.000000
+vn -0.444687 0.090858 -0.891066
+v 145.014130 162.554550 44.714359 1.000000 1.000000 1.000000
+vn -0.134762 0.023246 -0.990605
+v 145.217545 162.516876 44.656158 1.000000 1.000000 1.000000
+vn -0.099837 0.036810 -0.994323
+v 145.178925 162.292221 44.656158 1.000000 1.000000 1.000000
+vn -0.327492 0.202034 -0.923001
+v 144.871216 162.060593 44.696758 1.000000 1.000000 1.000000
+vn -0.081727 0.052255 -0.995284
+v 145.029587 161.961533 44.656158 1.000000 1.000000 1.000000
+vn -0.078338 0.069895 -0.994474
+v 144.842896 161.746643 44.656158 1.000000 1.000000 1.000000
+vn -0.243033 0.269017 -0.931968
+v 144.736038 161.884781 44.692757 1.000000 1.000000 1.000000
+vn -0.582478 0.345709 -0.735666
+v 144.734741 162.165253 44.815376 1.000000 1.000000 1.000000
+vn -0.056288 0.070474 -0.995924
+v 144.805557 161.704788 44.656158 1.000000 1.000000 1.000000
+vn -0.433597 0.486169 -0.758705
+v 144.631744 162.017349 44.800159 1.000000 1.000000 1.000000
+vn -0.713489 0.416683 -0.563302
+v 144.621445 162.251755 45.002159 1.000000 1.000000 1.000000
+vn -0.454708 0.663423 -0.594231
+v 144.496567 162.095490 44.967758 1.000000 1.000000 1.000000
+vn -0.526415 0.604947 -0.597434
+v 144.545486 162.130371 44.970360 1.000000 1.000000 1.000000
+vn -0.442763 0.660286 -0.606616
+v 144.325333 162.430359 45.547760 1.000000 1.000000 1.000000
+vn -0.801769 0.342561 -0.489712
+v 144.644623 162.387100 45.053558 1.000000 1.000000 1.000000
+vn -0.775171 0.315982 -0.547052
+v 144.514587 162.638275 45.511757 1.000000 1.000000 1.000000
+vn -0.462029 0.460710 -0.757809
+v 144.309875 162.576874 45.696556 1.000000 1.000000 1.000000
+vn -0.218992 0.746038 -0.628864
+v 144.309875 162.423386 45.544960 1.000000 1.000000 1.000000
+vn -0.674912 0.542435 -0.500258
+v 144.513306 162.603378 45.476776 1.000000 1.000000 1.000000
+vn -0.101014 0.793904 -0.599594
+v 144.071701 162.318741 45.498959 1.000000 1.000000 1.000000
+vn -0.193884 0.775639 -0.600660
+v 144.316315 162.025726 44.984360 1.000000 1.000000 1.000000
+vn -0.359184 0.707244 -0.608927
+v 144.441208 162.053619 44.964558 1.000000 1.000000 1.000000
+vn -0.130745 0.571456 -0.810151
+v 144.071701 162.555939 45.761360 1.000000 1.000000 1.000000
+vn -0.791799 0.096460 -0.603117
+v 144.513306 162.853149 45.582760 1.000000 1.000000 1.000000
+vn -0.501244 0.132198 -0.855148
+v 144.309875 162.853149 45.784760 1.000000 1.000000 1.000000
+vn -0.141606 -0.150036 -0.978487
+v 144.071701 163.587097 45.856159 1.000000 1.000000 1.000000
+vn -0.288189 -0.147499 -0.946145
+v 144.308594 163.587097 45.785156 1.000000 1.000000 1.000000
+vn -0.501244 -0.132199 -0.855148
+v 144.309875 163.587097 45.784760 1.000000 1.000000 1.000000
+vn -0.138110 -0.346650 -0.927771
+v 144.071701 163.882904 45.761959 1.000000 1.000000 1.000000
+vn -0.469701 -0.449856 -0.759612
+v 144.309875 163.863373 45.696556 1.000000 1.000000 1.000000
+vn -0.791799 -0.096459 -0.603117
+v 144.513306 163.587097 45.582760 1.000000 1.000000 1.000000
+vn -0.435697 -0.659742 -0.612298
+v 144.325333 164.009888 45.547760 1.000000 1.000000 1.000000
+vn -0.777137 -0.313443 -0.545721
+v 144.514587 163.801971 45.511757 1.000000 1.000000 1.000000
+vn -0.125131 -0.568854 -0.812864
+v 144.071701 163.884293 45.761360 1.000000 1.000000 1.000000
+vn -0.231131 -0.753514 -0.615464
+v 144.309875 164.016861 45.544960 1.000000 1.000000 1.000000
+vn -0.891094 0.070770 -0.448266
+v 144.514587 162.853149 45.580360 1.000000 1.000000 1.000000
+vn -0.891340 -0.071354 -0.447684
+v 144.514587 163.587097 45.580360 1.000000 1.000000 1.000000
+vn -0.931188 0.068613 -0.358025
+v 144.654922 162.853149 45.278759 1.000000 1.000000 1.000000
+vn -0.900698 0.161400 -0.403352
+v 144.548065 162.649429 45.445759 1.000000 1.000000 1.000000
+vn -0.930891 -0.061472 -0.360089
+v 144.654922 163.587097 45.278759 1.000000 1.000000 1.000000
+vn -0.919079 0.078283 -0.386221
+v 144.667801 162.826645 45.233559 1.000000 1.000000 1.000000
+vn -0.813915 0.350619 -0.463258
+v 144.532608 162.620132 45.469559 1.000000 1.000000 1.000000
+vn -0.873517 0.205680 -0.441208
+v 144.684525 162.615952 45.140556 1.000000 1.000000 1.000000
+vn -0.922744 -0.080890 -0.376828
+v 144.667801 163.613617 45.233559 1.000000 1.000000 1.000000
+vn -0.796677 -0.321595 -0.511745
+v 144.670364 164.018250 45.062157 1.000000 1.000000 1.000000
+vn -0.758175 -0.393433 -0.519982
+v 144.656219 164.065704 45.045357 1.000000 1.000000 1.000000
+vn -0.901513 -0.146208 -0.407306
+v 144.548065 163.790817 45.445759 1.000000 1.000000 1.000000
+vn -0.812133 -0.344203 -0.471132
+v 144.532608 163.820114 45.469559 1.000000 1.000000 1.000000
+vn -0.675081 -0.528576 -0.514657
+v 144.513306 163.836868 45.476776 1.000000 1.000000 1.000000
+vn -0.666331 -0.482809 -0.568241
+v 144.620163 164.191269 45.001358 1.000000 1.000000 1.000000
+vn -0.540567 -0.597762 -0.592003
+v 144.542908 164.311279 44.970158 1.000000 1.000000 1.000000
+vn -0.417854 -0.667541 -0.616269
+v 144.496567 164.346161 44.967758 1.000000 1.000000 1.000000
+vn -0.192221 -0.766415 -0.612910
+v 144.313736 164.414536 44.984959 1.000000 1.000000 1.000000
+vn -0.298910 -0.560135 -0.772594
+v 144.441208 164.386612 44.964558 1.000000 1.000000 1.000000
+vn 0.141597 -0.150036 -0.978488
+v 141.749084 163.587097 45.856159 1.000000 1.000000 1.000000
+vn 0.138103 -0.346650 -0.927772
+v 141.749084 163.882904 45.761959 1.000000 1.000000 1.000000
+vn 0.130667 -0.573059 -0.809030
+v 141.749084 163.884293 45.761360 1.000000 1.000000 1.000000
+vn -0.103743 -0.799104 -0.592174
+v 144.071701 164.121506 45.498959 1.000000 1.000000 1.000000
+vn 0.100998 -0.793896 -0.599607
+v 141.749084 164.121506 45.498959 1.000000 1.000000 1.000000
+vn 0.462015 -0.460716 -0.757815
+v 141.510895 163.863373 45.696556 1.000000 1.000000 1.000000
+vn 0.047063 -0.822501 -0.566813
+v 141.603592 164.406158 45.013359 1.000000 1.000000 1.000000
+vn -0.066171 -0.812591 -0.579066
+v 144.217178 164.406158 45.013359 1.000000 1.000000 1.000000
+vn -0.031699 -0.676254 -0.735986
+v 144.217178 164.556854 44.820759 1.000000 1.000000 1.000000
+vn 0.029563 -0.683272 -0.729565
+v 141.603592 164.556854 44.820759 1.000000 1.000000 1.000000
+vn -0.020257 -0.554119 -0.832191
+v 144.217178 164.648941 44.759357 1.000000 1.000000 1.000000
+vn 0.140941 -0.639076 -0.756120
+v 141.479996 164.561035 44.806759 1.000000 1.000000 1.000000
+vn 0.028415 -0.549900 -0.834747
+v 141.603592 164.648941 44.759357 1.000000 1.000000 1.000000
+vn 0.285351 -0.573576 -0.767845
+v 141.322922 164.519180 44.797558 1.000000 1.000000 1.000000
+vn 0.434471 -0.486272 -0.758138
+v 141.189026 164.422897 44.800159 1.000000 1.000000 1.000000
+vn 0.353122 -0.710174 -0.609063
+v 141.379562 164.386612 44.964558 1.000000 1.000000 1.000000
+vn 0.454975 -0.662540 -0.595012
+v 141.324203 164.346161 44.967758 1.000000 1.000000 1.000000
+vn 0.713501 -0.416661 -0.563303
+v 141.199326 164.188477 45.002159 1.000000 1.000000 1.000000
+vn 0.582477 -0.345712 -0.735666
+v 141.086029 164.274994 44.815376 1.000000 1.000000 1.000000
+vn 0.532491 -0.600062 -0.596974
+v 141.275284 164.309875 44.970360 1.000000 1.000000 1.000000
+vn 0.218578 -0.745889 -0.629184
+v 141.510895 164.016861 45.544960 1.000000 1.000000 1.000000
+vn 0.442837 -0.659949 -0.606928
+v 141.495438 164.009888 45.547760 1.000000 1.000000 1.000000
+vn 0.193909 -0.775649 -0.600640
+v 141.504456 164.414536 44.984360 1.000000 1.000000 1.000000
+vn 0.775171 -0.315982 -0.547052
+v 141.306183 163.801971 45.511757 1.000000 1.000000 1.000000
+vn 0.791799 -0.096460 -0.603117
+v 141.307465 163.587097 45.582760 1.000000 1.000000 1.000000
+vn 0.501244 -0.132198 -0.855148
+v 141.510895 163.587097 45.784760 1.000000 1.000000 1.000000
+vn 0.288181 -0.147500 -0.946148
+v 141.512177 163.587097 45.785156 1.000000 1.000000 1.000000
+vn 0.791799 0.096459 -0.603117
+v 141.307465 162.853149 45.582760 1.000000 1.000000 1.000000
+vn 0.891094 -0.070770 -0.448266
+v 141.306183 163.587097 45.580360 1.000000 1.000000 1.000000
+vn 0.891340 0.071354 -0.447684
+v 141.306183 162.853149 45.580360 1.000000 1.000000 1.000000
+vn 0.777137 0.313443 -0.545721
+v 141.306183 162.638275 45.511757 1.000000 1.000000 1.000000
+vn 0.931186 -0.068596 -0.358032
+v 141.165848 163.587097 45.278759 1.000000 1.000000 1.000000
+vn 0.900698 -0.161402 -0.403351
+v 141.272705 163.790817 45.445759 1.000000 1.000000 1.000000
+vn 0.930892 0.061475 -0.360086
+v 141.165848 162.853149 45.278759 1.000000 1.000000 1.000000
+vn 0.919074 -0.078287 -0.386231
+v 141.152969 163.613617 45.233559 1.000000 1.000000 1.000000
+vn 0.922756 0.080872 -0.376803
+v 141.152969 162.826645 45.233559 1.000000 1.000000 1.000000
+vn 0.901513 0.146209 -0.407305
+v 141.272705 162.649429 45.445759 1.000000 1.000000 1.000000
+vn 0.796641 0.321658 -0.511761
+v 141.150406 162.421997 45.062157 1.000000 1.000000 1.000000
+vn 0.817047 0.049625 -0.574431
+v 141.011353 162.826645 44.928757 1.000000 1.000000 1.000000
+vn 0.688603 0.243799 -0.682926
+v 141.017792 162.366180 44.844158 1.000000 1.000000 1.000000
+vn 0.873514 -0.205694 -0.441207
+v 141.136246 163.824295 45.140556 1.000000 1.000000 1.000000
+vn 0.816674 -0.038579 -0.575809
+v 141.011353 163.613617 44.928757 1.000000 1.000000 1.000000
+vn 0.758165 0.393461 -0.519976
+v 141.164551 162.374557 45.045357 1.000000 1.000000 1.000000
+vn 0.812133 0.344207 -0.471128
+v 141.288162 162.620132 45.469559 1.000000 1.000000 1.000000
+vn 0.675084 0.528577 -0.514653
+v 141.307465 162.603378 45.476776 1.000000 1.000000 1.000000
+vn 0.666357 0.482792 -0.568225
+v 141.200607 162.248978 45.001358 1.000000 1.000000 1.000000
+vn 0.500905 -0.024280 -0.865161
+v 140.806641 163.613617 44.726776 1.000000 1.000000 1.000000
+vn 0.748894 -0.159931 -0.643102
+v 140.994614 163.850815 44.882359 1.000000 1.000000 1.000000
+vn 0.444686 -0.090860 -0.891066
+v 140.806641 163.885696 44.714359 1.000000 1.000000 1.000000
+vn 0.801766 -0.342568 -0.489713
+v 141.176147 164.053131 45.053558 1.000000 1.000000 1.000000
+vn 0.674913 -0.542440 -0.500251
+v 141.307465 163.836868 45.476776 1.000000 1.000000 1.000000
+vn 0.813916 -0.350624 -0.463254
+v 141.288162 163.820114 45.469559 1.000000 1.000000 1.000000
+vn 0.736183 0.333970 0.588641
+v 152.566498 162.801529 54.648766 1.000000 1.000000 1.000000
+vn 0.680189 -0.361672 -0.637602
+v 152.566498 162.576874 54.027565 1.000000 1.000000 1.000000
+vn 0.774680 0.070909 0.628365
+v 152.566498 162.987106 54.572166 1.000000 1.000000 1.000000
+vn 0.736980 0.322997 0.593746
+v 152.566498 160.606659 56.285168 1.000000 1.000000 1.000000
+vn 0.649986 -0.084999 -0.755178
+v 152.566498 162.948029 53.874367 1.000000 1.000000 1.000000
+vn 0.717924 -0.465759 -0.517353
+v 152.566498 160.380615 55.664165 1.000000 1.000000 1.000000
+vn 0.738928 -0.200846 0.643153
+v 152.566498 163.179657 54.604568 1.000000 1.000000 1.000000
+vn 0.677891 0.219344 -0.701678
+v 152.566498 163.331757 53.939167 1.000000 1.000000 1.000000
+vn 0.672540 -0.202138 0.711920
+v 152.566498 169.822845 57.721180 1.000000 1.000000 1.000000
+vn 0.745165 0.182448 -0.641438
+v 152.566498 169.974945 57.055767 1.000000 1.000000 1.000000
+vn 0.641982 0.159328 0.749982
+v 152.566498 170.277725 57.773560 1.000000 1.000000 1.000000
+vn 0.786558 -0.128474 -0.604004
+v 152.566498 170.202362 57.082169 1.000000 1.000000 1.000000
+vn 0.655553 0.532502 0.535436
+v 152.566498 170.700500 57.523968 1.000000 1.000000 1.000000
+vn 0.766657 -0.452621 -0.455379
+v 152.566498 170.413071 56.957367 1.000000 1.000000 1.000000
+vn 0.667592 0.698883 0.256677
+v 152.566498 170.997726 57.026768 1.000000 1.000000 1.000000
+vn 0.751648 -0.618898 -0.228014
+v 152.566498 170.562363 56.708767 1.000000 1.000000 1.000000
+vn 0.186660 0.893751 0.407882
+v 152.566498 171.103760 56.390568 1.000000 1.000000 1.000000
+vn 0.376631 -0.898656 0.224872
+v 152.566498 170.615402 56.390568 1.000000 1.000000 1.000000
+vn 0.701763 0.055566 0.710240
+v 152.437744 160.142014 56.631168 1.000000 1.000000 1.000000
+vn 0.652507 -0.650450 -0.388781
+v 152.437744 159.917374 56.010166 1.000000 1.000000 1.000000
+vn 0.446206 -0.231505 0.864468
+v 152.083694 159.802948 56.884567 1.000000 1.000000 1.000000
+vn 0.395595 -0.880577 -0.260939
+v 152.083694 159.576904 56.263367 1.000000 1.000000 1.000000
+vn 0.124444 -0.318491 0.939722
+v 151.600876 159.678757 56.977165 1.000000 1.000000 1.000000
+vn 0.100795 -0.963938 -0.246298
+v 151.600876 159.452728 56.356167 1.000000 1.000000 1.000000
+vn -0.124370 -0.318507 0.939726
+v 134.219894 159.678757 56.977165 1.000000 1.000000 1.000000
+vn -0.100838 -0.963925 -0.246335
+v 134.219894 159.452728 56.356167 1.000000 1.000000 1.000000
+vn -0.446053 -0.232173 0.864368
+v 133.737091 159.802948 56.884567 1.000000 1.000000 1.000000
+vn -0.395072 -0.880504 -0.261976
+v 133.737091 159.576904 56.263367 1.000000 1.000000 1.000000
+vn 0.779439 -0.386271 0.493223
+v 152.566498 170.371201 45.449959 1.000000 1.000000 1.000000
+vn 0.646671 0.470305 -0.600524
+v 152.566498 170.615402 44.843758 1.000000 1.000000 1.000000
+vn 0.757617 -0.601928 0.252389
+v 152.566498 170.549805 45.706158 1.000000 1.000000 1.000000
+vn 0.662715 0.690628 -0.289555
+v 152.566498 170.972595 45.356159 1.000000 1.000000 1.000000
+vn 0.380805 -0.898329 -0.219073
+v 152.566498 170.615402 46.056160 1.000000 1.000000 1.000000
+vn 0.182636 0.891976 -0.413549
+v 152.566498 171.103760 46.056160 1.000000 1.000000 1.000000
+vn 0.745323 0.336453 -0.575580
+v 152.566498 159.470871 44.562359 1.000000 1.000000 1.000000
+vn 0.737243 0.352946 -0.576109
+v 152.566498 158.650406 43.883358 1.000000 1.000000 1.000000
+vn 0.704403 0.092581 -0.703736
+v 152.437744 158.196915 43.508358 1.000000 1.000000 1.000000
+vn 0.451600 -0.192867 -0.871126
+v 152.083694 157.864838 43.233757 1.000000 1.000000 1.000000
+vn 0.126766 -0.278679 -0.951981
+v 151.600876 157.743439 43.133358 1.000000 1.000000 1.000000
+vn -0.126794 -0.278690 -0.951975
+v 134.219894 157.743439 43.133358 1.000000 1.000000 1.000000
+vn -0.451567 -0.192898 -0.871136
+v 133.737091 157.864838 43.233757 1.000000 1.000000 1.000000
+vn -0.745323 0.336453 -0.575580
+v 133.254272 159.470871 44.562359 1.000000 1.000000 1.000000
+vn -0.704405 0.092591 -0.703733
+v 133.383026 158.196915 43.508358 1.000000 1.000000 1.000000
+vn -0.737244 0.352946 -0.576109
+v 133.254272 158.650406 43.883358 1.000000 1.000000 1.000000
+vn -0.646673 0.470306 -0.600522
+v 133.254272 170.615402 44.843781 1.000000 1.000000 1.000000
+vn -0.662715 0.690627 -0.289557
+v 133.254272 170.972595 45.356178 1.000000 1.000000 1.000000
+vn -0.182637 0.891976 -0.413549
+v 133.254272 171.103760 46.056179 1.000000 1.000000 1.000000
+vn -0.186660 0.893751 0.407882
+v 133.254272 171.103760 56.390572 1.000000 1.000000 1.000000
+vn 0.275270 0.614408 0.739412
+v 133.028961 171.169342 56.390572 1.000000 1.000000 1.000000
+vn 0.275270 0.614408 -0.739411
+v 133.028961 171.169342 46.056179 1.000000 1.000000 1.000000
+vn -0.275271 0.614408 -0.739411
+v 152.791809 171.169342 46.056160 1.000000 1.000000 1.000000
+vn -0.667592 0.698883 0.256677
+v 133.254272 170.997726 57.026772 1.000000 1.000000 1.000000
+vn -0.275270 0.614408 0.739411
+v 152.791809 171.169342 56.390568 1.000000 1.000000 1.000000
+vn -0.223443 0.640116 -0.735068
+v 154.080566 171.975845 46.056160 1.000000 1.000000 1.000000
+vn -0.223301 0.640162 0.735071
+v 154.080566 171.975845 56.390568 1.000000 1.000000 1.000000
+vn 0.281215 0.957452 -0.064840
+v 154.917435 172.499100 47.556160 1.000000 1.000000 1.000000
+vn 0.089260 0.798546 -0.595278
+v 154.499008 172.238174 46.257156 1.000000 1.000000 1.000000
+vn 0.281210 0.957451 0.064867
+v 154.917435 172.499100 54.890568 1.000000 1.000000 1.000000
+vn 0.266450 0.921971 0.281022
+v 154.805420 172.429321 55.640568 1.000000 1.000000 1.000000
+vn 0.088747 0.798722 0.595120
+v 154.499008 172.238174 56.189568 1.000000 1.000000 1.000000
+vn 0.267159 0.921692 -0.281264
+v 154.805420 172.429321 46.806160 1.000000 1.000000 1.000000
+vn -0.655554 0.532508 0.535428
+v 133.254272 170.700500 57.523972 1.000000 1.000000 1.000000
+vn -0.641976 0.159323 0.749989
+v 133.254272 170.277725 57.773579 1.000000 1.000000 1.000000
+vn -0.672544 -0.202151 0.711912
+v 133.254272 169.822845 57.721180 1.000000 1.000000 1.000000
+vn -0.738929 -0.200846 0.643153
+v 133.254272 163.179657 54.604568 1.000000 1.000000 1.000000
+vn -0.774680 0.070909 0.628365
+v 133.254272 162.987106 54.572166 1.000000 1.000000 1.000000
+vn -0.736183 0.333970 0.588641
+v 133.254272 162.801529 54.648766 1.000000 1.000000 1.000000
+vn -0.702370 0.055555 0.709641
+v 133.383026 160.142014 56.631168 1.000000 1.000000 1.000000
+vn -0.737040 0.322897 0.593725
+v 133.254272 160.606659 56.285168 1.000000 1.000000 1.000000
+vn -0.680189 -0.361672 -0.637602
+v 133.254272 162.576874 54.027565 1.000000 1.000000 1.000000
+vn -0.651856 -0.650558 -0.389690
+v 133.383026 159.917374 56.010166 1.000000 1.000000 1.000000
+vn -0.717927 -0.465849 -0.517268
+v 133.254272 160.380615 55.664165 1.000000 1.000000 1.000000
+vn -0.649986 -0.084999 -0.755177
+v 133.254272 162.948029 53.874367 1.000000 1.000000 1.000000
+vn -0.677891 0.219344 -0.701678
+v 133.254272 163.331757 53.939167 1.000000 1.000000 1.000000
+vn -0.745165 0.182448 -0.641437
+v 133.254272 169.974945 57.055771 1.000000 1.000000 1.000000
+vn -0.786558 -0.128474 -0.604005
+v 133.254272 170.202362 57.082172 1.000000 1.000000 1.000000
+vn -0.766658 -0.452621 -0.455379
+v 133.254272 170.413071 56.957371 1.000000 1.000000 1.000000
+vn -0.751648 -0.618898 -0.228014
+v 133.254272 170.562363 56.708771 1.000000 1.000000 1.000000
+vn -0.376631 -0.898656 0.224872
+v 133.254272 170.615402 56.390572 1.000000 1.000000 1.000000
+vn 0.205032 -0.706775 -0.677076
+v 152.799530 170.648880 46.056160 1.000000 1.000000 1.000000
+vn 0.205032 -0.706775 0.677075
+v 152.799530 170.648880 56.390568 1.000000 1.000000 1.000000
+vn -0.380805 -0.898329 -0.219073
+v 133.254272 170.615402 46.056179 1.000000 1.000000 1.000000
+vn -0.205032 -0.706775 0.677076
+v 133.021240 170.648880 56.390572 1.000000 1.000000 1.000000
+vn -0.757616 -0.601928 0.252390
+v 133.254272 170.549805 45.706177 1.000000 1.000000 1.000000
+vn -0.205032 -0.706775 -0.677076
+v 133.021240 170.648880 46.056179 1.000000 1.000000 1.000000
+vn -0.340113 -0.636752 0.692004
+v 132.803665 170.746567 56.390572 1.000000 1.000000 1.000000
+vn -0.340113 -0.636752 -0.692004
+v 132.803665 170.746567 46.056179 1.000000 1.000000 1.000000
+vn -0.779439 -0.386271 0.493224
+v 133.254272 170.371201 45.449978 1.000000 1.000000 1.000000
+vn 0.340113 -0.636753 -0.692004
+v 153.017105 170.746567 46.056160 1.000000 1.000000 1.000000
+vn 0.340113 -0.636752 0.692004
+v 153.017105 170.746567 56.390568 1.000000 1.000000 1.000000
+vn 0.471444 -0.496527 -0.728836
+v 154.305878 171.553055 46.056160 1.000000 1.000000 1.000000
+vn 0.471419 -0.496468 0.728892
+v 154.305878 171.553055 56.390568 1.000000 1.000000 1.000000
+vn 0.970369 -0.233725 -0.061285
+v 155.142746 172.076309 47.556160 1.000000 1.000000 1.000000
+vn 0.935905 -0.225491 -0.270622
+v 155.030731 172.006546 46.806160 1.000000 1.000000 1.000000
+vn 0.749395 -0.314561 -0.582631
+v 154.724319 171.813995 46.257156 1.000000 1.000000 1.000000
+vn 0.970376 -0.233711 0.061236
+v 155.142746 172.076309 54.890568 1.000000 1.000000 1.000000
+vn 0.749007 -0.313899 0.583486
+v 154.724319 171.813995 56.189568 1.000000 1.000000 1.000000
+vn 0.936273 -0.224042 0.270551
+v 155.030731 172.006546 55.640568 1.000000 1.000000 1.000000
+vn 0.223438 0.640117 0.735069
+v 131.740204 171.975845 56.390572 1.000000 1.000000 1.000000
+vn -0.471447 -0.496523 0.728837
+v 131.514893 171.553055 56.390572 1.000000 1.000000 1.000000
+vn -0.471419 -0.496468 -0.728892
+v 131.514893 171.553055 46.056179 1.000000 1.000000 1.000000
+vn 0.223300 0.640162 -0.735071
+v 131.740204 171.975845 46.056179 1.000000 1.000000 1.000000
+vn -0.749010 -0.313891 -0.583487
+v 131.096451 171.813995 46.257179 1.000000 1.000000 1.000000
+vn -0.088720 0.798736 -0.595105
+v 131.321777 172.238174 46.257179 1.000000 1.000000 1.000000
+vn -0.936272 -0.224040 -0.270555
+v 130.790039 172.006546 46.806179 1.000000 1.000000 1.000000
+vn -0.266450 0.921969 -0.281028
+v 131.015350 172.429321 46.806179 1.000000 1.000000 1.000000
+vn -0.970376 -0.233711 -0.061236
+v 130.678024 172.076309 47.556179 1.000000 1.000000 1.000000
+vn -0.281210 0.957451 -0.064867
+v 130.903336 172.499100 47.556179 1.000000 1.000000 1.000000
+vn -0.970369 -0.233725 0.061285
+v 130.678024 172.076309 54.890572 1.000000 1.000000 1.000000
+vn -0.281216 0.957452 0.064839
+v 130.903336 172.499100 54.890572 1.000000 1.000000 1.000000
+vn -0.935904 -0.225491 0.270624
+v 130.790039 172.006546 55.640572 1.000000 1.000000 1.000000
+vn -0.267173 0.921687 0.281268
+v 131.015350 172.429321 55.640572 1.000000 1.000000 1.000000
+vn -0.749395 -0.314556 0.582633
+v 131.096451 171.813995 56.189571 1.000000 1.000000 1.000000
+vn -0.089234 0.798554 0.595273
+v 131.321777 172.238174 56.189571 1.000000 1.000000 1.000000
+vn 0.680701 0.530898 0.504771
+v -140.998474 164.012665 45.911198 1.000000 1.000000 1.000000
+vn 0.679609 0.505441 0.531660
+v -140.840118 164.228943 45.472599 1.000000 1.000000 1.000000
+vn 0.531083 0.600877 0.597409
+v -141.110489 164.622437 45.449200 1.000000 1.000000 1.000000
+vn 0.427707 0.665264 0.611957
+v -141.317780 164.305695 46.031998 1.000000 1.000000 1.000000
+vn 0.780983 0.315664 0.538908
+v -140.994614 163.952667 45.970798 1.000000 1.000000 1.000000
+vn 0.818541 0.341882 0.461636
+v -140.966293 163.983383 45.898998 1.000000 1.000000 1.000000
+vn 0.397649 0.692950 0.601411
+v -141.145248 164.641968 45.449200 1.000000 1.000000 1.000000
+vn 0.433470 0.480414 0.762434
+v -141.087311 164.658707 45.398800 1.000000 1.000000 1.000000
+vn 0.212528 0.745637 0.631551
+v -141.343521 164.316864 46.027000 1.000000 1.000000 1.000000
+vn 0.461368 0.460245 0.758495
+v -141.343521 164.055923 46.285000 1.000000 1.000000 1.000000
+vn 0.282873 0.738184 0.612428
+v -141.295883 164.729874 45.449600 1.000000 1.000000 1.000000
+vn 0.097908 0.793173 0.601075
+v -141.749084 164.495453 45.948997 1.000000 1.000000 1.000000
+vn 0.082864 0.813292 0.575925
+v -141.603592 164.780106 45.463398 1.000000 1.000000 1.000000
+vn 0.225272 0.596707 0.770190
+v -141.281723 164.771729 45.398998 1.000000 1.000000 1.000000
+vn -0.104255 0.798995 0.592231
+v -144.071701 164.495453 45.948997 1.000000 1.000000 1.000000
+vn -0.058386 0.804746 0.590741
+v -144.217178 164.780106 45.463398 1.000000 1.000000 1.000000
+vn 0.132551 0.501260 0.855084
+v -141.749084 164.092209 46.394997 1.000000 1.000000 1.000000
+vn -0.033994 0.681130 0.731373
+v -144.217178 164.826157 45.405598 1.000000 1.000000 1.000000
+vn 0.064691 0.678261 0.731968
+v -141.603592 164.826157 45.405598 1.000000 1.000000 1.000000
+vn -0.224580 0.753873 0.617446
+v -144.477249 164.316864 46.027000 1.000000 1.000000 1.000000
+vn -0.158218 0.770712 0.617228
+v -144.374252 164.771729 45.454597 1.000000 1.000000 1.000000
+vn -0.126828 0.496873 0.858506
+v -144.071701 164.092209 46.394997 1.000000 1.000000 1.000000
+vn 0.138852 0.266034 0.953911
+v -141.749084 164.088028 46.395996 1.000000 1.000000 1.000000
+vn -0.138857 0.266033 0.953910
+v -144.071701 164.088028 46.395996 1.000000 1.000000 1.000000
+vn 0.141603 0.150623 0.978397
+v -141.749084 163.587097 46.556198 1.000000 1.000000 1.000000
+vn 0.287871 0.147655 0.946218
+v -141.346100 163.587097 46.435398 1.000000 1.000000 1.000000
+vn 0.715432 0.108863 0.690149
+v -140.998474 163.587097 46.091599 1.000000 1.000000 1.000000
+vn 0.501336 0.132126 0.855105
+v -141.343521 163.587097 46.434601 1.000000 1.000000 1.000000
+vn 0.715431 -0.108860 0.690151
+v -140.998474 162.853149 46.091599 1.000000 1.000000 1.000000
+vn 0.822054 0.089986 0.562255
+v -140.994614 163.587097 46.087399 1.000000 1.000000 1.000000
+vn 0.501336 -0.132126 0.855105
+v -141.343521 162.853149 46.434601 1.000000 1.000000 1.000000
+vn 0.905777 0.148677 0.396816
+v -140.940536 163.933136 45.858597 1.000000 1.000000 1.000000
+vn 0.821951 -0.089779 0.562438
+v -140.994614 162.853149 46.087399 1.000000 1.000000 1.000000
+vn 0.926743 0.065632 0.369918
+v -140.757721 163.587097 45.574600 1.000000 1.000000 1.000000
+vn 0.916485 0.097960 0.387891
+v -140.743561 163.613617 45.529400 1.000000 1.000000 1.000000
+vn 0.775691 0.361849 0.517077
+v -140.831100 164.216400 45.473396 1.000000 1.000000 1.000000
+vn 0.813992 0.076991 0.575752
+v -140.701065 163.613617 45.438000 1.000000 1.000000 1.000000
+vn 0.658558 0.279291 0.698783
+v -140.792480 164.234543 45.410400 1.000000 1.000000 1.000000
+vn 0.918675 -0.079344 0.386964
+v -140.743561 162.826645 45.529400 1.000000 1.000000 1.000000
+vn 0.926817 -0.059083 0.370835
+v -140.757721 162.853149 45.574600 1.000000 1.000000 1.000000
+vn 0.799547 -0.317299 0.509946
+v -140.804062 162.307571 45.480400 1.000000 1.000000 1.000000
+vn 0.903243 -0.162917 0.397001
+v -140.940536 162.507111 45.858597 1.000000 1.000000 1.000000
+vn 0.780327 -0.316536 0.539346
+v -140.994614 162.487564 45.970798 1.000000 1.000000 1.000000
+vn 0.681245 -0.258079 0.685055
+v -140.764160 162.292221 45.413799 1.000000 1.000000 1.000000
+vn 0.815914 -0.057648 0.575291
+v -140.701065 162.826645 45.438000 1.000000 1.000000 1.000000
+vn 0.734797 -0.446426 0.510663
+v -140.851700 162.223862 45.474800 1.000000 1.000000 1.000000
+vn 0.822121 -0.349940 0.449064
+v -140.966293 162.456879 45.898998 1.000000 1.000000 1.000000
+vn 0.686244 -0.528735 0.499509
+v -140.998474 162.427567 45.911198 1.000000 1.000000 1.000000
+vn 0.580789 -0.564660 0.586381
+v -141.064133 161.858276 45.450397 1.000000 1.000000 1.000000
+vn 0.471117 -0.452053 0.757428
+v -141.038391 161.824783 45.399399 1.000000 1.000000 1.000000
+vn 0.424520 -0.665454 0.613966
+v -141.317780 162.134552 46.031998 1.000000 1.000000 1.000000
+vn 0.468935 -0.449537 0.760274
+v -141.343521 162.384323 46.285000 1.000000 1.000000 1.000000
+vn 0.256368 -0.246846 0.934528
+v -141.007492 161.784317 45.367199 1.000000 1.000000 1.000000
+vn 0.389258 -0.148293 0.909113
+v -140.712662 162.272690 45.370998 1.000000 1.000000 1.000000
+vn 0.502505 -0.036259 0.863813
+v -140.640549 162.826645 45.377399 1.000000 1.000000 1.000000
+vn 0.499202 0.047612 0.865177
+v -140.640549 163.613617 45.377399 1.000000 1.000000 1.000000
+vn 0.135687 -0.009941 0.990702
+v -140.568451 162.826645 45.356197 1.000000 1.000000 1.000000
+vn 0.133666 0.012494 0.990948
+v -140.568451 163.613617 45.356197 1.000000 1.000000 1.000000
+vn 0.367312 0.158178 0.916549
+v -140.744843 164.258255 45.369999 1.000000 1.000000 1.000000
+vn 0.235489 0.262362 0.935795
+v -141.058990 164.700577 45.366997 1.000000 1.000000 1.000000
+vn 0.123298 0.327342 0.936827
+v -141.264984 164.820572 45.367199 1.000000 1.000000 1.000000
+vn 0.053022 0.558097 0.828080
+v -141.603592 164.852661 45.387199 1.000000 1.000000 1.000000
+vn 0.034328 0.375384 0.926234
+v -141.603592 164.880569 45.368797 1.000000 1.000000 1.000000
+vn -0.027026 0.558805 0.828859
+v -144.217178 164.852661 45.387199 1.000000 1.000000 1.000000
+vn -0.017942 0.380718 0.924517
+v -144.217178 164.880569 45.368797 1.000000 1.000000 1.000000
+vn -0.075582 0.354797 0.931883
+v -144.389709 164.866623 45.367798 1.000000 1.000000 1.000000
+vn -0.135768 0.644211 0.752701
+v -144.380692 164.814987 45.401398 1.000000 1.000000 1.000000
+vn -0.286379 0.571666 0.768886
+v -144.594406 164.746613 45.398598 1.000000 1.000000 1.000000
+vn -0.353846 0.705936 0.613553
+v -144.577667 164.706161 45.448799 1.000000 1.000000 1.000000
+vn -0.424680 0.665373 0.613943
+v -144.503006 164.305695 46.031998 1.000000 1.000000 1.000000
+vn -0.468944 0.449525 0.760275
+v -144.477249 164.055923 46.285000 1.000000 1.000000 1.000000
+vn -0.454916 0.663540 0.593941
+v -144.674240 164.639175 45.449600 1.000000 1.000000 1.000000
+vn 0.098877 -0.038547 0.994353
+v -140.657288 162.250366 45.356197 1.000000 1.000000 1.000000
+vn -0.005062 0.099826 0.994992
+v -144.217178 164.940567 45.356197 1.000000 1.000000 1.000000
+vn 0.008724 0.097133 0.995233
+v -141.603592 164.940567 45.356197 1.000000 1.000000 1.000000
+vn 0.031375 0.082976 0.996058
+v -141.246964 164.872192 45.356197 1.000000 1.000000 1.000000
+vn -0.018599 0.089660 0.995799
+v -144.398712 164.923828 45.356197 1.000000 1.000000 1.000000
+vn -0.039775 0.080443 0.995965
+v -144.635605 164.844299 45.356197 1.000000 1.000000 1.000000
+vn -0.379957 0.197596 0.903653
+v -152.566498 170.127029 45.356216 1.000000 1.000000 1.000000
+vn -0.061975 0.061035 0.996210
+v -144.846756 164.699188 45.356197 1.000000 1.000000 1.000000
+vn -0.156004 0.313291 0.936756
+v -144.615005 164.794052 45.366997 1.000000 1.000000 1.000000
+vn -0.049065 0.720111 0.692122
+v -159.003891 170.127029 45.356216 1.000000 1.000000 1.000000
+vn -0.098897 0.038555 0.994351
+v -145.163483 164.189880 45.356197 1.000000 1.000000 1.000000
+vn 0.379973 0.197579 0.903650
+v -133.254272 170.127029 45.356197 1.000000 1.000000 1.000000
+vn 0.057223 0.066121 0.996170
+v -141.029373 164.745224 45.356197 1.000000 1.000000 1.000000
+vn 0.048749 0.720043 0.692215
+v -126.816872 170.127029 45.356197 1.000000 1.000000 1.000000
+vn 0.090098 0.039577 0.995146
+v -140.692062 164.284760 45.356197 1.000000 1.000000 1.000000
+vn 0.595336 -0.266483 0.757999
+v -128.672897 164.188477 45.356197 1.000000 1.000000 1.000000
+vn 0.421824 -0.491903 0.761640
+v -128.101257 164.965683 45.356197 1.000000 1.000000 1.000000
+vn 0.153462 -0.625650 0.764861
+v -127.275223 165.396851 45.356197 1.000000 1.000000 1.000000
+vn 0.195804 0.708371 0.678138
+v -125.237267 169.912155 45.356197 1.000000 1.000000 1.000000
+vn 0.653914 -0.000001 0.756569
+v -128.876846 163.220123 45.356197 1.000000 1.000000 1.000000
+vn 0.595334 0.266484 0.758000
+v -128.672897 162.251755 45.356197 1.000000 1.000000 1.000000
+vn 0.421818 0.491907 0.761641
+v -128.101257 161.474564 45.356197 1.000000 1.000000 1.000000
+vn -0.077197 -0.675192 0.733591
+v -131.437637 159.715042 45.356197 1.000000 1.000000 1.000000
+vn 0.153458 0.625653 0.764859
+v -127.275223 161.043411 45.356197 1.000000 1.000000 1.000000
+vn 0.264863 -0.356020 0.896157
+v -133.254272 159.715042 45.356197 1.000000 1.000000 1.000000
+vn -0.280506 -0.587384 0.759142
+v -131.046249 159.624359 45.356197 1.000000 1.000000 1.000000
+vn -0.449614 -0.535169 0.715152
+v -130.723083 159.371796 45.356197 1.000000 1.000000 1.000000
+vn -0.410133 -0.611932 0.676262
+v -129.600418 158.358780 45.356197 1.000000 1.000000 1.000000
+vn -0.216929 -0.704903 0.675317
+v -128.263748 157.718323 45.356197 1.000000 1.000000 1.000000
+vn 0.000000 -0.737897 0.674913
+v -126.816872 157.499252 45.356197 1.000000 1.000000 1.000000
+vn -0.153457 0.625654 0.764858
+v -126.358528 161.043411 45.356197 1.000000 1.000000 1.000000
+vn 0.216988 -0.704900 0.675302
+v -125.370003 157.718323 45.356197 1.000000 1.000000 1.000000
+vn -0.421817 0.491907 0.761642
+v -125.532486 161.474564 45.356197 1.000000 1.000000 1.000000
+vn 0.410128 -0.611904 0.676291
+v -124.033859 158.358780 45.356197 1.000000 1.000000 1.000000
+vn -0.595334 0.266481 0.758001
+v -124.960846 162.251755 45.356197 1.000000 1.000000 1.000000
+vn 0.449260 -0.535336 0.715248
+v -122.910919 159.371796 45.356197 1.000000 1.000000 1.000000
+vn 0.280438 -0.587642 0.758967
+v -122.587112 159.624359 45.356197 1.000000 1.000000 1.000000
+vn 0.077337 -0.675120 0.733643
+v -122.196495 159.715042 45.356197 1.000000 1.000000 1.000000
+vn 0.074188 -0.724858 0.684892
+v -121.908607 159.715042 45.356197 1.000000 1.000000 1.000000
+vn 0.293966 -0.686650 0.664903
+v -121.551079 159.789001 45.356197 1.000000 1.000000 1.000000
+vn 0.720995 -0.123144 0.681910
+v -120.549805 161.965714 45.356197 1.000000 1.000000 1.000000
+vn -0.653916 -0.000001 0.756567
+v -124.756905 163.220123 45.356197 1.000000 1.000000 1.000000
+vn 0.669075 -0.310847 0.675066
+v -121.032089 160.322021 45.356197 1.000000 1.000000 1.000000
+vn 0.532336 -0.521487 0.666835
+v -121.244400 160.001083 45.356197 1.000000 1.000000 1.000000
+vn 0.729893 0.045895 0.682019
+v -120.458519 163.688950 45.356197 1.000000 1.000000 1.000000
+vn 0.699856 0.213454 0.681644
+v -120.764168 165.382889 45.356197 1.000000 1.000000 1.000000
+vn -0.595336 -0.266480 0.758000
+v -124.960846 164.188477 45.356197 1.000000 1.000000 1.000000
+vn 0.630284 0.372774 0.681016
+v -121.447563 166.940079 45.356197 1.000000 1.000000 1.000000
+vn -0.421823 -0.491903 0.761641
+v -125.532486 164.965683 45.356197 1.000000 1.000000 1.000000
+vn 0.521157 0.515781 0.679975
+v -122.466087 168.267044 45.356197 1.000000 1.000000 1.000000
+vn 0.374046 0.631733 0.678972
+v -123.756149 169.278671 45.356197 1.000000 1.000000 1.000000
+vn -0.153461 -0.625650 0.764860
+v -126.358528 165.396851 45.356197 1.000000 1.000000 1.000000
+vn 0.062000 -0.061058 0.996207
+v -140.974014 161.741074 45.356197 1.000000 1.000000 1.000000
+vn 0.039776 -0.080442 0.995965
+v -141.185165 161.595947 45.356197 1.000000 1.000000 1.000000
+vn 0.018599 -0.089662 0.995799
+v -141.422058 161.516418 45.356197 1.000000 1.000000 1.000000
+vn 0.005062 -0.099827 0.994992
+v -141.603592 161.499680 45.356197 1.000000 1.000000 1.000000
+vn -0.264862 -0.356024 0.896156
+v -152.566498 159.715042 45.356197 1.000000 1.000000 1.000000
+vn -0.669769 -0.262903 0.694472
+v -152.566498 159.461090 45.308399 1.000000 1.000000 1.000000
+vn 0.669768 -0.262903 0.694473
+v -133.254272 159.461090 45.308399 1.000000 1.000000 1.000000
+vn -0.008724 -0.097133 0.995233
+v -144.217178 161.499680 45.356197 1.000000 1.000000 1.000000
+vn -0.595333 0.266298 0.758066
+v -157.147354 162.251755 45.356216 1.000000 1.000000 1.000000
+vn 0.077197 -0.675195 0.733588
+v -154.383133 159.715042 45.356197 1.000000 1.000000 1.000000
+vn 0.280506 -0.587386 0.759140
+v -154.774521 159.624359 45.356197 1.000000 1.000000 1.000000
+vn -0.421728 0.491932 0.761675
+v -157.718994 161.474564 45.356216 1.000000 1.000000 1.000000
+vn 0.410156 -0.611910 0.676268
+v -156.220367 158.358780 45.356197 1.000000 1.000000 1.000000
+vn 0.449614 -0.535172 0.715149
+v -155.097687 159.371796 45.356197 1.000000 1.000000 1.000000
+vn -0.654058 -0.000001 0.756444
+v -156.943924 163.220123 45.356216 1.000000 1.000000 1.000000
+vn -0.034328 -0.375384 0.926234
+v -144.217178 161.559677 45.368797 1.000000 1.000000 1.000000
+vn -0.031372 -0.082964 0.996059
+v -144.573807 161.568054 45.356197 1.000000 1.000000 1.000000
+vn 0.017942 -0.380718 0.924517
+v -141.603592 161.559677 45.368797 1.000000 1.000000 1.000000
+vn 0.075577 -0.354803 0.931881
+v -141.431061 161.573624 45.367798 1.000000 1.000000 1.000000
+vn -0.053022 -0.558097 0.828080
+v -144.217178 161.587585 45.387199 1.000000 1.000000 1.000000
+vn -0.123293 -0.327346 0.936826
+v -144.555786 161.619675 45.367199 1.000000 1.000000 1.000000
+vn -0.235490 -0.262338 0.935801
+v -144.761795 161.739670 45.366997 1.000000 1.000000 1.000000
+vn -0.057231 -0.066130 0.996168
+v -144.791397 161.695023 45.356197 1.000000 1.000000 1.000000
+vn -0.225267 -0.596707 0.770192
+v -144.539047 161.668518 45.398998 1.000000 1.000000 1.000000
+vn 0.027026 -0.558805 0.828859
+v -141.603592 161.587585 45.387199 1.000000 1.000000 1.000000
+vn -0.064691 -0.678261 0.731968
+v -144.217178 161.614090 45.405598 1.000000 1.000000 1.000000
+vn 0.033994 -0.681130 0.731373
+v -141.603592 161.614090 45.405598 1.000000 1.000000 1.000000
+vn 0.135747 -0.644217 0.752700
+v -141.440079 161.625259 45.401398 1.000000 1.000000 1.000000
+vn -0.082864 -0.813300 0.575914
+v -144.217178 161.660141 45.463398 1.000000 1.000000 1.000000
+vn -0.282878 -0.738182 0.612428
+v -144.524887 161.710373 45.449600 1.000000 1.000000 1.000000
+vn -0.433410 -0.480430 0.762459
+v -144.733459 161.781540 45.398800 1.000000 1.000000 1.000000
+vn 0.058392 -0.804747 0.590740
+v -141.603592 161.660141 45.463398 1.000000 1.000000 1.000000
+vn -0.097927 -0.793172 0.601073
+v -144.071701 161.944778 45.948997 1.000000 1.000000 1.000000
+vn 0.158217 -0.770698 0.617246
+v -141.446518 161.668518 45.454597 1.000000 1.000000 1.000000
+vn 0.286347 -0.571629 0.768925
+v -141.226364 161.693619 45.398598 1.000000 1.000000 1.000000
+vn 0.224463 -0.753907 0.617447
+v -141.343521 162.123398 46.027000 1.000000 1.000000 1.000000
+vn 0.353795 -0.705849 0.613682
+v -141.243103 161.734100 45.448799 1.000000 1.000000 1.000000
+vn 0.104275 -0.798993 0.592230
+v -141.749084 161.944778 45.948997 1.000000 1.000000 1.000000
+vn -0.132556 -0.501252 0.855088
+v -144.071701 162.348038 46.394997 1.000000 1.000000 1.000000
+vn 0.126828 -0.496870 0.858508
+v -141.749084 162.348038 46.394997 1.000000 1.000000 1.000000
+vn -0.138857 -0.266033 0.953910
+v -144.071701 162.352219 46.395996 1.000000 1.000000 1.000000
+vn -0.461368 -0.460239 0.758498
+v -144.477249 162.384323 46.285000 1.000000 1.000000 1.000000
+vn 0.138852 -0.266033 0.953911
+v -141.749084 162.352219 46.395996 1.000000 1.000000 1.000000
+vn -0.141608 -0.150623 0.978397
+v -144.071701 162.853149 46.556198 1.000000 1.000000 1.000000
+vn -0.287876 -0.147655 0.946216
+v -144.474670 162.853149 46.435398 1.000000 1.000000 1.000000
+vn 0.141603 -0.150623 0.978397
+v -141.749084 162.853149 46.556198 1.000000 1.000000 1.000000
+vn 0.287871 -0.147655 0.946218
+v -141.346100 162.853149 46.435398 1.000000 1.000000 1.000000
+vn 0.454859 -0.663512 0.594016
+v -141.146530 161.801071 45.449600 1.000000 1.000000 1.000000
+vn 0.156030 -0.313336 0.936736
+v -141.205765 161.646194 45.366997 1.000000 1.000000 1.000000
+vn -0.780994 -0.315667 0.538891
+v -144.826157 162.487564 45.970798 1.000000 1.000000 1.000000
+vn -0.427470 -0.665388 0.611988
+v -144.503006 162.134552 46.031998 1.000000 1.000000 1.000000
+vn -0.212327 -0.745694 0.631552
+v -144.477249 162.123398 46.027000 1.000000 1.000000 1.000000
+vn -0.715431 -0.108860 0.690150
+v -144.822296 162.853149 46.091599 1.000000 1.000000 1.000000
+vn -0.501336 -0.132126 0.855105
+v -144.477249 162.853149 46.434601 1.000000 1.000000 1.000000
+vn -0.397645 -0.692951 0.601413
+v -144.675522 161.798279 45.449200 1.000000 1.000000 1.000000
+vn -0.531079 -0.600884 0.597406
+v -144.710281 161.817810 45.449200 1.000000 1.000000 1.000000
+vn -0.680812 -0.530804 0.504720
+v -144.822296 162.427567 45.911198 1.000000 1.000000 1.000000
+vn -0.677745 -0.504268 0.535141
+v -144.980652 162.211288 45.472599 1.000000 1.000000 1.000000
+vn -0.657571 -0.281413 0.698861
+v -145.028290 162.204330 45.410400 1.000000 1.000000 1.000000
+vn -0.369289 -0.158469 0.915704
+v -145.075928 162.182007 45.369999 1.000000 1.000000 1.000000
+vn -0.818642 -0.341757 0.461549
+v -144.854477 162.456879 45.898998 1.000000 1.000000 1.000000
+vn -0.774983 -0.359640 0.519674
+v -144.989670 162.223862 45.473396 1.000000 1.000000 1.000000
+vn -0.905777 -0.148692 0.396811
+v -144.880234 162.507111 45.858597 1.000000 1.000000 1.000000
+vn -0.916489 -0.097960 0.387881
+v -145.077209 162.826645 45.529400 1.000000 1.000000 1.000000
+vn -0.813969 -0.076904 0.575795
+v -145.119705 162.826645 45.438000 1.000000 1.000000 1.000000
+vn -0.926745 -0.065648 0.369911
+v -145.063049 162.853149 45.574600 1.000000 1.000000 1.000000
+vn -0.822055 -0.089983 0.562254
+v -144.826157 162.853149 46.087399 1.000000 1.000000 1.000000
+vn -0.821951 0.089783 0.562438
+v -144.826157 163.587097 46.087399 1.000000 1.000000 1.000000
+vn -0.715432 0.108863 0.690149
+v -144.822296 163.587097 46.091599 1.000000 1.000000 1.000000
+vn -0.918666 0.079353 0.386982
+v -145.077209 163.613617 45.529400 1.000000 1.000000 1.000000
+vn -0.926816 0.059078 0.370840
+v -145.063049 163.587097 45.574600 1.000000 1.000000 1.000000
+vn -0.799564 0.317266 0.509941
+v -145.016708 164.132675 45.480400 1.000000 1.000000 1.000000
+vn -0.815913 0.057645 0.575294
+v -145.119705 163.613617 45.438000 1.000000 1.000000 1.000000
+vn -0.681205 0.258072 0.685097
+v -145.056610 164.148026 45.413799 1.000000 1.000000 1.000000
+vn -0.780325 0.316518 0.539360
+v -144.826157 163.952667 45.970798 1.000000 1.000000 1.000000
+vn -0.903244 0.162890 0.397009
+v -144.880234 163.933136 45.858597 1.000000 1.000000 1.000000
+vn -0.686144 0.528818 0.499558
+v -144.822296 164.012665 45.911198 1.000000 1.000000 1.000000
+vn -0.822021 0.350060 0.449154
+v -144.854477 163.983383 45.898998 1.000000 1.000000 1.000000
+vn -0.734816 0.446427 0.510634
+v -144.969070 164.216400 45.474800 1.000000 1.000000 1.000000
+vn -0.580810 0.564695 0.586327
+v -144.756638 164.581970 45.450397 1.000000 1.000000 1.000000
+vn -0.471153 0.452076 0.757392
+v -144.782379 164.615448 45.399399 1.000000 1.000000 1.000000
+vn -0.256353 0.246814 0.934540
+v -144.813278 164.655914 45.367199 1.000000 1.000000 1.000000
+vn -0.389237 0.148287 0.909124
+v -145.108124 164.167557 45.370998 1.000000 1.000000 1.000000
+vn -0.502508 0.036255 0.863812
+v -145.180222 163.613617 45.377399 1.000000 1.000000 1.000000
+vn -0.135686 0.009941 0.990702
+v -145.252319 163.613617 45.356197 1.000000 1.000000 1.000000
+vn -0.499245 -0.047552 0.865155
+v -145.180222 162.826645 45.377399 1.000000 1.000000 1.000000
+vn -0.133666 -0.012494 0.990948
+v -145.252319 162.826645 45.356197 1.000000 1.000000 1.000000
+vn -0.090087 -0.039574 0.995147
+v -145.128708 162.155487 45.356197 1.000000 1.000000 1.000000
+vn -0.153390 -0.625707 0.764828
+v -158.545547 165.396851 45.356216 1.000000 1.000000 1.000000
+vn 0.153391 -0.625707 0.764828
+v -159.462250 165.396851 45.356216 1.000000 1.000000 1.000000
+vn -0.421735 -0.491926 0.761675
+v -157.718994 164.965683 45.356216 1.000000 1.000000 1.000000
+vn -0.595335 -0.266299 0.758064
+v -157.147354 164.188477 45.356216 1.000000 1.000000 1.000000
+vn -0.373866 0.631915 0.678902
+v -162.064240 169.278671 45.356216 1.000000 1.000000 1.000000
+vn 0.421736 -0.491928 0.761673
+v -160.288803 164.965683 45.356216 1.000000 1.000000 1.000000
+vn -0.195830 0.708213 0.678296
+v -160.583633 169.910751 45.356216 1.000000 1.000000 1.000000
+vn -0.521176 0.515769 0.679969
+v -163.354294 168.267044 45.356216 1.000000 1.000000 1.000000
+vn 0.595336 -0.266294 0.758065
+v -160.860443 164.188477 45.356216 1.000000 1.000000 1.000000
+vn -0.630252 0.372790 0.681036
+v -164.372696 166.940079 45.356216 1.000000 1.000000 1.000000
+vn -0.699767 0.213648 0.681675
+v -165.056351 165.382889 45.356216 1.000000 1.000000 1.000000
+vn 0.654066 -0.000001 0.756437
+v -161.063858 163.220123 45.356216 1.000000 1.000000 1.000000
+vn -0.729934 0.046030 0.681966
+v -165.362762 163.688950 45.356216 1.000000 1.000000 1.000000
+vn -0.720993 -0.123279 0.681888
+v -165.271347 161.965714 45.356216 1.000000 1.000000 1.000000
+vn 0.595334 0.266295 0.758067
+v -160.860443 162.251755 45.356216 1.000000 1.000000 1.000000
+vn -0.668988 -0.311019 0.675072
+v -164.788544 160.322021 45.356216 1.000000 1.000000 1.000000
+vn -0.532333 -0.521416 0.666894
+v -164.576126 160.001083 45.356216 1.000000 1.000000 1.000000
+vn -0.294037 -0.686674 0.664847
+v -164.269684 159.789001 45.356216 1.000000 1.000000 1.000000
+vn -0.074109 -0.724845 0.684914
+v -163.911774 159.715042 45.356216 1.000000 1.000000 1.000000
+vn -0.077197 -0.675192 0.733591
+v -163.624664 159.715042 45.356216 1.000000 1.000000 1.000000
+vn -0.280506 -0.587384 0.759142
+v -163.233276 159.624359 45.356216 1.000000 1.000000 1.000000
+vn -0.449612 -0.535171 0.715151
+v -162.910110 159.371796 45.356216 1.000000 1.000000 1.000000
+vn 0.421730 0.491932 0.761674
+v -160.288803 161.474564 45.356216 1.000000 1.000000 1.000000
+vn -0.410149 -0.611911 0.676271
+v -161.787430 158.358780 45.356216 1.000000 1.000000 1.000000
+vn 0.153387 0.625710 0.764826
+v -159.462250 161.043411 45.356216 1.000000 1.000000 1.000000
+vn -0.216950 -0.704907 0.675307
+v -160.451019 157.718323 45.356216 1.000000 1.000000 1.000000
+vn 0.000000 -0.737892 0.674918
+v -159.003891 157.499252 45.356216 1.000000 1.000000 1.000000
+vn -0.153387 0.625710 0.764826
+v -158.545547 161.043411 45.356216 1.000000 1.000000 1.000000
+vn 0.216954 -0.704904 0.675308
+v -157.556763 157.718323 45.356216 1.000000 1.000000 1.000000
+vn -0.287876 0.147655 0.946217
+v -144.474670 163.587097 46.435398 1.000000 1.000000 1.000000
+vn -0.501336 0.132126 0.855105
+v -144.477249 163.587097 46.434601 1.000000 1.000000 1.000000
+vn -0.141608 0.150623 0.978397
+v -144.071701 163.587097 46.556198 1.000000 1.000000 1.000000
+vn -0.690328 -0.416912 0.591296
+v -152.566498 159.226669 45.168598 1.000000 1.000000 1.000000
+vn 0.690328 -0.416912 0.591296
+v -133.254272 159.226669 45.168598 1.000000 1.000000 1.000000
+vn -0.717546 -0.490328 0.494677
+v -152.566498 158.404831 44.489597 1.000000 1.000000 1.000000
+vn 0.717551 -0.490404 0.494595
+v -133.254272 158.404831 44.489597 1.000000 1.000000 1.000000
+vn -0.101702 -0.973531 0.204680
+v -151.600876 157.499252 43.739597 1.000000 1.000000 1.000000
+vn -0.397672 -0.889921 0.223377
+v -152.083694 157.620651 43.840199 1.000000 1.000000 1.000000
+vn -0.652701 -0.666353 0.360493
+v -152.437744 157.952728 44.114597 1.000000 1.000000 1.000000
+vn 0.101729 -0.973521 0.204716
+v -134.219894 157.499252 43.739597 1.000000 1.000000 1.000000
+vn 0.652148 -0.666580 0.361073
+v -133.383026 157.952728 44.114597 1.000000 1.000000 1.000000
+vn 0.397516 -0.889796 0.224153
+v -133.737091 157.620651 43.840199 1.000000 1.000000 1.000000
+vn 0.141599 0.150036 -0.978488
+v -144.071701 162.853149 45.856197 1.000000 1.000000 1.000000
+vn -0.141590 0.150037 -0.978489
+v -141.749084 162.853149 45.856197 1.000000 1.000000 1.000000
+vn 0.138143 0.344829 -0.928445
+v -144.071701 162.557343 45.761997 1.000000 1.000000 1.000000
+vn 0.289431 0.147424 -0.945778
+v -144.308594 162.853149 45.785198 1.000000 1.000000 1.000000
+vn -0.138136 0.344829 -0.928446
+v -141.749084 162.557343 45.761997 1.000000 1.000000 1.000000
+vn -0.289423 0.147425 -0.945780
+v -141.512177 162.853149 45.785198 1.000000 1.000000 1.000000
+vn 0.125189 0.567244 -0.813979
+v -144.071701 162.555939 45.761398 1.000000 1.000000 1.000000
+vn 0.469707 0.449850 -0.759612
+v -144.309875 162.576874 45.696598 1.000000 1.000000 1.000000
+vn 0.289431 -0.147425 -0.945778
+v -144.308594 163.587097 45.785198 1.000000 1.000000 1.000000
+vn 0.141599 -0.150036 -0.978488
+v -144.071701 163.587097 45.856197 1.000000 1.000000 1.000000
+vn 0.138104 -0.346650 -0.927772
+v -144.071701 163.882904 45.761997 1.000000 1.000000 1.000000
+vn 0.462020 -0.460714 -0.757813
+v -144.309875 163.863373 45.696598 1.000000 1.000000 1.000000
+vn -0.141590 -0.150037 -0.978489
+v -141.749084 163.587097 45.856197 1.000000 1.000000 1.000000
+vn 0.775172 -0.316029 -0.547023
+v -144.514587 163.801971 45.511799 1.000000 1.000000 1.000000
+vn 0.442772 -0.660289 -0.606606
+v -144.325333 164.009888 45.547798 1.000000 1.000000 1.000000
+vn 0.791799 -0.096455 -0.603117
+v -144.513306 163.587097 45.582798 1.000000 1.000000 1.000000
+vn 0.502436 -0.132108 -0.854463
+v -144.309875 163.587097 45.784798 1.000000 1.000000 1.000000
+vn 0.130670 -0.573056 -0.809032
+v -144.071701 163.884293 45.761398 1.000000 1.000000 1.000000
+vn -0.138095 -0.346651 -0.927773
+v -141.749084 163.882904 45.761997 1.000000 1.000000 1.000000
+vn 0.502436 0.132108 -0.854462
+v -144.309875 162.853149 45.784798 1.000000 1.000000 1.000000
+vn 0.791799 0.096455 -0.603117
+v -144.513306 162.853149 45.582798 1.000000 1.000000 1.000000
+vn 0.891095 -0.070766 -0.448266
+v -144.514587 163.587097 45.580399 1.000000 1.000000 1.000000
+vn 0.891341 0.071350 -0.447684
+v -144.514587 162.853149 45.580399 1.000000 1.000000 1.000000
+vn 0.777138 0.313490 -0.545693
+v -144.514587 162.638275 45.511799 1.000000 1.000000 1.000000
+vn 0.931187 -0.068594 -0.358031
+v -144.654922 163.587097 45.278797 1.000000 1.000000 1.000000
+vn 0.900695 -0.161413 -0.403354
+v -144.548065 163.790817 45.445801 1.000000 1.000000 1.000000
+vn 0.930892 0.061473 -0.360085
+v -144.654922 162.853149 45.278797 1.000000 1.000000 1.000000
+vn 0.919073 -0.078283 -0.386233
+v -144.667801 163.613617 45.233597 1.000000 1.000000 1.000000
+vn 0.922756 0.080870 -0.376804
+v -144.667801 162.826645 45.233597 1.000000 1.000000 1.000000
+vn 0.901510 0.146219 -0.407309
+v -144.548065 162.649429 45.445801 1.000000 1.000000 1.000000
+vn 0.796642 0.321656 -0.511760
+v -144.670364 162.421997 45.062199 1.000000 1.000000 1.000000
+vn 0.817059 0.049624 -0.574414
+v -144.809418 162.826645 44.928799 1.000000 1.000000 1.000000
+vn 0.688629 0.243798 -0.682900
+v -144.802979 162.366180 44.844200 1.000000 1.000000 1.000000
+vn 0.873513 -0.205695 -0.441208
+v -144.684525 163.824295 45.140598 1.000000 1.000000 1.000000
+vn 0.816686 -0.038576 -0.575792
+v -144.809418 163.613617 44.928799 1.000000 1.000000 1.000000
+vn 0.500351 0.033211 -0.865185
+v -145.014130 162.826645 44.726799 1.000000 1.000000 1.000000
+vn 0.391426 0.142036 -0.909182
+v -144.969070 162.296417 44.704399 1.000000 1.000000 1.000000
+vn 0.758154 0.393470 -0.519985
+v -144.656219 162.374557 45.045399 1.000000 1.000000 1.000000
+vn 0.570335 0.380890 -0.727764
+v -144.733459 162.161072 44.814999 1.000000 1.000000 1.000000
+vn 0.812056 0.344353 -0.471153
+v -144.532608 162.620132 45.469597 1.000000 1.000000 1.000000
+vn 0.675021 0.528699 -0.514611
+v -144.513306 162.603378 45.476799 1.000000 1.000000 1.000000
+vn 0.666351 0.482791 -0.568233
+v -144.620163 162.248978 45.001396 1.000000 1.000000 1.000000
+vn 0.438411 0.482897 -0.758028
+v -144.630463 162.015945 44.800198 1.000000 1.000000 1.000000
+vn 0.316526 0.212818 -0.924402
+v -144.869934 162.056412 44.696800 1.000000 1.000000 1.000000
+vn 0.540563 0.597761 -0.592009
+v -144.542908 162.128967 44.970200 1.000000 1.000000 1.000000
+vn 0.435705 0.659745 -0.612289
+v -144.325333 162.430359 45.547798 1.000000 1.000000 1.000000
+vn 0.231141 0.753518 -0.615454
+v -144.309875 162.423386 45.544998 1.000000 1.000000 1.000000
+vn 0.417845 0.667520 -0.616297
+v -144.496567 162.094086 44.967796 1.000000 1.000000 1.000000
+vn 0.192230 0.766409 -0.612916
+v -144.313736 162.025726 44.985001 1.000000 1.000000 1.000000
+vn 0.298871 0.560013 -0.772698
+v -144.441208 162.053619 44.964600 1.000000 1.000000 1.000000
+vn 0.288936 0.572415 -0.767370
+v -144.497849 161.921066 44.797600 1.000000 1.000000 1.000000
+vn 0.066221 0.812588 -0.579065
+v -144.217178 162.034088 45.013397 1.000000 1.000000 1.000000
+vn 0.031737 0.676233 -0.736004
+v -144.217178 161.883392 44.820801 1.000000 1.000000 1.000000
+vn 0.134041 0.635843 -0.760090
+v -144.336914 161.879211 44.807198 1.000000 1.000000 1.000000
+vn 0.159660 0.314223 -0.935827
+v -144.564804 161.764786 44.692200 1.000000 1.000000 1.000000
+vn 0.237163 0.270738 -0.932982
+v -144.733459 161.882004 44.692799 1.000000 1.000000 1.000000
+vn 0.077613 0.355650 -0.931391
+v -144.363953 161.704788 44.694599 1.000000 1.000000 1.000000
+vn 0.060174 0.083158 -0.994718
+v -144.840317 161.745255 44.656197 1.000000 1.000000 1.000000
+vn 0.039248 0.077270 -0.996237
+v -144.635605 161.593155 44.656197 1.000000 1.000000 1.000000
+vn 0.065621 0.066513 -0.995625
+v -144.889252 161.781540 44.656197 1.000000 1.000000 1.000000
+vn -0.379968 -0.197582 -0.903651
+v -152.566498 159.715042 44.656197 1.000000 1.000000 1.000000
+vn 0.029101 0.098952 -0.994667
+v -144.392273 161.522003 44.656197 1.000000 1.000000 1.000000
+vn 0.015758 0.092597 -0.995579
+v -144.335632 161.505264 44.656197 1.000000 1.000000 1.000000
+vn 0.002369 0.102004 -0.994781
+v -144.217178 161.499680 44.656197 1.000000 1.000000 1.000000
+vn 0.016645 0.383203 -0.923514
+v -144.217178 161.699219 44.698196 1.000000 1.000000 1.000000
+vn 0.379970 -0.197583 -0.903650
+v -133.254272 159.715042 44.656197 1.000000 1.000000 1.000000
+vn -0.007562 0.098274 -0.995131
+v -141.603592 161.499680 44.656197 1.000000 1.000000 1.000000
+vn 0.595334 0.266484 -0.758000
+v -128.672897 162.251755 44.656197 1.000000 1.000000 1.000000
+vn -0.077197 -0.675193 -0.733591
+v -131.437637 159.715042 44.656197 1.000000 1.000000 1.000000
+vn 0.653895 -0.000001 -0.756585
+v -128.876846 163.220123 44.656197 1.000000 1.000000 1.000000
+vn -0.280505 -0.587384 -0.759142
+v -131.046249 159.624359 44.656197 1.000000 1.000000 1.000000
+vn 0.421818 0.491907 -0.761641
+v -128.101257 161.474564 44.656197 1.000000 1.000000 1.000000
+vn -0.410133 -0.611932 -0.676262
+v -129.600418 158.358780 44.656197 1.000000 1.000000 1.000000
+vn -0.449614 -0.535169 -0.715152
+v -130.723083 159.371796 44.656197 1.000000 1.000000 1.000000
+vn 0.153458 0.625653 -0.764859
+v -127.275223 161.043411 44.656197 1.000000 1.000000 1.000000
+vn -0.216929 -0.704903 -0.675317
+v -128.263748 157.718323 44.656197 1.000000 1.000000 1.000000
+vn -0.153457 0.625654 -0.764859
+v -126.358528 161.043411 44.656197 1.000000 1.000000 1.000000
+vn 0.000000 -0.737897 -0.674913
+v -126.816872 157.499252 44.656197 1.000000 1.000000 1.000000
+vn -0.421817 0.491907 -0.761642
+v -125.532486 161.474564 44.656197 1.000000 1.000000 1.000000
+vn 0.410128 -0.611904 -0.676291
+v -124.033859 158.358780 44.656197 1.000000 1.000000 1.000000
+vn 0.216988 -0.704900 -0.675302
+v -125.370003 157.718323 44.656197 1.000000 1.000000 1.000000
+vn -0.595333 0.266481 -0.758002
+v -124.960846 162.251755 44.656197 1.000000 1.000000 1.000000
+vn 0.449260 -0.535336 -0.715248
+v -122.910919 159.371796 44.656197 1.000000 1.000000 1.000000
+vn 0.280438 -0.587642 -0.758967
+v -122.587112 159.624359 44.656197 1.000000 1.000000 1.000000
+vn 0.077337 -0.675120 -0.733643
+v -122.196495 159.715042 44.656197 1.000000 1.000000 1.000000
+vn 0.074188 -0.724858 -0.684892
+v -121.908607 159.715042 44.656197 1.000000 1.000000 1.000000
+vn 0.293966 -0.686650 -0.664903
+v -121.551079 159.789001 44.656197 1.000000 1.000000 1.000000
+vn 0.532336 -0.521487 -0.666835
+v -121.244400 160.001083 44.656197 1.000000 1.000000 1.000000
+vn 0.669075 -0.310847 -0.675065
+v -121.032089 160.322021 44.656197 1.000000 1.000000 1.000000
+vn 0.720995 -0.123144 -0.681910
+v -120.549805 161.965714 44.656197 1.000000 1.000000 1.000000
+vn -0.653916 -0.000001 -0.756567
+v -124.756905 163.220123 44.656197 1.000000 1.000000 1.000000
+vn 0.729893 0.045895 -0.682019
+v -120.458519 163.688950 44.656197 1.000000 1.000000 1.000000
+vn -0.595336 -0.266480 -0.758000
+v -124.960846 164.188477 44.656197 1.000000 1.000000 1.000000
+vn 0.699856 0.213454 -0.681644
+v -120.764168 165.382889 44.656197 1.000000 1.000000 1.000000
+vn -0.421823 -0.491903 -0.761641
+v -125.532486 164.965683 44.656197 1.000000 1.000000 1.000000
+vn 0.521157 0.515781 -0.679975
+v -122.466087 168.267044 44.656197 1.000000 1.000000 1.000000
+vn 0.630284 0.372774 -0.681016
+v -121.447563 166.940079 44.656197 1.000000 1.000000 1.000000
+vn -0.153461 -0.625650 -0.764860
+v -126.358528 165.396851 44.656197 1.000000 1.000000 1.000000
+vn 0.374046 0.631733 -0.678972
+v -123.756149 169.278671 44.656197 1.000000 1.000000 1.000000
+vn 0.153462 -0.625650 -0.764861
+v -127.275223 165.396851 44.656197 1.000000 1.000000 1.000000
+vn 0.048749 0.720044 -0.692214
+v -126.816872 170.127029 44.656197 1.000000 1.000000 1.000000
+vn 0.195804 0.708371 -0.678138
+v -125.237267 169.912155 44.656197 1.000000 1.000000 1.000000
+vn 0.421825 -0.491902 -0.761640
+v -128.101257 164.965683 44.656197 1.000000 1.000000 1.000000
+vn 0.230707 0.408912 -0.882930
+v -133.254272 170.127029 44.656197 1.000000 1.000000 1.000000
+vn 0.595333 -0.266481 -0.758002
+v -128.672897 164.188477 44.656197 1.000000 1.000000 1.000000
+vn -0.230705 0.408908 -0.882932
+v -152.566498 170.127029 44.656197 1.000000 1.000000 1.000000
+vn -0.029946 0.082841 -0.996113
+v -141.283005 161.551300 44.656197 1.000000 1.000000 1.000000
+vn -0.051657 0.089856 -0.994614
+v -141.189026 161.605728 44.656197 1.000000 1.000000 1.000000
+vn -0.093514 -0.066336 -0.993406
+v -140.813080 164.489883 44.656197 1.000000 1.000000 1.000000
+vn -0.066743 -0.066754 -0.995535
+v -140.931519 164.657318 44.656197 1.000000 1.000000 1.000000
+vn -0.027653 -0.098441 -0.994759
+v -141.428497 164.918243 44.656197 1.000000 1.000000 1.000000
+vn -0.060563 -0.082106 -0.994782
+v -140.980453 164.694992 44.656197 1.000000 1.000000 1.000000
+vn -0.039251 -0.077277 -0.996237
+v -141.185165 164.847076 44.656197 1.000000 1.000000 1.000000
+vn -0.056293 0.070481 -0.995923
+v -141.015213 161.704788 44.656197 1.000000 1.000000 1.000000
+vn -0.078346 0.069902 -0.994473
+v -140.977875 161.746643 44.656197 1.000000 1.000000 1.000000
+vn -0.081735 0.052260 -0.995283
+v -140.791183 161.961533 44.656197 1.000000 1.000000 1.000000
+vn -0.109530 -0.028970 -0.993561
+v -140.618668 164.065704 44.656197 1.000000 1.000000 1.000000
+vn -0.115209 -0.041849 -0.992459
+v -140.674026 164.217789 44.656197 1.000000 1.000000 1.000000
+vn -0.091174 -0.049745 -0.994592
+v -140.730682 164.374069 44.656197 1.000000 1.000000 1.000000
+vn -0.099841 0.036809 -0.994322
+v -140.641846 162.292221 44.656197 1.000000 1.000000 1.000000
+vn -0.134762 0.023246 -0.990605
+v -140.603226 162.516876 44.656197 1.000000 1.000000 1.000000
+vn -0.131651 0.015189 -0.991180
+v -140.572311 162.695480 44.656197 1.000000 1.000000 1.000000
+vn -0.142265 0.002075 -0.989827
+v -140.568451 162.826645 44.656197 1.000000 1.000000 1.000000
+vn -0.138613 -0.007428 -0.990319
+v -140.568451 163.613617 44.656197 1.000000 1.000000 1.000000
+vn -0.075128 0.354835 -0.931906
+v -141.452957 161.704788 44.694599 1.000000 1.000000 1.000000
+vn -0.157670 0.313866 -0.936284
+v -141.255966 161.764786 44.692200 1.000000 1.000000 1.000000
+vn -0.243036 0.269011 -0.931969
+v -141.084732 161.884781 44.692799 1.000000 1.000000 1.000000
+vn -0.285360 0.573593 -0.767828
+v -141.322922 161.921066 44.797600 1.000000 1.000000 1.000000
+vn -0.327474 0.202030 -0.923008
+v -140.949554 162.060593 44.696800 1.000000 1.000000 1.000000
+vn -0.434488 0.486249 -0.758144
+v -141.189026 162.017349 44.800198 1.000000 1.000000 1.000000
+vn -0.444692 0.090838 -0.891065
+v -140.806641 162.554550 44.714397 1.000000 1.000000 1.000000
+vn -0.582464 0.345703 -0.735680
+v -141.086029 162.165253 44.815399 1.000000 1.000000 1.000000
+vn -0.455048 0.662500 -0.595000
+v -141.324203 162.094086 44.967796 1.000000 1.000000 1.000000
+vn -0.532468 0.600082 -0.596975
+v -141.275284 162.130371 44.970398 1.000000 1.000000 1.000000
+vn -0.353134 0.710162 -0.609070
+v -141.379562 162.053619 44.964600 1.000000 1.000000 1.000000
+vn -0.218584 0.745895 -0.629176
+v -141.510895 162.423386 45.544998 1.000000 1.000000 1.000000
+vn -0.442841 0.659952 -0.606923
+v -141.495438 162.430359 45.547798 1.000000 1.000000 1.000000
+vn -0.193877 0.775637 -0.600666
+v -141.504456 162.025726 44.984398 1.000000 1.000000 1.000000
+vn -0.140959 0.639095 -0.756101
+v -141.479996 161.879211 44.806801 1.000000 1.000000 1.000000
+vn -0.462020 0.460712 -0.757814
+v -141.510895 162.576874 45.696598 1.000000 1.000000 1.000000
+vn -0.101009 0.793903 -0.599595
+v -141.749084 162.318741 45.499001 1.000000 1.000000 1.000000
+vn -0.047129 0.822484 -0.566833
+v -141.603592 162.034088 45.013397 1.000000 1.000000 1.000000
+vn -0.029565 0.683241 -0.729594
+v -141.603592 161.883392 44.820801 1.000000 1.000000 1.000000
+vn -0.028450 0.549948 -0.834714
+v -141.603592 161.791290 44.759399 1.000000 1.000000 1.000000
+vn 0.103749 0.799110 -0.592164
+v -144.071701 162.318741 45.499001 1.000000 1.000000 1.000000
+vn -0.130732 0.571455 -0.810154
+v -141.749084 162.555939 45.761398 1.000000 1.000000 1.000000
+vn -0.502436 0.132108 -0.854463
+v -141.510895 162.853149 45.784798 1.000000 1.000000 1.000000
+vn 0.020350 0.554140 -0.832174
+v -144.217178 161.791290 44.759399 1.000000 1.000000 1.000000
+vn -0.018484 0.385550 -0.922502
+v -141.603592 161.699219 44.698196 1.000000 1.000000 1.000000
+vn -0.016500 0.104397 -0.994399
+v -141.423340 161.528976 44.656197 1.000000 1.000000 1.000000
+vn -0.015552 -0.093961 -0.995454
+v -141.485138 164.933594 44.656197 1.000000 1.000000 1.000000
+vn -0.002936 -0.101630 -0.994818
+v -141.603592 164.940567 44.656197 1.000000 1.000000 1.000000
+vn 0.007563 -0.098281 -0.995130
+v -144.217178 164.940567 44.656197 1.000000 1.000000 1.000000
+vn -0.421736 -0.491928 -0.761673
+v -157.718994 164.965683 44.656197 1.000000 1.000000 1.000000
+vn -0.049065 0.720111 -0.692122
+v -159.003891 170.127029 44.656197 1.000000 1.000000 1.000000
+vn -0.595336 -0.266299 -0.758063
+v -157.147354 164.188477 44.656197 1.000000 1.000000 1.000000
+vn -0.654043 -0.000001 -0.756457
+v -156.943924 163.220123 44.656197 1.000000 1.000000 1.000000
+vn 0.018501 -0.385480 -0.922531
+v -144.217178 164.741043 44.698196 1.000000 1.000000 1.000000
+vn 0.016502 -0.104399 -0.994399
+v -144.397430 164.911270 44.656197 1.000000 1.000000 1.000000
+vn -0.153391 -0.625707 -0.764828
+v -158.545547 165.396851 44.656197 1.000000 1.000000 1.000000
+vn -0.195830 0.708213 -0.678296
+v -160.583633 169.910751 44.656197 1.000000 1.000000 1.000000
+vn 0.153391 -0.625707 -0.764828
+v -159.462250 165.396851 44.656197 1.000000 1.000000 1.000000
+vn -0.373866 0.631915 -0.678902
+v -162.064240 169.278671 44.656197 1.000000 1.000000 1.000000
+vn 0.421736 -0.491928 -0.761673
+v -160.288803 164.965683 44.656197 1.000000 1.000000 1.000000
+vn -0.521176 0.515769 -0.679969
+v -163.354294 168.267044 44.656197 1.000000 1.000000 1.000000
+vn 0.595336 -0.266294 -0.758065
+v -160.860443 164.188477 44.656197 1.000000 1.000000 1.000000
+vn -0.630252 0.372790 -0.681036
+v -164.372696 166.940079 44.656197 1.000000 1.000000 1.000000
+vn 0.654067 -0.000001 -0.756437
+v -161.063858 163.220123 44.656197 1.000000 1.000000 1.000000
+vn -0.699767 0.213648 -0.681675
+v -165.056351 165.382889 44.656197 1.000000 1.000000 1.000000
+vn 0.595334 0.266295 -0.758067
+v -160.860443 162.251755 44.656197 1.000000 1.000000 1.000000
+vn -0.720993 -0.123279 -0.681888
+v -165.271347 161.965714 44.656197 1.000000 1.000000 1.000000
+vn -0.729934 0.046030 -0.681966
+v -165.362762 163.688950 44.656197 1.000000 1.000000 1.000000
+vn -0.668988 -0.311019 -0.675072
+v -164.788544 160.322021 44.656197 1.000000 1.000000 1.000000
+vn -0.532333 -0.521416 -0.666894
+v -164.576126 160.001083 44.656197 1.000000 1.000000 1.000000
+vn -0.294037 -0.686674 -0.664847
+v -164.269684 159.789001 44.656197 1.000000 1.000000 1.000000
+vn -0.074109 -0.724845 -0.684914
+v -163.911774 159.715042 44.656197 1.000000 1.000000 1.000000
+vn -0.077197 -0.675192 -0.733591
+v -163.624664 159.715042 44.656197 1.000000 1.000000 1.000000
+vn -0.280505 -0.587384 -0.759142
+v -163.233276 159.624359 44.656197 1.000000 1.000000 1.000000
+vn -0.449612 -0.535171 -0.715151
+v -162.910110 159.371796 44.656197 1.000000 1.000000 1.000000
+vn -0.410149 -0.611911 -0.676271
+v -161.787430 158.358780 44.656197 1.000000 1.000000 1.000000
+vn 0.421730 0.491932 -0.761674
+v -160.288803 161.474564 44.656197 1.000000 1.000000 1.000000
+vn -0.216950 -0.704906 -0.675307
+v -160.451019 157.718323 44.656197 1.000000 1.000000 1.000000
+vn 0.153387 0.625710 -0.764826
+v -159.462250 161.043411 44.656197 1.000000 1.000000 1.000000
+vn 0.000000 -0.737892 -0.674918
+v -159.003891 157.499252 44.656197 1.000000 1.000000 1.000000
+vn -0.153387 0.625710 -0.764826
+v -158.545547 161.043411 44.656197 1.000000 1.000000 1.000000
+vn 0.216951 -0.704906 -0.675307
+v -157.556763 157.718323 44.656197 1.000000 1.000000 1.000000
+vn 0.410150 -0.611910 -0.676271
+v -156.220367 158.358780 44.656197 1.000000 1.000000 1.000000
+vn -0.421730 0.491932 -0.761674
+v -157.718994 161.474564 44.656197 1.000000 1.000000 1.000000
+vn 0.449612 -0.535171 -0.715151
+v -155.097687 159.371796 44.656197 1.000000 1.000000 1.000000
+vn -0.595335 0.266301 -0.758064
+v -157.147354 162.251755 44.656197 1.000000 1.000000 1.000000
+vn 0.280506 -0.587384 -0.759142
+v -154.774521 159.624359 44.656197 1.000000 1.000000 1.000000
+vn 0.138613 0.007428 -0.990319
+v -145.252319 162.826645 44.656197 1.000000 1.000000 1.000000
+vn 0.109532 0.028969 -0.993561
+v -145.202103 162.374557 44.656197 1.000000 1.000000 1.000000
+vn 0.142265 -0.002075 -0.989827
+v -145.252319 163.613617 44.656197 1.000000 1.000000 1.000000
+vn 0.500900 -0.024263 -0.865165
+v -145.014130 163.613617 44.726799 1.000000 1.000000 1.000000
+vn 0.077197 -0.675192 -0.733591
+v -154.383133 159.715042 44.656197 1.000000 1.000000 1.000000
+vn 0.115207 0.041848 -0.992460
+v -145.146744 162.222458 44.656197 1.000000 1.000000 1.000000
+vn 0.748901 -0.159928 -0.643094
+v -144.826157 163.850815 44.882401 1.000000 1.000000 1.000000
+vn 0.801763 -0.342570 -0.489715
+v -144.644623 164.053131 45.053596 1.000000 1.000000 1.000000
+vn 0.674850 -0.542559 -0.500207
+v -144.513306 163.836868 45.476799 1.000000 1.000000 1.000000
+vn 0.713507 -0.416664 -0.563293
+v -144.621445 164.188477 45.002197 1.000000 1.000000 1.000000
+vn 0.813840 -0.350768 -0.463278
+v -144.532608 163.820114 45.469597 1.000000 1.000000 1.000000
+vn 0.454663 -0.663443 -0.594243
+v -144.496567 164.344757 44.967796 1.000000 1.000000 1.000000
+vn 0.526437 -0.604928 -0.597433
+v -144.545486 164.309875 44.970398 1.000000 1.000000 1.000000
+vn 0.582462 -0.345706 -0.735680
+v -144.734741 164.274994 44.815399 1.000000 1.000000 1.000000
+vn 0.433635 -0.486145 -0.758699
+v -144.631744 164.422897 44.800198 1.000000 1.000000 1.000000
+vn 0.359191 -0.707244 -0.608923
+v -144.441208 164.386612 44.964600 1.000000 1.000000 1.000000
+vn 0.219001 -0.746039 -0.628860
+v -144.309875 164.016861 45.544998 1.000000 1.000000 1.000000
+vn 0.285559 -0.572884 -0.768284
+v -144.497849 164.519180 44.797600 1.000000 1.000000 1.000000
+vn 0.243056 -0.269013 -0.931963
+v -144.736038 164.555450 44.692799 1.000000 1.000000 1.000000
+vn 0.157672 -0.313860 -0.936286
+v -144.564804 164.675461 44.692200 1.000000 1.000000 1.000000
+vn 0.327479 -0.202033 -0.923006
+v -144.871216 164.379639 44.696800 1.000000 1.000000 1.000000
+vn 0.078358 -0.069900 -0.994472
+v -144.842896 164.693588 44.656197 1.000000 1.000000 1.000000
+vn 0.056296 -0.070471 -0.995924
+v -144.805557 164.735458 44.656197 1.000000 1.000000 1.000000
+vn 0.444691 -0.090840 -0.891066
+v -145.014130 163.885696 44.714397 1.000000 1.000000 1.000000
+vn 0.099839 -0.036809 -0.994322
+v -145.178925 164.148026 44.656197 1.000000 1.000000 1.000000
+vn 0.081729 -0.052259 -0.995284
+v -145.029587 164.478714 44.656197 1.000000 1.000000 1.000000
+vn 0.131651 -0.015190 -0.991180
+v -145.248459 163.744766 44.656197 1.000000 1.000000 1.000000
+vn 0.134762 -0.023246 -0.990605
+v -145.217545 163.923370 44.656197 1.000000 1.000000 1.000000
+vn 0.051646 -0.089845 -0.994616
+v -144.631744 164.834534 44.656197 1.000000 1.000000 1.000000
+vn 0.029943 -0.082843 -0.996113
+v -144.537766 164.888947 44.656197 1.000000 1.000000 1.000000
+vn 0.075131 -0.354826 -0.931909
+v -144.367813 164.735458 44.694599 1.000000 1.000000 1.000000
+vn 0.140954 -0.639101 -0.756096
+v -144.340775 164.561035 44.806801 1.000000 1.000000 1.000000
+vn -0.016869 -0.383346 -0.923451
+v -141.603592 164.741043 44.698196 1.000000 1.000000 1.000000
+vn -0.077413 -0.355959 -0.931290
+v -141.456818 164.735458 44.694599 1.000000 1.000000 1.000000
+vn -0.159661 -0.314229 -0.935825
+v -141.255966 164.675461 44.692200 1.000000 1.000000 1.000000
+vn -0.237471 -0.270769 -0.932894
+v -141.087311 164.558243 44.692799 1.000000 1.000000 1.000000
+vn -0.316533 -0.212986 -0.924362
+v -140.950836 164.383835 44.696800 1.000000 1.000000 1.000000
+vn 0.091178 0.049748 -0.994591
+v -145.090088 162.066193 44.656197 1.000000 1.000000 1.000000
+vn 0.093775 0.066237 -0.993388
+v -145.007690 161.950378 44.656197 1.000000 1.000000 1.000000
+vn -0.125120 -0.568854 -0.812865
+v -141.749084 163.884293 45.761398 1.000000 1.000000 1.000000
+vn -0.469689 -0.449862 -0.759616
+v -141.510895 163.863373 45.696598 1.000000 1.000000 1.000000
+vn -0.289422 -0.147425 -0.945780
+v -141.512177 163.587097 45.785198 1.000000 1.000000 1.000000
+vn -0.103739 -0.799102 -0.592177
+v -141.749084 164.121506 45.499001 1.000000 1.000000 1.000000
+vn -0.231127 -0.753516 -0.615462
+v -141.510895 164.016861 45.544998 1.000000 1.000000 1.000000
+vn 0.101007 -0.793895 -0.599607
+v -144.071701 164.121506 45.499001 1.000000 1.000000 1.000000
+vn 0.047062 -0.822500 -0.566814
+v -144.217178 164.406158 45.013397 1.000000 1.000000 1.000000
+vn -0.066162 -0.812588 -0.579071
+v -141.603592 164.406158 45.013397 1.000000 1.000000 1.000000
+vn 0.193902 -0.775647 -0.600644
+v -144.316315 164.414536 44.984398 1.000000 1.000000 1.000000
+vn 0.029563 -0.683269 -0.729568
+v -144.217178 164.556854 44.820801 1.000000 1.000000 1.000000
+vn 0.028445 -0.549924 -0.834730
+v -144.217178 164.648941 44.759399 1.000000 1.000000 1.000000
+vn -0.020319 -0.554128 -0.832183
+v -141.603592 164.648941 44.759399 1.000000 1.000000 1.000000
+vn -0.031716 -0.676261 -0.735979
+v -141.603592 164.556854 44.820801 1.000000 1.000000 1.000000
+vn -0.134042 -0.635861 -0.760075
+v -141.483856 164.561035 44.807198 1.000000 1.000000 1.000000
+vn -0.192214 -0.766414 -0.612914
+v -141.507034 164.414536 44.985001 1.000000 1.000000 1.000000
+vn -0.288953 -0.572404 -0.767372
+v -141.322922 164.519180 44.797600 1.000000 1.000000 1.000000
+vn -0.438418 -0.482905 -0.758018
+v -141.190308 164.424286 44.800198 1.000000 1.000000 1.000000
+vn -0.417850 -0.667542 -0.616271
+v -141.324203 164.346161 44.967796 1.000000 1.000000 1.000000
+vn -0.298915 -0.560091 -0.772624
+v -141.379562 164.386612 44.964600 1.000000 1.000000 1.000000
+vn -0.570321 -0.380916 -0.727762
+v -141.087311 164.279190 44.814999 1.000000 1.000000 1.000000
+vn -0.540556 -0.597774 -0.592002
+v -141.277863 164.311279 44.970200 1.000000 1.000000 1.000000
+vn -0.391428 -0.142035 -0.909181
+v -140.851700 164.143829 44.704399 1.000000 1.000000 1.000000
+vn -0.758164 -0.393442 -0.519991
+v -141.164551 164.065704 45.045399 1.000000 1.000000 1.000000
+vn -0.666325 -0.482808 -0.568249
+v -141.200607 164.191269 45.001396 1.000000 1.000000 1.000000
+vn -0.688637 -0.243788 -0.682896
+v -141.017792 164.074066 44.844200 1.000000 1.000000 1.000000
+vn -0.435705 -0.659745 -0.612289
+v -141.495438 164.009888 45.547798 1.000000 1.000000 1.000000
+vn -0.675018 -0.528699 -0.514615
+v -141.307465 163.836868 45.476799 1.000000 1.000000 1.000000
+vn -0.777138 -0.313490 -0.545692
+v -141.306183 163.801971 45.511799 1.000000 1.000000 1.000000
+vn -0.812056 -0.344349 -0.471157
+v -141.288162 163.820114 45.469597 1.000000 1.000000 1.000000
+vn -0.901510 -0.146217 -0.407310
+v -141.272705 163.790817 45.445801 1.000000 1.000000 1.000000
+vn -0.930891 -0.061470 -0.360088
+v -141.165848 163.587097 45.278797 1.000000 1.000000 1.000000
+vn -0.796678 -0.321592 -0.511744
+v -141.150406 164.018250 45.062199 1.000000 1.000000 1.000000
+vn -0.922744 -0.080889 -0.376829
+v -141.152969 163.613617 45.233597 1.000000 1.000000 1.000000
+vn -0.919078 0.078280 -0.386222
+v -141.152969 162.826645 45.233597 1.000000 1.000000 1.000000
+vn -0.817059 -0.049626 -0.574414
+v -141.011353 163.613617 44.928799 1.000000 1.000000 1.000000
+vn -0.500351 -0.033212 -0.865185
+v -140.806641 163.613617 44.726799 1.000000 1.000000 1.000000
+vn -0.816686 0.038574 -0.575792
+v -141.011353 162.826645 44.928799 1.000000 1.000000 1.000000
+vn -0.500900 0.024262 -0.865165
+v -140.806641 162.826645 44.726799 1.000000 1.000000 1.000000
+vn -0.748904 0.159922 -0.643092
+v -140.994614 162.589432 44.882401 1.000000 1.000000 1.000000
+vn -0.873516 0.205681 -0.441209
+v -141.136246 162.615952 45.140598 1.000000 1.000000 1.000000
+vn -0.713495 0.416686 -0.563292
+v -141.199326 162.251755 45.002197 1.000000 1.000000 1.000000
+vn -0.801767 0.342564 -0.489715
+v -141.176147 162.387100 45.053596 1.000000 1.000000 1.000000
+vn -0.775172 0.316029 -0.547023
+v -141.306183 162.638275 45.511799 1.000000 1.000000 1.000000
+vn -0.674849 0.542554 -0.500214
+v -141.307465 162.603378 45.476799 1.000000 1.000000 1.000000
+vn -0.791799 0.096455 -0.603118
+v -141.307465 162.853149 45.582798 1.000000 1.000000 1.000000
+vn -0.502436 -0.132108 -0.854462
+v -141.510895 163.587097 45.784798 1.000000 1.000000 1.000000
+vn -0.791799 -0.096455 -0.603117
+v -141.307465 163.587097 45.582798 1.000000 1.000000 1.000000
+vn -0.891095 0.070766 -0.448266
+v -141.306183 162.853149 45.580399 1.000000 1.000000 1.000000
+vn -0.891340 -0.071350 -0.447684
+v -141.306183 163.587097 45.580399 1.000000 1.000000 1.000000
+vn -0.931188 0.068611 -0.358025
+v -141.165848 162.853149 45.278797 1.000000 1.000000 1.000000
+vn -0.900695 0.161410 -0.403355
+v -141.272705 162.649429 45.445801 1.000000 1.000000 1.000000
+vn -0.813840 0.350763 -0.463282
+v -141.288162 162.620132 45.469597 1.000000 1.000000 1.000000
+vn 0.736183 0.333970 0.588641
+v -133.254272 162.801529 54.648804 1.000000 1.000000 1.000000
+vn 0.680189 -0.361672 -0.637602
+v -133.254272 162.576874 54.027603 1.000000 1.000000 1.000000
+vn 0.774680 0.070909 0.628365
+v -133.254272 162.987106 54.572205 1.000000 1.000000 1.000000
+vn 0.736980 0.322997 0.593746
+v -133.254272 160.606659 56.285206 1.000000 1.000000 1.000000
+vn 0.649986 -0.084999 -0.755178
+v -133.254272 162.948029 53.874405 1.000000 1.000000 1.000000
+vn 0.717924 -0.465759 -0.517353
+v -133.254272 160.380615 55.664204 1.000000 1.000000 1.000000
+vn 0.738928 -0.200846 0.643153
+v -133.254272 163.179657 54.604607 1.000000 1.000000 1.000000
+vn 0.677891 0.219344 -0.701678
+v -133.254272 163.331757 53.939205 1.000000 1.000000 1.000000
+vn 0.672545 -0.202151 0.711912
+v -133.254272 169.822845 57.721199 1.000000 1.000000 1.000000
+vn 0.745165 0.182448 -0.641438
+v -133.254272 169.974945 57.055805 1.000000 1.000000 1.000000
+vn 0.641979 0.159313 0.749988
+v -133.254272 170.277725 57.773598 1.000000 1.000000 1.000000
+vn 0.786558 -0.128474 -0.604004
+v -133.254272 170.202362 57.082207 1.000000 1.000000 1.000000
+vn 0.655355 0.533187 0.534997
+v -133.254272 170.700500 57.524006 1.000000 1.000000 1.000000
+vn 0.766657 -0.452621 -0.455379
+v -133.254272 170.413071 56.957405 1.000000 1.000000 1.000000
+vn 0.668015 0.698519 0.256569
+v -133.254272 170.996307 57.026806 1.000000 1.000000 1.000000
+vn 0.751648 -0.618898 -0.228014
+v -133.254272 170.562363 56.708805 1.000000 1.000000 1.000000
+vn 0.186224 0.893562 0.408495
+v -133.254272 171.103760 56.390606 1.000000 1.000000 1.000000
+vn 0.376631 -0.898656 0.224872
+v -133.254272 170.615402 56.390606 1.000000 1.000000 1.000000
+vn 0.701760 0.055557 0.710244
+v -133.383026 160.142014 56.631207 1.000000 1.000000 1.000000
+vn 0.652505 -0.650454 -0.388776
+v -133.383026 159.917374 56.010204 1.000000 1.000000 1.000000
+vn 0.446202 -0.231504 0.864471
+v -133.737091 159.802948 56.884605 1.000000 1.000000 1.000000
+vn 0.395588 -0.880579 -0.260941
+v -133.737091 159.576904 56.263405 1.000000 1.000000 1.000000
+vn 0.779440 -0.386272 0.493221
+v -133.254272 170.371201 45.449997 1.000000 1.000000 1.000000
+vn 0.646672 0.470306 -0.600523
+v -133.254272 170.615402 44.843800 1.000000 1.000000 1.000000
+vn 0.757615 -0.601929 0.252388
+v -133.254272 170.549805 45.706200 1.000000 1.000000 1.000000
+vn 0.662715 0.690627 -0.289557
+v -133.254272 170.972595 45.356197 1.000000 1.000000 1.000000
+vn 0.380805 -0.898329 -0.219073
+v -133.254272 170.615402 46.056198 1.000000 1.000000 1.000000
+vn 0.182636 0.891976 -0.413549
+v -133.254272 171.103760 46.056198 1.000000 1.000000 1.000000
+vn 0.745325 0.336448 -0.575581
+v -133.254272 159.470871 44.562401 1.000000 1.000000 1.000000
+vn 0.737199 0.352982 -0.576144
+v -133.254272 158.650406 43.883400 1.000000 1.000000 1.000000
+vn 0.704401 0.092571 -0.703740
+v -133.383026 158.196915 43.508400 1.000000 1.000000 1.000000
+vn 0.451596 -0.192865 -0.871128
+v -133.737091 157.864838 43.233799 1.000000 1.000000 1.000000
+vn 0.126769 -0.278678 -0.951981
+v -134.219894 157.743439 43.133400 1.000000 1.000000 1.000000
+vn -0.126790 -0.278688 -0.951975
+v -151.600876 157.743439 43.133400 1.000000 1.000000 1.000000
+vn -0.745325 0.336448 -0.575581
+v -152.566498 159.470871 44.562401 1.000000 1.000000 1.000000
+vn -0.451570 -0.192899 -0.871134
+v -152.083694 157.864838 43.233799 1.000000 1.000000 1.000000
+vn -0.704356 0.092573 -0.703785
+v -152.437744 158.196915 43.508400 1.000000 1.000000 1.000000
+vn -0.737150 0.353108 -0.576129
+v -152.566498 158.650406 43.883400 1.000000 1.000000 1.000000
+vn -0.646671 0.470312 -0.600519
+v -152.566498 170.615402 44.843800 1.000000 1.000000 1.000000
+vn -0.662716 0.690629 -0.289550
+v -152.566498 170.972595 45.356216 1.000000 1.000000 1.000000
+vn -0.182637 0.891976 -0.413549
+v -152.566498 171.103760 46.056217 1.000000 1.000000 1.000000
+vn -0.186225 0.893562 0.408495
+v -152.566498 171.103760 56.390610 1.000000 1.000000 1.000000
+vn 0.275270 0.614408 0.739412
+v -152.791809 171.169342 56.390610 1.000000 1.000000 1.000000
+vn 0.275270 0.614408 -0.739411
+v -152.791809 171.169342 46.056217 1.000000 1.000000 1.000000
+vn -0.275271 0.614408 -0.739411
+v -133.028961 171.169342 46.056198 1.000000 1.000000 1.000000
+vn -0.668015 0.698519 0.256569
+v -152.566498 170.996307 57.026810 1.000000 1.000000 1.000000
+vn -0.275270 0.614408 0.739411
+v -133.028961 171.169342 56.390606 1.000000 1.000000 1.000000
+vn -0.655357 0.533192 0.534989
+v -152.566498 170.700500 57.524010 1.000000 1.000000 1.000000
+vn -0.641976 0.159323 0.749989
+v -152.566498 170.277725 57.773617 1.000000 1.000000 1.000000
+vn 0.223301 0.640162 -0.735071
+v -154.080566 171.975845 46.056217 1.000000 1.000000 1.000000
+vn 0.223038 0.640381 0.734960
+v -154.080566 171.975845 56.390610 1.000000 1.000000 1.000000
+vn -0.281210 0.957451 -0.064867
+v -154.917435 172.499100 47.556217 1.000000 1.000000 1.000000
+vn -0.266450 0.921971 -0.281022
+v -154.805420 172.429321 46.806217 1.000000 1.000000 1.000000
+vn -0.088747 0.798722 -0.595120
+v -154.499008 172.238174 46.257217 1.000000 1.000000 1.000000
+vn -0.281195 0.957452 0.064919
+v -154.917435 172.499100 54.890610 1.000000 1.000000 1.000000
+vn -0.090369 0.797951 0.595910
+v -154.499008 172.236771 56.189610 1.000000 1.000000 1.000000
+vn -0.264895 0.922319 0.281352
+v -154.805420 172.429321 55.640610 1.000000 1.000000 1.000000
+vn -0.672544 -0.202151 0.711913
+v -152.566498 169.822845 57.721218 1.000000 1.000000 1.000000
+vn -0.738929 -0.200846 0.643153
+v -152.566498 163.179657 54.604610 1.000000 1.000000 1.000000
+vn -0.774680 0.070909 0.628365
+v -152.566498 162.987106 54.572208 1.000000 1.000000 1.000000
+vn -0.736183 0.333970 0.588642
+v -152.566498 162.801529 54.648808 1.000000 1.000000 1.000000
+vn -0.702373 0.055564 0.709637
+v -152.437744 160.142014 56.631207 1.000000 1.000000 1.000000
+vn -0.446057 -0.232174 0.864366
+v -152.083694 159.802948 56.884605 1.000000 1.000000 1.000000
+vn -0.737040 0.322896 0.593725
+v -152.566498 160.606659 56.285206 1.000000 1.000000 1.000000
+vn -0.124366 -0.318507 0.939727
+v -151.600876 159.678757 56.977203 1.000000 1.000000 1.000000
+vn 0.124447 -0.318491 0.939721
+v -134.219894 159.678757 56.977203 1.000000 1.000000 1.000000
+vn -0.100835 -0.963925 -0.246336
+v -151.600876 159.452728 56.356205 1.000000 1.000000 1.000000
+vn 0.100798 -0.963938 -0.246297
+v -134.219894 159.452728 56.356205 1.000000 1.000000 1.000000
+vn -0.395078 -0.880501 -0.261974
+v -152.083694 159.576904 56.263405 1.000000 1.000000 1.000000
+vn -0.651857 -0.650554 -0.389695
+v -152.437744 159.917374 56.010204 1.000000 1.000000 1.000000
+vn -0.717927 -0.465849 -0.517268
+v -152.566498 160.380615 55.664204 1.000000 1.000000 1.000000
+vn -0.680188 -0.361670 -0.637604
+v -152.566498 162.576874 54.027603 1.000000 1.000000 1.000000
+vn -0.649987 -0.084996 -0.755177
+v -152.566498 162.948029 53.874409 1.000000 1.000000 1.000000
+vn -0.677891 0.219344 -0.701678
+v -152.566498 163.331757 53.939209 1.000000 1.000000 1.000000
+vn -0.745165 0.182448 -0.641437
+v -152.566498 169.974945 57.055809 1.000000 1.000000 1.000000
+vn -0.786558 -0.128474 -0.604005
+v -152.566498 170.202362 57.082211 1.000000 1.000000 1.000000
+vn -0.766658 -0.452621 -0.455379
+v -152.566498 170.413071 56.957409 1.000000 1.000000 1.000000
+vn -0.751648 -0.618898 -0.228014
+v -152.566498 170.562363 56.708809 1.000000 1.000000 1.000000
+vn -0.376631 -0.898656 0.224872
+v -152.566498 170.615402 56.390610 1.000000 1.000000 1.000000
+vn 0.205032 -0.706775 -0.677076
+v -133.021240 170.648880 46.056198 1.000000 1.000000 1.000000
+vn 0.205032 -0.706775 0.677075
+v -133.021240 170.648880 56.390606 1.000000 1.000000 1.000000
+vn -0.380803 -0.898329 -0.219075
+v -152.566498 170.615402 46.056217 1.000000 1.000000 1.000000
+vn -0.205032 -0.706775 0.677076
+v -152.799530 170.648880 56.390610 1.000000 1.000000 1.000000
+vn -0.757616 -0.601930 0.252385
+v -152.566498 170.549805 45.706200 1.000000 1.000000 1.000000
+vn -0.205032 -0.706775 -0.677076
+v -152.799530 170.648880 46.056217 1.000000 1.000000 1.000000
+vn -0.340113 -0.636752 0.692004
+v -153.017105 170.746567 56.390610 1.000000 1.000000 1.000000
+vn -0.340113 -0.636752 -0.692004
+v -153.017105 170.746567 46.056217 1.000000 1.000000 1.000000
+vn -0.471419 -0.496468 -0.728892
+v -154.305878 171.553055 46.056217 1.000000 1.000000 1.000000
+vn -0.471505 -0.496444 0.728853
+v -154.305878 171.553055 56.390610 1.000000 1.000000 1.000000
+vn -0.970376 -0.233711 -0.061236
+v -155.142746 172.076309 47.556217 1.000000 1.000000 1.000000
+vn -0.749007 -0.313899 -0.583486
+v -154.724319 171.813995 46.257217 1.000000 1.000000 1.000000
+vn -0.970369 -0.233725 0.061285
+v -155.142746 172.076309 54.890610 1.000000 1.000000 1.000000
+vn -0.935904 -0.225491 0.270624
+v -155.030731 172.006546 55.640610 1.000000 1.000000 1.000000
+vn -0.749361 -0.314295 0.582817
+v -154.724319 171.813995 56.189610 1.000000 1.000000 1.000000
+vn -0.936273 -0.224042 -0.270551
+v -155.030731 172.006546 46.806217 1.000000 1.000000 1.000000
+vn -0.779449 -0.386249 0.493226
+v -152.566498 170.371201 45.449997 1.000000 1.000000 1.000000
+vn 0.340113 -0.636753 -0.692004
+v -132.803665 170.746567 46.056198 1.000000 1.000000 1.000000
+vn 0.340113 -0.636752 0.692004
+v -132.803665 170.746567 56.390606 1.000000 1.000000 1.000000
+vn 0.471419 -0.496468 0.728892
+v -131.514893 171.553055 56.390606 1.000000 1.000000 1.000000
+vn -0.223300 0.640162 0.735071
+v -131.740204 171.975845 56.390606 1.000000 1.000000 1.000000
+vn -0.223438 0.640117 -0.735069
+v -131.740204 171.975845 46.056198 1.000000 1.000000 1.000000
+vn 0.471447 -0.496523 -0.728837
+v -131.514893 171.553055 46.056198 1.000000 1.000000 1.000000
+vn 0.089234 0.798554 -0.595273
+v -131.321777 172.238174 46.257198 1.000000 1.000000 1.000000
+vn 0.749395 -0.314556 -0.582633
+v -131.096451 171.813995 46.257198 1.000000 1.000000 1.000000
+vn 0.267173 0.921687 -0.281268
+v -131.015350 172.429321 46.806198 1.000000 1.000000 1.000000
+vn 0.935904 -0.225491 -0.270624
+v -130.790039 172.006546 46.806198 1.000000 1.000000 1.000000
+vn 0.281216 0.957452 -0.064839
+v -130.903336 172.499100 47.556198 1.000000 1.000000 1.000000
+vn 0.970369 -0.233725 -0.061285
+v -130.678024 172.076309 47.556198 1.000000 1.000000 1.000000
+vn 0.281210 0.957451 0.064867
+v -130.903336 172.499100 54.890606 1.000000 1.000000 1.000000
+vn 0.970376 -0.233711 0.061236
+v -130.678024 172.076309 54.890606 1.000000 1.000000 1.000000
+vn 0.266450 0.921970 0.281028
+v -131.015350 172.429321 55.640606 1.000000 1.000000 1.000000
+vn 0.936272 -0.224040 0.270555
+v -130.790039 172.006546 55.640606 1.000000 1.000000 1.000000
+vn 0.088720 0.798736 0.595105
+v -131.321777 172.238174 56.189606 1.000000 1.000000 1.000000
+vn 0.749010 -0.313891 0.583487
+v -131.096451 171.813995 56.189606 1.000000 1.000000 1.000000
+vn -0.980379 -0.023898 -0.195666
+v 120.148102 -156.477371 47.908119 1.000000 1.000000 1.000000
+vn -0.021751 -0.978030 -0.207328
+v 120.512337 -156.872269 47.908119 1.000000 1.000000 1.000000
+vn -0.019355 -0.998582 -0.049589
+v 120.408310 -156.985291 49.056137 1.000000 1.000000 1.000000
+vn -0.998749 -0.019272 -0.046145
+v 120.044212 -156.590408 49.056137 1.000000 1.000000 1.000000
+vn -0.909915 0.035107 -0.413306
+v 120.444229 -156.156464 46.934738 1.000000 1.000000 1.000000
+vn 0.044261 -0.900837 -0.431896
+v 120.808327 -156.551331 46.934738 1.000000 1.000000 1.000000
+vn -0.744964 0.181872 -0.641834
+v 120.887253 -155.676453 46.284519 1.000000 1.000000 1.000000
+vn 0.199999 -0.727520 -0.656289
+v 121.251350 -156.071335 46.284519 1.000000 1.000000 1.000000
+vn -0.567699 0.387884 -0.726129
+v 121.409843 -155.109955 46.056137 1.000000 1.000000 1.000000
+vn 0.417870 -0.537561 -0.732402
+v 121.773941 -155.504837 46.056137 1.000000 1.000000 1.000000
+vn -0.998748 -0.019282 0.046168
+v 120.044212 -156.590408 53.392719 1.000000 1.000000 1.000000
+vn -0.019302 -0.998583 0.049596
+v 120.408310 -156.985291 53.392719 1.000000 1.000000 1.000000
+vn -0.021849 -0.978029 0.207321
+v 120.512337 -156.872269 54.540730 1.000000 1.000000 1.000000
+vn -0.980386 -0.023767 0.195650
+v 120.148102 -156.477371 54.540730 1.000000 1.000000 1.000000
+vn 0.044102 -0.900834 0.431919
+v 120.808327 -156.551331 55.513927 1.000000 1.000000 1.000000
+vn -0.909950 0.035232 0.413219
+v 120.444229 -156.156464 55.513927 1.000000 1.000000 1.000000
+vn 0.199819 -0.727471 0.656398
+v 121.251350 -156.071335 56.164330 1.000000 1.000000 1.000000
+vn -0.744996 0.181826 0.641810
+v 120.887253 -155.676453 56.164330 1.000000 1.000000 1.000000
+vn 0.417896 -0.537558 0.732390
+v 121.773941 -155.504837 56.392727 1.000000 1.000000 1.000000
+vn -0.567702 0.387878 0.726130
+v 121.409843 -155.109955 56.392727 1.000000 1.000000 1.000000
+vn 0.074499 0.966175 -0.246894
+v 144.197861 -138.559906 56.411129 1.000000 1.000000 1.000000
+vn 0.093916 0.304704 0.947805
+v 144.197861 -138.822220 57.117329 1.000000 1.000000 1.000000
+vn 0.353080 0.261198 0.898393
+v 144.936874 -138.961761 57.010128 1.000000 1.000000 1.000000
+vn 0.299936 0.921468 -0.246852
+v 144.936874 -138.700821 56.303928 1.000000 1.000000 1.000000
+vn -0.074770 0.966196 -0.246728
+v 128.748093 -138.559906 56.411133 1.000000 1.000000 1.000000
+vn -0.094290 0.304835 0.947726
+v 128.748093 -138.822220 57.117332 1.000000 1.000000 1.000000
+vn -0.299935 0.921583 -0.246421
+v 128.009079 -138.700821 56.303932 1.000000 1.000000 1.000000
+vn -0.352902 0.261332 0.898424
+v 128.009079 -138.961761 57.010132 1.000000 1.000000 1.000000
+vn -0.532002 0.781328 -0.326345
+v 127.382462 -139.101288 55.998531 1.000000 1.000000 1.000000
+vn -0.603390 0.069735 0.794392
+v 127.382462 -139.362213 56.704933 1.000000 1.000000 1.000000
+vn -0.677664 0.596065 -0.430671
+v 126.963898 -139.699890 55.541531 1.000000 1.000000 1.000000
+vn -0.725319 -0.161384 0.669229
+v 126.963898 -139.962204 56.247932 1.000000 1.000000 1.000000
+vn -0.715955 0.460083 -0.525102
+v 126.816872 -140.407318 55.002731 1.000000 1.000000 1.000000
+vn -0.731272 -0.354389 0.582795
+v 126.816872 -140.669647 55.708931 1.000000 1.000000 1.000000
+vn -0.680071 0.368179 -0.633993
+v 126.816872 -141.617081 54.080933 1.000000 1.000000 1.000000
+vn -0.735885 -0.340917 0.585021
+v 126.816872 -141.879395 54.787331 1.000000 1.000000 1.000000
+vn -0.775654 -0.076412 0.626516
+v 126.816872 -142.064987 54.707932 1.000000 1.000000 1.000000
+vn -0.649623 0.090766 -0.754819
+v 126.816872 -142.017532 53.911133 1.000000 1.000000 1.000000
+vn -0.739221 0.198185 0.643642
+v 126.816872 -142.258926 54.739532 1.000000 1.000000 1.000000
+vn -0.677604 -0.216472 -0.702846
+v 126.816872 -142.431961 53.978733 1.000000 1.000000 1.000000
+vn -0.672564 0.200236 0.712435
+v 126.816872 -148.871414 57.819317 1.000000 1.000000 1.000000
+vn -0.745143 -0.180710 -0.641954
+v 126.816872 -149.044434 57.058331 1.000000 1.000000 1.000000
+vn -0.642047 -0.160946 0.749581
+v 126.816872 -149.358383 57.874138 1.000000 1.000000 1.000000
+vn -0.786403 0.129743 -0.603934
+v 126.816872 -149.271881 57.084129 1.000000 1.000000 1.000000
+vn -0.655522 -0.533571 0.534408
+v 126.816872 -149.810471 57.606140 1.000000 1.000000 1.000000
+vn -0.766951 0.453554 -0.453954
+v 126.816872 -149.482574 56.958927 1.000000 1.000000 1.000000
+vn -0.667933 -0.698699 0.256292
+v 126.816872 -150.127213 57.073730 1.000000 1.000000 1.000000
+vn -0.751162 0.619827 -0.227089
+v 126.816872 -149.630478 56.710529 1.000000 1.000000 1.000000
+vn -0.205747 -0.895855 0.393843
+v 126.816872 -150.241638 56.392727 1.000000 1.000000 1.000000
+vn -0.396564 0.893398 0.211134
+v 126.816872 -149.683502 56.392727 1.000000 1.000000 1.000000
+vn 0.603531 0.069913 0.794269
+v 145.563873 -139.362213 56.704929 1.000000 1.000000 1.000000
+vn 0.532268 0.781215 -0.326182
+v 145.563873 -139.101288 55.998528 1.000000 1.000000 1.000000
+vn 0.725642 -0.161060 0.668957
+v 145.982315 -139.962204 56.247929 1.000000 1.000000 1.000000
+vn 0.677514 0.596109 -0.430847
+v 145.982315 -139.699890 55.541527 1.000000 1.000000 1.000000
+vn 0.731247 -0.354527 0.582742
+v 146.129089 -140.669647 55.708927 1.000000 1.000000 1.000000
+vn 0.716018 0.460038 -0.525055
+v 146.129089 -140.407318 55.002728 1.000000 1.000000 1.000000
+vn 0.735886 -0.340917 0.585020
+v 146.129089 -141.879395 54.787327 1.000000 1.000000 1.000000
+vn 0.680085 0.368140 -0.634002
+v 146.129089 -141.617081 54.080929 1.000000 1.000000 1.000000
+vn 0.775653 -0.076413 0.626517
+v 146.129089 -142.064987 54.707928 1.000000 1.000000 1.000000
+vn 0.649622 0.090766 -0.754820
+v 146.129089 -142.017532 53.911129 1.000000 1.000000 1.000000
+vn 0.739221 0.198185 0.643642
+v 146.129089 -142.258926 54.739529 1.000000 1.000000 1.000000
+vn 0.677604 -0.216472 -0.702846
+v 146.129089 -142.431961 53.978729 1.000000 1.000000 1.000000
+vn 0.672564 0.200236 0.712434
+v 146.129089 -148.871414 57.819317 1.000000 1.000000 1.000000
+vn 0.745144 -0.180710 -0.641954
+v 146.129089 -149.044434 57.058331 1.000000 1.000000 1.000000
+vn 0.786402 0.129744 -0.603935
+v 146.129089 -149.271881 57.084129 1.000000 1.000000 1.000000
+vn 0.642047 -0.160945 0.749581
+v 146.129089 -149.358383 57.874138 1.000000 1.000000 1.000000
+vn 0.766952 0.453554 -0.453953
+v 146.129089 -149.482574 56.958927 1.000000 1.000000 1.000000
+vn 0.655522 -0.533571 0.534409
+v 146.129089 -149.810471 57.606140 1.000000 1.000000 1.000000
+vn 0.751163 0.619827 -0.227089
+v 146.129089 -149.630478 56.710529 1.000000 1.000000 1.000000
+vn 0.667932 -0.698699 0.256292
+v 146.129089 -150.127213 57.073730 1.000000 1.000000 1.000000
+vn 0.726172 0.685165 -0.056767
+v 146.129089 -149.683502 56.392727 1.000000 1.000000 1.000000
+vn 0.688864 -0.722381 0.060267
+v 146.129089 -150.241638 56.392727 1.000000 1.000000 1.000000
+vn 0.687007 -0.723580 -0.066740
+v 146.129089 -150.241638 46.056137 1.000000 1.000000 1.000000
+vn 0.728527 0.682082 0.063349
+v 146.129089 -149.683502 46.056137 1.000000 1.000000 1.000000
+vn 0.757622 0.601928 0.252372
+v 146.129089 -149.617920 45.706120 1.000000 1.000000 1.000000
+vn 0.662472 -0.690832 -0.289623
+v 146.129089 -150.102097 45.306137 1.000000 1.000000 1.000000
+vn 0.779448 0.386248 0.493228
+v 146.129089 -149.439316 45.449921 1.000000 1.000000 1.000000
+vn 0.646784 -0.469880 -0.600736
+v 146.129089 -149.718384 44.757137 1.000000 1.000000 1.000000
+vn 0.379958 -0.197595 0.903653
+v 146.129089 -149.195145 45.356140 1.000000 1.000000 1.000000
+vn 0.230706 -0.408915 -0.882929
+v 146.129089 -149.195145 44.556137 1.000000 1.000000 1.000000
+vn 0.715714 0.480105 0.507202
+v 146.129089 -137.191071 44.256138 1.000000 1.000000 1.000000
+vn 0.731584 -0.377594 -0.567634
+v 146.129089 -137.470154 43.563316 1.000000 1.000000 1.000000
+vn 0.727146 -0.188362 -0.660136
+v 145.982315 -136.776657 42.989338 1.000000 1.000000 1.000000
+vn 0.677419 0.611002 0.409610
+v 145.982315 -136.497589 43.682137 1.000000 1.000000 1.000000
+vn 0.672516 0.373434 0.638960
+v 146.129089 -138.278046 45.155136 1.000000 1.000000 1.000000
+vn 0.745329 -0.336445 -0.575578
+v 146.129089 -138.557114 44.462337 1.000000 1.000000 1.000000
+vn 0.379973 0.197580 -0.903650
+v 146.129089 -138.801285 44.556137 1.000000 1.000000 1.000000
+vn 0.230706 0.408914 0.882929
+v 146.129089 -138.801285 45.356140 1.000000 1.000000 1.000000
+vn 0.607095 0.037344 -0.793751
+v 145.563873 -136.189224 42.502720 1.000000 1.000000 1.000000
+vn 0.533555 0.790868 0.299746
+v 145.563873 -135.910156 43.195538 1.000000 1.000000 1.000000
+vn 0.356941 0.228233 -0.905816
+v 144.936874 -135.795746 42.177521 1.000000 1.000000 1.000000
+vn 0.301895 0.928798 0.214928
+v 144.936874 -135.516678 42.870319 1.000000 1.000000 1.000000
+vn 0.095875 0.272971 -0.957233
+v 144.197861 -135.657608 42.063316 1.000000 1.000000 1.000000
+vn 0.075176 0.973973 0.213833
+v 144.197861 -135.378540 42.756138 1.000000 1.000000 1.000000
+vn -0.095877 0.272969 -0.957233
+v 128.748093 -135.657608 42.063339 1.000000 1.000000 1.000000
+vn -0.075177 0.973975 0.213825
+v 128.748093 -135.378540 42.756138 1.000000 1.000000 1.000000
+vn -0.357043 0.228218 -0.905780
+v 128.009079 -135.795746 42.177540 1.000000 1.000000 1.000000
+vn -0.302000 0.928764 0.214927
+v 128.009079 -135.516678 42.870338 1.000000 1.000000 1.000000
+vn -0.607126 0.037249 -0.793732
+v 127.382462 -136.189224 42.502739 1.000000 1.000000 1.000000
+vn -0.533563 0.790845 0.299792
+v 127.382462 -135.910156 43.195538 1.000000 1.000000 1.000000
+vn -0.727090 -0.188270 -0.660223
+v 126.963898 -136.776657 42.989338 1.000000 1.000000 1.000000
+vn -0.677339 0.611129 0.409553
+v 126.963898 -136.497589 43.682137 1.000000 1.000000 1.000000
+vn -0.731622 -0.377461 -0.567673
+v 126.816872 -137.470154 43.563339 1.000000 1.000000 1.000000
+vn -0.715725 0.480155 0.507138
+v 126.816872 -137.191071 44.256138 1.000000 1.000000 1.000000
+vn -0.745329 -0.336443 -0.575579
+v 126.816872 -138.557114 44.462337 1.000000 1.000000 1.000000
+vn -0.672516 0.373434 0.638960
+v 126.816872 -138.278046 45.155136 1.000000 1.000000 1.000000
+vn -0.750549 -0.120507 -0.649734
+v 126.816872 -138.801285 44.556137 1.000000 1.000000 1.000000
+vn -0.668272 0.135660 0.731443
+v 126.816872 -138.801285 45.356140 1.000000 1.000000 1.000000
+vn -0.668273 -0.135658 -0.731442
+v 126.816872 -149.195145 44.556137 1.000000 1.000000 1.000000
+vn -0.750540 0.120486 0.649748
+v 126.816872 -149.195145 45.356140 1.000000 1.000000 1.000000
+vn -0.779448 0.386248 0.493228
+v 126.816872 -149.439316 45.449921 1.000000 1.000000 1.000000
+vn -0.646784 -0.469880 -0.600736
+v 126.816872 -149.718384 44.757137 1.000000 1.000000 1.000000
+vn -0.757623 0.601927 0.252372
+v 126.816872 -149.617920 45.706120 1.000000 1.000000 1.000000
+vn -0.662472 -0.690832 -0.289623
+v 126.816872 -150.102097 45.306137 1.000000 1.000000 1.000000
+vn -0.400639 0.892925 -0.205360
+v 126.816872 -149.683502 46.056137 1.000000 1.000000 1.000000
+vn -0.202270 -0.894440 -0.398828
+v 126.816872 -150.241638 46.056137 1.000000 1.000000 1.000000
+vn 0.068640 0.723916 -0.686465
+v 164.245224 -138.801285 44.556118 1.000000 1.000000 1.000000
+vn 0.068640 0.723916 0.686465
+v 164.245224 -138.801285 45.356117 1.000000 1.000000 1.000000
+vn 0.273723 0.692486 0.667487
+v 164.332779 -138.818039 45.356117 1.000000 1.000000 1.000000
+vn 0.273723 0.692486 -0.667487
+v 164.332779 -138.818039 44.556118 1.000000 1.000000 1.000000
+vn 0.081268 0.673059 -0.735110
+v 163.260315 -138.801285 44.556118 1.000000 1.000000 1.000000
+vn 0.081268 0.673059 0.735110
+v 163.260315 -138.801285 45.356117 1.000000 1.000000 1.000000
+vn 0.292015 0.578743 -0.761436
+v 163.152161 -138.774780 44.556118 1.000000 1.000000 1.000000
+vn 0.292015 0.578743 0.761436
+v 163.152161 -138.774780 45.356117 1.000000 1.000000 1.000000
+vn 0.467028 0.519079 -0.715850
+v 163.063324 -138.700821 44.556118 1.000000 1.000000 1.000000
+vn 0.467028 0.519079 0.715850
+v 163.063324 -138.700821 45.356117 1.000000 1.000000 1.000000
+vn 0.429153 0.600294 -0.674889
+v 161.917465 -137.587357 44.556118 1.000000 1.000000 1.000000
+vn 0.429162 0.600291 0.674886
+v 161.917465 -137.587357 45.356117 1.000000 1.000000 1.000000
+vn 0.228404 0.702782 -0.673742
+v 160.525696 -136.879913 44.556137 1.000000 1.000000 1.000000
+vn 0.228410 0.702774 0.673749
+v 160.525696 -136.879913 45.356140 1.000000 1.000000 1.000000
+vn -0.000000 0.739365 -0.673304
+v 159.003891 -136.637131 44.556137 1.000000 1.000000 1.000000
+vn -0.000000 0.739362 0.673309
+v 159.003891 -136.637131 45.356140 1.000000 1.000000 1.000000
+vn -0.228408 0.702780 -0.673743
+v 157.482101 -136.879913 44.556137 1.000000 1.000000 1.000000
+vn -0.228406 0.702777 0.673747
+v 157.482101 -136.879913 45.356140 1.000000 1.000000 1.000000
+vn -0.429158 0.600294 -0.674885
+v 156.090332 -137.587357 44.556137 1.000000 1.000000 1.000000
+vn -0.429156 0.600291 0.674889
+v 156.090332 -137.587357 45.356140 1.000000 1.000000 1.000000
+vn -0.467030 0.519081 -0.715848
+v 154.944473 -138.700821 44.556137 1.000000 1.000000 1.000000
+vn -0.467027 0.519077 0.715853
+v 154.944473 -138.700821 45.356140 1.000000 1.000000 1.000000
+vn -0.292016 0.578745 -0.761434
+v 154.855637 -138.774780 44.556137 1.000000 1.000000 1.000000
+vn -0.292014 0.578740 0.761438
+v 154.855637 -138.774780 45.356140 1.000000 1.000000 1.000000
+vn -0.081268 0.673062 -0.735108
+v 154.747482 -138.801285 44.556137 1.000000 1.000000 1.000000
+vn -0.081268 0.673056 0.735113
+v 154.747482 -138.801285 45.356140 1.000000 1.000000 1.000000
+vn 0.497385 0.550249 0.670697
+v 164.410034 -138.866882 45.356117 1.000000 1.000000 1.000000
+vn 0.497385 0.550249 -0.670697
+v 164.410034 -138.866882 44.556118 1.000000 1.000000 1.000000
+vn 0.642272 0.363181 0.674971
+v 164.467972 -138.940826 45.356117 1.000000 1.000000 1.000000
+vn 0.642272 0.363181 -0.674971
+v 164.467972 -138.940826 44.556118 1.000000 1.000000 1.000000
+vn -0.305109 0.683193 -0.663442
+v 126.447365 -149.763031 46.056137 1.000000 1.000000 1.000000
+vn -0.305109 0.683193 0.663442
+v 126.447365 -149.763031 56.392727 1.000000 1.000000 1.000000
+vn -0.483745 0.544043 -0.685572
+v 126.134125 -149.990479 46.056137 1.000000 1.000000 1.000000
+vn -0.483745 0.544042 0.685572
+v 126.134125 -149.990479 56.392727 1.000000 1.000000 1.000000
+vn 0.389096 -0.623860 0.677792
+v 162.158218 -148.279785 45.356117 1.000000 1.000000 1.000000
+vn 0.538928 -0.498563 0.678964
+v 163.465012 -147.192825 45.356117 1.000000 1.000000 1.000000
+vn -0.314378 0.558138 0.767886
+v 159.961792 -144.335190 45.356117 1.000000 1.000000 1.000000
+vn 0.204544 -0.706954 0.677036
+v 160.636414 -148.962112 45.356117 1.000000 1.000000 1.000000
+vn -0.543587 0.348944 0.763381
+v 160.699509 -143.626358 45.356117 1.000000 1.000000 1.000000
+vn 0.646681 -0.345509 0.680020
+v 164.466675 -145.777954 45.356117 1.000000 1.000000 1.000000
+vn 0.000001 0.638125 0.769933
+v 159.003891 -144.590530 45.356117 1.000000 1.000000 1.000000
+vn 0.051169 -0.720556 0.691506
+v 159.003891 -149.195145 45.356117 1.000000 1.000000 1.000000
+vn 0.314380 0.558138 0.767885
+v 158.046005 -144.335190 45.356117 1.000000 1.000000 1.000000
+vn 0.543588 0.348944 0.763381
+v 157.308289 -143.626358 45.356117 1.000000 1.000000 1.000000
+vn 0.645137 0.072811 0.760590
+v 156.959381 -142.627304 45.356117 1.000000 1.000000 1.000000
+vn 0.611182 -0.215431 0.761608
+v 157.077820 -141.566849 45.356117 1.000000 1.000000 1.000000
+vn 0.443169 -0.466080 0.765749
+v 157.637878 -140.686386 45.356117 1.000000 1.000000 1.000000
+vn 0.163055 -0.617716 0.769311
+v 158.510788 -140.191040 45.356117 1.000000 1.000000 1.000000
+vn -0.163054 -0.617714 0.769313
+v 159.497009 -140.191040 45.356117 1.000000 1.000000 1.000000
+vn -0.443167 -0.466081 0.765749
+v 160.369904 -140.686386 45.356117 1.000000 1.000000 1.000000
+vn -0.611178 -0.215432 0.761610
+v 160.929977 -141.566849 45.356117 1.000000 1.000000 1.000000
+vn 0.711040 0.176107 0.680742
+v 165.097549 -140.590118 45.356117 1.000000 1.000000 1.000000
+vn 0.732342 0.000000 0.680937
+v 165.312546 -142.359390 45.356117 1.000000 1.000000 1.000000
+vn -0.645137 0.072810 0.760590
+v 161.048416 -142.627304 45.356117 1.000000 1.000000 1.000000
+vn 0.711043 -0.176367 0.680670
+v 165.097549 -144.128677 45.356117 1.000000 1.000000 1.000000
+vn -0.645137 0.072810 -0.760590
+v 161.048416 -142.627304 44.556118 1.000000 1.000000 1.000000
+vn -0.611178 -0.215432 -0.761610
+v 160.929977 -141.566849 44.556118 1.000000 1.000000 1.000000
+vn 0.711039 0.176107 -0.680742
+v 165.097549 -140.590118 44.556118 1.000000 1.000000 1.000000
+vn 0.732342 0.000000 -0.680937
+v 165.312546 -142.359390 44.556118 1.000000 1.000000 1.000000
+vn 0.711043 -0.176367 -0.680670
+v 165.097549 -144.128677 44.556118 1.000000 1.000000 1.000000
+vn -0.543587 0.348944 -0.763381
+v 160.699509 -143.626358 44.556118 1.000000 1.000000 1.000000
+vn -0.443168 -0.466080 -0.765749
+v 160.369904 -140.686386 44.556118 1.000000 1.000000 1.000000
+vn -0.163055 -0.617710 -0.769316
+v 159.497009 -140.191040 44.556118 1.000000 1.000000 1.000000
+vn 0.163053 -0.617711 -0.769316
+v 158.510788 -140.191040 44.556118 1.000000 1.000000 1.000000
+vn 0.443165 -0.466076 -0.765753
+v 157.637878 -140.686386 44.556118 1.000000 1.000000 1.000000
+vn 0.611180 -0.215427 -0.761610
+v 157.077820 -141.566849 44.556118 1.000000 1.000000 1.000000
+vn 0.645136 0.072810 -0.760591
+v 156.959381 -142.627304 44.556118 1.000000 1.000000 1.000000
+vn 0.543587 0.348944 -0.763382
+v 157.308289 -143.626358 44.556118 1.000000 1.000000 1.000000
+vn 0.051168 -0.720556 -0.691506
+v 159.003891 -149.195145 44.556118 1.000000 1.000000 1.000000
+vn 0.314380 0.558137 -0.767885
+v 158.046005 -144.335190 44.556118 1.000000 1.000000 1.000000
+vn 0.000001 0.638125 -0.769933
+v 159.003891 -144.590530 44.556118 1.000000 1.000000 1.000000
+vn 0.204544 -0.706954 -0.677036
+v 160.636414 -148.962112 44.556118 1.000000 1.000000 1.000000
+vn -0.314378 0.558138 -0.767886
+v 159.961792 -144.335190 44.556118 1.000000 1.000000 1.000000
+vn 0.389096 -0.623860 -0.677792
+v 162.158218 -148.279785 44.556118 1.000000 1.000000 1.000000
+vn 0.538928 -0.498563 -0.678964
+v 163.465012 -147.192825 44.556118 1.000000 1.000000 1.000000
+vn 0.646681 -0.345509 -0.680020
+v 164.466675 -145.777954 44.556118 1.000000 1.000000 1.000000
+vn 0.267550 -0.597151 -0.756193
+v 126.644478 -150.279312 46.056137 1.000000 1.000000 1.000000
+vn 0.267550 -0.597151 0.756193
+v 126.644478 -150.279312 56.392727 1.000000 1.000000 1.000000
+vn 0.453894 -0.510850 -0.730077
+v 126.498222 -150.385345 46.056137 1.000000 1.000000 1.000000
+vn 0.453892 -0.510853 0.730076
+v 126.498222 -150.385345 56.392727 1.000000 1.000000 1.000000
+vn 0.744929 0.181809 -0.641892
+v -120.887253 -155.676453 46.284557 1.000000 1.000000 1.000000
+vn -0.199872 -0.727438 -0.656418
+v -121.251350 -156.071335 46.284557 1.000000 1.000000 1.000000
+vn -0.417912 -0.537559 -0.732380
+v -121.773941 -155.504837 46.056160 1.000000 1.000000 1.000000
+vn 0.567680 0.387845 -0.726165
+v -121.409843 -155.109955 46.056160 1.000000 1.000000 1.000000
+vn 0.909909 0.035120 -0.413318
+v -120.444229 -156.156464 46.934757 1.000000 1.000000 1.000000
+vn -0.044085 -0.900819 -0.431952
+v -120.808327 -156.551331 46.934757 1.000000 1.000000 1.000000
+vn 0.980380 -0.024050 -0.195645
+v -120.148102 -156.477371 47.908157 1.000000 1.000000 1.000000
+vn 0.021844 -0.978035 -0.207291
+v -120.512337 -156.872269 47.908157 1.000000 1.000000 1.000000
+vn 0.998746 -0.019352 -0.046174
+v -120.044212 -156.590408 49.056160 1.000000 1.000000 1.000000
+vn 0.019302 -0.998583 -0.049597
+v -120.408310 -156.985291 49.056160 1.000000 1.000000 1.000000
+vn 0.998747 -0.019340 0.046161
+v -120.044212 -156.590408 53.392757 1.000000 1.000000 1.000000
+vn 0.019291 -0.998584 0.049580
+v -120.408310 -156.985291 53.392757 1.000000 1.000000 1.000000
+vn 0.980379 -0.023759 0.195686
+v -120.148102 -156.477371 54.540764 1.000000 1.000000 1.000000
+vn 0.021757 -0.978025 0.207350
+v -120.512337 -156.872269 54.540764 1.000000 1.000000 1.000000
+vn 0.909952 0.035080 0.413227
+v -120.444229 -156.156464 55.513962 1.000000 1.000000 1.000000
+vn -0.044086 -0.900839 0.431908
+v -120.808327 -156.551331 55.513962 1.000000 1.000000 1.000000
+vn 0.744918 0.181704 0.641935
+v -120.887253 -155.676453 56.164364 1.000000 1.000000 1.000000
+vn -0.199856 -0.727492 0.656363
+v -121.251350 -156.071335 56.164364 1.000000 1.000000 1.000000
+vn 0.567679 0.387846 0.726165
+v -121.409843 -155.109955 56.392761 1.000000 1.000000 1.000000
+vn -0.417909 -0.537566 0.732377
+v -121.773941 -155.504837 56.392761 1.000000 1.000000 1.000000
+vn -0.715944 0.460028 -0.525165
+v -146.129089 -140.407318 55.002766 1.000000 1.000000 1.000000
+vn -0.731349 -0.354400 0.582691
+v -146.129089 -140.669647 55.708965 1.000000 1.000000 1.000000
+vn -0.725367 -0.161494 0.669151
+v -145.982315 -139.962204 56.247967 1.000000 1.000000 1.000000
+vn -0.677745 0.595936 -0.430723
+v -145.982315 -139.699890 55.541565 1.000000 1.000000 1.000000
+vn -0.680069 0.368181 -0.633994
+v -146.129089 -141.617081 54.080967 1.000000 1.000000 1.000000
+vn -0.735907 -0.340948 0.584975
+v -146.129089 -141.879395 54.787365 1.000000 1.000000 1.000000
+vn -0.775654 -0.076412 0.626516
+v -146.129089 -142.064987 54.707966 1.000000 1.000000 1.000000
+vn -0.649622 0.090766 -0.754819
+v -146.129089 -142.017532 53.911167 1.000000 1.000000 1.000000
+vn -0.739221 0.198185 0.643642
+v -146.129089 -142.258926 54.739567 1.000000 1.000000 1.000000
+vn -0.677604 -0.216472 -0.702846
+v -146.129089 -142.431961 53.978767 1.000000 1.000000 1.000000
+vn -0.672559 0.200221 0.712443
+v -146.129089 -148.871414 57.819359 1.000000 1.000000 1.000000
+vn -0.745143 -0.180710 -0.641954
+v -146.129089 -149.044434 57.058369 1.000000 1.000000 1.000000
+vn -0.642051 -0.160962 0.749574
+v -146.129089 -149.358383 57.874157 1.000000 1.000000 1.000000
+vn -0.786403 0.129743 -0.603934
+v -146.129089 -149.271881 57.084167 1.000000 1.000000 1.000000
+vn -0.655524 -0.533566 0.534411
+v -146.129089 -149.810471 57.606159 1.000000 1.000000 1.000000
+vn -0.766951 0.453554 -0.453954
+v -146.129089 -149.482574 56.958965 1.000000 1.000000 1.000000
+vn -0.667931 -0.698699 0.256298
+v -146.129089 -150.127213 57.073769 1.000000 1.000000 1.000000
+vn -0.751162 0.619827 -0.227089
+v -146.129089 -149.630478 56.710567 1.000000 1.000000 1.000000
+vn -0.688864 -0.722381 0.060267
+v -146.129089 -150.241638 56.392765 1.000000 1.000000 1.000000
+vn -0.726172 0.685165 -0.056767
+v -146.129089 -149.683502 56.392765 1.000000 1.000000 1.000000
+vn -0.687007 -0.723580 -0.066740
+v -146.129089 -150.241638 46.056160 1.000000 1.000000 1.000000
+vn -0.728527 0.682081 0.063352
+v -146.129089 -149.683502 46.056160 1.000000 1.000000 1.000000
+vn -0.662472 -0.690832 -0.289622
+v -146.129089 -150.102097 45.306160 1.000000 1.000000 1.000000
+vn -0.757622 0.601927 0.252374
+v -146.129089 -149.617920 45.706158 1.000000 1.000000 1.000000
+vn -0.646783 -0.469880 -0.600737
+v -146.129089 -149.718384 44.757156 1.000000 1.000000 1.000000
+vn -0.779439 0.386271 0.493224
+v -146.129089 -149.439316 45.449959 1.000000 1.000000 1.000000
+vn -0.230707 -0.408910 -0.882931
+v -146.129089 -149.195145 44.556160 1.000000 1.000000 1.000000
+vn -0.379973 -0.197581 0.903650
+v -146.129089 -149.195145 45.356159 1.000000 1.000000 1.000000
+vn -0.603538 0.069967 0.794258
+v -145.563873 -139.362213 56.704967 1.000000 1.000000 1.000000
+vn -0.532007 0.781349 -0.326286
+v -145.563873 -139.101288 55.998566 1.000000 1.000000 1.000000
+vn -0.352829 0.261753 0.898330
+v -144.936874 -138.961761 57.010166 1.000000 1.000000 1.000000
+vn -0.299820 0.921617 -0.246436
+v -144.936874 -138.700821 56.303967 1.000000 1.000000 1.000000
+vn -0.094277 0.304900 0.947707
+v -144.197861 -138.822220 57.117367 1.000000 1.000000 1.000000
+vn -0.074766 0.966195 -0.246732
+v -144.197861 -138.559906 56.411167 1.000000 1.000000 1.000000
+vn 0.093935 0.304758 0.947786
+v -128.748093 -138.822220 57.117367 1.000000 1.000000 1.000000
+vn 0.074476 0.966167 -0.246930
+v -128.748093 -138.559906 56.411167 1.000000 1.000000 1.000000
+vn 0.353185 0.261185 0.898355
+v -128.009079 -138.961761 57.010166 1.000000 1.000000 1.000000
+vn 0.300105 0.921466 -0.246653
+v -128.009079 -138.700821 56.303967 1.000000 1.000000 1.000000
+vn 0.603563 0.069807 0.794254
+v -127.382462 -139.362213 56.704967 1.000000 1.000000 1.000000
+vn 0.532052 0.781109 -0.326788
+v -127.382462 -139.101288 55.998566 1.000000 1.000000 1.000000
+vn 0.725594 -0.160950 0.669035
+v -126.963898 -139.962204 56.247967 1.000000 1.000000 1.000000
+vn 0.676888 0.596512 -0.431273
+v -126.963898 -139.699890 55.541565 1.000000 1.000000 1.000000
+vn 0.731387 -0.354279 0.582717
+v -126.816872 -140.669647 55.708965 1.000000 1.000000 1.000000
+vn 0.715946 0.460123 -0.525080
+v -126.816872 -140.407318 55.002766 1.000000 1.000000 1.000000
+vn 0.735908 -0.340948 0.584974
+v -126.816872 -141.879395 54.787365 1.000000 1.000000 1.000000
+vn 0.680069 0.368181 -0.633994
+v -126.816872 -141.617081 54.080967 1.000000 1.000000 1.000000
+vn 0.775653 -0.076413 0.626517
+v -126.816872 -142.064987 54.707966 1.000000 1.000000 1.000000
+vn 0.649622 0.090766 -0.754819
+v -126.816872 -142.017532 53.911167 1.000000 1.000000 1.000000
+vn 0.739221 0.198185 0.643642
+v -126.816872 -142.258926 54.739567 1.000000 1.000000 1.000000
+vn 0.677604 -0.216472 -0.702846
+v -126.816872 -142.431961 53.978767 1.000000 1.000000 1.000000
+vn 0.672560 0.200221 0.712443
+v -126.816872 -148.871414 57.819359 1.000000 1.000000 1.000000
+vn 0.745144 -0.180710 -0.641954
+v -126.816872 -149.044434 57.058365 1.000000 1.000000 1.000000
+vn 0.786402 0.129744 -0.603935
+v -126.816872 -149.271881 57.084164 1.000000 1.000000 1.000000
+vn 0.642051 -0.160962 0.749574
+v -126.816872 -149.358383 57.874157 1.000000 1.000000 1.000000
+vn 0.766952 0.453554 -0.453953
+v -126.816872 -149.482574 56.958961 1.000000 1.000000 1.000000
+vn 0.655523 -0.533567 0.534411
+v -126.816872 -149.810471 57.606159 1.000000 1.000000 1.000000
+vn 0.751163 0.619827 -0.227089
+v -126.816872 -149.630478 56.710564 1.000000 1.000000 1.000000
+vn 0.667931 -0.698699 0.256297
+v -126.816872 -150.127213 57.073765 1.000000 1.000000 1.000000
+vn 0.396564 0.893398 0.211134
+v -126.816872 -149.683502 56.392761 1.000000 1.000000 1.000000
+vn 0.205747 -0.895855 0.393843
+v -126.816872 -150.241638 56.392761 1.000000 1.000000 1.000000
+vn -0.075180 0.973963 0.213877
+v -144.197861 -135.378540 42.756157 1.000000 1.000000 1.000000
+vn -0.095900 0.272962 -0.957233
+v -144.197861 -135.657608 42.063358 1.000000 1.000000 1.000000
+vn -0.356919 0.227800 -0.905934
+v -144.936874 -135.795746 42.177559 1.000000 1.000000 1.000000
+vn -0.301805 0.928729 0.215351
+v -144.936874 -135.516678 42.870358 1.000000 1.000000 1.000000
+vn 0.075163 0.973966 0.213871
+v -128.748093 -135.378540 42.756157 1.000000 1.000000 1.000000
+vn 0.095877 0.272969 -0.957233
+v -128.748093 -135.657608 42.063358 1.000000 1.000000 1.000000
+vn 0.301991 0.928771 0.214909
+v -128.009079 -135.516678 42.870358 1.000000 1.000000 1.000000
+vn 0.357043 0.228218 -0.905780
+v -128.009079 -135.795746 42.177559 1.000000 1.000000 1.000000
+vn 0.533778 0.790868 0.299348
+v -127.382462 -135.910156 43.195557 1.000000 1.000000 1.000000
+vn 0.607126 0.037249 -0.793732
+v -127.382462 -136.189224 42.502758 1.000000 1.000000 1.000000
+vn 0.677730 0.610919 0.409219
+v -126.963898 -136.497589 43.682159 1.000000 1.000000 1.000000
+vn 0.727090 -0.188269 -0.660223
+v -126.963898 -136.776657 42.989357 1.000000 1.000000 1.000000
+vn 0.715630 0.480168 0.507260
+v -126.816872 -137.191071 44.256157 1.000000 1.000000 1.000000
+vn 0.731622 -0.377462 -0.567673
+v -126.816872 -137.470154 43.563358 1.000000 1.000000 1.000000
+vn 0.672496 0.373483 0.638952
+v -126.816872 -138.278046 45.155159 1.000000 1.000000 1.000000
+vn 0.745327 -0.336448 -0.575579
+v -126.816872 -138.557114 44.462357 1.000000 1.000000 1.000000
+vn 0.668273 0.135658 0.731443
+v -126.816872 -138.801285 45.356159 1.000000 1.000000 1.000000
+vn 0.750550 -0.120510 -0.649732
+v -126.816872 -138.801285 44.556160 1.000000 1.000000 1.000000
+vn 0.750549 0.120506 0.649734
+v -126.816872 -149.195145 45.356159 1.000000 1.000000 1.000000
+vn 0.668274 -0.135655 -0.731442
+v -126.816872 -149.195145 44.556160 1.000000 1.000000 1.000000
+vn 0.779439 0.386271 0.493224
+v -126.816872 -149.439316 45.449959 1.000000 1.000000 1.000000
+vn 0.646783 -0.469880 -0.600737
+v -126.816872 -149.718384 44.757156 1.000000 1.000000 1.000000
+vn 0.757621 0.601928 0.252375
+v -126.816872 -149.617920 45.706158 1.000000 1.000000 1.000000
+vn 0.662472 -0.690832 -0.289622
+v -126.816872 -150.102097 45.306160 1.000000 1.000000 1.000000
+vn 0.400641 0.892925 -0.205358
+v -126.816872 -149.683502 46.056160 1.000000 1.000000 1.000000
+vn 0.202270 -0.894440 -0.398828
+v -126.816872 -150.241638 46.056160 1.000000 1.000000 1.000000
+vn -0.606790 0.037025 -0.794000
+v -145.563873 -136.189224 42.502758 1.000000 1.000000 1.000000
+vn -0.533454 0.790967 0.299663
+v -145.563873 -135.910156 43.195557 1.000000 1.000000 1.000000
+vn -0.727129 -0.188366 -0.660153
+v -145.982315 -136.776657 42.989357 1.000000 1.000000 1.000000
+vn -0.677803 0.610804 0.409269
+v -145.982315 -136.497589 43.682159 1.000000 1.000000 1.000000
+vn -0.731589 -0.377587 -0.567632
+v -146.129089 -137.470154 43.563358 1.000000 1.000000 1.000000
+vn -0.715619 0.480118 0.507323
+v -146.129089 -137.191071 44.256157 1.000000 1.000000 1.000000
+vn -0.745327 -0.336448 -0.575578
+v -146.129089 -138.557114 44.462357 1.000000 1.000000 1.000000
+vn -0.672496 0.373483 0.638952
+v -146.129089 -138.278046 45.155159 1.000000 1.000000 1.000000
+vn -0.230705 0.408915 0.882929
+v -146.129089 -138.801285 45.356159 1.000000 1.000000 1.000000
+vn -0.379977 0.197574 -0.903649
+v -146.129089 -138.801285 44.556160 1.000000 1.000000 1.000000
+vn -0.642272 0.363181 -0.674971
+v -164.467972 -138.940826 44.556179 1.000000 1.000000 1.000000
+vn -0.642272 0.363181 0.674971
+v -164.467972 -138.940826 45.356178 1.000000 1.000000 1.000000
+vn -0.497385 0.550249 0.670697
+v -164.410034 -138.866882 45.356178 1.000000 1.000000 1.000000
+vn -0.497385 0.550249 -0.670697
+v -164.410034 -138.866882 44.556179 1.000000 1.000000 1.000000
+vn -0.273723 0.692486 0.667487
+v -164.332779 -138.818039 45.356178 1.000000 1.000000 1.000000
+vn -0.273723 0.692486 -0.667487
+v -164.332779 -138.818039 44.556179 1.000000 1.000000 1.000000
+vn -0.068640 0.723916 0.686465
+v -164.245224 -138.801285 45.356178 1.000000 1.000000 1.000000
+vn -0.068640 0.723916 -0.686465
+v -164.245224 -138.801285 44.556179 1.000000 1.000000 1.000000
+vn -0.081268 0.673059 0.735110
+v -163.260315 -138.801285 45.356178 1.000000 1.000000 1.000000
+vn -0.081268 0.673059 -0.735110
+v -163.260315 -138.801285 44.556179 1.000000 1.000000 1.000000
+vn -0.292015 0.578743 -0.761436
+v -163.152161 -138.774780 44.556179 1.000000 1.000000 1.000000
+vn -0.292015 0.578743 0.761436
+v -163.152161 -138.774780 45.356178 1.000000 1.000000 1.000000
+vn -0.467028 0.519079 -0.715850
+v -163.063324 -138.700821 44.556179 1.000000 1.000000 1.000000
+vn -0.467028 0.519079 0.715850
+v -163.063324 -138.700821 45.356178 1.000000 1.000000 1.000000
+vn -0.429158 0.600293 0.674887
+v -161.917465 -137.587357 45.356178 1.000000 1.000000 1.000000
+vn -0.429158 0.600293 -0.674887
+v -161.917465 -137.587357 44.556179 1.000000 1.000000 1.000000
+vn -0.228407 0.702779 0.673745
+v -160.525696 -136.879913 45.356178 1.000000 1.000000 1.000000
+vn -0.228407 0.702779 -0.673745
+v -160.525696 -136.879913 44.556179 1.000000 1.000000 1.000000
+vn 0.000000 0.739364 0.673306
+v -159.003891 -136.637131 45.356178 1.000000 1.000000 1.000000
+vn 0.000000 0.739364 -0.673306
+v -159.003891 -136.637131 44.556179 1.000000 1.000000 1.000000
+vn 0.228407 0.702779 0.673745
+v -157.482101 -136.879913 45.356178 1.000000 1.000000 1.000000
+vn 0.228407 0.702779 -0.673745
+v -157.482101 -136.879913 44.556179 1.000000 1.000000 1.000000
+vn 0.429158 0.600293 0.674887
+v -156.090332 -137.587357 45.356178 1.000000 1.000000 1.000000
+vn 0.429158 0.600293 -0.674887
+v -156.090332 -137.587357 44.556179 1.000000 1.000000 1.000000
+vn 0.467028 0.519079 0.715850
+v -154.944473 -138.700821 45.356178 1.000000 1.000000 1.000000
+vn 0.467028 0.519079 -0.715850
+v -154.944473 -138.700821 44.556179 1.000000 1.000000 1.000000
+vn 0.292015 0.578743 -0.761436
+v -154.855637 -138.774780 44.556179 1.000000 1.000000 1.000000
+vn 0.292015 0.578743 0.761436
+v -154.855637 -138.774780 45.356178 1.000000 1.000000 1.000000
+vn 0.081267 0.673060 -0.735110
+v -154.747482 -138.801285 44.556179 1.000000 1.000000 1.000000
+vn 0.081270 0.673058 0.735111
+v -154.747482 -138.801285 45.356178 1.000000 1.000000 1.000000
+vn 0.305109 0.683193 0.663442
+v -126.447365 -149.763031 56.392761 1.000000 1.000000 1.000000
+vn 0.305109 0.683193 -0.663442
+v -126.447365 -149.763031 46.056160 1.000000 1.000000 1.000000
+vn 0.483732 0.544048 0.685576
+v -126.134125 -149.990479 56.392761 1.000000 1.000000 1.000000
+vn 0.483732 0.544048 -0.685576
+v -126.134125 -149.990479 46.056160 1.000000 1.000000 1.000000
+vn -0.051164 -0.720559 0.691503
+v -159.003891 -149.195145 45.356159 1.000000 1.000000 1.000000
+vn 0.000000 0.638124 0.769934
+v -159.003891 -144.590530 45.356178 1.000000 1.000000 1.000000
+vn -0.204540 -0.706954 0.677037
+v -160.636414 -148.962112 45.356178 1.000000 1.000000 1.000000
+vn -0.543587 0.348943 0.763382
+v -157.308289 -143.626358 45.356178 1.000000 1.000000 1.000000
+vn -0.314378 0.558136 0.767888
+v -158.046005 -144.335190 45.356178 1.000000 1.000000 1.000000
+vn 0.314378 0.558138 0.767886
+v -159.961792 -144.335190 45.356178 1.000000 1.000000 1.000000
+vn -0.389096 -0.623860 0.677792
+v -162.158218 -148.279785 45.356178 1.000000 1.000000 1.000000
+vn 0.543587 0.348944 0.763381
+v -160.699509 -143.626358 45.356178 1.000000 1.000000 1.000000
+vn -0.538928 -0.498563 0.678964
+v -163.465012 -147.192825 45.356178 1.000000 1.000000 1.000000
+vn 0.645137 0.072810 0.760590
+v -161.048416 -142.627304 45.356178 1.000000 1.000000 1.000000
+vn -0.711043 -0.176367 0.680670
+v -165.097549 -144.128677 45.356178 1.000000 1.000000 1.000000
+vn -0.646681 -0.345509 0.680020
+v -164.466675 -145.777954 45.356178 1.000000 1.000000 1.000000
+vn 0.611178 -0.215432 0.761610
+v -160.929977 -141.566849 45.356178 1.000000 1.000000 1.000000
+vn -0.711039 0.176107 0.680742
+v -165.097549 -140.590118 45.356178 1.000000 1.000000 1.000000
+vn -0.732342 0.000000 0.680937
+v -165.312546 -142.359390 45.356178 1.000000 1.000000 1.000000
+vn 0.443167 -0.466081 0.765749
+v -160.369904 -140.686386 45.356178 1.000000 1.000000 1.000000
+vn 0.163056 -0.617712 0.769314
+v -159.497009 -140.191040 45.356178 1.000000 1.000000 1.000000
+vn -0.163054 -0.617714 0.769314
+v -158.510788 -140.191040 45.356178 1.000000 1.000000 1.000000
+vn -0.443166 -0.466078 0.765751
+v -157.637878 -140.686386 45.356178 1.000000 1.000000 1.000000
+vn -0.611180 -0.215429 0.761609
+v -157.077820 -141.566849 45.356178 1.000000 1.000000 1.000000
+vn -0.645136 0.072810 0.760591
+v -156.959381 -142.627304 45.356178 1.000000 1.000000 1.000000
+vn -0.645137 0.072811 -0.760590
+v -156.959381 -142.627304 44.556179 1.000000 1.000000 1.000000
+vn -0.611181 -0.215429 -0.761609
+v -157.077820 -141.566849 44.556179 1.000000 1.000000 1.000000
+vn -0.543588 0.348944 -0.763381
+v -157.308289 -143.626358 44.556179 1.000000 1.000000 1.000000
+vn -0.443166 -0.466078 -0.765751
+v -157.637878 -140.686386 44.556179 1.000000 1.000000 1.000000
+vn -0.163054 -0.617714 -0.769314
+v -158.510788 -140.191040 44.556179 1.000000 1.000000 1.000000
+vn 0.163056 -0.617712 -0.769314
+v -159.497009 -140.191040 44.556179 1.000000 1.000000 1.000000
+vn 0.443167 -0.466081 -0.765749
+v -160.369904 -140.686386 44.556179 1.000000 1.000000 1.000000
+vn 0.611178 -0.215432 -0.761610
+v -160.929977 -141.566849 44.556179 1.000000 1.000000 1.000000
+vn -0.711040 0.176107 -0.680742
+v -165.097549 -140.590118 44.556179 1.000000 1.000000 1.000000
+vn -0.732342 0.000000 -0.680937
+v -165.312546 -142.359390 44.556179 1.000000 1.000000 1.000000
+vn 0.645137 0.072810 -0.760590
+v -161.048416 -142.627304 44.556179 1.000000 1.000000 1.000000
+vn -0.711043 -0.176367 -0.680670
+v -165.097549 -144.128677 44.556179 1.000000 1.000000 1.000000
+vn 0.543587 0.348944 -0.763381
+v -160.699509 -143.626358 44.556179 1.000000 1.000000 1.000000
+vn -0.646681 -0.345509 -0.680020
+v -164.466675 -145.777954 44.556179 1.000000 1.000000 1.000000
+vn -0.538928 -0.498563 -0.678964
+v -163.465012 -147.192825 44.556179 1.000000 1.000000 1.000000
+vn 0.314378 0.558138 -0.767886
+v -159.961792 -144.335190 44.556179 1.000000 1.000000 1.000000
+vn -0.389096 -0.623860 -0.677792
+v -162.158218 -148.279785 44.556179 1.000000 1.000000 1.000000
+vn -0.000003 0.638126 -0.769932
+v -159.003891 -144.590530 44.556179 1.000000 1.000000 1.000000
+vn -0.204548 -0.706954 -0.677035
+v -160.636414 -148.962112 44.556179 1.000000 1.000000 1.000000
+vn -0.314380 0.558139 -0.767884
+v -158.046005 -144.335190 44.556179 1.000000 1.000000 1.000000
+vn -0.051172 -0.720554 -0.691509
+v -159.003891 -149.195145 44.556160 1.000000 1.000000 1.000000
+vn -0.267550 -0.597151 -0.756193
+v -126.644478 -150.279312 46.056160 1.000000 1.000000 1.000000
+vn -0.267550 -0.597151 0.756193
+v -126.644478 -150.279312 56.392761 1.000000 1.000000 1.000000
+vn -0.453889 -0.510862 0.730072
+v -126.498222 -150.385345 56.392761 1.000000 1.000000 1.000000
+vn -0.453889 -0.510862 -0.730072
+v -126.498222 -150.385345 46.056160 1.000000 1.000000 1.000000
+vn 0.727024 0.088557 0.680877
+v 165.441299 163.220123 54.399963 1.000000 1.000000 1.000000
+vn 0.727024 -0.088557 0.680877
+v 165.441299 -142.358002 54.399925 1.000000 1.000000 1.000000
+vn 0.727024 0.088557 -0.680877
+v 165.441299 163.220123 46.399960 1.000000 1.000000 1.000000
+vn 0.665225 0.358094 -0.655167
+v 164.578690 166.708450 46.399960 1.000000 1.000000 1.000000
+vn 0.665226 0.358094 0.655166
+v 164.578690 166.708450 54.399963 1.000000 1.000000 1.000000
+vn 0.727024 -0.088557 -0.680878
+v 165.441299 -142.358002 46.399918 1.000000 1.000000 1.000000
+vn 0.665225 -0.358094 0.655167
+v 164.578690 -145.846329 54.399925 1.000000 1.000000 1.000000
+vn 0.665225 -0.358094 -0.655167
+v 164.578690 -145.846329 46.399918 1.000000 1.000000 1.000000
+vn 0.399227 -0.645168 0.651441
+v 162.222595 -148.399796 54.399925 1.000000 1.000000 1.000000
+vn 0.399228 -0.645168 -0.651441
+v 162.222595 -148.399796 46.399918 1.000000 1.000000 1.000000
+vn 0.103710 -0.728888 0.676733
+v 159.003891 -149.334671 54.399925 1.000000 1.000000 1.000000
+vn 0.103710 -0.728888 -0.676732
+v 159.003891 -149.334671 46.399918 1.000000 1.000000 1.000000
+vn 0.399228 0.645168 -0.651441
+v 162.222595 169.261917 46.399960 1.000000 1.000000 1.000000
+vn 0.399228 0.645168 0.651441
+v 162.222595 169.261917 54.399967 1.000000 1.000000 1.000000
+vn 0.103710 0.728888 -0.676733
+v 159.003891 170.196793 46.399960 1.000000 1.000000 1.000000
+vn -0.103710 0.728888 -0.676732
+v -159.003891 170.196793 46.400017 1.000000 1.000000 1.000000
+vn 0.103710 0.728888 0.676732
+v 159.003891 170.196793 54.399967 1.000000 1.000000 1.000000
+vn -0.103710 0.728888 0.676733
+v -159.003891 170.196793 54.400009 1.000000 1.000000 1.000000
+vn -0.103710 -0.728888 0.676732
+v -159.003891 -149.334671 54.399967 1.000000 1.000000 1.000000
+vn -0.727024 -0.088557 0.680878
+v -165.441299 -142.358002 54.399971 1.000000 1.000000 1.000000
+vn -0.727024 0.088557 0.680877
+v -165.441299 163.220123 54.400009 1.000000 1.000000 1.000000
+vn -0.665225 0.358094 0.655167
+v -164.578690 166.708450 54.400009 1.000000 1.000000 1.000000
+vn -0.399228 0.645168 0.651441
+v -162.222595 169.261917 54.400009 1.000000 1.000000 1.000000
+vn -0.665225 -0.358094 0.655167
+v -164.578690 -145.846329 54.399971 1.000000 1.000000 1.000000
+vn -0.399227 -0.645168 0.651442
+v -162.222595 -148.399796 54.399971 1.000000 1.000000 1.000000
+vn -0.103711 -0.728887 -0.676733
+v -159.003891 -149.334671 46.399960 1.000000 1.000000 1.000000
+vn -0.727024 0.088557 -0.680877
+v -165.441299 163.220123 46.400017 1.000000 1.000000 1.000000
+vn -0.399228 0.645168 -0.651441
+v -162.222595 169.261917 46.400017 1.000000 1.000000 1.000000
+vn -0.727025 -0.088557 -0.680876
+v -165.441299 -142.358002 46.399979 1.000000 1.000000 1.000000
+vn -0.665225 0.358094 -0.655167
+v -164.578690 166.708450 46.400017 1.000000 1.000000 1.000000
+vn -0.665227 -0.358094 -0.655166
+v -164.578690 -145.846329 46.399979 1.000000 1.000000 1.000000
+vn -0.399231 -0.645170 -0.651437
+v -162.222595 -148.399796 46.399979 1.000000 1.000000 1.000000
+vn 0.618988 -0.381308 0.686628
+v 164.355957 -146.234238 46.399918 1.000000 1.000000 1.000000
+vn 0.535122 -0.493764 0.685450
+v 163.557724 -147.293289 46.399918 1.000000 1.000000 1.000000
+vn 0.618988 -0.381308 -0.686628
+v 164.355957 -146.234238 43.199921 1.000000 1.000000 1.000000
+vn 0.678580 -0.260099 0.686934
+v 164.950775 -145.028671 46.399918 1.000000 1.000000 1.000000
+vn 0.678580 -0.260099 -0.686934
+v 164.950775 -145.028671 43.199921 1.000000 1.000000 1.000000
+vn 0.535122 -0.493764 -0.685450
+v 163.557724 -147.293289 43.199921 1.000000 1.000000 1.000000
+vn 0.426137 -0.590908 0.685007
+v 162.580521 -148.161194 46.399918 1.000000 1.000000 1.000000
+vn 0.426137 -0.590908 -0.685007
+v 162.580521 -148.161194 43.199921 1.000000 1.000000 1.000000
+vn 0.298346 -0.664639 0.685014
+v 161.468140 -148.803040 46.399918 1.000000 1.000000 1.000000
+vn 0.298346 -0.664639 -0.685014
+v 161.468140 -148.803040 43.199921 1.000000 1.000000 1.000000
+vn 0.153656 -0.713552 0.683545
+v 160.261765 -149.203506 46.399918 1.000000 1.000000 1.000000
+vn 0.153656 -0.713552 -0.683545
+v 160.261765 -149.203506 43.199921 1.000000 1.000000 1.000000
+vn 0.037229 -0.717438 0.695627
+v 159.001328 -149.334671 46.399918 1.000000 1.000000 1.000000
+vn 0.037229 -0.717438 -0.695627
+v 159.001328 -149.334671 43.199921 1.000000 1.000000 1.000000
+vn 0.000000 -0.707107 -0.707107
+v 151.600876 -149.334671 43.199921 1.000000 1.000000 1.000000
+vn 0.000001 -0.707108 0.707106
+v 151.600876 -149.334671 46.399918 1.000000 1.000000 1.000000
+vn -0.000000 -0.707107 -0.707107
+v 134.219894 -149.334671 43.199921 1.000000 1.000000 1.000000
+vn 0.000000 -0.707106 0.707107
+v 134.219894 -149.334671 46.399940 1.000000 1.000000 1.000000
+vn -0.000000 -0.707107 -0.707107
+v 63.408436 -149.334671 43.199940 1.000000 1.000000 1.000000
+vn 0.000000 -0.707107 0.707107
+v 63.408436 -149.334671 46.399940 1.000000 1.000000 1.000000
+vn 0.681268 -0.190397 0.706840
+v 165.161926 -144.276581 46.399918 1.000000 1.000000 1.000000
+vn 0.681268 -0.190397 -0.706840
+v 165.161926 -144.276581 43.199921 1.000000 1.000000 1.000000
+vn 0.714329 -0.131012 0.687437
+v 165.316422 -143.721237 46.399918 1.000000 1.000000 1.000000
+vn 0.714329 -0.131012 -0.687437
+v 165.316422 -143.721237 43.199921 1.000000 1.000000 1.000000
+vn 0.716358 -0.032775 0.696963
+v 165.441299 -142.359390 46.399918 1.000000 1.000000 1.000000
+vn 0.716358 -0.032775 -0.696963
+v 165.441299 -142.359390 43.199921 1.000000 1.000000 1.000000
+vn 0.707105 0.000000 0.707109
+v 165.441299 10.431098 46.399940 1.000000 1.000000 1.000000
+vn 0.707104 0.000000 -0.707109
+v 165.441299 10.431098 43.199940 1.000000 1.000000 1.000000
+vn 0.707107 0.000000 0.707107
+v 165.441299 161.301544 46.399960 1.000000 1.000000 1.000000
+vn 0.707107 0.000000 -0.707107
+v 165.441299 161.301544 43.199959 1.000000 1.000000 1.000000
+vn 0.723412 0.065810 0.687273
+v 165.441299 163.222916 46.399960 1.000000 1.000000 1.000000
+vn 0.723412 0.065810 -0.687273
+v 165.441299 163.222916 43.199959 1.000000 1.000000 1.000000
+vn 0.695533 0.127862 0.707026
+v 165.089828 165.138702 46.399960 1.000000 1.000000 1.000000
+vn 0.695533 0.127862 -0.707026
+v 165.089828 165.138702 43.199959 1.000000 1.000000 1.000000
+vn 0.694581 0.267302 0.667912
+v 164.950775 165.893585 46.399960 1.000000 1.000000 1.000000
+vn 0.694581 0.267302 -0.667912
+v 164.950775 165.893585 43.199959 1.000000 1.000000 1.000000
+vn 0.546648 0.507855 -0.665777
+v 163.555145 168.156815 43.199959 1.000000 1.000000 1.000000
+vn 0.546648 0.507855 0.665777
+v 163.555145 168.156815 46.399960 1.000000 1.000000 1.000000
+vn 0.304399 0.683325 -0.663633
+v 161.465561 169.667969 43.199959 1.000000 1.000000 1.000000
+vn 0.304399 0.683325 0.663633
+v 161.465561 169.667969 46.399960 1.000000 1.000000 1.000000
+vn 0.077190 0.725343 -0.684047
+v 159.002609 170.198181 43.199959 1.000000 1.000000 1.000000
+vn 0.077190 0.725343 0.684046
+v 159.002609 170.198181 46.399960 1.000000 1.000000 1.000000
+vn -0.000000 0.707107 -0.707107
+v 151.600876 170.198181 43.199959 1.000000 1.000000 1.000000
+vn 0.000000 0.707107 0.707107
+v 151.600876 170.198181 46.399960 1.000000 1.000000 1.000000
+vn -0.000001 0.707108 -0.707105
+v 134.219894 170.198181 43.199978 1.000000 1.000000 1.000000
+vn 0.000001 0.707106 0.707107
+v 134.219894 170.198181 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.707105 -0.707108
+v 63.408436 170.198181 43.199978 1.000000 1.000000 1.000000
+vn 0.000000 0.707105 0.707108
+v 63.408436 170.198181 46.399979 1.000000 1.000000 1.000000
+vn -0.077150 0.725336 -0.684058
+v -159.001328 170.198181 43.199997 1.000000 1.000000 1.000000
+vn -0.077150 0.725336 0.684058
+v -159.001328 170.198181 46.400017 1.000000 1.000000 1.000000
+vn 0.000000 0.707107 -0.707107
+v -151.600876 170.198181 43.199997 1.000000 1.000000 1.000000
+vn -0.304400 0.683343 -0.663614
+v -161.465561 169.667969 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.707107 0.707107
+v -151.600876 170.198181 46.400017 1.000000 1.000000 1.000000
+vn -0.304400 0.683343 0.663614
+v -161.465561 169.667969 46.400017 1.000000 1.000000 1.000000
+vn 0.000000 0.707107 -0.707106
+v -134.219894 170.198181 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.707107 0.707106
+v -134.219894 170.198181 46.399998 1.000000 1.000000 1.000000
+vn 0.000000 0.707105 -0.707108
+v -63.408436 170.198181 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.707105 0.707108
+v -63.408436 170.198181 46.399998 1.000000 1.000000 1.000000
+vn -0.414238 0.572997 0.707164
+v -163.188217 168.421936 46.400017 1.000000 1.000000 1.000000
+vn -0.414238 0.572997 -0.707164
+v -163.188217 168.421936 43.199997 1.000000 1.000000 1.000000
+vn -0.546568 0.507995 0.665736
+v -163.555145 168.156815 46.400017 1.000000 1.000000 1.000000
+vn -0.546568 0.507995 -0.665736
+v -163.555145 168.156815 43.199997 1.000000 1.000000 1.000000
+vn -0.694581 0.267303 -0.667912
+v -164.950775 165.893585 43.199997 1.000000 1.000000 1.000000
+vn -0.694581 0.267302 0.667912
+v -164.950775 165.893585 46.400017 1.000000 1.000000 1.000000
+vn -0.695533 0.127862 -0.707026
+v -165.089828 165.138702 43.199997 1.000000 1.000000 1.000000
+vn -0.695533 0.127862 0.707026
+v -165.089828 165.138702 46.400017 1.000000 1.000000 1.000000
+vn -0.723412 0.065810 -0.687273
+v -165.441299 163.222916 43.199997 1.000000 1.000000 1.000000
+vn -0.723412 0.065810 0.687273
+v -165.441299 163.222916 46.400017 1.000000 1.000000 1.000000
+vn -0.707107 0.000000 0.707107
+v -165.441299 161.301544 46.400017 1.000000 1.000000 1.000000
+vn -0.707107 0.000000 -0.707106
+v -165.441299 161.301544 43.199997 1.000000 1.000000 1.000000
+vn -0.707107 0.000000 0.707106
+v -165.441299 10.431056 46.399998 1.000000 1.000000 1.000000
+vn -0.707107 0.000000 -0.707107
+v -165.441299 10.431056 43.199997 1.000000 1.000000 1.000000
+vn -0.716358 -0.032776 0.696963
+v -165.441299 -142.359390 46.399979 1.000000 1.000000 1.000000
+vn -0.716358 -0.032775 -0.696963
+v -165.441299 -142.359390 43.199978 1.000000 1.000000 1.000000
+vn -0.714401 -0.131825 0.687207
+v -165.316422 -143.721237 46.399979 1.000000 1.000000 1.000000
+vn -0.714401 -0.131825 -0.687207
+v -165.316422 -143.721237 43.199978 1.000000 1.000000 1.000000
+vn -0.680806 -0.190476 0.707264
+v -165.160629 -144.276581 46.399979 1.000000 1.000000 1.000000
+vn -0.680806 -0.190476 -0.707264
+v -165.160629 -144.276581 43.199978 1.000000 1.000000 1.000000
+vn -0.678905 -0.259938 0.686673
+v -164.950775 -145.028671 46.399979 1.000000 1.000000 1.000000
+vn -0.678905 -0.259938 -0.686673
+v -164.950775 -145.028671 43.199978 1.000000 1.000000 1.000000
+vn -0.618586 -0.382092 0.686555
+v -164.354660 -146.234238 46.399979 1.000000 1.000000 1.000000
+vn -0.618586 -0.382092 -0.686555
+v -164.354660 -146.234238 43.199978 1.000000 1.000000 1.000000
+vn -0.535095 -0.493169 0.685899
+v -163.553848 -147.293289 46.399979 1.000000 1.000000 1.000000
+vn -0.535095 -0.493170 -0.685899
+v -163.553848 -147.293289 43.199978 1.000000 1.000000 1.000000
+vn -0.470567 -0.528128 0.706858
+v -163.188217 -147.619797 46.399979 1.000000 1.000000 1.000000
+vn -0.470567 -0.528128 -0.706858
+v -163.188217 -147.619797 43.199978 1.000000 1.000000 1.000000
+vn -0.426428 -0.590697 0.685008
+v -162.579239 -148.161194 46.399979 1.000000 1.000000 1.000000
+vn -0.426428 -0.590697 -0.685008
+v -162.579239 -148.161194 43.199978 1.000000 1.000000 1.000000
+vn -0.298439 -0.664686 0.684929
+v -161.468140 -148.803040 46.399979 1.000000 1.000000 1.000000
+vn -0.298439 -0.664686 -0.684929
+v -161.468140 -148.803040 43.199978 1.000000 1.000000 1.000000
+vn -0.153567 -0.713527 0.683591
+v -160.260483 -149.203506 46.399979 1.000000 1.000000 1.000000
+vn -0.153577 -0.713528 -0.683588
+v -160.260483 -149.203506 43.199978 1.000000 1.000000 1.000000
+vn -0.037262 -0.717450 0.695612
+v -159.001328 -149.334671 46.399960 1.000000 1.000000 1.000000
+vn -0.037272 -0.717444 -0.695618
+v -159.001328 -149.334671 43.199959 1.000000 1.000000 1.000000
+vn 0.000001 -0.707107 0.707107
+v -151.600876 -149.334671 46.399960 1.000000 1.000000 1.000000
+vn -0.000001 -0.707106 -0.707107
+v -151.600876 -149.334671 43.199959 1.000000 1.000000 1.000000
+vn 0.000000 -0.707107 0.707107
+v -134.219894 -149.334671 46.399960 1.000000 1.000000 1.000000
+vn 0.000000 -0.707107 -0.707107
+v -134.219894 -149.334671 43.199959 1.000000 1.000000 1.000000
+vn 0.000000 -0.707107 0.707107
+v -63.408436 -149.334671 46.399960 1.000000 1.000000 1.000000
+vn -0.000000 -0.707107 -0.707107
+v -63.408436 -149.334671 43.199959 1.000000 1.000000 1.000000
+vn 0.333951 -0.539761 0.772745
+v 125.851265 165.032669 46.399979 1.000000 1.000000 1.000000
+vn 0.197214 -0.679074 0.707082
+v 126.216522 165.138702 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v 63.408436 165.138702 46.399979 1.000000 1.000000 1.000000
+vn 0.564342 -0.303786 0.767615
+v 125.144432 164.266617 46.399979 1.000000 1.000000 1.000000
+vn 0.000001 -0.631202 0.775619
+v 126.816872 165.313126 46.399979 1.000000 1.000000 1.000000
+vn -0.197213 -0.679074 0.707082
+v 127.417229 165.138702 46.399979 1.000000 1.000000 1.000000
+vn 0.000002 -0.000002 1.000000
+v 134.219894 165.138702 46.399960 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v 151.600876 165.138702 46.399960 1.000000 1.000000 1.000000
+vn -0.333951 -0.539757 0.772748
+v 127.782486 165.032669 46.399979 1.000000 1.000000 1.000000
+vn -0.564340 -0.303783 0.767617
+v 128.489319 164.266617 46.399979 1.000000 1.000000 1.000000
+vn 0.000001 -0.000001 1.000000
+v 134.219894 161.301544 46.399960 1.000000 1.000000 1.000000
+vn -0.643628 -0.000007 0.765338
+v 128.748093 163.220123 46.399979 1.000000 1.000000 1.000000
+vn -0.564340 0.303782 0.767618
+v 128.489319 162.173615 46.399960 1.000000 1.000000 1.000000
+vn -0.334026 0.539760 0.772713
+v 127.782486 161.407593 46.399960 1.000000 1.000000 1.000000
+vn -0.197232 0.679031 0.707118
+v 127.417480 161.301544 46.399960 1.000000 1.000000 1.000000
+vn 0.000014 0.631234 0.775593
+v 126.816872 161.127121 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v 134.219894 10.431098 46.399940 1.000000 1.000000 1.000000
+vn 0.197242 0.679026 0.707121
+v 126.216263 161.301544 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v 63.408436 161.301544 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v 63.408436 10.431076 46.399960 1.000000 1.000000 1.000000
+vn 0.000002 0.631240 0.775588
+v 0.000000 161.127121 46.399979 1.000000 1.000000 1.000000
+vn -0.197239 0.679025 0.707122
+v 0.600632 161.301544 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v 134.219894 -144.276581 46.399940 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v 63.408436 -144.276581 46.399940 1.000000 1.000000 1.000000
+vn 0.197283 0.678924 0.707207
+v 158.402634 -144.276581 46.399918 1.000000 1.000000 1.000000
+vn 0.000002 -0.000002 1.000000
+v 151.600876 -144.276581 46.399940 1.000000 1.000000 1.000000
+vn 0.000000 0.631328 0.775516
+v 159.003891 -144.451004 46.399918 1.000000 1.000000 1.000000
+vn 0.334199 0.539745 0.772649
+v 158.038284 -144.170532 46.399918 1.000000 1.000000 1.000000
+vn 0.564341 0.303787 0.767615
+v 157.331451 -143.404495 46.399918 1.000000 1.000000 1.000000
+vn 0.643633 0.000001 0.765335
+v 157.072678 -142.358002 46.399918 1.000000 1.000000 1.000000
+vn 0.564341 -0.303784 0.767616
+v 157.331451 -141.311493 46.399918 1.000000 1.000000 1.000000
+vn 0.333998 -0.539760 0.772726
+v 158.038284 -140.545456 46.399918 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v 151.600876 10.431098 46.399940 1.000000 1.000000 1.000000
+vn 0.000001 -0.631228 0.775598
+v 159.003891 -140.264999 46.399918 1.000000 1.000000 1.000000
+vn -0.333996 -0.539760 0.772726
+v 159.969513 -140.545456 46.399918 1.000000 1.000000 1.000000
+vn -0.564339 -0.303784 0.767617
+v 160.676346 -141.311493 46.399918 1.000000 1.000000 1.000000
+vn -0.643631 0.000001 0.765336
+v 160.935120 -142.358002 46.399918 1.000000 1.000000 1.000000
+vn -0.564339 0.303786 0.767617
+v 160.676346 -143.404495 46.399918 1.000000 1.000000 1.000000
+vn -0.334194 0.539740 0.772654
+v 159.969513 -144.170532 46.399918 1.000000 1.000000 1.000000
+vn -0.197279 0.678927 0.707206
+v 159.605148 -144.276581 46.399918 1.000000 1.000000 1.000000
+vn -0.197278 0.678926 0.707206
+v 159.605148 161.301544 46.399960 1.000000 1.000000 1.000000
+vn 0.000000 0.631328 0.775516
+v 159.003891 161.127121 46.399960 1.000000 1.000000 1.000000
+vn 0.197282 0.678924 0.707207
+v 158.402634 161.301544 46.399960 1.000000 1.000000 1.000000
+vn -0.334192 0.539743 0.772653
+v 159.969513 161.407593 46.399960 1.000000 1.000000 1.000000
+vn -0.564336 0.303787 0.767618
+v 160.676346 162.173615 46.399960 1.000000 1.000000 1.000000
+vn -0.643631 -0.000001 0.765336
+v 160.935120 163.220123 46.399960 1.000000 1.000000 1.000000
+vn -0.564342 -0.303784 0.767616
+v 160.676346 164.266617 46.399960 1.000000 1.000000 1.000000
+vn -0.333851 -0.539771 0.772781
+v 159.969513 165.032669 46.399960 1.000000 1.000000 1.000000
+vn -0.197189 -0.679134 0.707031
+v 159.603867 165.138702 46.399960 1.000000 1.000000 1.000000
+vn 0.000002 -0.631147 0.775663
+v 159.003891 165.313126 46.399960 1.000000 1.000000 1.000000
+vn 0.197191 -0.679134 0.707030
+v 158.403931 165.138702 46.399960 1.000000 1.000000 1.000000
+vn 0.333851 -0.539771 0.772781
+v 158.038284 165.032669 46.399960 1.000000 1.000000 1.000000
+vn 0.564342 -0.303784 0.767616
+v 157.331451 164.266617 46.399960 1.000000 1.000000 1.000000
+vn 0.643631 -0.000001 0.765336
+v 157.072678 163.220123 46.399960 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v 151.600876 161.301544 46.399960 1.000000 1.000000 1.000000
+vn 0.564336 0.303787 0.767618
+v 157.331451 162.173615 46.399960 1.000000 1.000000 1.000000
+vn 0.334196 0.539743 0.772652
+v 158.038284 161.407593 46.399960 1.000000 1.000000 1.000000
+vn -0.682729 -0.061990 0.728038
+v 146.127808 163.568954 46.399960 1.000000 1.000000 1.000000
+vn -0.682728 0.061991 0.728038
+v 146.127808 162.871292 46.399960 1.000000 1.000000 1.000000
+vn -0.616511 0.236486 0.750992
+v 146.029953 162.336884 46.399960 1.000000 1.000000 1.000000
+vn -0.481726 0.446910 0.753798
+v 145.751862 161.884781 46.399960 1.000000 1.000000 1.000000
+vn -0.266340 0.597394 0.756428
+v 145.333435 161.582001 46.399960 1.000000 1.000000 1.000000
+vn -0.072237 0.677724 0.731759
+v 144.841614 161.475952 46.399960 1.000000 1.000000 1.000000
+vn -0.616503 -0.236492 0.750996
+v 146.029953 164.103378 46.399960 1.000000 1.000000 1.000000
+vn -0.266346 -0.597388 0.756431
+v 145.333435 164.858246 46.399960 1.000000 1.000000 1.000000
+vn -0.481730 -0.446917 0.753791
+v 145.751862 164.555450 46.399960 1.000000 1.000000 1.000000
+vn -0.072237 -0.677725 0.731759
+v 144.841614 164.964294 46.399960 1.000000 1.000000 1.000000
+vn -0.582116 -0.360470 0.728836
+v 145.911499 -141.233368 46.399940 1.000000 1.000000 1.000000
+vn -0.143838 -0.667425 0.730654
+v 145.092667 -140.641739 46.399940 1.000000 1.000000 1.000000
+vn -0.278269 -0.621980 0.731921
+v 145.333435 -140.719879 46.399940 1.000000 1.000000 1.000000
+vn -0.400386 -0.554079 0.729854
+v 145.556152 -140.849640 46.399940 1.000000 1.000000 1.000000
+vn -0.501102 -0.464591 0.730104
+v 145.751862 -141.022659 46.399940 1.000000 1.000000 1.000000
+vn 0.400830 -0.552325 0.730939
+v 140.262039 -140.849640 46.399940 1.000000 1.000000 1.000000
+vn 0.277616 -0.622626 0.731619
+v 140.486053 -140.719879 46.399940 1.000000 1.000000 1.000000
+vn 0.143637 -0.667395 0.730720
+v 140.726822 -140.641739 46.399940 1.000000 1.000000 1.000000
+vn 0.038219 -0.693222 0.719710
+v 140.979156 -140.613831 46.399940 1.000000 1.000000 1.000000
+vn -0.038409 -0.693145 0.719774
+v 144.841614 -140.613831 46.399940 1.000000 1.000000 1.000000
+vn -0.639187 -0.245451 0.728830
+v 146.031250 -141.474747 46.399940 1.000000 1.000000 1.000000
+vn -0.673772 -0.121816 0.728830
+v 146.104630 -141.737076 46.399940 1.000000 1.000000 1.000000
+vn -0.696656 -0.029618 0.716794
+v 146.127808 -142.009171 46.399940 1.000000 1.000000 1.000000
+vn -0.696656 0.029618 0.716794
+v 146.127808 -142.706833 46.399940 1.000000 1.000000 1.000000
+vn -0.673769 0.121821 0.728831
+v 146.104630 -142.978928 46.399940 1.000000 1.000000 1.000000
+vn -0.638639 0.246080 0.729099
+v 146.031250 -143.241241 46.399940 1.000000 1.000000 1.000000
+vn -0.581940 0.361291 0.728570
+v 145.911499 -143.481247 46.399940 1.000000 1.000000 1.000000
+vn -0.503683 0.463290 0.729154
+v 145.751862 -143.691940 46.399940 1.000000 1.000000 1.000000
+vn -0.400333 0.552123 0.731364
+v 145.556152 -143.867752 46.399940 1.000000 1.000000 1.000000
+vn -0.278961 0.623070 0.730729
+v 145.333435 -143.996109 46.399940 1.000000 1.000000 1.000000
+vn -0.143482 0.666097 0.731935
+v 145.092667 -144.075653 46.399940 1.000000 1.000000 1.000000
+vn -0.036548 0.693904 0.719139
+v 144.841614 -144.102173 46.399940 1.000000 1.000000 1.000000
+vn 0.502165 -0.466111 0.728403
+v 140.068909 -141.022659 46.399940 1.000000 1.000000 1.000000
+vn 0.640242 -0.242608 0.728856
+v 139.788239 -141.474747 46.399940 1.000000 1.000000 1.000000
+vn 0.580203 -0.360655 0.730269
+v 139.906693 -141.233368 46.399940 1.000000 1.000000 1.000000
+vn 0.675195 -0.123751 0.727184
+v 139.716141 -141.737076 46.399940 1.000000 1.000000 1.000000
+vn 0.695399 -0.032821 0.717874
+v 139.690399 -142.009171 46.399940 1.000000 1.000000 1.000000
+vn 0.695399 0.032821 0.717874
+v 139.690399 -142.706833 46.399940 1.000000 1.000000 1.000000
+vn 0.675193 0.123755 0.727186
+v 139.716141 -142.978928 46.399940 1.000000 1.000000 1.000000
+vn 0.639701 0.243235 0.729123
+v 139.788239 -143.241241 46.399940 1.000000 1.000000 1.000000
+vn 0.580029 0.361470 0.730004
+v 139.906693 -143.481247 46.399940 1.000000 1.000000 1.000000
+vn 0.504749 0.464798 0.727455
+v 140.068909 -143.691940 46.399940 1.000000 1.000000 1.000000
+vn 0.400773 0.550358 0.732452
+v 140.262039 -143.867752 46.399940 1.000000 1.000000 1.000000
+vn 0.278310 0.623711 0.730430
+v 140.486053 -143.996109 46.399940 1.000000 1.000000 1.000000
+vn 0.143291 0.666068 0.731998
+v 140.726822 -144.075653 46.399940 1.000000 1.000000 1.000000
+vn 0.036368 0.693977 0.719078
+v 140.979156 -144.102173 46.399940 1.000000 1.000000 1.000000
+vn 0.672405 0.082498 0.735572
+v 139.690399 162.871292 46.399960 1.000000 1.000000 1.000000
+vn 0.564309 0.304403 0.767394
+v 139.864212 162.173615 46.399960 1.000000 1.000000 1.000000
+vn 0.094715 0.665647 0.740232
+v 140.979156 161.475952 46.399960 1.000000 1.000000 1.000000
+vn 0.334004 0.539757 0.772725
+v 140.335419 161.662933 46.399960 1.000000 1.000000 1.000000
+vn 0.672404 -0.082499 0.735572
+v 139.690399 163.568954 46.399960 1.000000 1.000000 1.000000
+vn 0.564318 -0.304399 0.767390
+v 139.864212 164.266617 46.399960 1.000000 1.000000 1.000000
+vn 0.334002 -0.539749 0.772731
+v 140.335419 164.777328 46.399960 1.000000 1.000000 1.000000
+vn 0.094708 -0.665651 0.740229
+v 140.979156 164.964294 46.399960 1.000000 1.000000 1.000000
+vn -0.564334 -0.303773 0.767626
+v 1.672502 164.266617 46.399979 1.000000 1.000000 1.000000
+vn -0.643645 -0.000001 0.765324
+v 1.931222 163.220123 46.399979 1.000000 1.000000 1.000000
+vn 0.334028 0.539759 0.772713
+v 125.851265 161.407593 46.399979 1.000000 1.000000 1.000000
+vn 0.564336 0.303789 0.767618
+v 125.144432 162.173615 46.399979 1.000000 1.000000 1.000000
+vn 0.643629 -0.000001 0.765338
+v 124.885651 163.220123 46.399979 1.000000 1.000000 1.000000
+vn -0.197211 -0.679075 0.707082
+v 0.600362 165.138702 46.399979 1.000000 1.000000 1.000000
+vn -0.333944 -0.539771 0.772741
+v 0.965626 165.032669 46.399979 1.000000 1.000000 1.000000
+vn 0.000002 -0.631202 0.775618
+v 0.000000 165.313126 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -63.408436 165.138702 46.399998 1.000000 1.000000 1.000000
+vn -0.197215 -0.679074 0.707082
+v -126.216522 165.138702 46.399998 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -63.408436 161.301544 46.399998 1.000000 1.000000 1.000000
+vn 0.643642 -0.000001 0.765326
+v -1.931208 163.220123 46.399979 1.000000 1.000000 1.000000
+vn 0.564336 -0.303775 0.767623
+v -1.672476 164.266617 46.399979 1.000000 1.000000 1.000000
+vn -0.333951 -0.539761 0.772745
+v -125.851265 165.032669 46.399998 1.000000 1.000000 1.000000
+vn -0.564342 -0.303786 0.767615
+v -125.144432 164.266617 46.399998 1.000000 1.000000 1.000000
+vn 0.197214 -0.679075 0.707081
+v -0.600348 165.138702 46.399979 1.000000 1.000000 1.000000
+vn 0.333946 -0.539769 0.772742
+v -0.965610 165.032669 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v -134.219894 165.138702 46.399998 1.000000 1.000000 1.000000
+vn 0.197213 -0.679074 0.707082
+v -127.417229 165.138702 46.399998 1.000000 1.000000 1.000000
+vn -0.000001 -0.631201 0.775619
+v -126.816872 165.313126 46.399998 1.000000 1.000000 1.000000
+vn 0.333951 -0.539761 0.772745
+v -127.782486 165.032669 46.399998 1.000000 1.000000 1.000000
+vn 0.564342 -0.303784 0.767616
+v -128.489319 164.266617 46.399998 1.000000 1.000000 1.000000
+vn 0.643631 -0.000001 0.765336
+v -128.748093 163.220123 46.399998 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -134.219894 161.301544 46.399998 1.000000 1.000000 1.000000
+vn 0.564336 0.303787 0.767618
+v -128.489319 162.173615 46.399998 1.000000 1.000000 1.000000
+vn 0.334026 0.539760 0.772714
+v -127.782486 161.407593 46.399998 1.000000 1.000000 1.000000
+vn 0.197241 0.679027 0.707120
+v -127.417480 161.301544 46.399998 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v -134.219894 10.431056 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.631237 0.775590
+v -126.816872 161.127121 46.399998 1.000000 1.000000 1.000000
+vn -0.197242 0.679026 0.707121
+v -126.216263 161.301544 46.399998 1.000000 1.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+v -63.408436 10.431076 46.399979 1.000000 1.000000 1.000000
+vn 0.197242 0.679025 0.707121
+v -0.600616 161.301544 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -63.408436 -144.276581 46.399960 1.000000 1.000000 1.000000
+vn -0.643629 -0.000001 0.765338
+v -124.885651 163.220123 46.399998 1.000000 1.000000 1.000000
+vn -0.564336 0.303789 0.767618
+v -125.144432 162.173615 46.399998 1.000000 1.000000 1.000000
+vn -0.334028 0.539759 0.772713
+v -125.851265 161.407593 46.399998 1.000000 1.000000 1.000000
+vn 0.000001 -0.000002 1.000000
+v -151.600876 161.301544 46.399998 1.000000 1.000000 1.000000
+vn 0.000001 -0.000000 1.000000
+v -151.600876 10.431056 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -134.219894 -144.276581 46.399960 1.000000 1.000000 1.000000
+vn -0.582116 -0.360470 0.728836
+v -139.909271 -141.233368 46.399960 1.000000 1.000000 1.000000
+vn -0.143838 -0.667425 0.730654
+v -140.728104 -140.641739 46.399960 1.000000 1.000000 1.000000
+vn -0.278269 -0.621980 0.731921
+v -140.487335 -140.719879 46.399960 1.000000 1.000000 1.000000
+vn -0.400386 -0.554079 0.729854
+v -140.264618 -140.849640 46.399960 1.000000 1.000000 1.000000
+vn -0.501102 -0.464591 0.730104
+v -140.068909 -141.022659 46.399960 1.000000 1.000000 1.000000
+vn 0.400830 -0.552326 0.730939
+v -145.558731 -140.849640 46.399960 1.000000 1.000000 1.000000
+vn 0.277616 -0.622626 0.731619
+v -145.334717 -140.719879 46.399960 1.000000 1.000000 1.000000
+vn 0.143637 -0.667395 0.730720
+v -145.093948 -140.641739 46.399960 1.000000 1.000000 1.000000
+vn 0.038219 -0.693223 0.719710
+v -144.841614 -140.613831 46.399960 1.000000 1.000000 1.000000
+vn -0.038409 -0.693145 0.719774
+v -140.979156 -140.613831 46.399960 1.000000 1.000000 1.000000
+vn 0.502165 -0.466111 0.728403
+v -145.751862 -141.022659 46.399960 1.000000 1.000000 1.000000
+vn 0.580203 -0.360655 0.730269
+v -145.914078 -141.233368 46.399960 1.000000 1.000000 1.000000
+vn 0.640242 -0.242608 0.728856
+v -146.032532 -141.474747 46.399960 1.000000 1.000000 1.000000
+vn 0.675195 -0.123751 0.727184
+v -146.104630 -141.737076 46.399960 1.000000 1.000000 1.000000
+vn 0.000001 -0.000000 1.000000
+v -151.600876 -144.276581 46.399960 1.000000 1.000000 1.000000
+vn 0.695399 -0.032821 0.717874
+v -146.130371 -142.009171 46.399960 1.000000 1.000000 1.000000
+vn 0.695399 0.032821 0.717874
+v -146.130371 -142.706833 46.399960 1.000000 1.000000 1.000000
+vn 0.675193 0.123755 0.727186
+v -146.104630 -142.978928 46.399960 1.000000 1.000000 1.000000
+vn 0.639701 0.243235 0.729123
+v -146.032532 -143.241241 46.399960 1.000000 1.000000 1.000000
+vn 0.580029 0.361470 0.730004
+v -145.914078 -143.481247 46.399960 1.000000 1.000000 1.000000
+vn 0.504749 0.464798 0.727455
+v -145.751862 -143.691940 46.399960 1.000000 1.000000 1.000000
+vn 0.400773 0.550358 0.732453
+v -145.558731 -143.867752 46.399960 1.000000 1.000000 1.000000
+vn 0.278310 0.623711 0.730430
+v -145.334717 -143.996109 46.399960 1.000000 1.000000 1.000000
+vn 0.143291 0.666068 0.731998
+v -145.093948 -144.075653 46.399960 1.000000 1.000000 1.000000
+vn 0.036368 0.693977 0.719078
+v -144.841614 -144.102173 46.399960 1.000000 1.000000 1.000000
+vn -0.333996 -0.539760 0.772726
+v -158.038284 -140.545456 46.399979 1.000000 1.000000 1.000000
+vn -0.564337 -0.303782 0.767620
+v -157.331451 -141.311493 46.399979 1.000000 1.000000 1.000000
+vn -0.643629 0.000001 0.765337
+v -157.072678 -142.358002 46.399979 1.000000 1.000000 1.000000
+vn -0.564338 0.303785 0.767618
+v -157.331451 -143.404495 46.399979 1.000000 1.000000 1.000000
+vn -0.333862 0.539769 0.772778
+v -158.038284 -144.170532 46.399979 1.000000 1.000000 1.000000
+vn -0.197203 0.679125 0.707036
+v -158.403931 -144.276581 46.399979 1.000000 1.000000 1.000000
+vn -0.000001 0.631146 0.775664
+v -159.003891 -144.451004 46.399979 1.000000 1.000000 1.000000
+vn 0.197200 0.679127 0.707036
+v -159.603867 -144.276581 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -163.188217 -144.276581 46.399979 1.000000 1.000000 1.000000
+vn 0.333863 0.539773 0.772775
+v -159.969513 -144.170532 46.399979 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -163.188217 161.301544 46.400017 1.000000 1.000000 1.000000
+vn 0.000001 -0.000000 1.000000
+v -163.188217 10.431056 46.399998 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 1.000000
+v -163.188217 165.138702 46.400017 1.000000 1.000000 1.000000
+vn 0.197189 -0.679134 0.707031
+v -159.603867 165.138702 46.400017 1.000000 1.000000 1.000000
+vn 0.333851 -0.539771 0.772781
+v -159.969513 165.032669 46.400017 1.000000 1.000000 1.000000
+vn -0.000002 -0.631147 0.775663
+v -159.003891 165.313126 46.400017 1.000000 1.000000 1.000000
+vn -0.197191 -0.679134 0.707030
+v -158.403931 165.138702 46.400017 1.000000 1.000000 1.000000
+vn -0.333851 -0.539771 0.772781
+v -158.038284 165.032669 46.400017 1.000000 1.000000 1.000000
+vn 0.000001 -0.000002 1.000000
+v -151.600876 165.138702 46.400017 1.000000 1.000000 1.000000
+vn -0.094708 -0.665651 0.740229
+v -140.979156 164.964294 46.399998 1.000000 1.000000 1.000000
+vn -0.334002 -0.539749 0.772731
+v -140.335419 164.777328 46.399998 1.000000 1.000000 1.000000
+vn -0.564380 -0.303172 0.767830
+v -139.864212 164.266617 46.399998 1.000000 1.000000 1.000000
+vn -0.672995 -0.081389 0.735156
+v -139.692963 163.568954 46.399998 1.000000 1.000000 1.000000
+vn -0.682728 0.061991 0.728038
+v -139.692963 162.871292 46.399998 1.000000 1.000000 1.000000
+vn -0.616511 0.236486 0.750992
+v -139.790817 162.336884 46.399998 1.000000 1.000000 1.000000
+vn -0.481726 0.446910 0.753798
+v -140.068909 161.884781 46.399998 1.000000 1.000000 1.000000
+vn -0.266340 0.597394 0.756428
+v -140.487335 161.582001 46.399998 1.000000 1.000000 1.000000
+vn -0.072237 0.677724 0.731759
+v -140.979156 161.475952 46.399998 1.000000 1.000000 1.000000
+vn -0.564341 -0.303784 0.767616
+v -157.331451 164.266617 46.400017 1.000000 1.000000 1.000000
+vn 0.564319 -0.304400 0.767388
+v -145.956558 164.266617 46.399998 1.000000 1.000000 1.000000
+vn 0.334003 -0.539753 0.772728
+v -145.485352 164.777328 46.399998 1.000000 1.000000 1.000000
+vn 0.094706 -0.665676 0.740207
+v -144.841614 164.964294 46.399998 1.000000 1.000000 1.000000
+vn 0.682370 0.062746 0.728309
+v -146.130371 162.871292 46.399998 1.000000 1.000000 1.000000
+vn 0.672405 -0.082499 0.735571
+v -146.130371 163.568954 46.399998 1.000000 1.000000 1.000000
+vn -0.643629 -0.000001 0.765337
+v -157.072678 163.220123 46.400017 1.000000 1.000000 1.000000
+vn -0.564335 0.303786 0.767620
+v -157.331451 162.173615 46.400017 1.000000 1.000000 1.000000
+vn -0.333860 0.539772 0.772777
+v -158.038284 161.407593 46.400017 1.000000 1.000000 1.000000
+vn -0.197202 0.679126 0.707035
+v -158.403931 161.301544 46.400017 1.000000 1.000000 1.000000
+vn -0.000002 0.631147 0.775663
+v -159.003891 161.127121 46.400017 1.000000 1.000000 1.000000
+vn 0.197200 0.679127 0.707036
+v -159.603867 161.301544 46.400017 1.000000 1.000000 1.000000
+vn 0.333861 0.539776 0.772774
+v -159.969513 161.407593 46.400017 1.000000 1.000000 1.000000
+vn 0.564336 0.303787 0.767618
+v -160.676346 162.173615 46.400017 1.000000 1.000000 1.000000
+vn 0.643631 -0.000001 0.765336
+v -160.935120 163.220123 46.400017 1.000000 1.000000 1.000000
+vn 0.564342 -0.303784 0.767615
+v -160.676346 164.266617 46.400017 1.000000 1.000000 1.000000
+vn 0.564339 -0.303785 0.767617
+v -160.676346 -141.311493 46.399979 1.000000 1.000000 1.000000
+vn -0.000001 -0.631228 0.775597
+v -159.003891 -140.264999 46.399979 1.000000 1.000000 1.000000
+vn 0.333996 -0.539760 0.772726
+v -159.969513 -140.545456 46.399979 1.000000 1.000000 1.000000
+vn 0.564339 0.303786 0.767617
+v -160.676346 -143.404495 46.399979 1.000000 1.000000 1.000000
+vn 0.643631 0.000001 0.765336
+v -160.935120 -142.358002 46.399979 1.000000 1.000000 1.000000
+vn 0.481957 0.447403 0.753358
+v -145.751862 161.884781 46.399998 1.000000 1.000000 1.000000
+vn 0.616021 0.237843 0.750966
+v -146.031250 162.336884 46.399998 1.000000 1.000000 1.000000
+vn 0.072063 0.677812 0.731695
+v -144.841614 161.475952 46.399998 1.000000 1.000000 1.000000
+vn 0.266498 0.597008 0.756677
+v -145.334717 161.582001 46.399998 1.000000 1.000000 1.000000
+vn -0.639187 -0.245451 0.728830
+v -139.789520 -141.474747 46.399960 1.000000 1.000000 1.000000
+vn -0.673772 -0.121816 0.728830
+v -139.716141 -141.737076 46.399960 1.000000 1.000000 1.000000
+vn -0.696656 -0.029618 0.716794
+v -139.692963 -142.009171 46.399960 1.000000 1.000000 1.000000
+vn -0.696656 0.029618 0.716794
+v -139.692963 -142.706833 46.399960 1.000000 1.000000 1.000000
+vn -0.673769 0.121821 0.728831
+v -139.716141 -142.978928 46.399960 1.000000 1.000000 1.000000
+vn -0.638639 0.246080 0.729099
+v -139.789520 -143.241241 46.399960 1.000000 1.000000 1.000000
+vn -0.581940 0.361291 0.728570
+v -139.909271 -143.481247 46.399960 1.000000 1.000000 1.000000
+vn -0.503683 0.463290 0.729154
+v -140.068909 -143.691940 46.399960 1.000000 1.000000 1.000000
+vn -0.400333 0.552123 0.731364
+v -140.264618 -143.867752 46.399960 1.000000 1.000000 1.000000
+vn -0.278961 0.623069 0.730729
+v -140.487335 -143.996109 46.399960 1.000000 1.000000 1.000000
+vn -0.143482 0.666097 0.731935
+v -140.728104 -144.075653 46.399960 1.000000 1.000000 1.000000
+vn -0.036548 0.693904 0.719139
+v -140.979156 -144.102173 46.399960 1.000000 1.000000 1.000000
+vn -0.564328 0.303776 0.767629
+v 1.672502 162.173615 46.399979 1.000000 1.000000 1.000000
+vn -0.334023 0.539768 0.772709
+v 0.965626 161.407593 46.399979 1.000000 1.000000 1.000000
+vn 0.334025 0.539767 0.772709
+v -0.965610 161.407593 46.399979 1.000000 1.000000 1.000000
+vn 0.564331 0.303778 0.767626
+v -1.672476 162.173615 46.399979 1.000000 1.000000 1.000000
+vn 0.564318 -0.304399 -0.767390
+v -145.956558 164.266617 43.199997 1.000000 1.000000 1.000000
+vn 0.672404 -0.082499 -0.735572
+v -146.130371 163.568954 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -151.600876 165.138702 43.199997 1.000000 1.000000 1.000000
+vn 0.334002 -0.539749 -0.772731
+v -145.485352 164.777328 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -151.600876 161.301544 43.199997 1.000000 1.000000 1.000000
+vn 0.682369 0.062747 -0.728310
+v -146.130371 162.871292 43.199997 1.000000 1.000000 1.000000
+vn 0.616021 0.237843 -0.750966
+v -146.031250 162.336884 43.199997 1.000000 1.000000 1.000000
+vn 0.481957 0.447403 -0.753358
+v -145.751862 161.884781 43.199997 1.000000 1.000000 1.000000
+vn 0.266498 0.597008 -0.756677
+v -145.334717 161.582001 43.199997 1.000000 1.000000 1.000000
+vn 0.072063 0.677812 -0.731695
+v -144.841614 161.475952 43.199997 1.000000 1.000000 1.000000
+vn -0.333861 0.539776 -0.772774
+v -158.038284 161.407593 43.199997 1.000000 1.000000 1.000000
+vn -0.564336 0.303787 -0.767618
+v -157.331451 162.173615 43.199997 1.000000 1.000000 1.000000
+vn -0.643631 -0.000001 -0.765336
+v -157.072678 163.220123 43.199997 1.000000 1.000000 1.000000
+vn -0.197203 0.679127 -0.707035
+v -158.403931 161.301544 43.199997 1.000000 1.000000 1.000000
+vn -0.000001 0.000000 -1.000000
+v -151.600876 10.431056 43.199978 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -134.219894 10.431056 43.199978 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -134.219894 161.301544 43.199997 1.000000 1.000000 1.000000
+vn -0.564342 -0.303784 -0.767615
+v -157.331451 164.266617 43.199997 1.000000 1.000000 1.000000
+vn -0.333851 -0.539771 -0.772781
+v -158.038284 165.032669 43.199997 1.000000 1.000000 1.000000
+vn 0.094708 -0.665651 -0.740229
+v -144.841614 164.964294 43.199997 1.000000 1.000000 1.000000
+vn -0.197191 -0.679134 -0.707030
+v -158.403931 165.138702 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -134.219894 165.138702 43.199997 1.000000 1.000000 1.000000
+vn -0.000002 -0.631147 -0.775663
+v -159.003891 165.313126 43.199997 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v -63.408436 165.138702 43.199997 1.000000 1.000000 1.000000
+vn -0.197214 -0.679074 -0.707082
+v -126.216522 165.138702 43.199997 1.000000 1.000000 1.000000
+vn -0.000001 -0.631202 -0.775619
+v -126.816872 165.313126 43.199997 1.000000 1.000000 1.000000
+vn 0.197213 -0.679074 -0.707082
+v -127.417229 165.138702 43.199997 1.000000 1.000000 1.000000
+vn 0.000002 -0.631201 -0.775619
+v 0.000000 165.313126 43.199978 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v 63.408436 165.138702 43.199978 1.000000 1.000000 1.000000
+vn 0.197215 -0.679074 -0.707082
+v 126.216522 165.138702 43.199978 1.000000 1.000000 1.000000
+vn 0.000001 -0.631201 -0.775619
+v 126.816872 165.313126 43.199978 1.000000 1.000000 1.000000
+vn -0.197214 -0.679074 -0.707082
+v 127.417229 165.138702 43.199978 1.000000 1.000000 1.000000
+vn -0.000002 0.000002 -1.000000
+v 134.219894 165.138702 43.199959 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v 151.600876 165.138702 43.199959 1.000000 1.000000 1.000000
+vn 0.333951 -0.539761 -0.772745
+v 125.851265 165.032669 43.199978 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v 63.408436 161.301544 43.199978 1.000000 1.000000 1.000000
+vn 0.564342 -0.303786 -0.767615
+v 125.144432 164.266617 43.199978 1.000000 1.000000 1.000000
+vn 0.643629 -0.000001 -0.765338
+v 124.885651 163.220123 43.199978 1.000000 1.000000 1.000000
+vn 0.564336 0.303789 -0.767618
+v 125.144432 162.173615 43.199978 1.000000 1.000000 1.000000
+vn 0.334028 0.539759 -0.772713
+v 125.851265 161.407593 43.199978 1.000000 1.000000 1.000000
+vn 0.197242 0.679026 -0.707121
+v 126.216263 161.301544 43.199978 1.000000 1.000000 1.000000
+vn -0.334023 0.539768 -0.772709
+v 0.965626 161.407593 43.199978 1.000000 1.000000 1.000000
+vn -0.197239 0.679025 -0.707122
+v 0.600632 161.301544 43.199978 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v 63.408436 10.431076 43.199959 1.000000 1.000000 1.000000
+vn -0.643645 -0.000001 -0.765324
+v 1.931222 163.220123 43.199978 1.000000 1.000000 1.000000
+vn -0.564334 -0.303773 -0.767626
+v 1.672502 164.266617 43.199978 1.000000 1.000000 1.000000
+vn -0.333944 -0.539771 -0.772741
+v 0.965626 165.032669 43.199978 1.000000 1.000000 1.000000
+vn -0.197211 -0.679075 -0.707082
+v 0.600362 165.138702 43.199978 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v 134.219894 10.431098 43.199940 1.000000 1.000000 1.000000
+vn -0.000014 0.631241 -0.775587
+v 126.816872 161.127121 43.199978 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v 134.219894 -144.276581 43.199921 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v 63.408436 -144.276581 43.199940 1.000000 1.000000 1.000000
+vn 0.197282 0.678924 -0.707207
+v 158.402634 -144.276581 43.199921 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v 151.600876 -144.276581 43.199921 1.000000 1.000000 1.000000
+vn 0.334198 0.539740 -0.772653
+v 158.038284 -144.170532 43.199921 1.000000 1.000000 1.000000
+vn 0.000000 0.631328 -0.775516
+v 159.003891 -144.451004 43.199921 1.000000 1.000000 1.000000
+vn -0.197279 0.678927 -0.707206
+v 159.605148 -144.276581 43.199921 1.000000 1.000000 1.000000
+vn -0.334194 0.539740 -0.772655
+v 159.969513 -144.170532 43.199921 1.000000 1.000000 1.000000
+vn -0.564339 0.303786 -0.767617
+v 160.676346 -143.404495 43.199921 1.000000 1.000000 1.000000
+vn -0.643631 0.000001 -0.765336
+v 160.935120 -142.358002 43.199921 1.000000 1.000000 1.000000
+vn -0.564339 -0.303784 -0.767617
+v 160.676346 -141.311493 43.199921 1.000000 1.000000 1.000000
+vn -0.333996 -0.539760 -0.772726
+v 159.969513 -140.545456 43.199921 1.000000 1.000000 1.000000
+vn 0.000001 -0.631228 -0.775598
+v 159.003891 -140.264999 43.199921 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v 151.600876 10.431098 43.199940 1.000000 1.000000 1.000000
+vn 0.333998 -0.539760 -0.772726
+v 158.038284 -140.545456 43.199921 1.000000 1.000000 1.000000
+vn 0.564339 -0.303784 -0.767617
+v 157.331451 -141.311493 43.199921 1.000000 1.000000 1.000000
+vn 0.643631 0.000001 -0.765336
+v 157.072678 -142.358002 43.199921 1.000000 1.000000 1.000000
+vn 0.564339 0.303786 -0.767617
+v 157.331451 -143.404495 43.199921 1.000000 1.000000 1.000000
+vn -0.278961 0.623070 -0.730729
+v 145.333435 -143.996109 43.199921 1.000000 1.000000 1.000000
+vn -0.400333 0.552123 -0.731364
+v 145.556152 -143.867752 43.199921 1.000000 1.000000 1.000000
+vn -0.503683 0.463290 -0.729154
+v 145.751862 -143.691940 43.199921 1.000000 1.000000 1.000000
+vn -0.581940 0.361292 -0.728570
+v 145.911499 -143.481247 43.199921 1.000000 1.000000 1.000000
+vn -0.638639 0.246080 -0.729099
+v 146.031250 -143.241241 43.199921 1.000000 1.000000 1.000000
+vn -0.673769 0.121821 -0.728831
+v 146.104630 -142.978928 43.199921 1.000000 1.000000 1.000000
+vn -0.696656 0.029618 -0.716794
+v 146.127808 -142.706833 43.199921 1.000000 1.000000 1.000000
+vn -0.696656 -0.029618 -0.716794
+v 146.127808 -142.009171 43.199921 1.000000 1.000000 1.000000
+vn -0.036548 0.693904 -0.719139
+v 144.841614 -144.102173 43.199921 1.000000 1.000000 1.000000
+vn -0.143482 0.666096 -0.731935
+v 145.092667 -144.075653 43.199921 1.000000 1.000000 1.000000
+vn -0.673772 -0.121816 -0.728830
+v 146.104630 -141.737076 43.199921 1.000000 1.000000 1.000000
+vn -0.639187 -0.245451 -0.728830
+v 146.031250 -141.474747 43.199921 1.000000 1.000000 1.000000
+vn -0.582116 -0.360470 -0.728836
+v 145.911499 -141.233368 43.199921 1.000000 1.000000 1.000000
+vn -0.000001 0.000001 -1.000000
+v 134.219894 161.301544 43.199959 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v 151.600876 161.301544 43.199959 1.000000 1.000000 1.000000
+vn 0.197282 0.678924 -0.707207
+v 158.402634 161.301544 43.199959 1.000000 1.000000 1.000000
+vn -0.501102 -0.464591 -0.730104
+v 145.751862 -141.022659 43.199921 1.000000 1.000000 1.000000
+vn -0.400386 -0.554079 -0.729854
+v 145.556152 -140.849640 43.199921 1.000000 1.000000 1.000000
+vn -0.278269 -0.621980 -0.731921
+v 145.333435 -140.719879 43.199921 1.000000 1.000000 1.000000
+vn -0.143838 -0.667425 -0.730654
+v 145.092667 -140.641739 43.199921 1.000000 1.000000 1.000000
+vn -0.038409 -0.693145 -0.719774
+v 144.841614 -140.613831 43.199921 1.000000 1.000000 1.000000
+vn 0.038219 -0.693222 -0.719710
+v 140.979156 -140.613831 43.199921 1.000000 1.000000 1.000000
+vn 0.143637 -0.667395 -0.730720
+v 140.726822 -140.641739 43.199921 1.000000 1.000000 1.000000
+vn 0.277616 -0.622625 -0.731619
+v 140.486053 -140.719879 43.199921 1.000000 1.000000 1.000000
+vn 0.400830 -0.552325 -0.730939
+v 140.262039 -140.849640 43.199921 1.000000 1.000000 1.000000
+vn -0.197249 0.679022 -0.707122
+v 127.417480 161.301544 43.199959 1.000000 1.000000 1.000000
+vn 0.502165 -0.466111 -0.728403
+v 140.068909 -141.022659 43.199921 1.000000 1.000000 1.000000
+vn -0.334026 0.539760 -0.772714
+v 127.782486 161.407593 43.199959 1.000000 1.000000 1.000000
+vn -0.564332 0.303792 -0.767619
+v 128.489319 162.173615 43.199959 1.000000 1.000000 1.000000
+vn -0.643633 0.000005 -0.765334
+v 128.748093 163.220123 43.199978 1.000000 1.000000 1.000000
+vn -0.564343 -0.303785 -0.767614
+v 128.489319 164.266617 43.199978 1.000000 1.000000 1.000000
+vn -0.333952 -0.539765 -0.772741
+v 127.782486 165.032669 43.199978 1.000000 1.000000 1.000000
+vn 0.564318 -0.304399 -0.767390
+v 139.864212 164.266617 43.199959 1.000000 1.000000 1.000000
+vn 0.672404 -0.082499 -0.735572
+v 139.690399 163.568954 43.199959 1.000000 1.000000 1.000000
+vn 0.094708 -0.665651 -0.740229
+v 140.979156 164.964294 43.199959 1.000000 1.000000 1.000000
+vn 0.334002 -0.539749 -0.772731
+v 140.335419 164.777328 43.199959 1.000000 1.000000 1.000000
+vn 0.672405 0.082498 -0.735572
+v 139.690399 162.871292 43.199959 1.000000 1.000000 1.000000
+vn 0.564309 0.304403 -0.767394
+v 139.864212 162.173615 43.199959 1.000000 1.000000 1.000000
+vn 0.334004 0.539757 -0.772725
+v 140.335419 161.662933 43.199959 1.000000 1.000000 1.000000
+vn 0.094715 0.665647 -0.740232
+v 140.979156 161.475952 43.199959 1.000000 1.000000 1.000000
+vn 0.695399 0.032821 -0.717874
+v 139.690399 -142.706833 43.199921 1.000000 1.000000 1.000000
+vn 0.675192 0.123756 -0.727186
+v 139.716141 -142.978928 43.199921 1.000000 1.000000 1.000000
+vn 0.639701 0.243235 -0.729123
+v 139.788239 -143.241241 43.199921 1.000000 1.000000 1.000000
+vn 0.580029 0.361470 -0.730004
+v 139.906693 -143.481247 43.199921 1.000000 1.000000 1.000000
+vn 0.504749 0.464798 -0.727455
+v 140.068909 -143.691940 43.199921 1.000000 1.000000 1.000000
+vn 0.580203 -0.360655 -0.730269
+v 139.906693 -141.233368 43.199921 1.000000 1.000000 1.000000
+vn 0.640242 -0.242608 -0.728856
+v 139.788239 -141.474747 43.199921 1.000000 1.000000 1.000000
+vn 0.675195 -0.123751 -0.727184
+v 139.716141 -141.737076 43.199921 1.000000 1.000000 1.000000
+vn 0.695399 -0.032821 -0.717874
+v 139.690399 -142.009171 43.199921 1.000000 1.000000 1.000000
+vn 0.400773 0.550358 -0.732452
+v 140.262039 -143.867752 43.199921 1.000000 1.000000 1.000000
+vn 0.278310 0.623711 -0.730430
+v 140.486053 -143.996109 43.199921 1.000000 1.000000 1.000000
+vn 0.143291 0.666068 -0.731998
+v 140.726822 -144.075653 43.199921 1.000000 1.000000 1.000000
+vn 0.036368 0.693977 -0.719078
+v 140.979156 -144.102173 43.199921 1.000000 1.000000 1.000000
+vn -0.197279 0.678927 -0.707206
+v 159.605148 161.301544 43.199959 1.000000 1.000000 1.000000
+vn 0.000000 0.631329 -0.775515
+v 159.003891 161.127121 43.199959 1.000000 1.000000 1.000000
+vn -0.334192 0.539743 -0.772653
+v 159.969513 161.407593 43.199959 1.000000 1.000000 1.000000
+vn -0.564336 0.303787 -0.767618
+v 160.676346 162.173615 43.199959 1.000000 1.000000 1.000000
+vn -0.643631 -0.000001 -0.765336
+v 160.935120 163.220123 43.199959 1.000000 1.000000 1.000000
+vn -0.564342 -0.303784 -0.767616
+v 160.676346 164.266617 43.199959 1.000000 1.000000 1.000000
+vn -0.333851 -0.539771 -0.772781
+v 159.969513 165.032669 43.199959 1.000000 1.000000 1.000000
+vn -0.197189 -0.679134 -0.707031
+v 159.603867 165.138702 43.199959 1.000000 1.000000 1.000000
+vn 0.000002 -0.631147 -0.775663
+v 159.003891 165.313126 43.199959 1.000000 1.000000 1.000000
+vn 0.197191 -0.679134 -0.707030
+v 158.403931 165.138702 43.199959 1.000000 1.000000 1.000000
+vn 0.333851 -0.539771 -0.772781
+v 158.038284 165.032669 43.199959 1.000000 1.000000 1.000000
+vn 0.564342 -0.303784 -0.767616
+v 157.331451 164.266617 43.199959 1.000000 1.000000 1.000000
+vn 0.643631 -0.000001 -0.765336
+v 157.072678 163.220123 43.199959 1.000000 1.000000 1.000000
+vn 0.564336 0.303787 -0.767618
+v 157.331451 162.173615 43.199959 1.000000 1.000000 1.000000
+vn 0.334196 0.539743 -0.772652
+v 158.038284 161.407593 43.199959 1.000000 1.000000 1.000000
+vn -0.072237 0.677725 -0.731759
+v 144.841614 161.475952 43.199959 1.000000 1.000000 1.000000
+vn -0.266340 0.597394 -0.756428
+v 145.333435 161.582001 43.199959 1.000000 1.000000 1.000000
+vn -0.481726 0.446911 -0.753798
+v 145.751862 161.884781 43.199959 1.000000 1.000000 1.000000
+vn -0.616511 0.236486 -0.750992
+v 146.029953 162.336884 43.199959 1.000000 1.000000 1.000000
+vn -0.682728 0.061991 -0.728038
+v 146.127808 162.871292 43.199959 1.000000 1.000000 1.000000
+vn -0.682729 -0.061990 -0.728038
+v 146.127808 163.568954 43.199959 1.000000 1.000000 1.000000
+vn -0.616503 -0.236492 -0.750996
+v 146.029953 164.103378 43.199959 1.000000 1.000000 1.000000
+vn -0.266346 -0.597388 -0.756431
+v 145.333435 164.858246 43.199959 1.000000 1.000000 1.000000
+vn -0.481730 -0.446917 -0.753791
+v 145.751862 164.555450 43.199959 1.000000 1.000000 1.000000
+vn -0.072237 -0.677724 -0.731759
+v 144.841614 164.964294 43.199959 1.000000 1.000000 1.000000
+vn 0.333951 -0.539761 -0.772745
+v -127.782486 165.032669 43.199997 1.000000 1.000000 1.000000
+vn 0.564342 -0.303784 -0.767616
+v -128.489319 164.266617 43.199997 1.000000 1.000000 1.000000
+vn 0.643631 -0.000001 -0.765336
+v -128.748093 163.220123 43.199997 1.000000 1.000000 1.000000
+vn 0.564336 0.303787 -0.767618
+v -128.489319 162.173615 43.199997 1.000000 1.000000 1.000000
+vn 0.334026 0.539760 -0.772713
+v -127.782486 161.407593 43.199997 1.000000 1.000000 1.000000
+vn 0.197241 0.679027 -0.707120
+v -127.417480 161.301544 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.631238 -0.775590
+v -126.816872 161.127121 43.199997 1.000000 1.000000 1.000000
+vn -0.197242 0.679026 -0.707121
+v -126.216263 161.301544 43.199997 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v -63.408436 161.301544 43.199997 1.000000 1.000000 1.000000
+vn -0.000000 0.000000 -1.000000
+v -63.408436 10.431076 43.199978 1.000000 1.000000 1.000000
+vn 0.197242 0.679025 -0.707121
+v -0.600616 161.301544 43.199978 1.000000 1.000000 1.000000
+vn 0.333946 -0.539768 -0.772743
+v -0.965610 165.032669 43.199978 1.000000 1.000000 1.000000
+vn 0.564336 -0.303775 -0.767624
+v -1.672476 164.266617 43.199978 1.000000 1.000000 1.000000
+vn 0.643642 -0.000001 -0.765327
+v -1.931208 163.220123 43.199978 1.000000 1.000000 1.000000
+vn -0.334028 0.539759 -0.772713
+v -125.851265 161.407593 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -63.408436 -144.276581 43.199959 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -134.219894 -144.276581 43.199959 1.000000 1.000000 1.000000
+vn -0.000002 0.000000 -1.000000
+v -151.600876 -144.276581 43.199959 1.000000 1.000000 1.000000
+vn -0.197204 0.679128 -0.707033
+v -158.403931 -144.276581 43.199978 1.000000 1.000000 1.000000
+vn -0.000003 0.631148 -0.775662
+v -159.003891 -144.451004 43.199978 1.000000 1.000000 1.000000
+vn -0.333864 0.539777 -0.772772
+v -158.038284 -144.170532 43.199978 1.000000 1.000000 1.000000
+vn -0.564341 0.303787 -0.767615
+v -157.331451 -143.404495 43.199978 1.000000 1.000000 1.000000
+vn -0.643632 0.000001 -0.765335
+v -157.072678 -142.358002 43.199978 1.000000 1.000000 1.000000
+vn -0.564341 -0.303784 -0.767616
+v -157.331451 -141.311493 43.199978 1.000000 1.000000 1.000000
+vn -0.333998 -0.539760 -0.772726
+v -158.038284 -140.545456 43.199978 1.000000 1.000000 1.000000
+vn -0.000001 0.000000 -1.000000
+v -163.188217 10.431056 43.199997 1.000000 1.000000 1.000000
+vn -0.000001 -0.631228 -0.775598
+v -159.003891 -140.264999 43.199978 1.000000 1.000000 1.000000
+vn 0.333996 -0.539760 -0.772726
+v -159.969513 -140.545456 43.199978 1.000000 1.000000 1.000000
+vn 0.564339 -0.303785 -0.767617
+v -160.676346 -141.311493 43.199978 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -163.188217 -144.276581 43.199978 1.000000 1.000000 1.000000
+vn 0.643631 0.000001 -0.765336
+v -160.935120 -142.358002 43.199978 1.000000 1.000000 1.000000
+vn 0.564339 0.303786 -0.767617
+v -160.676346 -143.404495 43.199978 1.000000 1.000000 1.000000
+vn 0.333863 0.539773 -0.772775
+v -159.969513 -144.170532 43.199978 1.000000 1.000000 1.000000
+vn 0.197200 0.679127 -0.707036
+v -159.603867 -144.276581 43.199978 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -163.188217 161.301544 43.199997 1.000000 1.000000 1.000000
+vn 0.000000 0.000000 -1.000000
+v -163.188217 165.138702 43.199997 1.000000 1.000000 1.000000
+vn 0.197189 -0.679134 -0.707031
+v -159.603867 165.138702 43.199997 1.000000 1.000000 1.000000
+vn 0.333851 -0.539771 -0.772781
+v -159.969513 165.032669 43.199997 1.000000 1.000000 1.000000
+vn 0.564342 -0.303784 -0.767615
+v -160.676346 164.266617 43.199997 1.000000 1.000000 1.000000
+vn 0.564336 0.303787 -0.767618
+v -160.676346 162.173615 43.199997 1.000000 1.000000 1.000000
+vn 0.333861 0.539776 -0.772774
+v -159.969513 161.407593 43.199997 1.000000 1.000000 1.000000
+vn 0.197200 0.679126 -0.707036
+v -159.603867 161.301544 43.199997 1.000000 1.000000 1.000000
+vn 0.643631 -0.000001 -0.765336
+v -160.935120 163.220123 43.199997 1.000000 1.000000 1.000000
+vn -0.000002 0.631147 -0.775663
+v -159.003891 161.127121 43.199997 1.000000 1.000000 1.000000
+vn 0.502165 -0.466111 -0.728403
+v -145.751862 -141.022659 43.199959 1.000000 1.000000 1.000000
+vn -0.582116 -0.360470 -0.728836
+v -139.909271 -141.233368 43.199959 1.000000 1.000000 1.000000
+vn -0.501102 -0.464591 -0.730104
+v -140.068909 -141.022659 43.199959 1.000000 1.000000 1.000000
+vn 0.143637 -0.667395 -0.730720
+v -145.093948 -140.641739 43.199959 1.000000 1.000000 1.000000
+vn 0.277616 -0.622625 -0.731619
+v -145.334717 -140.719879 43.199959 1.000000 1.000000 1.000000
+vn 0.400830 -0.552325 -0.730939
+v -145.558731 -140.849640 43.199959 1.000000 1.000000 1.000000
+vn -0.400386 -0.554079 -0.729854
+v -140.264618 -140.849640 43.199959 1.000000 1.000000 1.000000
+vn -0.278269 -0.621980 -0.731921
+v -140.487335 -140.719879 43.199959 1.000000 1.000000 1.000000
+vn -0.143838 -0.667425 -0.730654
+v -140.728104 -140.641739 43.199959 1.000000 1.000000 1.000000
+vn -0.038409 -0.693145 -0.719775
+v -140.979156 -140.613831 43.199959 1.000000 1.000000 1.000000
+vn 0.038219 -0.693222 -0.719710
+v -144.841614 -140.613831 43.199959 1.000000 1.000000 1.000000
+vn -0.639187 -0.245451 -0.728830
+v -139.789520 -141.474747 43.199959 1.000000 1.000000 1.000000
+vn -0.673772 -0.121816 -0.728830
+v -139.716141 -141.737076 43.199959 1.000000 1.000000 1.000000
+vn -0.696656 -0.029618 -0.716794
+v -139.692963 -142.009171 43.199959 1.000000 1.000000 1.000000
+vn -0.696656 0.029618 -0.716794
+v -139.692963 -142.706833 43.199959 1.000000 1.000000 1.000000
+vn -0.673769 0.121821 -0.728831
+v -139.716141 -142.978928 43.199959 1.000000 1.000000 1.000000
+vn -0.638639 0.246080 -0.729099
+v -139.789520 -143.241241 43.199959 1.000000 1.000000 1.000000
+vn -0.581940 0.361291 -0.728570
+v -139.909271 -143.481247 43.199959 1.000000 1.000000 1.000000
+vn -0.503683 0.463290 -0.729154
+v -140.068909 -143.691940 43.199959 1.000000 1.000000 1.000000
+vn -0.400333 0.552123 -0.731364
+v -140.264618 -143.867752 43.199959 1.000000 1.000000 1.000000
+vn -0.278961 0.623070 -0.730729
+v -140.487335 -143.996109 43.199959 1.000000 1.000000 1.000000
+vn -0.143482 0.666096 -0.731935
+v -140.728104 -144.075653 43.199959 1.000000 1.000000 1.000000
+vn -0.036548 0.693904 -0.719140
+v -140.979156 -144.102173 43.199959 1.000000 1.000000 1.000000
+vn 0.580203 -0.360655 -0.730269
+v -145.914078 -141.233368 43.199959 1.000000 1.000000 1.000000
+vn 0.640242 -0.242608 -0.728856
+v -146.032532 -141.474747 43.199959 1.000000 1.000000 1.000000
+vn 0.675195 -0.123751 -0.727184
+v -146.104630 -141.737076 43.199959 1.000000 1.000000 1.000000
+vn 0.695399 -0.032821 -0.717874
+v -146.130371 -142.009171 43.199959 1.000000 1.000000 1.000000
+vn 0.695399 0.032821 -0.717874
+v -146.130371 -142.706833 43.199959 1.000000 1.000000 1.000000
+vn 0.675193 0.123755 -0.727186
+v -146.104630 -142.978928 43.199959 1.000000 1.000000 1.000000
+vn 0.639701 0.243235 -0.729123
+v -146.032532 -143.241241 43.199959 1.000000 1.000000 1.000000
+vn 0.580029 0.361470 -0.730004
+v -145.914078 -143.481247 43.199959 1.000000 1.000000 1.000000
+vn 0.504749 0.464798 -0.727455
+v -145.751862 -143.691940 43.199959 1.000000 1.000000 1.000000
+vn 0.400773 0.550358 -0.732452
+v -145.558731 -143.867752 43.199959 1.000000 1.000000 1.000000
+vn 0.278310 0.623711 -0.730430
+v -145.334717 -143.996109 43.199959 1.000000 1.000000 1.000000
+vn 0.143291 0.666068 -0.731998
+v -145.093948 -144.075653 43.199959 1.000000 1.000000 1.000000
+vn 0.036368 0.693977 -0.719078
+v -144.841614 -144.102173 43.199959 1.000000 1.000000 1.000000
+vn -0.564336 0.303789 -0.767618
+v -125.144432 162.173615 43.199997 1.000000 1.000000 1.000000
+vn -0.643629 -0.000001 -0.765338
+v -124.885651 163.220123 43.199997 1.000000 1.000000 1.000000
+vn -0.564342 -0.303786 -0.767615
+v -125.144432 164.266617 43.199997 1.000000 1.000000 1.000000
+vn -0.333951 -0.539761 -0.772745
+v -125.851265 165.032669 43.199997 1.000000 1.000000 1.000000
+vn 0.197214 -0.679074 -0.707082
+v -0.600348 165.138702 43.199978 1.000000 1.000000 1.000000
+vn -0.266340 0.597394 -0.756428
+v -140.487335 161.582001 43.199997 1.000000 1.000000 1.000000
+vn -0.481726 0.446911 -0.753798
+v -140.068909 161.884781 43.199997 1.000000 1.000000 1.000000
+vn -0.072237 0.677725 -0.731759
+v -140.979156 161.475952 43.199997 1.000000 1.000000 1.000000
+vn -0.616511 0.236486 -0.750992
+v -139.790817 162.336884 43.199997 1.000000 1.000000 1.000000
+vn -0.682728 0.061991 -0.728038
+v -139.692963 162.871292 43.199997 1.000000 1.000000 1.000000
+vn -0.672995 -0.081389 -0.735155
+v -139.692963 163.568954 43.199997 1.000000 1.000000 1.000000
+vn -0.564380 -0.303172 -0.767830
+v -139.864212 164.266617 43.199997 1.000000 1.000000 1.000000
+vn -0.334002 -0.539749 -0.772731
+v -140.335419 164.777328 43.199997 1.000000 1.000000 1.000000
+vn -0.094708 -0.665651 -0.740229
+v -140.979156 164.964294 43.199997 1.000000 1.000000 1.000000
+vn -0.564328 0.303776 -0.767629
+v 1.672502 162.173615 43.199978 1.000000 1.000000 1.000000
+vn 0.000002 0.631240 -0.775588
+v 0.000000 161.127121 43.199978 1.000000 1.000000 1.000000
+vn 0.564330 0.303778 -0.767626
+v -1.672476 162.173615 43.199978 1.000000 1.000000 1.000000
+vn 0.334025 0.539766 -0.772710
+v -0.965610 161.407593 43.199978 1.000000 1.000000 1.000000
+vn 0.693900 -0.626816 -0.354408
+v 157.119034 -121.045662 11.835998 1.000000 1.000000 1.000000
+vn 0.600489 0.687975 -0.407557
+v 130.520950 231.797989 11.835998 1.000000 1.000000 1.000000
+vn 0.687634 0.703576 -0.179280
+v 131.863800 231.797989 15.085000 1.000000 1.000000 1.000000
+vn 0.765571 -0.616716 -0.183202
+v 158.454147 -120.927055 15.084796 1.000000 1.000000 1.000000
+vn 0.610895 -0.617489 -0.495495
+v 156.636230 -121.088905 11.163398 1.000000 1.000000 1.000000
+vn 0.366245 0.668053 -0.647742
+v 128.421967 231.797989 9.756198 1.000000 1.000000 1.000000
+vn 0.691829 0.720960 -0.039867
+v 132.223007 231.797989 18.199997 1.000000 1.000000 1.000000
+vn 0.772639 -0.633522 -0.040973
+v 158.810776 -120.896355 18.199997 1.000000 1.000000 1.000000
+vn 0.553263 0.596541 0.581411
+v 132.223007 231.797989 35.299999 1.000000 1.000000 1.000000
+vn 0.677341 -0.083755 0.730886
+v 157.971329 -109.769966 35.299999 1.000000 1.000000 1.000000
+vn 0.743710 -0.665166 0.066706
+v 158.810776 -120.896355 19.299999 1.000000 1.000000 1.000000
+vn 0.682952 -0.417376 0.599478
+v 158.391052 -115.333160 33.156399 1.000000 1.000000 1.000000
+vn 0.717009 -0.634643 0.288315
+v 158.698761 -119.404747 27.299999 1.000000 1.000000 1.000000
+vn 0.542170 -0.653685 -0.527966
+v 155.012711 -121.365196 9.851200 1.000000 1.000000 1.000000
+vn 0.093822 0.681533 -0.725749
+v 126.410027 231.797989 9.199996 1.000000 1.000000 1.000000
+vn 0.440065 -0.601422 -0.666809
+v 154.638046 -121.429375 9.547398 1.000000 1.000000 1.000000
+vn 0.348181 -0.549715 -0.759331
+v 153.067322 -121.813103 9.199996 1.000000 1.000000 1.000000
+vn -0.631352 -0.774447 0.040322
+v 154.961212 -121.236824 18.199997 1.000000 1.000000 1.000000
+vn -0.719085 0.693685 0.041436
+v 128.347687 231.797989 18.199997 1.000000 1.000000 1.000000
+vn -0.676833 0.714661 0.176511
+v 128.227951 231.797989 17.161598 1.000000 1.000000 1.000000
+vn -0.588693 -0.790272 0.170030
+v 154.841476 -121.247993 17.161598 1.000000 1.000000 1.000000
+vn -0.625556 -0.777262 0.067400
+v 154.961212 -121.236824 19.299999 1.000000 1.000000 1.000000
+vn -0.600644 0.557071 0.573497
+v 128.347687 231.797989 35.299999 1.000000 1.000000 1.000000
+vn -0.655187 -0.186768 0.732016
+v 154.121765 -110.111824 35.299999 1.000000 1.000000 1.000000
+vn -0.606304 -0.520042 0.601625
+v 154.541489 -115.673622 33.156399 1.000000 1.000000 1.000000
+vn -0.603884 -0.742237 0.290530
+v 154.849197 -119.746605 27.299999 1.000000 1.000000 1.000000
+vn -0.562084 0.733825 0.381526
+v 127.780167 231.797989 16.078598 1.000000 1.000000 1.000000
+vn -0.530160 -0.780255 0.331862
+v 154.397293 -121.287056 16.078598 1.000000 1.000000 1.000000
+vn -0.321728 0.756931 0.568811
+v 127.080681 231.797989 15.385398 1.000000 1.000000 1.000000
+vn -0.260098 -0.749874 0.608308
+v 153.704636 -121.478203 15.408798 1.000000 1.000000 1.000000
+vn -0.403077 -0.763706 0.504264
+v 154.236359 -121.301003 15.854396 1.000000 1.000000 1.000000
+vn -0.086815 0.735410 0.672039
+v 126.410027 231.797989 15.199996 1.000000 1.000000 1.000000
+vn 0.342196 -0.612538 0.712530
+v 153.067322 -121.813103 15.199996 1.000000 1.000000 1.000000
+vn -0.010650 -0.743077 0.669122
+v 153.611923 -121.508904 15.331996 1.000000 1.000000 1.000000
+vn 0.495698 -0.433386 -0.752635
+v 151.761810 -122.827507 9.199996 1.000000 1.000000 1.000000
+vn 0.495698 -0.433386 0.752635
+v 151.761810 -122.827507 15.199996 1.000000 1.000000 1.000000
+vn 0.620279 -0.199057 -0.758703
+v 150.511673 -124.977715 9.199996 1.000000 1.000000 1.000000
+vn 0.620278 -0.199057 0.758704
+v 150.511673 -124.977715 15.199996 1.000000 1.000000 1.000000
+vn 0.647930 0.076881 -0.757810
+v 150.272202 -127.506050 9.199996 1.000000 1.000000 1.000000
+vn 0.647930 0.076881 0.757810
+v 150.272202 -127.506050 15.199996 1.000000 1.000000 1.000000
+vn 0.552632 0.341299 -0.760337
+v 151.089752 -129.887894 9.199996 1.000000 1.000000 1.000000
+vn 0.552632 0.341299 0.760337
+v 151.089752 -129.887894 15.199996 1.000000 1.000000 1.000000
+vn 0.086842 0.735407 0.672038
+v -126.410027 231.796585 15.199996 1.000000 1.000000 1.000000
+vn -0.093793 0.681549 -0.725736
+v -126.410027 231.796585 9.199996 1.000000 1.000000 1.000000
+vn 0.321712 0.756926 0.568828
+v -127.080681 231.796585 15.385398 1.000000 1.000000 1.000000
+vn -0.366299 0.668048 -0.647717
+v -128.421967 231.796585 9.756198 1.000000 1.000000 1.000000
+vn 0.562114 0.733798 0.381533
+v -127.780167 231.796585 16.078598 1.000000 1.000000 1.000000
+vn -0.600488 0.687943 -0.407614
+v -130.520950 231.796585 11.835998 1.000000 1.000000 1.000000
+vn 0.676837 0.714658 0.176509
+v -128.227951 231.796585 17.161598 1.000000 1.000000 1.000000
+vn -0.687632 0.703578 -0.179279
+v -131.863800 231.796585 15.085000 1.000000 1.000000 1.000000
+vn 0.719087 0.693683 0.041436
+v -128.347687 231.796585 18.199997 1.000000 1.000000 1.000000
+vn -0.691826 0.720963 -0.039867
+v -132.223007 231.796585 18.199997 1.000000 1.000000 1.000000
+vn 0.600645 0.557070 0.573496
+v -128.347687 231.796585 35.299999 1.000000 1.000000 1.000000
+vn -0.553264 0.596541 0.581410
+v -132.223007 231.796585 35.299999 1.000000 1.000000 1.000000
+vn 0.004940 -0.722172 0.691696
+v -153.611923 -121.508904 15.332200 1.000000 1.000000 1.000000
+vn -0.365424 -0.662299 -0.654084
+v -155.035873 -121.361000 9.819798 1.000000 1.000000 1.000000
+vn -0.310082 -0.612032 0.727506
+v -153.067322 -121.813103 15.199996 1.000000 1.000000 1.000000
+vn 0.275921 -0.740888 0.612333
+v -153.704636 -121.478203 15.408798 1.000000 1.000000 1.000000
+vn -0.480635 -0.600574 -0.638985
+v -155.262482 -121.309380 9.890998 1.000000 1.000000 1.000000
+vn -0.363049 -0.532301 -0.764756
+v -153.067322 -121.813103 9.199996 1.000000 1.000000 1.000000
+vn -0.495698 -0.433386 0.752635
+v -151.761810 -122.827507 15.199996 1.000000 1.000000 1.000000
+vn -0.495698 -0.433386 -0.752635
+v -151.761810 -122.827507 9.199996 1.000000 1.000000 1.000000
+vn -0.620279 -0.199057 0.758703
+v -150.511673 -124.977715 15.199996 1.000000 1.000000 1.000000
+vn -0.620279 -0.199057 -0.758703
+v -150.511673 -124.977715 9.199996 1.000000 1.000000 1.000000
+vn -0.647930 0.076881 0.757810
+v -150.272202 -127.506050 15.199996 1.000000 1.000000 1.000000
+vn -0.647931 0.076881 -0.757809
+v -150.272202 -127.506050 9.199996 1.000000 1.000000 1.000000
+vn -0.552631 0.341299 0.760338
+v -151.089752 -129.887894 15.199996 1.000000 1.000000 1.000000
+vn -0.552631 0.341299 -0.760338
+v -151.089752 -129.887894 9.199996 1.000000 1.000000 1.000000
+vn -0.624597 -0.620700 -0.473930
+v -156.636230 -121.088905 11.163398 1.000000 1.000000 1.000000
+vn 0.399881 -0.758842 0.514056
+v -154.236359 -121.301003 15.854396 1.000000 1.000000 1.000000
+vn -0.693850 -0.627102 -0.353999
+v -157.119034 -121.045662 11.835998 1.000000 1.000000 1.000000
+vn 0.529942 -0.780397 0.331877
+v -154.397293 -121.287056 16.078598 1.000000 1.000000 1.000000
+vn -0.765556 -0.616721 -0.183246
+v -158.454147 -120.927055 15.085000 1.000000 1.000000 1.000000
+vn 0.588852 -0.790195 0.169839
+v -154.841476 -121.247993 17.161598 1.000000 1.000000 1.000000
+vn -0.772664 -0.633493 -0.040942
+v -158.810776 -120.896355 18.199997 1.000000 1.000000 1.000000
+vn 0.631430 -0.774377 0.040468
+v -154.961212 -121.236824 18.199997 1.000000 1.000000 1.000000
+vn 0.625574 -0.777251 0.067358
+v -154.961212 -121.236824 19.299999 1.000000 1.000000 1.000000
+vn -0.743709 -0.665170 0.066673
+v -158.810776 -120.896355 19.299999 1.000000 1.000000 1.000000
+vn 0.603938 -0.742164 0.290604
+v -154.849197 -119.746605 27.299999 1.000000 1.000000 1.000000
+vn -0.717067 -0.634545 0.288387
+v -158.698761 -119.404747 27.299999 1.000000 1.000000 1.000000
+vn 0.606327 -0.520088 0.601561
+v -154.541489 -115.673622 33.156399 1.000000 1.000000 1.000000
+vn -0.682995 -0.417412 0.599404
+v -158.391052 -115.333160 33.156399 1.000000 1.000000 1.000000
+vn 0.655198 -0.186750 0.732011
+v -154.121765 -110.111824 35.299999 1.000000 1.000000 1.000000
+vn -0.677349 -0.083738 0.730880
+v -157.971329 -109.769966 35.299999 1.000000 1.000000 1.000000
+vn 0.725227 0.076461 0.684251
+v 168.660004 -142.358002 15.199996 1.000000 1.000000 1.000000
+vn 0.682513 0.310106 0.661824
+v 167.680237 -137.763168 15.199996 1.000000 1.000000 1.000000
+vn 0.482727 0.576790 0.659006
+v 164.937881 -134.101807 15.199996 1.000000 1.000000 1.000000
+vn 0.166167 0.735681 0.656629
+v 160.990479 -132.117645 15.199996 1.000000 1.000000 1.000000
+vn -0.042827 0.714263 0.698566
+v 156.640091 -132.211121 15.199996 1.000000 1.000000 1.000000
+vn 0.750539 0.120483 0.649750
+v 168.660004 -149.334671 15.199996 1.000000 1.000000 1.000000
+vn 0.071830 0.649717 0.756775
+v 155.041031 -132.368805 15.199996 1.000000 1.000000 1.000000
+vn -0.750540 0.120484 0.649748
+v -168.660004 -149.334671 15.199996 1.000000 1.000000 1.000000
+vn -0.340765 0.547509 0.764273
+v -152.798233 -131.629272 15.199996 1.000000 1.000000 1.000000
+vn 0.340765 0.547509 0.764273
+v 152.798233 -131.629272 15.199996 1.000000 1.000000 1.000000
+vn -0.482726 0.576790 0.659006
+v -164.937881 -134.101807 15.199996 1.000000 1.000000 1.000000
+vn -0.682513 0.310106 0.661824
+v -167.680237 -137.763168 15.199996 1.000000 1.000000 1.000000
+vn -0.166167 0.735681 0.656629
+v -160.990479 -132.117645 15.199996 1.000000 1.000000 1.000000
+vn -0.725227 0.076461 0.684251
+v -168.660004 -142.358002 15.199996 1.000000 1.000000 1.000000
+vn 0.042827 0.714263 0.698566
+v -156.640091 -132.211121 15.199996 1.000000 1.000000 1.000000
+vn -0.071830 0.649717 0.756775
+v -155.041031 -132.368805 15.199996 1.000000 1.000000 1.000000
+vn 0.340765 0.547509 -0.764273
+v 152.798233 -131.629272 9.199996 1.000000 1.000000 1.000000
+vn 0.071830 0.649717 -0.756775
+v 155.041031 -132.368805 9.199996 1.000000 1.000000 1.000000
+vn -0.042827 0.714263 -0.698566
+v 156.640091 -132.211121 9.199996 1.000000 1.000000 1.000000
+vn 0.166167 0.735681 -0.656629
+v 160.990479 -132.117645 9.199996 1.000000 1.000000 1.000000
+vn 0.482726 0.576790 -0.659006
+v 164.937881 -134.101807 9.199996 1.000000 1.000000 1.000000
+vn 0.682513 0.310106 -0.661824
+v 167.680237 -137.763168 9.199996 1.000000 1.000000 1.000000
+vn -0.668282 -0.135628 -0.731440
+v -168.660004 -149.334671 9.199996 1.000000 1.000000 1.000000
+vn 0.668281 -0.135628 -0.731441
+v 168.660004 -149.334671 9.199996 1.000000 1.000000 1.000000
+vn -0.340765 0.547509 -0.764273
+v -152.798233 -131.629272 9.199996 1.000000 1.000000 1.000000
+vn 0.725227 0.076461 -0.684251
+v 168.660004 -142.358002 9.199996 1.000000 1.000000 1.000000
+vn -0.725227 0.076461 -0.684251
+v -168.660004 -142.358002 9.199996 1.000000 1.000000 1.000000
+vn -0.682513 0.310106 -0.661824
+v -167.680237 -137.763168 9.199996 1.000000 1.000000 1.000000
+vn -0.482727 0.576790 -0.659006
+v -164.937881 -134.101807 9.199996 1.000000 1.000000 1.000000
+vn -0.166167 0.735681 -0.656629
+v -160.990479 -132.117645 9.199996 1.000000 1.000000 1.000000
+vn 0.042827 0.714263 -0.698566
+v -156.640091 -132.211121 9.199996 1.000000 1.000000 1.000000
+vn -0.071830 0.649717 -0.756775
+v -155.041031 -132.368805 9.199996 1.000000 1.000000 1.000000
+vn 0.728481 0.682143 0.063224
+v 168.660004 -154.916000 23.199997 1.000000 1.000000 1.000000
+vn 0.722688 0.688399 0.061881
+v 168.660004 -154.916000 23.260597 1.000000 1.000000 1.000000
+vn 0.686933 -0.723626 -0.066999
+v 168.660004 -159.102005 23.199997 1.000000 1.000000 1.000000
+vn 0.757712 0.601838 0.252316
+v 168.660004 -154.168106 19.199997 1.000000 1.000000 1.000000
+vn 0.722688 -0.688399 0.061881
+v 168.660004 -159.102005 23.260597 1.000000 1.000000 1.000000
+vn 0.696013 0.664897 0.271070
+v 167.624863 -154.916000 29.260799 1.000000 1.000000 1.000000
+vn 0.662608 -0.690723 -0.289574
+v 168.660004 -157.794571 16.199997 1.000000 1.000000 1.000000
+vn 0.779407 0.386196 0.493334
+v 168.660004 -152.125336 16.271797 1.000000 1.000000 1.000000
+vn 0.646713 -0.470105 -0.600636
+v 168.660004 -154.218338 11.075600 1.000000 1.000000 1.000000
+vn 0.696013 -0.664897 0.271070
+v 167.624863 -159.102005 29.260799 1.000000 1.000000 1.000000
+vn 0.489880 0.645850 0.585573
+v 164.797562 -154.916000 33.653000 1.000000 1.000000 1.000000
+vn 0.489880 -0.645850 0.585573
+v 164.797562 -159.102005 33.653000 1.000000 1.000000 1.000000
+vn 0.146248 0.665541 0.731893
+v 160.935120 -154.916000 35.260799 1.000000 1.000000 1.000000
+vn 0.146248 -0.665540 0.731893
+v 160.935120 -159.102005 35.260799 1.000000 1.000000 1.000000
+vn 0.107547 0.745279 0.658022
+v 113.942062 -154.916000 35.260799 1.000000 1.000000 1.000000
+vn 0.107547 -0.745279 0.658022
+v 113.942062 -159.102005 35.260799 1.000000 1.000000 1.000000
+vn 0.268001 -0.724436 0.635113
+v 111.814507 -159.102005 35.975338 1.000000 1.000000 1.000000
+vn 0.268001 0.724436 0.635113
+v 111.814507 -154.916000 35.975338 1.000000 1.000000 1.000000
+vn 0.232086 0.673947 0.701379
+v 101.219696 -154.916000 41.418537 1.000000 1.000000 1.000000
+vn 0.232086 -0.673946 0.701379
+v 101.219696 -159.102005 41.418537 1.000000 1.000000 1.000000
+vn 0.059547 0.689072 0.722242
+v 90.123665 -154.916000 43.260738 1.000000 1.000000 1.000000
+vn 0.059547 -0.689072 0.722243
+v 90.123665 -159.102005 43.260738 1.000000 1.000000 1.000000
+vn -0.686933 -0.723626 -0.066999
+v -168.660004 -159.102005 23.199997 1.000000 1.000000 1.000000
+vn -0.722688 -0.688398 0.061883
+v -168.660004 -159.102005 23.260799 1.000000 1.000000 1.000000
+vn -0.728482 0.682142 0.063224
+v -168.660004 -154.916000 23.199997 1.000000 1.000000 1.000000
+vn -0.662607 -0.690723 -0.289574
+v -168.660004 -157.794571 16.199997 1.000000 1.000000 1.000000
+vn -0.722688 0.688399 0.061883
+v -168.660004 -154.916000 23.260799 1.000000 1.000000 1.000000
+vn -0.696011 -0.664897 0.271072
+v -167.624863 -159.102005 29.260799 1.000000 1.000000 1.000000
+vn -0.757711 0.601840 0.252316
+v -168.660004 -154.168106 19.199997 1.000000 1.000000 1.000000
+vn -0.646714 -0.470104 -0.600636
+v -168.660004 -154.218338 11.075600 1.000000 1.000000 1.000000
+vn -0.779407 0.386195 0.493333
+v -168.660004 -152.125336 16.271797 1.000000 1.000000 1.000000
+vn -0.696011 0.664897 0.271072
+v -167.624863 -154.916000 29.260799 1.000000 1.000000 1.000000
+vn -0.489880 -0.645850 0.585573
+v -164.797562 -159.102005 33.653000 1.000000 1.000000 1.000000
+vn -0.489880 0.645850 0.585573
+v -164.797562 -154.916000 33.653000 1.000000 1.000000 1.000000
+vn -0.146248 -0.665539 0.731894
+v -160.935120 -159.102005 35.260799 1.000000 1.000000 1.000000
+vn -0.146248 0.665539 0.731894
+v -160.935120 -154.916000 35.260799 1.000000 1.000000 1.000000
+vn -0.107549 0.745280 0.658021
+v -113.942062 -154.916000 35.260799 1.000000 1.000000 1.000000
+vn -0.107549 -0.745280 0.658021
+v -113.942062 -159.102005 35.260799 1.000000 1.000000 1.000000
+vn -0.268004 0.724435 0.635112
+v -111.814507 -154.916000 35.975357 1.000000 1.000000 1.000000
+vn -0.268004 -0.724435 0.635113
+v -111.814507 -159.102005 35.975357 1.000000 1.000000 1.000000
+vn -0.232086 -0.673947 0.701379
+v -101.219696 -159.102005 41.418556 1.000000 1.000000 1.000000
+vn -0.232086 0.673946 0.701379
+v -101.219696 -154.916000 41.418556 1.000000 1.000000 1.000000
+vn -0.059547 -0.689072 0.722242
+v -90.123665 -159.102005 43.260757 1.000000 1.000000 1.000000
+vn -0.059547 0.689072 0.722243
+v -90.123665 -154.916000 43.260757 1.000000 1.000000 1.000000
+# 10222 vertices, 0 vertices normals
+
+
+usemtl material_0
+vt 0.000000 1.000000
+f 1/1/1 2/1/2 3/1/3
+f 3/1/3 59/1/59 1/1/1
+f 1/1/1 59/1/59 4/1/4
+f 4/1/4 59/1/59 57/1/57
+f 4/1/4 57/1/57 8/1/8
+f 7/1/7 4/1/4 8/1/8
+f 8/1/8 55/1/55 7/1/7
+f 55/1/55 12/1/12 7/1/7
+f 12/1/12 5/1/5 7/1/7
+f 5/1/5 2/1/2 7/1/7
+f 5/1/5 6/1/6 2/1/2
+vt 1.000000 0.799992
+vt 0.002138 1.799990
+vt 0.000000 0.799992
+f 6/2/6 37/3/37 2/4/2
+vt 0.997862 1.799990
+f 35/5/35 37/3/37 6/2/6
+f 49/1/49 35/1/35 6/1/6
+f 6/1/6 48/1/48 49/1/49
+f 48/1/48 40/1/40 49/1/49
+f 11/1/11 40/1/40 48/1/48
+f 11/1/11 42/1/42 40/1/40
+f 41/1/41 40/1/40 42/1/42
+f 41/1/41 42/1/42 22/1/22
+f 21/1/21 41/1/41 22/1/22
+f 13/1/13 21/1/21 22/1/22
+f 13/1/13 22/1/22 15/1/15
+f 15/1/15 9/1/9 13/1/13
+f 5/1/5 13/1/13 9/1/9
+f 14/1/14 9/1/9 15/1/15
+f 15/1/15 42/1/42 14/1/14
+f 14/1/14 42/1/42 10/1/10
+f 6/1/6 14/1/14 10/1/10
+f 10/1/10 11/1/11 6/1/6
+f 9/1/9 14/1/14 6/1/6
+f 18/1/18 21/1/21 13/1/13
+f 13/1/13 23/1/23 18/1/18
+f 18/1/18 23/1/23 24/1/24
+f 18/1/18 24/1/24 16/1/16
+f 16/1/16 17/1/17 18/1/18
+f 45/1/45 17/1/17 16/1/16
+f 45/1/45 16/1/16 46/1/46
+f 39/1/39 45/1/45 46/1/46
+f 39/1/39 46/1/46 43/1/43
+f 43/1/43 44/1/44 39/1/39
+f 39/1/39 44/1/44 28/1/28
+f 28/1/28 29/1/29 39/1/39
+f 29/1/29 32/1/32 39/1/39
+f 39/1/39 32/1/32 38/1/38
+f 39/1/39 38/1/38 20/1/20
+f 20/1/20 38/1/38 41/1/41
+f 32/1/32 34/1/34 38/1/38
+f 34/1/34 35/1/35 38/1/38
+f 38/1/38 35/1/35 40/1/40
+f 34/1/34 33/1/33 35/1/35
+f 35/1/35 33/1/33 36/1/36
+f 33/1/33 58/1/58 36/1/36
+f 58/1/58 59/1/59 36/1/36
+f 36/1/36 59/1/59 37/1/37
+f 60/1/60 58/1/58 33/1/33
+f 33/1/33 31/1/31 60/1/60
+f 60/1/60 31/1/31 26/1/26
+f 26/1/26 64/1/64 60/1/60
+f 60/1/60 64/1/64 63/1/63
+f 60/1/60 63/1/63 61/1/61
+f 60/1/60 61/1/61 54/1/54
+f 54/1/54 56/1/56 60/1/60
+f 54/1/54 52/1/52 56/1/56
+f 52/1/52 55/1/55 56/1/56
+f 56/1/56 55/1/55 57/1/57
+f 56/1/56 57/1/57 58/1/58
+f 51/1/51 52/1/52 54/1/54
+f 53/1/53 51/1/51 54/1/54
+f 54/1/54 62/1/62 53/1/53
+f 53/1/53 62/1/62 50/1/50
+f 50/1/50 62/1/62 16/1/16
+f 25/1/25 16/1/16 62/1/62
+f 25/1/25 62/1/62 63/1/63
+f 25/1/25 63/1/63 30/1/30
+f 25/1/25 30/1/30 26/1/26
+f 25/1/25 26/1/26 27/1/27
+f 27/1/27 26/1/26 28/1/28
+f 28/1/28 47/1/47 27/1/27
+f 47/1/47 44/1/44 27/1/27
+f 27/1/27 44/1/44 16/1/16
+f 27/1/27 16/1/16 25/1/25
+f 50/1/50 51/1/51 53/1/53
+f 50/1/50 24/1/24 51/1/51
+f 51/1/51 23/1/23 52/1/52
+f 52/1/52 23/1/23 12/1/12
+f 54/1/54 61/1/61 62/1/62
+f 63/1/63 62/1/62 61/1/61
+f 30/1/30 63/1/63 64/1/64
+f 26/1/26 30/1/30 64/1/64
+f 29/1/29 26/1/26 31/1/31
+f 32/1/32 31/1/31 33/1/33
+f 60/1/60 56/1/56 58/1/58
+f 32/1/32 33/1/33 34/1/34
+f 29/1/29 31/1/31 32/1/32
+f 28/1/28 26/1/26 29/1/29
+f 28/1/28 44/1/44 47/1/47
+f 16/1/16 44/1/44 43/1/43
+f 20/1/20 45/1/45 39/1/39
+f 20/1/20 19/1/19 45/1/45
+f 17/1/17 19/1/19 20/1/20
+f 20/1/20 21/1/21 17/1/17
+f 46/1/46 16/1/16 43/1/43
+f 19/1/19 17/1/17 45/1/45
+f 50/1/50 16/1/16 24/1/24
+f 51/1/51 24/1/24 23/1/23
+f 13/1/13 12/1/12 23/1/23
+f 18/1/18 17/1/17 21/1/21
+f 20/1/20 41/1/41 21/1/21
+f 22/1/22 42/1/42 15/1/15
+f 38/1/38 40/1/40 41/1/41
+f 10/1/10 42/1/42 11/1/11
+f 6/1/6 11/1/11 48/1/48
+f 49/1/49 40/1/40 35/1/35
+f 35/1/35 36/1/36 37/1/37
+f 9/1/9 6/1/6 5/1/5
+f 12/1/12 13/1/13 5/1/5
+f 52/1/52 12/1/12 55/1/55
+f 7/1/7 2/1/2 4/1/4
+f 8/1/8 57/1/57 55/1/55
+f 58/1/58 57/1/57 59/1/59
+f 3/1/3 37/1/37 59/1/59
+f 2/1/2 37/1/37 3/1/3
+f 4/1/4 2/1/2 1/1/1
+f 65/1/65 66/1/66 67/1/67
+f 70/1/70 65/1/65 67/1/67
+f 70/1/70 67/1/67 75/1/75
+f 70/1/70 75/1/75 434/1/434
+f 2287/1/2287 70/1/70 434/1/434
+f 2287/1/2287 434/1/434 2303/1/2303
+f 2288/1/2288 2287/1/2287 2303/1/2303
+f 2288/1/2288 2303/1/2303 2304/1/2304
+f 2300/1/2300 2288/1/2288 2304/1/2304
+f 2300/1/2300 2304/1/2304 2480/1/2480
+f 2480/1/2480 2502/1/2502 2300/1/2300
+f 2300/1/2300 2502/1/2502 2302/1/2302
+f 2300/1/2300 2302/1/2302 2299/1/2299
+f 2300/1/2300 2299/1/2299 2301/1/2301
+f 2301/1/2301 2299/1/2299 2291/1/2291
+f 2291/1/2291 2288/1/2288 2301/1/2301
+f 2291/1/2291 2286/1/2286 2288/1/2288
+f 2290/1/2290 2286/1/2286 2291/1/2291
+f 2291/1/2291 2298/1/2298 2290/1/2290
+f 2298/1/2298 2292/1/2292 2290/1/2290
+f 2290/1/2290 2292/1/2292 2289/1/2289
+f 2289/1/2289 2292/1/2292 2293/1/2293
+f 2289/1/2289 2293/1/2293 2283/1/2283
+f 2289/1/2289 2283/1/2283 2282/1/2282
+f 2282/1/2282 2281/1/2281 2289/1/2289
+f 2289/1/2289 2281/1/2281 2286/1/2286
+f 2281/1/2281 2285/1/2285 2286/1/2286
+f 2286/1/2286 2285/1/2285 2287/1/2287
+f 2281/1/2281 2284/1/2284 2285/1/2285
+f 2284/1/2284 70/1/70 2285/1/2285
+f 2284/1/2284 68/1/68 70/1/70
+f 2280/1/2280 68/1/68 2284/1/2284
+f 2263/1/2263 2280/1/2280 2284/1/2284
+f 2262/1/2262 2280/1/2280 2263/1/2263
+f 2259/1/2259 2262/1/2262 2263/1/2263
+f 2259/1/2259 2263/1/2263 2261/1/2261
+f 2261/1/2261 2258/1/2258 2259/1/2259
+f 2258/1/2258 2253/1/2253 2259/1/2259
+f 2259/1/2259 2253/1/2253 2260/1/2260
+f 2260/1/2260 2253/1/2253 2247/1/2247
+f 2260/1/2260 2247/1/2247 2264/1/2264
+f 2264/1/2264 2262/1/2262 2260/1/2260
+f 2265/1/2265 2262/1/2262 2264/1/2264
+f 2265/1/2265 2266/1/2266 2262/1/2262
+f 2266/1/2266 115/1/115 2262/1/2262
+f 2266/1/2266 114/1/114 115/1/115
+f 114/1/114 111/1/111 115/1/115
+f 115/1/115 111/1/111 110/1/110
+f 115/1/115 110/1/110 2280/1/2280
+f 111/1/111 108/1/108 110/1/110
+f 110/1/110 108/1/108 69/1/69
+f 110/1/110 69/1/69 68/1/68
+f 68/1/68 69/1/69 65/1/65
+f 69/1/69 71/1/71 65/1/65
+f 65/1/65 71/1/71 72/1/72
+f 71/1/71 97/1/97 72/1/72
+f 72/1/72 97/1/97 92/1/92
+f 72/1/72 92/1/92 66/1/66
+f 66/1/66 92/1/92 76/1/76
+f 66/1/66 76/1/76 73/1/73
+f 73/1/73 76/1/76 77/1/77
+f 73/1/73 77/1/77 74/1/74
+f 67/1/67 73/1/73 74/1/74
+f 74/1/74 77/1/77 79/1/79
+f 74/1/74 79/1/79 78/1/78
+f 75/1/75 74/1/74 78/1/78
+f 75/1/75 78/1/78 84/1/84
+f 75/1/75 84/1/84 433/1/433
+f 435/1/435 75/1/75 433/1/433
+f 435/1/435 433/1/433 2306/1/2306
+f 435/1/435 2306/1/2306 2307/1/2307
+f 2305/1/2305 435/1/435 2307/1/2307
+f 2305/1/2305 2307/1/2307 2309/1/2309
+f 2308/1/2308 2305/1/2305 2309/1/2309
+f 2308/1/2308 2309/1/2309 2479/1/2479
+f 2481/1/2481 2308/1/2308 2479/1/2479
+f 2481/1/2481 2479/1/2479 2483/1/2483
+f 2483/1/2483 2488/1/2488 2481/1/2481
+f 2481/1/2481 2488/1/2488 2499/1/2499
+f 2481/1/2481 2499/1/2499 2500/1/2500
+f 2481/1/2481 2500/1/2500 2480/1/2480
+f 2500/1/2500 2499/1/2499 2501/1/2501
+f 2500/1/2500 2501/1/2501 2502/1/2502
+f 2501/1/2501 2503/1/2503 2502/1/2502
+f 2501/1/2501 2324/1/2324 2503/1/2503
+f 2324/1/2324 2323/1/2323 2503/1/2503
+f 2503/1/2503 2323/1/2323 427/1/427
+f 427/1/427 2297/1/2297 2503/1/2503
+f 2302/1/2302 2503/1/2503 2297/1/2297
+f 2302/1/2302 2297/1/2297 2296/1/2296
+f 2296/1/2296 2297/1/2297 2295/1/2295
+f 2296/1/2296 2295/1/2295 2298/1/2298
+f 427/1/427 2295/1/2295 2297/1/2297
+f 87/1/87 2295/1/2295 427/1/427
+f 427/1/427 428/1/428 87/1/87
+f 87/1/87 428/1/428 426/1/426
+f 426/1/426 85/1/85 87/1/87
+f 87/1/87 85/1/85 83/1/83
+f 83/1/83 88/1/88 87/1/87
+f 2294/1/2294 87/1/87 88/1/88
+f 2294/1/2294 88/1/88 2255/1/2255
+f 2255/1/2255 2257/1/2257 2294/1/2294
+f 2294/1/2294 2257/1/2257 2293/1/2293
+f 2293/1/2293 2257/1/2257 2256/1/2256
+f 2256/1/2256 2257/1/2257 2254/1/2254
+f 2256/1/2256 2254/1/2254 2258/1/2258
+f 2255/1/2255 2254/1/2254 2257/1/2257
+f 2252/1/2252 2254/1/2254 2255/1/2255
+f 2255/1/2255 89/1/89 2252/1/2252
+f 2252/1/2252 89/1/89 91/1/91
+f 2252/1/2252 91/1/91 2250/1/2250
+f 2250/1/2250 2249/1/2249 2252/1/2252
+f 2249/1/2249 2251/1/2251 2252/1/2252
+f 2249/1/2249 2246/1/2246 2251/1/2251
+f 2247/1/2247 2251/1/2251 2246/1/2246
+f 2247/1/2247 2246/1/2246 2243/1/2243
+f 2247/1/2247 2243/1/2243 2248/1/2248
+f 2265/1/2265 2247/1/2247 2248/1/2248
+f 2265/1/2265 2248/1/2248 2267/1/2267
+f 2267/1/2267 2248/1/2248 2268/1/2268
+f 2268/1/2268 2266/1/2266 2267/1/2267
+f 2269/1/2269 2266/1/2266 2268/1/2268
+f 2268/1/2268 2240/1/2240 2269/1/2269
+f 2269/1/2269 2240/1/2240 2241/1/2241
+f 2269/1/2269 2241/1/2241 2271/1/2271
+f 2271/1/2271 2270/1/2270 2269/1/2269
+f 2272/1/2272 2270/1/2270 2271/1/2271
+f 2271/1/2271 2236/1/2236 2272/1/2272
+f 2272/1/2272 2236/1/2236 2273/1/2273
+f 2272/1/2272 2273/1/2273 2274/1/2274
+f 2274/1/2274 2273/1/2273 2276/1/2276
+f 2276/1/2276 128/1/128 2274/1/2274
+f 128/1/128 123/1/123 2274/1/2274
+f 2274/1/2274 123/1/123 124/1/124
+f 2274/1/2274 124/1/124 2270/1/2270
+f 2270/1/2270 124/1/124 114/1/114
+f 124/1/124 112/1/112 114/1/114
+f 124/1/124 120/1/120 112/1/112
+f 120/1/120 117/1/117 112/1/112
+f 112/1/112 117/1/117 113/1/113
+f 112/1/112 113/1/113 111/1/111
+f 117/1/117 118/1/118 113/1/113
+f 113/1/113 118/1/118 119/1/119
+f 113/1/113 119/1/119 116/1/116
+f 113/1/113 116/1/116 108/1/108
+f 108/1/108 116/1/116 387/1/387
+f 108/1/108 387/1/387 109/1/109
+f 108/1/108 109/1/109 105/1/105
+f 109/1/109 107/1/107 105/1/105
+f 105/1/105 107/1/107 104/1/104
+f 105/1/105 104/1/104 103/1/103
+f 69/1/69 105/1/105 103/1/103
+f 69/1/69 103/1/103 102/1/102
+f 103/1/103 100/1/100 102/1/102
+f 102/1/102 100/1/100 101/1/101
+f 102/1/102 101/1/101 71/1/71
+f 100/1/100 96/1/96 101/1/101
+f 101/1/101 96/1/96 97/1/97
+f 93/1/93 97/1/97 96/1/96
+f 94/1/94 93/1/93 96/1/96
+f 94/1/94 96/1/96 98/1/98
+f 95/1/95 94/1/94 98/1/98
+f 95/1/95 98/1/98 395/1/395
+f 395/1/395 397/1/397 95/1/95
+f 401/1/401 95/1/95 397/1/397
+f 396/1/396 401/1/401 397/1/397
+f 396/1/396 400/1/400 401/1/401
+f 400/1/400 2242/1/2242 401/1/401
+f 401/1/401 2242/1/2242 2245/1/2245
+f 2250/1/2250 401/1/401 2245/1/2245
+f 2246/1/2246 2250/1/2250 2245/1/2245
+f 2246/1/2246 2245/1/2245 2244/1/2244
+f 2244/1/2244 2245/1/2245 2242/1/2242
+f 2244/1/2244 2242/1/2242 2239/1/2239
+f 2244/1/2244 2239/1/2239 2243/1/2243
+f 2240/1/2240 2243/1/2243 2239/1/2239
+f 2240/1/2240 2239/1/2239 2237/1/2237
+f 2238/1/2238 2237/1/2237 2239/1/2239
+f 2239/1/2239 2232/1/2232 2238/1/2238
+f 2238/1/2238 2232/1/2232 2231/1/2231
+f 2231/1/2231 2234/1/2234 2238/1/2238
+f 2231/1/2231 2230/1/2230 2234/1/2234
+f 2233/1/2233 2234/1/2234 2230/1/2230
+f 2233/1/2233 2230/1/2230 2279/1/2279
+f 2233/1/2233 2279/1/2279 2278/1/2278
+f 2277/1/2277 2233/1/2233 2278/1/2278
+f 2277/1/2277 2278/1/2278 133/1/133
+f 2275/1/2275 2277/1/2277 133/1/133
+f 133/1/133 128/1/128 2275/1/2275
+f 132/1/132 128/1/128 133/1/133
+f 133/1/133 206/1/206 132/1/132
+f 132/1/132 206/1/206 134/1/134
+f 134/1/134 129/1/129 132/1/132
+f 136/1/136 129/1/129 134/1/134
+f 134/1/134 201/1/201 136/1/136
+f 136/1/136 201/1/201 141/1/141
+f 141/1/141 135/1/135 136/1/136
+f 140/1/140 135/1/135 141/1/141
+f 141/1/141 146/1/146 140/1/140
+f 140/1/140 146/1/146 145/1/145
+f 140/1/140 145/1/145 144/1/144
+f 144/1/144 139/1/139 140/1/140
+f 143/1/143 139/1/139 144/1/144
+f 143/1/143 142/1/142 139/1/139
+f 142/1/142 137/1/137 139/1/139
+f 139/1/139 137/1/137 135/1/135
+f 135/1/135 137/1/137 130/1/130
+f 135/1/135 130/1/130 129/1/129
+f 129/1/129 130/1/130 127/1/127
+f 129/1/129 127/1/127 128/1/128
+f 130/1/130 131/1/131 127/1/127
+f 127/1/127 131/1/131 122/1/122
+f 127/1/127 122/1/122 123/1/123
+f 123/1/123 122/1/122 120/1/120
+f 122/1/122 121/1/121 120/1/120
+f 122/1/122 125/1/125 121/1/121
+f 125/1/125 126/1/126 121/1/121
+f 121/1/121 126/1/126 422/1/422
+f 121/1/121 422/1/422 117/1/117
+f 117/1/117 422/1/422 421/1/421
+f 422/1/422 420/1/420 421/1/421
+f 421/1/421 420/1/420 382/1/382
+f 421/1/421 382/1/382 118/1/118
+f 118/1/118 382/1/382 380/1/380
+f 382/1/382 383/1/383 380/1/380
+f 380/1/380 383/1/383 384/1/384
+f 380/1/380 384/1/384 381/1/381
+f 119/1/119 380/1/380 381/1/381
+f 381/1/381 384/1/384 386/1/386
+f 381/1/381 386/1/386 385/1/385
+f 116/1/116 381/1/381 385/1/385
+f 385/1/385 386/1/386 389/1/389
+f 385/1/385 389/1/389 388/1/388
+f 387/1/387 385/1/385 388/1/388
+f 388/1/388 389/1/389 107/1/107
+f 106/1/106 107/1/107 389/1/389
+f 392/1/392 106/1/106 389/1/389
+f 392/1/392 389/1/389 391/1/391
+f 394/1/394 392/1/392 391/1/391
+f 394/1/394 391/1/391 398/1/398
+f 398/1/398 399/1/399 394/1/394
+f 394/1/394 399/1/399 396/1/396
+f 394/1/394 396/1/396 395/1/395
+f 395/1/395 393/1/393 394/1/394
+f 403/1/403 399/1/399 398/1/398
+f 398/1/398 390/1/390 403/1/403
+f 403/1/403 390/1/390 406/1/406
+f 403/1/403 406/1/406 407/1/407
+f 403/1/403 407/1/407 405/1/405
+f 405/1/405 404/1/404 403/1/403
+f 405/1/405 408/1/408 404/1/404
+f 404/1/404 408/1/408 402/1/402
+f 404/1/404 402/1/402 399/1/399
+f 399/1/399 402/1/402 400/1/400
+f 402/1/402 2232/1/2232 400/1/400
+f 402/1/402 2229/1/2229 2232/1/2232
+f 408/1/408 2229/1/2229 402/1/402
+f 408/1/408 411/1/411 2229/1/2229
+f 2230/1/2230 2229/1/2229 411/1/411
+f 2230/1/2230 411/1/411 2235/1/2235
+f 2235/1/2235 411/1/411 209/1/209
+f 2235/1/2235 209/1/209 207/1/207
+f 207/1/207 2278/1/2278 2235/1/2235
+f 207/1/207 205/1/205 2278/1/2278
+f 206/1/206 2278/1/2278 205/1/205
+f 206/1/206 205/1/205 201/1/201
+f 201/1/201 205/1/205 202/1/202
+f 201/1/201 202/1/202 146/1/146
+f 203/1/203 146/1/146 202/1/202
+f 203/1/203 202/1/202 204/1/204
+f 204/1/204 211/1/211 203/1/203
+f 203/1/203 211/1/211 210/1/210
+f 203/1/203 210/1/210 200/1/200
+f 200/1/200 199/1/199 203/1/203
+f 200/1/200 197/1/197 199/1/199
+f 149/1/149 199/1/199 197/1/197
+f 149/1/149 197/1/197 196/1/196
+f 149/1/149 196/1/196 153/1/153
+f 148/1/148 149/1/149 153/1/153
+f 148/1/148 153/1/153 150/1/150
+f 147/1/147 148/1/148 150/1/150
+f 147/1/147 150/1/150 151/1/151
+f 151/1/151 152/1/152 147/1/147
+f 147/1/147 152/1/152 142/1/142
+f 152/1/152 158/1/158 142/1/142
+f 158/1/158 379/1/379 142/1/142
+f 158/1/158 2135/1/2135 379/1/379
+f 2135/1/2135 2137/1/2137 379/1/379
+f 379/1/379 2137/1/2137 2140/1/2140
+f 379/1/379 2140/1/2140 138/1/138
+f 137/1/137 379/1/379 138/1/138
+f 138/1/138 2140/1/2140 2143/1/2143
+f 138/1/138 2143/1/2143 131/1/131
+f 131/1/131 2143/1/2143 2146/1/2146
+f 2143/1/2143 2147/1/2147 2146/1/2146
+f 2146/1/2146 2147/1/2147 2149/1/2149
+f 2146/1/2146 2149/1/2149 2148/1/2148
+f 2146/1/2146 2148/1/2148 125/1/125
+f 125/1/125 2148/1/2148 424/1/424
+f 2148/1/2148 2152/1/2152 424/1/424
+f 424/1/424 2152/1/2152 423/1/423
+f 424/1/424 423/1/423 126/1/126
+f 126/1/126 423/1/423 419/1/419
+f 423/1/423 418/1/418 419/1/419
+f 419/1/419 418/1/418 417/1/417
+f 419/1/419 417/1/417 420/1/420
+f 415/1/415 417/1/417 418/1/418
+f 414/1/414 415/1/415 418/1/418
+f 414/1/414 418/1/418 416/1/416
+f 412/1/412 414/1/414 416/1/416
+f 412/1/412 416/1/416 2153/1/2153
+f 412/1/412 2153/1/2153 2158/1/2158
+f 2158/1/2158 211/1/211 412/1/412
+f 412/1/412 211/1/211 408/1/408
+f 412/1/412 408/1/408 409/1/409
+f 211/1/211 410/1/410 408/1/408
+f 211/1/211 208/1/208 410/1/410
+f 410/1/410 208/1/208 209/1/209
+f 2158/1/2158 213/1/213 211/1/211
+f 213/1/213 212/1/212 211/1/211
+f 215/1/215 212/1/212 213/1/213
+f 2168/1/2168 215/1/215 213/1/213
+f 2169/1/2169 215/1/215 2168/1/2168
+f 2168/1/2168 2161/1/2161 2169/1/2169
+f 2169/1/2169 2161/1/2161 2166/1/2166
+f 2169/1/2169 2166/1/2166 2173/1/2173
+f 2169/1/2169 2173/1/2173 2170/1/2170
+f 2170/1/2170 214/1/214 2169/1/2169
+f 214/1/214 2170/1/2170 216/1/216
+f 195/1/195 214/1/214 216/1/216
+f 195/1/195 216/1/216 370/1/370
+f 195/1/195 370/1/370 192/1/192
+f 193/1/193 195/1/195 192/1/192
+f 193/1/193 192/1/192 191/1/191
+f 191/1/191 166/1/166 193/1/193
+f 193/1/193 166/1/166 155/1/155
+f 193/1/193 155/1/155 194/1/194
+f 194/1/194 155/1/155 196/1/196
+f 154/1/154 155/1/155 166/1/166
+f 154/1/154 166/1/166 163/1/163
+f 154/1/154 163/1/163 156/1/156
+f 151/1/151 154/1/154 156/1/156
+f 156/1/156 157/1/157 151/1/151
+f 160/1/160 157/1/157 156/1/156
+f 160/1/160 161/1/161 157/1/157
+f 161/1/161 162/1/162 157/1/157
+f 157/1/157 162/1/162 159/1/159
+f 157/1/157 159/1/159 152/1/152
+f 162/1/162 2134/1/2134 159/1/159
+f 159/1/159 2134/1/2134 2135/1/2135
+f 2134/1/2134 2136/1/2136 2135/1/2135
+f 2134/1/2134 2133/1/2133 2136/1/2136
+f 2133/1/2133 2139/1/2139 2136/1/2136
+f 2136/1/2136 2139/1/2139 2138/1/2138
+f 2136/1/2136 2138/1/2138 2137/1/2137
+f 2138/1/2138 2141/1/2141 2137/1/2137
+f 2137/1/2137 2141/1/2141 2142/1/2142
+f 2141/1/2141 2181/1/2181 2142/1/2142
+f 2142/1/2142 2181/1/2181 2225/1/2225
+f 2142/1/2142 2225/1/2225 2227/1/2227
+f 2142/1/2142 2227/1/2227 2145/1/2145
+f 2140/1/2140 2142/1/2142 2145/1/2145
+f 2140/1/2140 2145/1/2145 2144/1/2144
+f 2145/1/2145 2165/1/2165 2144/1/2144
+f 2144/1/2144 2165/1/2165 2163/1/2163
+f 2144/1/2144 2163/1/2163 2164/1/2164
+f 2143/1/2143 2144/1/2144 2164/1/2164
+f 2164/1/2164 2163/1/2163 2160/1/2160
+f 2164/1/2164 2160/1/2160 2147/1/2147
+f 2147/1/2147 2160/1/2160 2150/1/2150
+f 2160/1/2160 2156/1/2156 2150/1/2150
+f 2150/1/2150 2156/1/2156 2151/1/2151
+f 2149/1/2149 2150/1/2150 2151/1/2151
+f 2154/1/2154 2151/1/2151 2156/1/2156
+f 2155/1/2155 2154/1/2154 2156/1/2156
+f 2155/1/2155 2156/1/2156 2157/1/2157
+f 2168/1/2168 2155/1/2155 2157/1/2157
+f 2158/1/2158 2155/1/2155 2168/1/2168
+f 2157/1/2157 2156/1/2156 2159/1/2159
+f 2157/1/2157 2159/1/2159 2161/1/2161
+f 2161/1/2161 2159/1/2159 2162/1/2162
+f 2163/1/2163 2162/1/2162 2159/1/2159
+f 2158/1/2158 2154/1/2154 2155/1/2155
+f 2153/1/2153 2151/1/2151 2154/1/2154
+f 2153/1/2153 2152/1/2152 2151/1/2151
+f 425/1/425 2152/1/2152 2153/1/2153
+f 2160/1/2160 2159/1/2159 2156/1/2156
+f 2163/1/2163 2159/1/2159 2160/1/2160
+f 2165/1/2165 2162/1/2162 2163/1/2163
+f 2165/1/2165 2167/1/2167 2162/1/2162
+f 2166/1/2166 2162/1/2162 2167/1/2167
+f 2227/1/2227 2167/1/2167 2165/1/2165
+f 2227/1/2227 2228/1/2228 2167/1/2167
+f 2173/1/2173 2167/1/2167 2228/1/2228
+f 2173/1/2173 2228/1/2228 2180/1/2180
+f 2173/1/2173 2180/1/2180 2171/1/2171
+f 2171/1/2171 2180/1/2180 2176/1/2176
+f 2171/1/2171 2176/1/2176 2174/1/2174
+f 2172/1/2172 2171/1/2171 2174/1/2174
+f 2172/1/2172 2174/1/2174 2175/1/2175
+f 370/1/370 2172/1/2172 2175/1/2175
+f 370/1/370 2175/1/2175 368/1/368
+f 369/1/369 370/1/370 368/1/368
+f 369/1/369 368/1/368 189/1/189
+f 192/1/192 369/1/369 189/1/189
+f 228/1/228 189/1/189 368/1/368
+f 2224/1/2224 228/1/228 368/1/368
+f 230/1/230 228/1/228 2224/1/2224
+f 2193/1/2193 230/1/230 2224/1/2224
+f 2193/1/2193 2224/1/2224 2191/1/2191
+f 2190/1/2190 2193/1/2193 2191/1/2191
+f 2190/1/2190 2191/1/2191 2186/1/2186
+f 2190/1/2190 2186/1/2186 2187/1/2187
+f 2189/1/2189 2190/1/2190 2187/1/2187
+f 2188/1/2188 2189/1/2189 2187/1/2187
+f 2188/1/2188 2187/1/2187 2139/1/2139
+f 2139/1/2139 2187/1/2187 2185/1/2185
+f 2187/1/2187 2182/1/2182 2185/1/2185
+f 2182/1/2182 2183/1/2183 2185/1/2185
+f 2185/1/2185 2183/1/2183 2138/1/2138
+f 2138/1/2138 2183/1/2183 2179/1/2179
+f 2177/1/2177 2179/1/2179 2183/1/2183
+f 2176/1/2176 2179/1/2179 2177/1/2177
+f 2176/1/2176 2181/1/2181 2179/1/2179
+f 2182/1/2182 2177/1/2177 2183/1/2183
+f 2182/1/2182 2178/1/2178 2177/1/2177
+f 2174/1/2174 2177/1/2177 2178/1/2178
+f 2184/1/2184 2178/1/2178 2182/1/2182
+f 2186/1/2186 2184/1/2184 2182/1/2182
+f 2184/1/2184 2175/1/2175 2178/1/2178
+f 2224/1/2224 2175/1/2175 2184/1/2184
+f 2195/1/2195 2189/1/2189 2188/1/2188
+f 2133/1/2133 2195/1/2195 2188/1/2188
+f 2131/1/2131 2195/1/2195 2133/1/2133
+f 2132/1/2132 2131/1/2131 2133/1/2133
+f 2129/1/2129 2131/1/2131 2132/1/2132
+f 177/1/177 2129/1/2129 2132/1/2132
+f 177/1/177 2132/1/2132 162/1/162
+f 176/1/176 2129/1/2129 177/1/177
+f 173/1/173 176/1/176 177/1/177
+f 173/1/173 177/1/177 161/1/161
+f 169/1/169 173/1/173 161/1/161
+f 169/1/169 161/1/161 165/1/165
+f 165/1/165 168/1/168 169/1/169
+f 169/1/169 168/1/168 170/1/170
+f 170/1/170 168/1/168 171/1/171
+f 170/1/170 171/1/171 174/1/174
+f 174/1/174 175/1/175 170/1/170
+f 170/1/170 175/1/175 173/1/173
+f 178/1/178 175/1/175 174/1/174
+f 174/1/174 180/1/180 178/1/178
+f 178/1/178 180/1/180 181/1/181
+f 178/1/178 181/1/181 179/1/179
+f 179/1/179 181/1/181 182/1/182
+f 182/1/182 378/1/378 179/1/179
+f 179/1/179 378/1/378 175/1/175
+f 378/1/378 2125/1/2125 175/1/175
+f 175/1/175 2125/1/2125 176/1/176
+f 2125/1/2125 2126/1/2126 176/1/176
+f 2125/1/2125 2124/1/2124 2126/1/2126
+f 2124/1/2124 2128/1/2128 2126/1/2126
+f 2126/1/2126 2128/1/2128 2206/1/2206
+f 2126/1/2126 2206/1/2206 2130/1/2130
+f 2126/1/2126 2130/1/2130 2129/1/2129
+f 2206/1/2206 2200/1/2200 2130/1/2130
+f 2130/1/2130 2200/1/2200 2198/1/2198
+f 2130/1/2130 2198/1/2198 2131/1/2131
+f 2131/1/2131 2198/1/2198 2196/1/2196
+f 2198/1/2198 2197/1/2197 2196/1/2196
+f 2196/1/2196 2197/1/2197 2194/1/2194
+f 2196/1/2196 2194/1/2194 2195/1/2195
+f 2197/1/2197 2192/1/2192 2194/1/2194
+f 2194/1/2194 2192/1/2192 2190/1/2190
+f 2197/1/2197 2202/1/2202 2192/1/2192
+f 2202/1/2202 2222/1/2222 2192/1/2192
+f 2222/1/2222 2223/1/2223 2192/1/2192
+f 2192/1/2192 2223/1/2223 2193/1/2193
+f 2222/1/2222 2221/1/2221 2223/1/2223
+f 2221/1/2221 229/1/229 2223/1/2223
+f 2223/1/2223 229/1/229 230/1/230
+f 229/1/229 227/1/227 230/1/230
+f 232/1/232 227/1/227 229/1/229
+f 232/1/232 231/1/231 227/1/227
+f 231/1/231 223/1/223 227/1/227
+f 227/1/227 223/1/223 226/1/226
+f 227/1/227 226/1/226 228/1/228
+f 223/1/223 190/1/190 226/1/226
+f 226/1/226 190/1/190 189/1/189
+f 190/1/190 187/1/187 189/1/189
+f 187/1/187 188/1/188 189/1/189
+f 191/1/191 189/1/189 188/1/188
+f 188/1/188 167/1/167 191/1/191
+f 188/1/188 172/1/172 167/1/167
+f 168/1/168 167/1/167 172/1/172
+f 164/1/164 167/1/167 168/1/168
+f 163/1/163 167/1/167 164/1/164
+f 160/1/160 163/1/163 164/1/164
+f 160/1/160 164/1/164 165/1/165
+f 187/1/187 172/1/172 188/1/188
+f 186/1/186 172/1/172 187/1/187
+f 185/1/185 186/1/186 187/1/187
+f 185/1/185 180/1/180 186/1/186
+f 180/1/180 171/1/171 186/1/186
+f 186/1/186 171/1/171 172/1/172
+f 190/1/190 185/1/185 187/1/187
+f 218/1/218 185/1/185 190/1/190
+f 218/1/218 217/1/217 185/1/185
+f 217/1/217 184/1/184 185/1/185
+f 184/1/184 181/1/181 185/1/185
+f 184/1/184 183/1/183 181/1/181
+f 221/1/221 183/1/183 184/1/184
+f 219/1/219 221/1/221 184/1/184
+f 220/1/220 221/1/221 219/1/219
+f 220/1/220 219/1/219 217/1/217
+f 225/1/225 221/1/221 220/1/220
+f 222/1/222 225/1/225 220/1/220
+f 222/1/222 220/1/220 223/1/223
+f 223/1/223 220/1/220 218/1/218
+f 224/1/224 225/1/225 222/1/222
+f 234/1/234 224/1/224 222/1/222
+f 234/1/234 222/1/222 231/1/231
+f 233/1/233 234/1/234 231/1/231
+f 233/1/233 231/1/231 235/1/235
+f 2218/1/2218 233/1/233 235/1/235
+f 2218/1/2218 235/1/235 2219/1/2219
+f 2211/1/2211 2218/1/2218 2219/1/2219
+f 2211/1/2211 2219/1/2219 2209/1/2209
+f 2208/1/2208 2211/1/2211 2209/1/2209
+f 2208/1/2208 2209/1/2209 2203/1/2203
+f 2205/1/2205 2208/1/2208 2203/1/2203
+f 2205/1/2205 2203/1/2203 2200/1/2200
+f 2200/1/2200 2203/1/2203 2199/1/2199
+f 2203/1/2203 2204/1/2204 2199/1/2199
+f 2199/1/2199 2204/1/2204 2201/1/2201
+f 2199/1/2199 2201/1/2201 2197/1/2197
+f 2204/1/2204 2222/1/2222 2201/1/2201
+f 2207/1/2207 2208/1/2208 2205/1/2205
+f 2206/1/2206 2207/1/2207 2205/1/2205
+f 2207/1/2207 2212/1/2212 2208/1/2208
+f 2212/1/2212 2210/1/2210 2208/1/2208
+f 2214/1/2214 2210/1/2210 2212/1/2212
+f 2213/1/2213 2214/1/2214 2212/1/2212
+f 2215/1/2215 2214/1/2214 2213/1/2213
+f 2128/1/2128 2215/1/2215 2213/1/2213
+f 2128/1/2128 2213/1/2213 2207/1/2207
+f 2127/1/2127 2215/1/2215 2128/1/2128
+f 2127/1/2127 2217/1/2217 2215/1/2215
+f 2217/1/2217 358/1/358 2215/1/2215
+f 2217/1/2217 354/1/354 358/1/358
+f 354/1/354 357/1/357 358/1/358
+f 358/1/358 357/1/357 2216/1/2216
+f 358/1/358 2216/1/2216 2214/1/2214
+f 357/1/357 239/1/239 2216/1/2216
+f 2216/1/2216 239/1/239 240/1/240
+f 2216/1/2216 240/1/240 2210/1/2210
+f 2210/1/2210 240/1/240 2218/1/2218
+f 239/1/239 233/1/233 240/1/240
+f 239/1/239 236/1/236 233/1/233
+f 241/1/241 236/1/236 239/1/239
+f 241/1/241 238/1/238 236/1/236
+f 238/1/238 234/1/234 236/1/236
+f 238/1/238 237/1/237 234/1/234
+f 244/1/244 237/1/237 238/1/238
+f 243/1/243 244/1/244 238/1/238
+f 243/1/243 238/1/238 242/1/242
+f 247/1/247 243/1/243 242/1/242
+f 247/1/247 242/1/242 353/1/353
+f 247/1/247 353/1/353 354/1/354
+f 351/1/351 247/1/247 354/1/354
+f 355/1/355 351/1/351 354/1/354
+f 352/1/352 351/1/351 355/1/355
+f 2123/1/2123 352/1/352 355/1/355
+f 2123/1/2123 355/1/355 2217/1/2217
+f 356/1/356 352/1/352 2123/1/2123
+f 2122/1/2122 356/1/356 2123/1/2123
+f 2122/1/2122 2123/1/2123 2124/1/2124
+f 2121/1/2121 2122/1/2122 2124/1/2124
+f 2117/1/2117 2122/1/2122 2121/1/2121
+f 2120/1/2120 2117/1/2117 2121/1/2121
+f 2120/1/2120 2121/1/2121 378/1/378
+f 372/1/372 2120/1/2120 378/1/378
+f 372/1/372 378/1/378 371/1/371
+f 371/1/371 183/1/183 372/1/372
+f 372/1/372 183/1/183 373/1/373
+f 372/1/372 373/1/373 2350/1/2350
+f 2350/1/2350 373/1/373 375/1/375
+f 2350/1/2350 375/1/375 2349/1/2349
+f 2349/1/2349 2120/1/2120 2350/1/2350
+f 2119/1/2119 2120/1/2120 2349/1/2349
+f 2119/1/2119 2115/1/2115 2120/1/2120
+f 2118/1/2118 2115/1/2115 2119/1/2119
+f 2119/1/2119 2351/1/2351 2118/1/2118
+f 2118/1/2118 2351/1/2351 2352/1/2352
+f 2118/1/2118 2352/1/2352 2353/1/2353
+f 2353/1/2353 2113/1/2113 2118/1/2118
+f 2357/1/2357 2113/1/2113 2353/1/2353
+f 2353/1/2353 2354/1/2354 2357/1/2357
+f 2357/1/2357 2354/1/2354 2109/1/2109
+f 2357/1/2357 2109/1/2109 2108/1/2108
+f 2108/1/2108 2109/1/2109 2106/1/2106
+f 2108/1/2108 2106/1/2106 2110/1/2110
+f 2110/1/2110 2111/1/2111 2108/1/2108
+f 2108/1/2108 2111/1/2111 2113/1/2113
+f 2111/1/2111 2112/1/2112 2113/1/2113
+f 2113/1/2113 2112/1/2112 2114/1/2114
+f 2113/1/2113 2114/1/2114 2115/1/2115
+f 2115/1/2115 2114/1/2114 2117/1/2117
+f 2114/1/2114 2116/1/2116 2117/1/2117
+f 2114/1/2114 330/1/330 2116/1/2116
+f 330/1/330 336/1/336 2116/1/2116
+f 2116/1/2116 336/1/336 356/1/356
+f 336/1/336 347/1/347 356/1/356
+f 356/1/356 347/1/347 350/1/350
+f 347/1/347 348/1/348 350/1/350
+f 350/1/350 348/1/348 349/1/349
+f 350/1/350 349/1/349 352/1/352
+f 348/1/348 245/1/245 349/1/349
+f 349/1/349 245/1/245 247/1/247
+f 348/1/348 346/1/346 245/1/245
+f 346/1/346 246/1/246 245/1/245
+f 245/1/245 246/1/246 243/1/243
+f 346/1/346 250/1/250 246/1/246
+f 250/1/250 248/1/248 246/1/246
+f 246/1/246 248/1/248 244/1/244
+f 248/1/248 249/1/249 244/1/244
+f 251/1/251 249/1/249 248/1/248
+f 251/1/251 252/1/252 249/1/249
+f 252/1/252 253/1/253 249/1/249
+f 249/1/249 253/1/253 254/1/254
+f 249/1/249 254/1/254 237/1/237
+f 237/1/237 254/1/254 224/1/224
+f 254/1/254 256/1/256 224/1/224
+f 254/1/254 255/1/255 256/1/256
+f 255/1/255 2361/1/2361 256/1/256
+f 256/1/256 2361/1/2361 377/1/377
+f 256/1/256 377/1/377 225/1/225
+f 225/1/225 377/1/377 376/1/376
+f 377/1/377 2356/1/2356 376/1/376
+f 2356/1/2356 375/1/375 376/1/376
+f 376/1/376 375/1/375 374/1/374
+f 376/1/376 374/1/374 221/1/221
+f 2356/1/2356 2351/1/2351 375/1/375
+f 2361/1/2361 2356/1/2356 377/1/377
+f 2361/1/2361 2355/1/2355 2356/1/2356
+f 2355/1/2355 2352/1/2352 2356/1/2356
+f 2355/1/2355 2354/1/2354 2352/1/2352
+f 2358/1/2358 2354/1/2354 2355/1/2355
+f 2360/1/2360 2358/1/2358 2355/1/2355
+f 255/1/255 2358/1/2358 2360/1/2360
+f 2359/1/2359 2358/1/2358 255/1/255
+f 253/1/253 2359/1/2359 255/1/255
+f 257/1/257 2359/1/2359 253/1/253
+f 257/1/257 2100/1/2100 2359/1/2359
+f 2100/1/2100 2102/1/2102 2359/1/2359
+f 2100/1/2100 2099/1/2099 2102/1/2102
+f 2099/1/2099 2101/1/2101 2102/1/2102
+f 2101/1/2101 2106/1/2106 2102/1/2102
+f 2101/1/2101 2103/1/2103 2106/1/2106
+f 2105/1/2105 2106/1/2106 2103/1/2103
+f 2105/1/2105 2103/1/2103 2107/1/2107
+f 2107/1/2107 2111/1/2111 2105/1/2105
+f 2107/1/2107 2074/1/2074 2111/1/2111
+f 2074/1/2074 2075/1/2075 2111/1/2111
+f 2074/1/2074 2073/1/2073 2075/1/2075
+f 2073/1/2073 325/1/325 2075/1/2075
+f 2075/1/2075 325/1/325 326/1/326
+f 2075/1/2075 326/1/326 2112/1/2112
+f 2112/1/2112 326/1/326 330/1/330
+f 326/1/326 329/1/329 330/1/330
+f 330/1/330 329/1/329 335/1/335
+f 329/1/329 334/1/334 335/1/335
+f 335/1/335 334/1/334 337/1/337
+f 335/1/335 337/1/337 336/1/336
+f 334/1/334 339/1/339 337/1/337
+f 337/1/337 339/1/339 342/1/342
+f 337/1/337 342/1/342 347/1/347
+f 347/1/347 342/1/342 345/1/345
+f 342/1/342 343/1/343 345/1/345
+f 343/1/343 346/1/346 345/1/345
+f 339/1/339 343/1/343 342/1/342
+f 339/1/339 341/1/341 343/1/343
+f 341/1/341 344/1/344 343/1/343
+f 343/1/343 344/1/344 250/1/250
+f 344/1/344 251/1/251 250/1/250
+f 260/1/260 251/1/251 344/1/344
+f 260/1/260 258/1/258 251/1/251
+f 261/1/261 258/1/258 260/1/260
+f 266/1/266 261/1/261 260/1/260
+f 266/1/266 260/1/260 341/1/341
+f 338/1/338 266/1/266 341/1/341
+f 265/1/265 266/1/266 338/1/338
+f 340/1/340 265/1/265 338/1/338
+f 333/1/333 340/1/340 338/1/338
+f 333/1/333 338/1/338 334/1/334
+f 332/1/332 340/1/340 333/1/333
+f 329/1/329 332/1/332 333/1/333
+f 328/1/328 332/1/332 329/1/329
+f 328/1/328 331/1/331 332/1/332
+f 331/1/331 271/1/271 332/1/332
+f 331/1/331 270/1/270 271/1/271
+f 270/1/270 267/1/267 271/1/271
+f 271/1/271 267/1/267 265/1/265
+f 267/1/267 264/1/264 265/1/265
+f 265/1/265 264/1/264 261/1/261
+f 264/1/264 259/1/259 261/1/261
+f 262/1/262 259/1/259 264/1/264
+f 262/1/262 263/1/263 259/1/259
+f 263/1/263 276/1/276 259/1/259
+f 259/1/259 276/1/276 252/1/252
+f 259/1/259 252/1/252 258/1/258
+f 276/1/276 257/1/257 252/1/252
+f 276/1/276 367/1/367 257/1/257
+f 367/1/367 2096/1/2096 257/1/257
+f 367/1/367 2095/1/2095 2096/1/2096
+f 2095/1/2095 2094/1/2094 2096/1/2096
+f 2096/1/2096 2094/1/2094 2097/1/2097
+f 2096/1/2096 2097/1/2097 2099/1/2099
+f 2097/1/2097 2098/1/2098 2099/1/2099
+f 2097/1/2097 2082/1/2082 2098/1/2098
+f 2098/1/2098 2082/1/2082 2103/1/2103
+f 2104/1/2104 2103/1/2103 2082/1/2082
+f 2104/1/2104 2082/1/2082 2081/1/2081
+f 2081/1/2081 2074/1/2074 2104/1/2104
+f 2077/1/2077 2074/1/2074 2081/1/2081
+f 2077/1/2077 2072/1/2072 2074/1/2074
+f 2076/1/2076 2072/1/2072 2077/1/2077
+f 2077/1/2077 2078/1/2078 2076/1/2076
+f 2076/1/2076 2078/1/2078 2079/1/2079
+f 2076/1/2076 2079/1/2079 2080/1/2080
+f 2080/1/2080 2070/1/2070 2076/1/2076
+f 2086/1/2086 2070/1/2070 2080/1/2080
+f 2080/1/2080 2084/1/2084 2086/1/2086
+f 2086/1/2086 2084/1/2084 2087/1/2087
+f 2086/1/2086 2087/1/2087 2366/1/2366
+f 2366/1/2366 2087/1/2087 2363/1/2363
+f 2366/1/2366 2363/1/2363 2365/1/2365
+f 2365/1/2365 489/1/489 2366/1/2366
+f 2366/1/2366 489/1/489 2070/1/2070
+f 489/1/489 492/1/492 2070/1/2070
+f 2070/1/2070 492/1/492 2071/1/2071
+f 2070/1/2070 2071/1/2071 2072/1/2072
+f 2072/1/2072 2071/1/2071 2073/1/2073
+f 2071/1/2071 324/1/324 2073/1/2073
+f 2071/1/2071 323/1/323 324/1/324
+f 323/1/323 295/1/295 324/1/324
+f 324/1/324 295/1/295 290/1/290
+f 324/1/324 290/1/290 325/1/325
+f 325/1/325 290/1/290 291/1/291
+f 290/1/290 288/1/288 291/1/291
+f 291/1/291 288/1/288 289/1/289
+f 291/1/291 289/1/289 327/1/327
+f 291/1/291 327/1/327 328/1/328
+f 326/1/326 291/1/291 328/1/328
+f 289/1/289 273/1/273 327/1/327
+f 327/1/327 273/1/273 270/1/270
+f 273/1/273 268/1/268 270/1/270
+f 273/1/273 272/1/272 268/1/268
+f 272/1/272 269/1/269 268/1/268
+f 268/1/268 269/1/269 262/1/262
+f 268/1/268 262/1/262 267/1/267
+f 272/1/272 274/1/274 269/1/269
+f 274/1/274 275/1/275 269/1/269
+f 269/1/269 275/1/275 263/1/263
+f 277/1/277 275/1/275 274/1/274
+f 280/1/280 277/1/277 274/1/274
+f 282/1/282 277/1/277 280/1/280
+f 281/1/281 282/1/282 280/1/280
+f 281/1/281 280/1/280 283/1/283
+f 288/1/288 281/1/281 283/1/283
+f 287/1/287 281/1/281 288/1/288
+f 287/1/287 286/1/286 281/1/281
+f 292/1/292 286/1/286 287/1/287
+f 290/1/290 292/1/292 287/1/287
+f 292/1/292 293/1/293 286/1/286
+f 293/1/293 285/1/285 286/1/286
+f 286/1/286 285/1/285 282/1/282
+f 285/1/285 284/1/284 282/1/282
+f 285/1/285 302/1/302 284/1/284
+f 302/1/302 305/1/305 284/1/284
+f 284/1/284 305/1/305 278/1/278
+f 284/1/284 278/1/278 277/1/277
+f 305/1/305 362/1/362 278/1/278
+f 278/1/278 362/1/362 279/1/279
+f 278/1/278 279/1/279 275/1/275
+f 275/1/275 279/1/279 276/1/276
+f 362/1/362 366/1/366 279/1/279
+f 279/1/279 366/1/366 367/1/367
+f 362/1/362 365/1/365 366/1/366
+f 365/1/365 2093/1/2093 366/1/366
+f 366/1/366 2093/1/2093 2095/1/2095
+f 2093/1/2093 2090/1/2090 2095/1/2095
+f 2093/1/2093 2089/1/2089 2090/1/2090
+f 2089/1/2089 2085/1/2085 2090/1/2090
+f 2090/1/2090 2085/1/2085 2083/1/2083
+f 2090/1/2090 2083/1/2083 2094/1/2094
+f 2085/1/2085 2079/1/2079 2083/1/2083
+f 2085/1/2085 2084/1/2084 2079/1/2079
+f 2088/1/2088 2084/1/2084 2085/1/2085
+f 2089/1/2089 2088/1/2088 2085/1/2085
+f 2093/1/2093 2088/1/2088 2089/1/2089
+f 2091/1/2091 2088/1/2088 2093/1/2093
+f 2091/1/2091 2092/1/2092 2088/1/2088
+f 2088/1/2088 2092/1/2092 2087/1/2087
+f 477/1/477 2092/1/2092 2091/1/2091
+f 364/1/364 477/1/477 2091/1/2091
+f 364/1/364 2091/1/2091 365/1/365
+f 361/1/361 364/1/364 365/1/365
+f 2055/1/2055 364/1/364 361/1/361
+f 363/1/363 2055/1/2055 361/1/361
+f 363/1/363 361/1/361 360/1/360
+f 308/1/308 363/1/363 360/1/360
+f 308/1/308 360/1/360 306/1/306
+f 307/1/307 308/1/308 306/1/306
+f 307/1/307 306/1/306 301/1/301
+f 300/1/300 307/1/307 301/1/301
+f 300/1/300 301/1/301 298/1/298
+f 299/1/299 300/1/300 298/1/298
+f 299/1/299 298/1/298 296/1/296
+f 295/1/295 299/1/299 296/1/296
+f 295/1/295 296/1/296 292/1/292
+f 296/1/296 294/1/294 292/1/292
+f 321/1/321 299/1/299 295/1/295
+f 321/1/321 322/1/322 299/1/299
+f 321/1/321 320/1/320 322/1/322
+f 320/1/320 313/1/313 322/1/322
+f 322/1/322 313/1/313 300/1/300
+f 313/1/313 309/1/309 300/1/300
+f 312/1/312 309/1/309 313/1/313
+f 312/1/312 311/1/311 309/1/309
+f 311/1/311 310/1/310 309/1/309
+f 309/1/309 310/1/310 308/1/308
+f 311/1/311 314/1/314 310/1/310
+f 314/1/314 363/1/363 310/1/310
+f 314/1/314 2056/1/2056 363/1/363
+f 2057/1/2057 2056/1/2056 314/1/314
+f 315/1/315 2057/1/2057 314/1/314
+f 2068/1/2068 2057/1/2057 315/1/315
+f 2067/1/2067 2068/1/2068 315/1/315
+f 2067/1/2067 315/1/315 316/1/316
+f 317/1/317 2067/1/2067 316/1/316
+f 317/1/317 316/1/316 318/1/318
+f 319/1/319 317/1/317 318/1/318
+f 319/1/319 318/1/318 320/1/320
+f 318/1/318 312/1/312 320/1/320
+f 2066/1/2066 317/1/317 319/1/319
+f 359/1/359 2066/1/2066 319/1/319
+f 359/1/359 319/1/319 321/1/321
+f 359/1/359 321/1/321 323/1/323
+f 492/1/492 359/1/359 323/1/323
+f 490/1/490 359/1/359 492/1/492
+f 490/1/490 2069/1/2069 359/1/359
+f 491/1/491 2069/1/2069 490/1/490
+f 487/1/487 491/1/491 490/1/490
+f 487/1/487 490/1/490 489/1/489
+f 488/1/488 487/1/487 489/1/489
+f 488/1/488 489/1/489 2364/1/2364
+f 2364/1/2364 479/1/479 488/1/488
+f 488/1/488 479/1/479 480/1/480
+f 480/1/480 479/1/479 474/1/474
+f 480/1/480 474/1/474 485/1/485
+f 485/1/485 487/1/487 480/1/480
+f 481/1/481 487/1/487 485/1/485
+f 481/1/481 486/1/486 487/1/487
+f 482/1/482 486/1/486 481/1/481
+f 481/1/481 473/1/473 482/1/482
+f 482/1/482 473/1/473 472/1/472
+f 482/1/482 472/1/472 484/1/484
+f 484/1/484 495/1/495 482/1/482
+f 499/1/499 495/1/495 484/1/484
+f 484/1/484 483/1/483 499/1/499
+f 499/1/499 483/1/483 500/1/500
+f 499/1/499 500/1/500 497/1/497
+f 497/1/497 500/1/500 501/1/501
+f 497/1/497 501/1/501 502/1/502
+f 502/1/502 498/1/498 497/1/497
+f 497/1/497 498/1/498 495/1/495
+f 498/1/498 496/1/496 495/1/495
+f 495/1/495 496/1/496 493/1/493
+f 495/1/495 493/1/493 486/1/486
+f 486/1/486 493/1/493 491/1/491
+f 493/1/493 494/1/494 491/1/491
+f 493/1/493 2029/1/2029 494/1/494
+f 2029/1/2029 2031/1/2031 494/1/494
+f 494/1/494 2031/1/2031 2035/1/2035
+f 494/1/494 2035/1/2035 2069/1/2069
+f 2069/1/2069 2035/1/2035 2066/1/2066
+f 2035/1/2035 2063/1/2063 2066/1/2066
+f 2066/1/2066 2063/1/2063 2065/1/2065
+f 2063/1/2063 2064/1/2064 2065/1/2065
+f 2065/1/2065 2064/1/2064 2067/1/2067
+f 2064/1/2064 2059/1/2059 2067/1/2067
+f 2061/1/2061 2059/1/2059 2064/1/2064
+f 2061/1/2061 2053/1/2053 2059/1/2059
+f 2053/1/2053 2052/1/2052 2059/1/2059
+f 2059/1/2059 2052/1/2052 2058/1/2058
+f 2059/1/2059 2058/1/2058 2068/1/2068
+f 2052/1/2052 2054/1/2054 2058/1/2058
+f 2058/1/2058 2054/1/2054 2057/1/2057
+f 2052/1/2052 2051/1/2051 2054/1/2054
+f 2051/1/2051 550/1/550 2054/1/2054
+f 2054/1/2054 550/1/550 2055/1/2055
+f 2054/1/2054 2055/1/2055 2056/1/2056
+f 550/1/550 478/1/478 2055/1/2055
+f 550/1/550 463/1/463 478/1/478
+f 463/1/463 465/1/465 478/1/478
+f 478/1/478 465/1/465 470/1/470
+f 478/1/478 470/1/470 364/1/364
+f 465/1/465 469/1/469 470/1/470
+f 470/1/470 469/1/469 471/1/471
+f 470/1/470 471/1/471 475/1/475
+f 470/1/470 475/1/475 477/1/477
+f 471/1/471 476/1/476 475/1/475
+f 475/1/475 476/1/476 2362/1/2362
+f 475/1/475 2362/1/2362 2092/1/2092
+f 2362/1/2362 2363/1/2363 2092/1/2092
+f 2362/1/2362 479/1/479 2363/1/2363
+f 476/1/476 479/1/479 2362/1/2362
+f 471/1/471 474/1/474 476/1/476
+f 468/1/468 474/1/474 471/1/471
+f 468/1/468 473/1/473 474/1/474
+f 469/1/469 468/1/468 471/1/471
+f 464/1/464 468/1/468 469/1/469
+f 464/1/464 467/1/467 468/1/468
+f 467/1/467 472/1/472 468/1/468
+f 467/1/467 483/1/483 472/1/472
+f 461/1/461 483/1/483 467/1/467
+f 466/1/466 461/1/461 467/1/467
+f 462/1/462 461/1/461 466/1/466
+f 462/1/462 466/1/466 464/1/464
+f 462/1/462 464/1/464 465/1/465
+f 457/1/457 461/1/461 462/1/462
+f 458/1/458 457/1/457 462/1/462
+f 458/1/458 462/1/462 463/1/463
+f 549/1/549 458/1/458 463/1/463
+f 453/1/453 458/1/458 549/1/549
+f 552/1/552 453/1/453 549/1/549
+f 552/1/552 549/1/549 2049/1/2049
+f 2045/1/2045 552/1/552 2049/1/2049
+f 2045/1/2045 2049/1/2049 2050/1/2050
+f 2044/1/2044 2045/1/2045 2050/1/2050
+f 2044/1/2044 2050/1/2050 2053/1/2053
+f 2060/1/2060 2044/1/2044 2053/1/2053
+f 2043/1/2043 2044/1/2044 2060/1/2060
+f 2034/1/2034 2043/1/2043 2060/1/2060
+f 2034/1/2034 2060/1/2060 2062/1/2062
+f 2035/1/2035 2034/1/2034 2062/1/2062
+f 2062/1/2062 2060/1/2060 2061/1/2061
+f 2062/1/2062 2061/1/2061 2063/1/2063
+f 2034/1/2034 2038/1/2038 2043/1/2043
+f 2038/1/2038 2042/1/2042 2043/1/2043
+f 2037/1/2037 2042/1/2042 2038/1/2038
+f 2033/1/2033 2037/1/2037 2038/1/2038
+f 2036/1/2036 2037/1/2037 2033/1/2033
+f 2032/1/2032 2036/1/2036 2033/1/2033
+f 2032/1/2032 2033/1/2033 2031/1/2031
+f 2031/1/2031 2033/1/2033 2034/1/2034
+f 2028/1/2028 2036/1/2036 2032/1/2032
+f 2029/1/2029 2028/1/2028 2032/1/2032
+f 2026/1/2026 2028/1/2028 2029/1/2029
+f 496/1/496 2026/1/2026 2029/1/2029
+f 515/1/515 2026/1/2026 496/1/496
+f 515/1/515 2025/1/2025 2026/1/2026
+f 2025/1/2025 2027/1/2027 2026/1/2026
+f 2026/1/2026 2027/1/2027 2030/1/2030
+f 2027/1/2027 2417/1/2417 2030/1/2030
+f 2030/1/2030 2417/1/2417 2418/1/2418
+f 2030/1/2030 2418/1/2418 2419/1/2419
+f 2030/1/2030 2419/1/2419 2028/1/2028
+f 2028/1/2028 2419/1/2419 2039/1/2039
+f 2419/1/2419 2372/1/2372 2039/1/2039
+f 2039/1/2039 2372/1/2372 2040/1/2040
+f 2039/1/2039 2040/1/2040 2036/1/2036
+f 2372/1/2372 2368/1/2368 2040/1/2040
+f 2368/1/2368 2047/1/2047 2040/1/2040
+f 2040/1/2040 2047/1/2047 2041/1/2041
+f 2040/1/2040 2041/1/2041 2037/1/2037
+f 2047/1/2047 2048/1/2048 2041/1/2041
+f 2041/1/2041 2048/1/2048 2046/1/2046
+f 2041/1/2041 2046/1/2046 2042/1/2042
+f 2042/1/2042 2046/1/2046 2045/1/2045
+f 2048/1/2048 552/1/552 2046/1/2046
+f 2048/1/2048 551/1/551 552/1/552
+f 2367/1/2367 551/1/551 2048/1/2048
+f 2367/1/2367 455/1/455 551/1/551
+f 455/1/455 453/1/453 551/1/551
+f 455/1/455 451/1/451 453/1/453
+f 451/1/451 452/1/452 453/1/453
+f 451/1/451 447/1/447 452/1/452
+f 447/1/447 450/1/450 452/1/452
+f 452/1/452 450/1/450 456/1/456
+f 452/1/452 456/1/456 457/1/457
+f 456/1/456 460/1/460 457/1/457
+f 456/1/456 459/1/459 460/1/460
+f 459/1/459 505/1/505 460/1/460
+f 505/1/505 501/1/501 460/1/460
+f 505/1/505 504/1/504 501/1/501
+f 503/1/503 501/1/501 504/1/504
+f 503/1/503 504/1/504 507/1/507
+f 507/1/507 498/1/498 503/1/503
+f 507/1/507 510/1/510 498/1/498
+f 510/1/510 515/1/515 498/1/498
+f 510/1/510 514/1/514 515/1/515
+f 513/1/513 514/1/514 510/1/510
+f 512/1/512 513/1/513 510/1/510
+f 512/1/512 510/1/510 511/1/511
+f 511/1/511 509/1/509 512/1/512
+f 512/1/512 509/1/509 516/1/516
+f 512/1/512 516/1/516 517/1/517
+f 517/1/517 516/1/516 520/1/520
+f 517/1/517 520/1/520 521/1/521
+f 521/1/521 518/1/518 517/1/517
+f 517/1/517 518/1/518 513/1/513
+f 518/1/518 519/1/519 513/1/513
+f 518/1/518 2016/1/2016 519/1/519
+f 2016/1/2016 2018/1/2018 519/1/519
+f 519/1/519 2018/1/2018 2022/1/2022
+f 519/1/519 2022/1/2022 514/1/514
+f 514/1/514 2022/1/2022 2025/1/2025
+f 2022/1/2022 2024/1/2024 2025/1/2025
+f 2022/1/2022 2023/1/2023 2024/1/2024
+f 2023/1/2023 2391/1/2391 2024/1/2024
+f 2024/1/2024 2391/1/2391 2386/1/2386
+f 2024/1/2024 2386/1/2386 2388/1/2388
+f 2024/1/2024 2388/1/2388 2027/1/2027
+f 2027/1/2027 2388/1/2388 2416/1/2416
+f 2388/1/2388 2385/1/2385 2416/1/2416
+f 2416/1/2416 2385/1/2385 2382/1/2382
+f 2416/1/2416 2382/1/2382 2417/1/2417
+f 2417/1/2417 2382/1/2382 2375/1/2375
+f 2382/1/2382 2374/1/2374 2375/1/2375
+f 2375/1/2375 2374/1/2374 2371/1/2371
+f 2375/1/2375 2371/1/2371 2370/1/2370
+f 2418/1/2418 2375/1/2375 2370/1/2370
+f 2370/1/2370 2371/1/2371 2368/1/2368
+f 2371/1/2371 2369/1/2369 2368/1/2368
+f 2368/1/2368 2369/1/2369 2367/1/2367
+f 2371/1/2371 2373/1/2373 2369/1/2369
+f 2373/1/2373 455/1/455 2369/1/2369
+f 2373/1/2373 454/1/454 455/1/455
+f 2376/1/2376 454/1/454 2373/1/2373
+f 2374/1/2374 2376/1/2376 2373/1/2373
+f 2378/1/2378 2376/1/2376 2374/1/2374
+f 2378/1/2378 2379/1/2379 2376/1/2376
+f 2379/1/2379 2377/1/2377 2376/1/2376
+f 2380/1/2380 2377/1/2377 2379/1/2379
+f 2381/1/2381 2380/1/2380 2379/1/2379
+f 2384/1/2384 2380/1/2380 2381/1/2381
+f 2383/1/2383 2384/1/2384 2381/1/2381
+f 2383/1/2383 2381/1/2381 2385/1/2385
+f 2387/1/2387 2384/1/2384 2383/1/2383
+f 2386/1/2386 2387/1/2387 2383/1/2383
+f 2387/1/2387 2389/1/2389 2384/1/2384
+f 2389/1/2389 2390/1/2390 2384/1/2384
+f 2389/1/2389 2415/1/2415 2390/1/2390
+f 2415/1/2415 555/1/555 2390/1/2390
+f 2390/1/2390 555/1/555 556/1/556
+f 2390/1/2390 556/1/556 2380/1/2380
+f 555/1/555 448/1/448 556/1/556
+f 556/1/556 448/1/448 449/1/449
+f 556/1/556 449/1/449 2377/1/2377
+f 2377/1/2377 449/1/449 451/1/451
+f 2377/1/2377 451/1/451 454/1/454
+f 448/1/448 445/1/445 449/1/449
+f 449/1/449 445/1/445 447/1/447
+f 445/1/445 446/1/446 447/1/447
+f 445/1/445 442/1/442 446/1/446
+f 442/1/442 528/1/528 446/1/446
+f 446/1/446 528/1/528 547/1/547
+f 446/1/446 547/1/547 450/1/450
+f 450/1/450 547/1/547 548/1/548
+f 450/1/450 548/1/548 459/1/459
+f 548/1/548 506/1/506 459/1/459
+f 548/1/548 509/1/509 506/1/506
+f 506/1/506 509/1/509 504/1/504
+f 508/1/508 504/1/504 509/1/509
+f 522/1/522 509/1/509 548/1/548
+f 547/1/547 522/1/522 548/1/548
+f 528/1/528 522/1/522 547/1/547
+f 528/1/528 524/1/524 522/1/522
+f 524/1/524 520/1/520 522/1/522
+f 524/1/524 523/1/523 520/1/520
+f 441/1/441 523/1/523 524/1/524
+f 527/1/527 441/1/441 524/1/524
+f 442/1/442 441/1/441 527/1/527
+f 438/1/438 441/1/441 442/1/442
+f 444/1/444 438/1/438 442/1/442
+f 443/1/443 438/1/438 444/1/444
+f 553/1/553 443/1/443 444/1/444
+f 553/1/553 444/1/444 448/1/448
+f 554/1/554 553/1/553 448/1/448
+f 1479/1/1479 553/1/553 554/1/554
+f 2413/1/2413 1479/1/1479 554/1/554
+f 2413/1/2413 554/1/554 2414/1/2414
+f 2400/1/2400 2413/1/2413 2414/1/2414
+f 2400/1/2400 2414/1/2414 2395/1/2395
+f 2396/1/2396 2400/1/2400 2395/1/2395
+f 2396/1/2396 2395/1/2395 2393/1/2393
+f 2394/1/2394 2396/1/2396 2393/1/2393
+f 2394/1/2394 2393/1/2393 2391/1/2391
+f 2391/1/2391 2393/1/2393 2392/1/2392
+f 2391/1/2391 2392/1/2392 2387/1/2387
+f 2397/1/2397 2396/1/2396 2394/1/2394
+f 2023/1/2023 2397/1/2397 2394/1/2394
+f 2020/1/2020 2397/1/2397 2023/1/2023
+f 2018/1/2018 2020/1/2020 2023/1/2023
+f 2017/1/2017 2020/1/2020 2018/1/2018
+f 2017/1/2017 2019/1/2019 2020/1/2020
+f 2019/1/2019 2404/1/2404 2020/1/2020
+f 2020/1/2020 2404/1/2404 2398/1/2398
+f 2404/1/2404 2401/1/2401 2398/1/2398
+f 2398/1/2398 2401/1/2401 2399/1/2399
+f 2398/1/2398 2399/1/2399 2397/1/2397
+f 2401/1/2401 2402/1/2402 2399/1/2399
+f 2402/1/2402 2403/1/2403 2399/1/2399
+f 2399/1/2399 2403/1/2403 2400/1/2400
+f 2402/1/2402 2412/1/2412 2403/1/2403
+f 2403/1/2403 2412/1/2412 2413/1/2413
+f 2402/1/2402 2411/1/2411 2412/1/2412
+f 2411/1/2411 561/1/561 2412/1/2412
+f 2412/1/2412 561/1/561 1479/1/1479
+f 628/1/628 561/1/561 2411/1/2411
+f 2408/1/2408 628/1/628 2411/1/2411
+f 627/1/627 628/1/628 2408/1/2408
+f 2407/1/2407 627/1/627 2408/1/2408
+f 2407/1/2407 2408/1/2408 2405/1/2405
+f 2406/1/2406 2407/1/2407 2405/1/2405
+f 2406/1/2406 2405/1/2405 2404/1/2404
+f 2409/1/2409 2407/1/2407 2406/1/2406
+f 2019/1/2019 2409/1/2409 2406/1/2406
+f 2021/1/2021 2409/1/2409 2019/1/2019
+f 2021/1/2021 2410/1/2410 2409/1/2409
+f 2410/1/2410 626/1/626 2409/1/2409
+f 2410/1/2410 622/1/622 626/1/626
+f 622/1/622 621/1/621 626/1/626
+f 621/1/621 624/1/624 626/1/626
+f 626/1/626 624/1/624 627/1/627
+f 624/1/624 625/1/625 627/1/627
+f 624/1/624 623/1/623 625/1/625
+f 623/1/623 558/1/558 625/1/625
+f 625/1/625 558/1/558 559/1/559
+f 625/1/625 559/1/559 628/1/628
+f 558/1/558 557/1/557 559/1/559
+f 559/1/559 557/1/557 561/1/561
+f 561/1/561 557/1/557 553/1/553
+f 558/1/558 560/1/560 557/1/557
+f 560/1/560 545/1/545 557/1/557
+f 557/1/557 545/1/545 443/1/443
+f 545/1/545 439/1/439 443/1/443
+f 443/1/443 439/1/439 436/1/436
+f 439/1/439 440/1/440 436/1/436
+f 436/1/436 440/1/440 437/1/437
+f 436/1/436 437/1/437 438/1/438
+f 440/1/440 542/1/542 437/1/437
+f 542/1/542 530/1/530 437/1/437
+f 437/1/437 530/1/530 526/1/526
+f 441/1/441 437/1/437 526/1/526
+f 529/1/529 526/1/526 530/1/530
+f 529/1/529 530/1/530 532/1/532
+f 532/1/532 531/1/531 529/1/529
+f 529/1/529 531/1/531 518/1/518
+f 529/1/529 518/1/518 525/1/525
+f 533/1/533 531/1/531 532/1/532
+f 535/1/535 531/1/531 533/1/533
+f 533/1/533 534/1/534 535/1/535
+f 535/1/535 534/1/534 536/1/536
+f 536/1/536 2002/1/2002 535/1/535
+f 2009/1/2009 2002/1/2002 536/1/536
+f 536/1/536 537/1/537 2009/1/2009
+f 2009/1/2009 537/1/537 2005/1/2005
+f 2005/1/2005 537/1/537 2006/1/2006
+f 2005/1/2005 2006/1/2006 2004/1/2004
+f 2004/1/2004 2000/1/2000 2005/1/2005
+f 2005/1/2005 2000/1/2000 2002/1/2002
+f 2000/1/2000 1999/1/1999 2002/1/2002
+f 2002/1/2002 1999/1/1999 2003/1/2003
+f 2002/1/2002 2003/1/2003 531/1/531
+f 531/1/531 2003/1/2003 2016/1/2016
+f 2003/1/2003 2017/1/2017 2016/1/2016
+f 2003/1/2003 2001/1/2001 2017/1/2017
+f 2001/1/2001 2021/1/2021 2017/1/2017
+f 2001/1/2001 616/1/616 2021/1/2021
+f 616/1/616 620/1/620 2021/1/2021
+f 616/1/616 617/1/617 620/1/620
+f 617/1/617 619/1/619 620/1/620
+f 620/1/620 619/1/619 622/1/622
+f 617/1/617 618/1/618 619/1/619
+f 618/1/618 572/1/572 619/1/619
+f 619/1/619 572/1/572 621/1/621
+f 572/1/572 570/1/570 621/1/621
+f 621/1/621 570/1/570 623/1/623
+f 572/1/572 569/1/569 570/1/570
+f 569/1/569 563/1/563 570/1/570
+f 570/1/570 563/1/563 558/1/558
+f 569/1/569 568/1/568 563/1/563
+f 568/1/568 562/1/562 563/1/563
+f 563/1/563 562/1/562 560/1/560
+f 562/1/562 546/1/546 560/1/560
+f 562/1/562 565/1/565 546/1/546
+f 565/1/565 564/1/564 546/1/546
+f 546/1/546 564/1/564 543/1/543
+f 546/1/546 543/1/543 545/1/545
+f 564/1/564 544/1/544 543/1/543
+f 543/1/543 544/1/544 540/1/540
+f 543/1/543 540/1/540 439/1/439
+f 439/1/439 540/1/540 538/1/538
+f 540/1/540 541/1/541 538/1/538
+f 541/1/541 537/1/537 538/1/538
+f 538/1/538 537/1/537 539/1/539
+f 538/1/538 539/1/539 440/1/440
+f 539/1/539 537/1/537 534/1/534
+f 539/1/539 534/1/534 542/1/542
+f 544/1/544 541/1/541 540/1/540
+f 544/1/544 2011/1/2011 541/1/541
+f 2011/1/2011 2007/1/2007 541/1/541
+f 541/1/541 2007/1/2007 2006/1/2006
+f 2011/1/2011 2010/1/2010 2007/1/2007
+f 2007/1/2007 2010/1/2010 2008/1/2008
+f 2004/1/2004 2007/1/2007 2008/1/2008
+f 2008/1/2008 1996/1/1996 2004/1/2004
+f 2015/1/2015 1996/1/1996 2008/1/2008
+f 1991/1/1991 1996/1/1996 2015/1/2015
+f 2015/1/2015 1992/1/1992 1991/1/1991
+f 1991/1/1991 1992/1/1992 1989/1/1989
+f 1991/1/1991 1989/1/1989 1993/1/1993
+f 1993/1/1993 1994/1/1994 1991/1/1991
+f 1988/1/1988 1994/1/1994 1993/1/1993
+f 1990/1/1990 1994/1/1994 1988/1/1988
+f 1988/1/1988 1986/1/1986 1990/1/1990
+f 1990/1/1990 1986/1/1986 1987/1/1987
+f 1987/1/1987 1957/1/1957 1990/1/1990
+f 1964/1/1964 1957/1/1957 1987/1/1987
+f 1987/1/1987 1965/1/1965 1964/1/1964
+f 1964/1/1964 1965/1/1965 1960/1/1960
+f 1960/1/1960 1965/1/1965 1961/1/1961
+f 1960/1/1960 1961/1/1961 1959/1/1959
+f 1959/1/1959 1955/1/1955 1960/1/1960
+f 1960/1/1960 1955/1/1955 1957/1/1957
+f 1955/1/1955 1956/1/1956 1957/1/1957
+f 1957/1/1957 1956/1/1956 1958/1/1958
+f 1957/1/1957 1958/1/1958 1994/1/1994
+f 1994/1/1994 1958/1/1958 1995/1/1995
+f 1994/1/1994 1995/1/1995 1996/1/1996
+f 1996/1/1996 1995/1/1995 1997/1/1997
+f 1996/1/1996 1997/1/1997 2000/1/2000
+f 1995/1/1995 608/1/608 1997/1/1997
+f 1997/1/1997 608/1/608 1998/1/1998
+f 1997/1/1997 1998/1/1998 1999/1/1999
+f 1999/1/1999 1998/1/1998 2001/1/2001
+f 608/1/608 612/1/612 1998/1/1998
+f 1998/1/1998 612/1/612 616/1/616
+f 612/1/612 613/1/613 616/1/616
+f 612/1/612 611/1/611 613/1/613
+f 611/1/611 614/1/614 613/1/613
+f 613/1/613 614/1/614 615/1/615
+f 613/1/613 615/1/615 618/1/618
+f 615/1/615 573/1/573 618/1/618
+f 574/1/574 573/1/573 615/1/615
+f 574/1/574 571/1/571 573/1/573
+f 573/1/573 571/1/571 569/1/569
+f 574/1/574 575/1/575 571/1/571
+f 575/1/575 566/1/566 571/1/571
+f 571/1/571 566/1/566 568/1/568
+f 577/1/577 566/1/566 575/1/575
+f 576/1/576 577/1/577 575/1/575
+f 579/1/579 577/1/577 576/1/576
+f 581/1/581 579/1/579 576/1/576
+f 581/1/581 576/1/576 582/1/582
+f 609/1/609 581/1/581 582/1/582
+f 609/1/609 582/1/582 611/1/611
+f 610/1/610 609/1/609 611/1/611
+f 605/1/605 609/1/609 610/1/610
+f 608/1/608 605/1/605 610/1/610
+f 606/1/606 605/1/605 608/1/608
+f 606/1/606 604/1/604 605/1/605
+f 604/1/604 601/1/601 605/1/605
+f 605/1/605 601/1/601 603/1/603
+f 601/1/601 602/1/602 603/1/603
+f 603/1/603 602/1/602 581/1/581
+f 602/1/602 583/1/583 581/1/581
+f 598/1/598 583/1/583 602/1/602
+f 598/1/598 590/1/590 583/1/583
+f 590/1/590 584/1/584 583/1/583
+f 583/1/583 584/1/584 580/1/580
+f 583/1/583 580/1/580 579/1/579
+f 584/1/584 585/1/585 580/1/580
+f 580/1/580 585/1/585 578/1/578
+f 580/1/580 578/1/578 577/1/577
+f 585/1/585 567/1/567 578/1/578
+f 578/1/578 567/1/567 566/1/566
+f 566/1/566 567/1/567 562/1/562
+f 585/1/585 587/1/587 567/1/567
+f 587/1/587 586/1/586 567/1/567
+f 567/1/567 586/1/586 565/1/565
+f 586/1/586 2014/1/2014 565/1/565
+f 586/1/586 1983/1/1983 2014/1/2014
+f 1983/1/1983 1985/1/1985 2014/1/2014
+f 2014/1/2014 1985/1/1985 2013/1/2013
+f 2014/1/2014 2013/1/2013 564/1/564
+f 564/1/564 2013/1/2013 2012/1/2012
+f 2012/1/2012 2013/1/2013 2011/1/2011
+f 2013/1/2013 1985/1/1985 1992/1/1992
+f 2013/1/2013 1992/1/1992 2010/1/2010
+f 1983/1/1983 1981/1/1981 1985/1/1985
+f 1981/1/1981 1984/1/1984 1985/1/1985
+f 1984/1/1984 1989/1/1989 1985/1/1985
+f 1984/1/1984 1986/1/1986 1989/1/1989
+f 1982/1/1982 1986/1/1986 1984/1/1984
+f 1982/1/1982 1965/1/1965 1986/1/1986
+f 1980/1/1980 1965/1/1965 1982/1/1982
+f 1980/1/1980 1982/1/1982 1981/1/1981
+f 1979/1/1979 1980/1/1980 1981/1/1981
+f 1979/1/1979 1978/1/1978 1980/1/1980
+f 1978/1/1978 1966/1/1966 1980/1/1980
+f 1973/1/1973 1966/1/1966 1978/1/1978
+f 1977/1/1977 1973/1/1973 1978/1/1978
+f 1974/1/1974 1973/1/1973 1977/1/1977
+f 1460/1/1460 1974/1/1974 1977/1/1977
+f 1460/1/1460 1977/1/1977 1474/1/1474
+f 1458/1/1458 1460/1/1460 1474/1/1474
+f 1458/1/1458 1474/1/1474 587/1/587
+f 593/1/593 1458/1/1458 587/1/587
+f 593/1/593 587/1/587 588/1/588
+f 592/1/592 593/1/593 588/1/588
+f 592/1/592 588/1/588 589/1/589
+f 591/1/591 592/1/592 589/1/589
+f 591/1/591 589/1/589 590/1/590
+f 597/1/597 591/1/591 590/1/590
+f 596/1/596 591/1/591 597/1/597
+f 599/1/599 596/1/596 597/1/597
+f 599/1/599 597/1/597 600/1/600
+f 604/1/604 599/1/599 600/1/600
+f 607/1/607 599/1/599 604/1/604
+f 607/1/607 633/1/633 599/1/599
+f 607/1/607 632/1/632 633/1/633
+f 632/1/632 1472/1/1472 633/1/633
+f 633/1/633 1472/1/1472 596/1/596
+f 1472/1/1472 1471/1/1471 596/1/596
+f 1471/1/1471 594/1/594 596/1/596
+f 1471/1/1471 595/1/595 594/1/594
+f 594/1/594 595/1/595 592/1/592
+f 1471/1/1471 1473/1/1473 595/1/595
+f 1473/1/1473 593/1/593 595/1/595
+f 1473/1/1473 1457/1/1457 593/1/593
+f 1462/1/1462 1457/1/1457 1473/1/1473
+f 1469/1/1469 1462/1/1462 1473/1/1473
+f 1463/1/1463 1462/1/1462 1469/1/1469
+f 1468/1/1468 1463/1/1463 1469/1/1469
+f 1468/1/1468 1469/1/1469 1470/1/1470
+f 635/1/635 1468/1/1468 1470/1/1470
+f 635/1/635 1470/1/1470 632/1/632
+f 631/1/631 635/1/635 632/1/632
+f 631/1/631 634/1/634 635/1/635
+f 636/1/636 634/1/634 631/1/631
+f 630/1/630 636/1/636 631/1/631
+f 630/1/630 631/1/631 629/1/629
+f 1956/1/1956 630/1/630 629/1/629
+f 1954/1/1954 630/1/630 1956/1/1956
+f 1954/1/1954 637/1/637 630/1/630
+f 1952/1/1952 637/1/637 1954/1/1954
+f 1953/1/1953 1952/1/1952 1954/1/1954
+f 1953/1/1953 1954/1/1954 1955/1/1955
+f 1951/1/1951 1952/1/1952 1953/1/1953
+f 2426/1/2426 1951/1/1951 1953/1/1953
+f 2426/1/2426 1953/1/1953 1969/1/1969
+f 1969/1/1969 1970/1/1970 2426/1/2426
+f 2426/1/2426 1970/1/1970 2423/1/2423
+f 2426/1/2426 2423/1/2423 2427/1/2427
+f 2427/1/2427 2423/1/2423 2428/1/2428
+f 2428/1/2428 1951/1/1951 2427/1/2427
+f 2429/1/2429 1951/1/1951 2428/1/2428
+f 2428/1/2428 2425/1/2425 2429/1/2429
+f 2429/1/2429 2425/1/2425 1450/1/1450
+f 1450/1/1450 1446/1/1446 2429/1/2429
+f 1449/1/1449 1446/1/1446 1450/1/1450
+f 1450/1/1450 685/1/685 1449/1/1449
+f 1449/1/1449 685/1/685 688/1/688
+f 688/1/688 685/1/685 687/1/687
+f 688/1/688 687/1/687 689/1/689
+f 689/1/689 1445/1/1445 688/1/688
+f 688/1/688 1445/1/1445 1446/1/1446
+f 1445/1/1445 1447/1/1447 1446/1/1446
+f 1446/1/1446 1447/1/1447 1451/1/1451
+f 1446/1/1446 1451/1/1451 1951/1/1951
+f 1447/1/1447 1919/1/1919 1451/1/1451
+f 1451/1/1451 1919/1/1919 644/1/644
+f 1451/1/1451 644/1/644 1952/1/1952
+f 1919/1/1919 650/1/650 644/1/644
+f 644/1/644 650/1/650 643/1/643
+f 644/1/644 643/1/643 638/1/638
+f 644/1/644 638/1/638 637/1/637
+f 637/1/637 638/1/638 636/1/636
+f 638/1/638 639/1/639 636/1/636
+f 636/1/636 639/1/639 640/1/640
+f 639/1/639 1466/1/1466 640/1/640
+f 640/1/640 1466/1/1466 1467/1/1467
+f 640/1/640 1467/1/1467 634/1/634
+f 634/1/634 1467/1/1467 1465/1/1465
+f 634/1/634 1465/1/1465 1468/1/1468
+f 1467/1/1467 1464/1/1464 1465/1/1465
+f 1464/1/1464 1463/1/1463 1465/1/1465
+f 1464/1/1464 1461/1/1461 1463/1/1463
+f 1464/1/1464 661/1/661 1461/1/1461
+f 661/1/661 660/1/660 1461/1/1461
+f 1461/1/1461 660/1/660 1459/1/1459
+f 1461/1/1461 1459/1/1459 1462/1/1462
+f 660/1/660 667/1/667 1459/1/1459
+f 1459/1/1459 667/1/667 1457/1/1457
+f 1457/1/1457 667/1/667 1458/1/1458
+f 660/1/660 663/1/663 667/1/667
+f 663/1/663 666/1/666 667/1/667
+f 667/1/667 666/1/666 1460/1/1460
+f 663/1/663 665/1/665 666/1/666
+f 665/1/665 1975/1/1975 666/1/666
+f 666/1/666 1975/1/1975 1974/1/1974
+f 1975/1/1975 1971/1/1971 1974/1/1974
+f 1974/1/1974 1971/1/1971 1972/1/1972
+f 1972/1/1972 1971/1/1971 1967/1/1967
+f 1972/1/1972 1967/1/1967 1973/1/1973
+f 1971/1/1971 1968/1/1968 1967/1/1967
+f 1967/1/1967 1968/1/1968 1962/1/1962
+f 1967/1/1967 1962/1/1962 1966/1/1966
+f 1966/1/1966 1962/1/1962 1961/1/1961
+f 1962/1/1962 1968/1/1968 1963/1/1963
+f 1959/1/1959 1962/1/1962 1963/1/1963
+f 1963/1/1963 1953/1/1953 1959/1/1959
+f 1963/1/1963 1968/1/1968 1969/1/1969
+f 1971/1/1971 1970/1/1970 1968/1/1968
+f 1971/1/1971 1976/1/1976 1970/1/1970
+f 1975/1/1975 1976/1/1976 1971/1/1971
+f 2420/1/2420 1976/1/1976 1975/1/1975
+f 2420/1/2420 2421/1/2421 1976/1/1976
+f 2421/1/2421 2422/1/2422 1976/1/1976
+f 2422/1/2422 2423/1/2423 1976/1/1976
+f 2422/1/2422 2425/1/2425 2423/1/2423
+f 2424/1/2424 2425/1/2425 2422/1/2422
+f 2424/1/2424 685/1/685 2425/1/2425
+f 684/1/684 685/1/685 2424/1/2424
+f 684/1/684 2424/1/2424 2421/1/2421
+f 675/1/675 684/1/684 2421/1/2421
+f 675/1/675 680/1/680 684/1/684
+f 680/1/680 683/1/683 684/1/684
+f 679/1/679 683/1/683 680/1/680
+f 674/1/674 679/1/679 680/1/680
+f 677/1/677 679/1/679 674/1/674
+f 676/1/676 677/1/677 674/1/674
+f 676/1/676 674/1/674 670/1/670
+f 669/1/669 676/1/676 670/1/670
+f 669/1/669 670/1/670 664/1/664
+f 671/1/671 669/1/669 664/1/664
+f 671/1/671 664/1/664 668/1/668
+f 672/1/672 671/1/671 668/1/668
+f 672/1/672 668/1/668 673/1/673
+f 1475/1/1475 672/1/672 673/1/673
+f 1475/1/1475 673/1/673 652/1/652
+f 651/1/651 1475/1/1475 652/1/652
+f 651/1/651 652/1/652 647/1/647
+f 648/1/648 651/1/651 647/1/647
+f 648/1/648 647/1/647 642/1/642
+f 643/1/643 648/1/648 642/1/642
+f 643/1/643 649/1/649 648/1/648
+f 642/1/642 647/1/647 645/1/645
+f 642/1/642 645/1/645 641/1/641
+f 638/1/638 642/1/642 641/1/641
+f 641/1/641 645/1/645 646/1/646
+f 641/1/641 646/1/646 639/1/639
+f 645/1/645 653/1/653 646/1/646
+f 653/1/653 655/1/655 646/1/646
+f 646/1/646 655/1/655 659/1/659
+f 646/1/646 659/1/659 1466/1/1466
+f 1466/1/1466 659/1/659 1464/1/1464
+f 655/1/655 658/1/658 659/1/659
+f 659/1/659 658/1/658 661/1/661
+f 655/1/655 654/1/654 658/1/658
+f 654/1/654 657/1/657 658/1/658
+f 658/1/658 657/1/657 660/1/660
+f 654/1/654 662/1/662 657/1/657
+f 662/1/662 663/1/663 657/1/657
+f 662/1/662 664/1/664 663/1/663
+f 656/1/656 662/1/662 654/1/654
+f 653/1/653 656/1/656 654/1/654
+f 652/1/652 656/1/656 653/1/653
+f 673/1/673 662/1/662 656/1/656
+f 653/1/653 654/1/654 655/1/655
+f 647/1/647 653/1/653 645/1/645
+f 649/1/649 651/1/651 648/1/648
+f 649/1/649 1477/1/1477 651/1/651
+f 1478/1/1478 1477/1/1477 649/1/649
+f 650/1/650 1478/1/1478 649/1/649
+f 650/1/650 1916/1/1916 1478/1/1478
+f 1916/1/1916 1915/1/1915 1478/1/1478
+f 1916/1/1916 1909/1/1909 1915/1/1915
+f 1909/1/1909 1910/1/1910 1915/1/1915
+f 1915/1/1915 1910/1/1910 1477/1/1477
+f 1910/1/1910 1476/1/1476 1477/1/1477
+f 1477/1/1477 1476/1/1476 1475/1/1475
+f 1910/1/1910 1912/1/1912 1476/1/1476
+f 1476/1/1476 1912/1/1912 672/1/672
+f 1910/1/1910 1908/1/1908 1912/1/1912
+f 1908/1/1908 671/1/671 1912/1/1912
+f 1908/1/1908 1911/1/1911 671/1/671
+f 1905/1/1905 1911/1/1911 1908/1/1908
+f 1906/1/1906 1905/1/1905 1908/1/1908
+f 1901/1/1901 1905/1/1905 1906/1/1906
+f 1907/1/1907 1901/1/1901 1906/1/1906
+f 1907/1/1907 1906/1/1906 1909/1/1909
+f 1917/1/1917 1907/1/1907 1909/1/1909
+f 1922/1/1922 1907/1/1907 1917/1/1917
+f 1918/1/1918 1922/1/1922 1917/1/1917
+f 1918/1/1918 1917/1/1917 1916/1/1916
+f 1921/1/1921 1922/1/1922 1918/1/1918
+f 1920/1/1920 1921/1/1921 1918/1/1918
+f 1920/1/1920 1918/1/1918 1919/1/1919
+f 1923/1/1923 1921/1/1921 1920/1/1920
+f 1448/1/1448 1923/1/1923 1920/1/1920
+f 1448/1/1448 1920/1/1920 1447/1/1447
+f 1452/1/1452 1923/1/1923 1448/1/1448
+f 1443/1/1443 1452/1/1452 1448/1/1448
+f 1443/1/1443 1448/1/1448 1445/1/1445
+f 1437/1/1437 1452/1/1452 1443/1/1443
+f 1442/1/1442 1437/1/1437 1443/1/1443
+f 1442/1/1442 1443/1/1443 694/1/694
+f 694/1/694 693/1/693 1442/1/1442
+f 1442/1/1442 693/1/693 696/1/696
+f 1442/1/1442 696/1/696 1441/1/1441
+f 1441/1/1441 696/1/696 1440/1/1440
+f 1440/1/1440 1437/1/1437 1441/1/1441
+f 1438/1/1438 1437/1/1437 1440/1/1440
+f 1440/1/1440 1439/1/1439 1438/1/1438
+f 1438/1/1438 1439/1/1439 1436/1/1436
+f 1436/1/1436 1433/1/1433 1438/1/1438
+f 1435/1/1435 1433/1/1433 1436/1/1436
+f 1436/1/1436 720/1/720 1435/1/1435
+f 1435/1/1435 720/1/720 724/1/724
+f 724/1/724 720/1/720 721/1/721
+f 724/1/724 721/1/721 722/1/722
+f 722/1/722 726/1/726 724/1/724
+f 724/1/724 726/1/726 1433/1/1433
+f 726/1/726 1432/1/1432 1433/1/1433
+f 1433/1/1433 1432/1/1432 1434/1/1434
+f 1433/1/1433 1434/1/1434 1437/1/1437
+f 1432/1/1432 1925/1/1925 1434/1/1434
+f 1434/1/1434 1925/1/1925 1884/1/1884
+f 1434/1/1434 1884/1/1884 1452/1/1452
+f 1925/1/1925 1877/1/1877 1884/1/1884
+f 1884/1/1884 1877/1/1877 1879/1/1879
+f 1884/1/1884 1879/1/1879 1883/1/1883
+f 1884/1/1884 1883/1/1883 1923/1/1923
+f 1923/1/1923 1883/1/1883 1924/1/1924
+f 1883/1/1883 1889/1/1889 1924/1/1924
+f 1924/1/1924 1889/1/1889 1898/1/1898
+f 1924/1/1924 1898/1/1898 1921/1/1921
+f 1889/1/1889 1892/1/1892 1898/1/1898
+f 1898/1/1898 1892/1/1892 1899/1/1899
+f 1898/1/1898 1899/1/1899 1922/1/1922
+f 1922/1/1922 1899/1/1899 1902/1/1902
+f 1899/1/1899 1897/1/1897 1902/1/1902
+f 1897/1/1897 1901/1/1901 1902/1/1902
+f 1897/1/1897 1900/1/1900 1901/1/1901
+f 1897/1/1897 1896/1/1896 1900/1/1900
+f 1896/1/1896 1903/1/1903 1900/1/1900
+f 1900/1/1900 1903/1/1903 1904/1/1904
+f 1900/1/1900 1904/1/1904 1905/1/1905
+f 1903/1/1903 1456/1/1456 1904/1/1904
+f 1904/1/1904 1456/1/1456 1911/1/1911
+f 1911/1/1911 1456/1/1456 669/1/669
+f 1903/1/1903 1453/1/1453 1456/1/1456
+f 1453/1/1453 678/1/678 1456/1/1456
+f 1456/1/1456 678/1/678 676/1/676
+f 1453/1/1453 701/1/701 678/1/678
+f 701/1/701 697/1/697 678/1/678
+f 678/1/678 697/1/697 677/1/677
+f 697/1/697 692/1/692 677/1/677
+f 677/1/677 692/1/692 681/1/681
+f 681/1/681 692/1/692 682/1/682
+f 681/1/681 682/1/682 679/1/679
+f 692/1/692 690/1/690 682/1/682
+f 682/1/682 690/1/690 686/1/686
+f 682/1/682 686/1/686 683/1/683
+f 683/1/683 686/1/686 687/1/687
+f 686/1/686 690/1/690 691/1/691
+f 689/1/689 686/1/686 691/1/691
+f 691/1/691 1443/1/1443 689/1/689
+f 691/1/691 690/1/690 694/1/694
+f 692/1/692 693/1/693 690/1/690
+f 692/1/692 695/1/695 693/1/693
+f 697/1/697 695/1/695 692/1/692
+f 700/1/700 695/1/695 697/1/697
+f 700/1/700 698/1/698 695/1/695
+f 698/1/698 699/1/699 695/1/695
+f 699/1/699 696/1/696 695/1/695
+f 699/1/699 1439/1/1439 696/1/696
+f 1444/1/1444 1439/1/1439 699/1/699
+f 1444/1/1444 720/1/720 1439/1/1439
+f 705/1/705 720/1/720 1444/1/1444
+f 705/1/705 1444/1/1444 698/1/698
+f 702/1/702 705/1/705 698/1/698
+f 702/1/702 704/1/704 705/1/705
+f 704/1/704 717/1/717 705/1/705
+f 711/1/711 717/1/717 704/1/704
+f 706/1/706 711/1/711 704/1/704
+f 710/1/710 711/1/711 706/1/706
+f 707/1/707 710/1/710 706/1/706
+f 707/1/707 706/1/706 703/1/703
+f 708/1/708 707/1/707 703/1/703
+f 708/1/708 703/1/703 709/1/709
+f 1863/1/1863 708/1/708 709/1/709
+f 1863/1/1863 709/1/709 1454/1/1454
+f 1871/1/1871 1863/1/1863 1454/1/1454
+f 1871/1/1871 1454/1/1454 1914/1/1914
+f 1872/1/1872 1871/1/1871 1914/1/1914
+f 1872/1/1872 1914/1/1914 1881/1/1881
+f 1875/1/1875 1872/1/1872 1881/1/1881
+f 1875/1/1875 1881/1/1881 1880/1/1880
+f 1878/1/1878 1875/1/1875 1880/1/1880
+f 1878/1/1878 1880/1/1880 1882/1/1882
+f 1879/1/1879 1878/1/1878 1882/1/1882
+f 1879/1/1879 1874/1/1874 1878/1/1878
+f 1882/1/1882 1880/1/1880 1885/1/1885
+f 1882/1/1882 1885/1/1885 1886/1/1886
+f 1883/1/1883 1882/1/1882 1886/1/1886
+f 1886/1/1886 1885/1/1885 1888/1/1888
+f 1886/1/1886 1888/1/1888 1889/1/1889
+f 1885/1/1885 1887/1/1887 1888/1/1888
+f 1887/1/1887 1890/1/1890 1888/1/1888
+f 1888/1/1888 1890/1/1890 1891/1/1891
+f 1888/1/1888 1891/1/1891 1892/1/1892
+f 1892/1/1892 1891/1/1891 1897/1/1897
+f 1890/1/1890 1895/1/1895 1891/1/1891
+f 1891/1/1891 1895/1/1895 1896/1/1896
+f 1890/1/1890 1894/1/1894 1895/1/1895
+f 1894/1/1894 1913/1/1913 1895/1/1895
+f 1895/1/1895 1913/1/1913 1903/1/1903
+f 1894/1/1894 1455/1/1455 1913/1/1913
+f 1455/1/1455 1453/1/1453 1913/1/1913
+f 1455/1/1455 709/1/709 1453/1/1453
+f 1893/1/1893 1455/1/1455 1894/1/1894
+f 1887/1/1887 1893/1/1893 1894/1/1894
+f 1881/1/1881 1893/1/1893 1887/1/1887
+f 1914/1/1914 1455/1/1455 1893/1/1893
+f 1887/1/1887 1894/1/1894 1890/1/1890
+f 1880/1/1880 1887/1/1887 1885/1/1885
+f 1874/1/1874 1875/1/1875 1878/1/1878
+f 1874/1/1874 1869/1/1869 1875/1/1875
+f 1873/1/1873 1869/1/1869 1874/1/1874
+f 1877/1/1877 1873/1/1873 1874/1/1874
+f 1877/1/1877 1876/1/1876 1873/1/1873
+f 1876/1/1876 1870/1/1870 1873/1/1873
+f 1876/1/1876 1867/1/1867 1870/1/1870
+f 1867/1/1867 1864/1/1864 1870/1/1870
+f 1870/1/1870 1864/1/1864 1869/1/1869
+f 1864/1/1864 1868/1/1868 1869/1/1869
+f 1869/1/1869 1868/1/1868 1872/1/1872
+f 1864/1/1864 1865/1/1865 1868/1/1868
+f 1868/1/1868 1865/1/1865 1871/1/1871
+f 1864/1/1864 1862/1/1862 1865/1/1865
+f 1862/1/1862 1863/1/1863 1865/1/1865
+f 1862/1/1862 773/1/773 1863/1/1863
+f 1859/1/1859 773/1/773 1862/1/1862
+f 1861/1/1861 1859/1/1859 1862/1/1862
+f 1860/1/1860 1859/1/1859 1861/1/1861
+f 1866/1/1866 1860/1/1860 1861/1/1861
+f 1866/1/1866 1861/1/1861 1867/1/1867
+f 1929/1/1929 1866/1/1866 1867/1/1867
+f 1928/1/1928 1866/1/1866 1929/1/1929
+f 1927/1/1927 1928/1/1928 1929/1/1929
+f 1927/1/1927 1929/1/1929 1876/1/1876
+f 1930/1/1930 1928/1/1928 1927/1/1927
+f 1926/1/1926 1930/1/1930 1927/1/1927
+f 1926/1/1926 1927/1/1927 1925/1/1925
+f 1935/1/1935 1930/1/1930 1926/1/1926
+f 730/1/730 1935/1/1935 1926/1/1926
+f 730/1/730 1926/1/1926 1432/1/1432
+f 729/1/729 1935/1/1935 730/1/730
+f 725/1/725 729/1/729 730/1/730
+f 725/1/725 730/1/730 726/1/726
+f 728/1/728 729/1/729 725/1/725
+f 731/1/731 728/1/728 725/1/725
+f 731/1/731 725/1/725 727/1/727
+f 727/1/727 732/1/732 731/1/731
+f 731/1/731 732/1/732 734/1/734
+f 731/1/731 734/1/734 733/1/733
+f 733/1/733 734/1/734 737/1/737
+f 737/1/737 728/1/728 733/1/733
+f 735/1/735 728/1/728 737/1/737
+f 737/1/737 739/1/739 735/1/735
+f 735/1/735 739/1/739 738/1/738
+f 738/1/738 736/1/736 735/1/735
+f 1950/1/1950 736/1/736 738/1/738
+f 738/1/738 744/1/744 1950/1/1950
+f 1950/1/1950 744/1/744 751/1/751
+f 751/1/751 744/1/744 750/1/750
+f 751/1/751 750/1/750 1937/1/1937
+f 1937/1/1937 1827/1/1827 751/1/751
+f 751/1/751 1827/1/1827 736/1/736
+f 1827/1/1827 1829/1/1829 736/1/736
+f 736/1/736 1829/1/1829 1936/1/1936
+f 736/1/736 1936/1/1936 728/1/728
+f 1829/1/1829 1833/1/1833 1936/1/1936
+f 1936/1/1936 1833/1/1833 1844/1/1844
+f 1936/1/1936 1844/1/1844 729/1/729
+f 1833/1/1833 1832/1/1832 1844/1/1844
+f 1844/1/1844 1832/1/1832 1839/1/1839
+f 1844/1/1844 1839/1/1839 1845/1/1845
+f 1844/1/1844 1845/1/1845 1935/1/1935
+f 1839/1/1839 1843/1/1843 1845/1/1845
+f 1845/1/1845 1843/1/1843 1847/1/1847
+f 1845/1/1845 1847/1/1847 1850/1/1850
+f 1845/1/1845 1850/1/1850 1930/1/1930
+f 1930/1/1930 1850/1/1850 1934/1/1934
+f 1850/1/1850 1852/1/1852 1934/1/1934
+f 1934/1/1934 1852/1/1852 1932/1/1932
+f 1934/1/1934 1932/1/1932 1928/1/1928
+f 1928/1/1928 1932/1/1932 1931/1/1931
+f 1932/1/1932 1933/1/1933 1931/1/1931
+f 1933/1/1933 1860/1/1860 1931/1/1931
+f 1933/1/1933 1857/1/1857 1860/1/1860
+f 1933/1/1933 1858/1/1858 1857/1/1857
+f 1858/1/1858 770/1/770 1857/1/1857
+f 1857/1/1857 770/1/770 772/1/772
+f 1857/1/1857 772/1/772 1859/1/1859
+f 770/1/770 771/1/771 772/1/772
+f 772/1/772 771/1/771 773/1/773
+f 773/1/773 771/1/771 708/1/708
+f 770/1/770 766/1/766 771/1/771
+f 766/1/766 714/1/714 771/1/771
+f 771/1/771 714/1/714 707/1/707
+f 766/1/766 755/1/755 714/1/714
+f 755/1/755 715/1/715 714/1/714
+f 714/1/714 715/1/715 710/1/710
+f 715/1/715 712/1/712 710/1/710
+f 710/1/710 712/1/712 713/1/713
+f 713/1/713 712/1/712 716/1/716
+f 713/1/713 716/1/716 711/1/711
+f 712/1/712 718/1/718 716/1/716
+f 716/1/716 718/1/718 719/1/719
+f 716/1/716 719/1/719 717/1/717
+f 717/1/717 719/1/719 721/1/721
+f 719/1/719 718/1/718 723/1/723
+f 722/1/722 719/1/719 723/1/723
+f 723/1/723 725/1/725 722/1/722
+f 723/1/723 718/1/718 727/1/727
+f 712/1/712 732/1/732 718/1/718
+f 712/1/712 740/1/740 732/1/732
+f 715/1/715 740/1/740 712/1/712
+f 746/1/746 740/1/740 715/1/715
+f 746/1/746 743/1/743 740/1/740
+f 743/1/743 741/1/741 740/1/740
+f 741/1/741 734/1/734 740/1/740
+f 741/1/741 739/1/739 734/1/734
+f 742/1/742 739/1/739 741/1/741
+f 742/1/742 744/1/744 739/1/739
+f 745/1/745 744/1/744 742/1/742
+f 745/1/745 742/1/742 743/1/743
+f 747/1/747 745/1/745 743/1/743
+f 747/1/747 749/1/749 745/1/745
+f 749/1/749 748/1/748 745/1/745
+f 752/1/752 748/1/748 749/1/749
+f 754/1/754 752/1/752 749/1/749
+f 760/1/760 752/1/752 754/1/754
+f 758/1/758 760/1/760 754/1/754
+f 758/1/758 754/1/754 756/1/756
+f 757/1/757 758/1/758 756/1/756
+f 757/1/757 756/1/756 759/1/759
+f 763/1/763 757/1/757 759/1/759
+f 763/1/763 759/1/759 764/1/764
+f 767/1/767 763/1/763 764/1/764
+f 767/1/767 764/1/764 768/1/768
+f 1837/1/1837 767/1/767 768/1/768
+f 1837/1/1837 768/1/768 1842/1/1842
+f 1838/1/1838 1837/1/1837 1842/1/1842
+f 1838/1/1838 1842/1/1842 1841/1/1841
+f 1840/1/1840 1838/1/1838 1841/1/1841
+f 1840/1/1840 1841/1/1841 1843/1/1843
+f 1843/1/1843 1841/1/1841 1846/1/1846
+f 1841/1/1841 1848/1/1848 1846/1/1846
+f 1846/1/1846 1848/1/1848 1849/1/1849
+f 1847/1/1847 1846/1/1846 1849/1/1849
+f 1848/1/1848 1853/1/1853 1849/1/1849
+f 1849/1/1849 1853/1/1853 1851/1/1851
+f 1849/1/1849 1851/1/1851 1852/1/1852
+f 1852/1/1852 1851/1/1851 1933/1/1933
+f 1853/1/1853 1856/1/1856 1851/1/1851
+f 1851/1/1851 1856/1/1856 1858/1/1858
+f 1853/1/1853 1855/1/1855 1856/1/1856
+f 1855/1/1855 769/1/769 1856/1/1856
+f 1856/1/1856 769/1/769 770/1/770
+f 1855/1/1855 765/1/765 769/1/769
+f 765/1/765 766/1/766 769/1/769
+f 765/1/765 759/1/759 766/1/766
+f 1854/1/1854 765/1/765 1855/1/1855
+f 1848/1/1848 1854/1/1854 1855/1/1855
+f 1842/1/1842 1854/1/1854 1848/1/1848
+f 768/1/768 765/1/765 1854/1/1854
+f 1848/1/1848 1855/1/1855 1853/1/1853
+f 1835/1/1835 1838/1/1838 1840/1/1840
+f 1839/1/1839 1835/1/1835 1840/1/1840
+f 1835/1/1835 1836/1/1836 1838/1/1838
+f 1834/1/1834 1836/1/1836 1835/1/1835
+f 1832/1/1832 1834/1/1834 1835/1/1835
+f 1832/1/1832 1831/1/1831 1834/1/1834
+f 1831/1/1831 852/1/852 1834/1/1834
+f 1831/1/1831 851/1/851 852/1/852
+f 851/1/851 778/1/778 852/1/852
+f 852/1/852 778/1/778 1836/1/1836
+f 778/1/778 777/1/777 1836/1/1836
+f 1836/1/1836 777/1/777 1837/1/1837
+f 778/1/778 774/1/774 777/1/777
+f 777/1/777 774/1/774 767/1/767
+f 778/1/778 775/1/775 774/1/774
+f 775/1/775 763/1/763 774/1/774
+f 775/1/775 776/1/776 763/1/763
+f 841/1/841 776/1/776 775/1/775
+f 846/1/846 841/1/841 775/1/775
+f 842/1/842 841/1/841 846/1/846
+f 845/1/845 842/1/842 846/1/846
+f 845/1/845 846/1/846 851/1/851
+f 849/1/849 845/1/845 851/1/851
+f 847/1/847 845/1/845 849/1/849
+f 1830/1/1830 847/1/847 849/1/849
+f 1830/1/1830 849/1/849 1831/1/1831
+f 850/1/850 847/1/847 1830/1/1830
+f 1828/1/1828 850/1/850 1830/1/1830
+f 1828/1/1828 1830/1/1830 1833/1/1833
+f 854/1/854 850/1/850 1828/1/1828
+f 1826/1/1826 854/1/854 1828/1/1828
+f 1826/1/1826 1828/1/1828 1829/1/1829
+f 1824/1/1824 854/1/854 1826/1/1826
+f 1825/1/1825 1824/1/1824 1826/1/1826
+f 1825/1/1825 1826/1/1826 1827/1/1827
+f 1823/1/1823 1824/1/1824 1825/1/1825
+f 1940/1/1940 1823/1/1823 1825/1/1825
+f 1940/1/1940 1825/1/1825 1941/1/1941
+f 1941/1/1941 1780/1/1780 1940/1/1940
+f 1940/1/1940 1780/1/1780 1779/1/1779
+f 1940/1/1940 1779/1/1779 1943/1/1943
+f 1943/1/1943 1779/1/1779 1945/1/1945
+f 1945/1/1945 1823/1/1823 1943/1/1943
+f 1944/1/1944 1823/1/1823 1945/1/1945
+f 1945/1/1945 1786/1/1786 1944/1/1944
+f 1944/1/1944 1786/1/1786 1946/1/1946
+f 1946/1/1946 1821/1/1821 1944/1/1944
+f 1947/1/1947 1821/1/1821 1946/1/1946
+f 1946/1/1946 1948/1/1948 1947/1/1947
+f 1947/1/1947 1948/1/1948 1820/1/1820
+f 1820/1/1820 1948/1/1948 1804/1/1804
+f 1820/1/1820 1804/1/1804 1805/1/1805
+f 1805/1/1805 1818/1/1818 1820/1/1820
+f 1820/1/1820 1818/1/1818 1821/1/1821
+f 1818/1/1818 1819/1/1819 1821/1/1821
+f 1821/1/1821 1819/1/1819 1822/1/1822
+f 1821/1/1821 1822/1/1822 1823/1/1823
+f 1819/1/1819 818/1/818 1822/1/1822
+f 1822/1/1822 818/1/818 819/1/819
+f 1822/1/1822 819/1/819 1824/1/1824
+f 818/1/818 814/1/814 819/1/819
+f 819/1/819 814/1/814 817/1/817
+f 819/1/819 817/1/817 823/1/823
+f 819/1/819 823/1/823 854/1/854
+f 817/1/817 822/1/822 823/1/823
+f 823/1/823 822/1/822 829/1/829
+f 823/1/823 829/1/829 853/1/853
+f 823/1/823 853/1/853 850/1/850
+f 850/1/850 853/1/853 848/1/848
+f 853/1/853 838/1/838 848/1/848
+f 848/1/848 838/1/838 844/1/844
+f 848/1/848 844/1/844 847/1/847
+f 847/1/847 844/1/844 843/1/843
+f 844/1/844 839/1/839 843/1/843
+f 839/1/839 842/1/842 843/1/843
+f 839/1/839 840/1/840 842/1/842
+f 839/1/839 837/1/837 840/1/840
+f 837/1/837 780/1/780 840/1/840
+f 840/1/840 780/1/780 782/1/782
+f 840/1/840 782/1/782 841/1/841
+f 780/1/780 779/1/779 782/1/782
+f 782/1/782 779/1/779 776/1/776
+f 776/1/776 779/1/779 757/1/757
+f 780/1/780 781/1/781 779/1/779
+f 781/1/781 761/1/761 779/1/779
+f 779/1/779 761/1/761 758/1/758
+f 781/1/781 783/1/783 761/1/761
+f 783/1/783 762/1/762 761/1/761
+f 761/1/761 762/1/762 760/1/760
+f 762/1/762 1783/1/1783 760/1/760
+f 760/1/760 1783/1/1783 1949/1/1949
+f 1949/1/1949 1783/1/1783 753/1/753
+f 1949/1/1949 753/1/753 752/1/752
+f 1783/1/1783 1942/1/1942 753/1/753
+f 753/1/753 1942/1/1942 1939/1/1939
+f 753/1/753 1939/1/1939 748/1/748
+f 748/1/748 1939/1/1939 750/1/750
+f 1939/1/1939 1942/1/1942 1938/1/1938
+f 1937/1/1937 1939/1/1939 1938/1/1938
+f 1938/1/1938 1825/1/1825 1937/1/1937
+f 1938/1/1938 1942/1/1942 1941/1/1941
+f 1783/1/1783 1780/1/1780 1942/1/1942
+f 1783/1/1783 1778/1/1778 1780/1/1780
+f 762/1/762 1778/1/1778 1783/1/1783
+f 1784/1/1784 1778/1/1778 762/1/762
+f 1784/1/1784 1782/1/1782 1778/1/1778
+f 1782/1/1782 1781/1/1781 1778/1/1778
+f 1781/1/1781 1779/1/1779 1778/1/1778
+f 1781/1/1781 1786/1/1786 1779/1/1779
+f 1785/1/1785 1786/1/1786 1781/1/1781
+f 1785/1/1785 1948/1/1948 1786/1/1786
+f 1787/1/1787 1948/1/1948 1785/1/1785
+f 1787/1/1787 1785/1/1785 1782/1/1782
+f 1788/1/1788 1787/1/1787 1782/1/1782
+f 1788/1/1788 1790/1/1790 1787/1/1787
+f 1790/1/1790 1793/1/1793 1787/1/1787
+f 1791/1/1791 1793/1/1793 1790/1/1790
+f 1789/1/1789 1791/1/1791 1790/1/1790
+f 1792/1/1792 1791/1/1791 1789/1/1789
+f 791/1/791 1792/1/1792 1789/1/1789
+f 791/1/791 1789/1/1789 787/1/787
+f 790/1/790 791/1/791 787/1/787
+f 790/1/790 787/1/787 784/1/784
+f 788/1/788 790/1/790 784/1/784
+f 788/1/788 784/1/784 789/1/789
+f 855/1/855 788/1/788 789/1/789
+f 855/1/855 789/1/789 834/1/834
+f 825/1/825 855/1/855 834/1/834
+f 825/1/825 834/1/834 826/1/826
+f 821/1/821 825/1/825 826/1/826
+f 821/1/821 826/1/826 824/1/824
+f 820/1/820 821/1/821 824/1/824
+f 820/1/820 824/1/824 822/1/822
+f 822/1/822 824/1/824 828/1/828
+f 824/1/824 827/1/827 828/1/828
+f 828/1/828 827/1/827 830/1/830
+f 829/1/829 828/1/828 830/1/830
+f 827/1/827 832/1/832 830/1/830
+f 830/1/830 832/1/832 836/1/836
+f 830/1/830 836/1/836 838/1/838
+f 838/1/838 836/1/836 839/1/839
+f 832/1/832 835/1/835 836/1/836
+f 836/1/836 835/1/835 837/1/837
+f 832/1/832 831/1/831 835/1/835
+f 831/1/831 785/1/785 835/1/835
+f 835/1/835 785/1/785 780/1/780
+f 831/1/831 786/1/786 785/1/785
+f 786/1/786 781/1/781 785/1/785
+f 786/1/786 784/1/784 781/1/781
+f 833/1/833 786/1/786 831/1/831
+f 827/1/827 833/1/833 831/1/831
+f 826/1/826 833/1/833 827/1/827
+f 834/1/834 786/1/786 833/1/833
+f 827/1/827 831/1/831 832/1/832
+f 816/1/816 821/1/821 820/1/820
+f 817/1/817 816/1/816 820/1/820
+f 816/1/816 815/1/815 821/1/821
+f 813/1/813 815/1/815 816/1/816
+f 814/1/814 813/1/813 816/1/816
+f 814/1/814 810/1/810 813/1/813
+f 810/1/810 811/1/811 813/1/813
+f 810/1/810 806/1/806 811/1/811
+f 806/1/806 803/1/803 811/1/811
+f 811/1/811 803/1/803 815/1/815
+f 803/1/803 856/1/856 815/1/815
+f 815/1/815 856/1/856 825/1/825
+f 803/1/803 804/1/804 856/1/856
+f 856/1/856 804/1/804 855/1/855
+f 803/1/803 799/1/799 804/1/804
+f 799/1/799 788/1/788 804/1/804
+f 799/1/799 792/1/792 788/1/788
+f 798/1/798 792/1/792 799/1/799
+f 802/1/802 798/1/798 799/1/799
+f 801/1/801 798/1/798 802/1/802
+f 805/1/805 801/1/801 802/1/802
+f 805/1/805 802/1/802 806/1/806
+f 807/1/807 805/1/805 806/1/806
+f 808/1/808 805/1/805 807/1/807
+f 812/1/812 808/1/808 807/1/807
+f 812/1/812 807/1/807 810/1/810
+f 858/1/858 808/1/808 812/1/812
+f 857/1/857 858/1/858 812/1/812
+f 857/1/857 812/1/812 818/1/818
+f 859/1/859 858/1/858 857/1/857
+f 1817/1/1817 859/1/859 857/1/857
+f 1817/1/1817 857/1/857 1819/1/1819
+f 1816/1/1816 859/1/859 1817/1/1817
+f 1806/1/1806 1816/1/1816 1817/1/1817
+f 1806/1/1806 1817/1/1817 1818/1/1818
+f 1809/1/1809 1816/1/1816 1806/1/1806
+f 1807/1/1807 1809/1/1809 1806/1/1806
+f 1807/1/1807 1806/1/1806 1803/1/1803
+f 1803/1/1803 1801/1/1801 1807/1/1807
+f 1807/1/1807 1801/1/1801 1808/1/1808
+f 1807/1/1807 1808/1/1808 1810/1/1810
+f 1810/1/1810 1808/1/1808 1811/1/1811
+f 1811/1/1811 1809/1/1809 1810/1/1810
+f 1812/1/1812 1809/1/1809 1811/1/1811
+f 1811/1/1811 1813/1/1813 1812/1/1812
+f 1812/1/1812 1813/1/1813 1814/1/1814
+f 1814/1/1814 1397/1/1397 1812/1/1812
+f 1400/1/1400 1397/1/1397 1814/1/1814
+f 1814/1/1814 1401/1/1401 1400/1/1400
+f 1400/1/1400 1401/1/1401 1396/1/1396
+f 1396/1/1396 1401/1/1401 1398/1/1398
+f 1396/1/1396 1398/1/1398 1393/1/1393
+f 1393/1/1393 1394/1/1394 1396/1/1396
+f 1396/1/1396 1394/1/1394 1397/1/1397
+f 1394/1/1394 1395/1/1395 1397/1/1397
+f 1397/1/1397 1395/1/1395 1815/1/1815
+f 1397/1/1397 1815/1/1815 1809/1/1809
+f 1395/1/1395 1536/1/1536 1815/1/1815
+f 1815/1/1815 1536/1/1536 862/1/862
+f 1815/1/1815 862/1/862 1816/1/1816
+f 1536/1/1536 1428/1/1428 862/1/862
+f 862/1/862 1428/1/1428 1429/1/1429
+f 862/1/862 1429/1/1429 863/1/863
+f 862/1/862 863/1/863 859/1/859
+f 859/1/859 863/1/863 861/1/861
+f 863/1/863 864/1/864 861/1/861
+f 861/1/861 864/1/864 860/1/860
+f 861/1/861 860/1/860 858/1/858
+f 864/1/864 865/1/865 860/1/860
+f 860/1/860 865/1/865 866/1/866
+f 860/1/860 866/1/866 808/1/808
+f 808/1/808 866/1/866 809/1/809
+f 866/1/866 867/1/867 809/1/809
+f 867/1/867 801/1/801 809/1/809
+f 867/1/867 800/1/800 801/1/801
+f 867/1/867 870/1/870 800/1/800
+f 870/1/870 795/1/795 800/1/800
+f 800/1/800 795/1/795 797/1/797
+f 800/1/800 797/1/797 798/1/798
+f 795/1/795 793/1/793 797/1/797
+f 797/1/797 793/1/793 792/1/792
+f 792/1/792 793/1/793 790/1/790
+f 795/1/795 796/1/796 793/1/793
+f 796/1/796 794/1/794 793/1/793
+f 793/1/793 794/1/794 791/1/791
+f 796/1/796 895/1/895 794/1/794
+f 895/1/895 1796/1/1796 794/1/794
+f 794/1/794 1796/1/1796 1792/1/1792
+f 1796/1/1796 1797/1/1797 1792/1/1792
+f 1792/1/1792 1797/1/1797 1794/1/1794
+f 1794/1/1794 1797/1/1797 1795/1/1795
+f 1794/1/1794 1795/1/1795 1791/1/1791
+f 1797/1/1797 1799/1/1799 1795/1/1795
+f 1795/1/1795 1799/1/1799 1798/1/1798
+f 1795/1/1795 1798/1/1798 1793/1/1793
+f 1793/1/1793 1798/1/1798 1804/1/1804
+f 1798/1/1798 1799/1/1799 1802/1/1802
+f 1805/1/1805 1798/1/1798 1802/1/1802
+f 1802/1/1802 1806/1/1806 1805/1/1805
+f 1802/1/1802 1799/1/1799 1803/1/1803
+f 1797/1/1797 1801/1/1801 1799/1/1799
+f 1797/1/1797 1800/1/1800 1801/1/1801
+f 1796/1/1796 1800/1/1800 1797/1/1797
+f 2433/1/2433 1800/1/1800 1796/1/1796
+f 2433/1/2433 2432/1/2432 1800/1/1800
+f 2432/1/2432 2430/1/2430 1800/1/1800
+f 2430/1/2430 1808/1/1808 1800/1/1800
+f 2430/1/2430 1813/1/1813 1808/1/1808
+f 2431/1/2431 1813/1/1813 2430/1/2430
+f 2431/1/2431 1401/1/1401 1813/1/1813
+f 1416/1/1416 1401/1/1401 2431/1/2431
+f 1416/1/1416 2431/1/2431 2432/1/2432
+f 1415/1/1415 1416/1/1416 2432/1/2432
+f 1415/1/1415 1414/1/1414 1416/1/1416
+f 1414/1/1414 1412/1/1412 1416/1/1416
+f 1411/1/1411 1412/1/1412 1414/1/1414
+f 1413/1/1413 1411/1/1411 1414/1/1414
+f 1368/1/1368 1411/1/1411 1413/1/1413
+f 893/1/893 1368/1/1368 1413/1/1413
+f 893/1/893 1413/1/1413 894/1/894
+f 888/1/888 893/1/893 894/1/894
+f 888/1/888 894/1/894 878/1/878
+f 886/1/886 888/1/888 878/1/878
+f 886/1/886 878/1/878 879/1/879
+f 883/1/883 886/1/886 879/1/879
+f 883/1/883 879/1/879 880/1/880
+f 882/1/882 883/1/883 880/1/880
+f 882/1/882 880/1/880 881/1/881
+f 1422/1/1422 882/1/882 881/1/881
+f 1422/1/1422 881/1/881 1420/1/1420
+f 1424/1/1424 1422/1/1422 1420/1/1420
+f 1424/1/1424 1420/1/1420 1430/1/1430
+f 1429/1/1429 1424/1/1424 1430/1/1430
+f 1429/1/1429 1423/1/1423 1424/1/1424
+f 1430/1/1430 1420/1/1420 1421/1/1421
+f 1430/1/1430 1421/1/1421 1431/1/1431
+f 863/1/863 1430/1/1430 1431/1/1431
+f 1431/1/1431 1421/1/1421 868/1/868
+f 1431/1/1431 868/1/868 864/1/864
+f 1421/1/1421 875/1/875 868/1/868
+f 875/1/875 871/1/871 868/1/868
+f 868/1/868 871/1/871 869/1/869
+f 868/1/868 869/1/869 865/1/865
+f 865/1/865 869/1/869 867/1/867
+f 871/1/871 872/1/872 869/1/869
+f 869/1/869 872/1/872 870/1/870
+f 871/1/871 873/1/873 872/1/872
+f 873/1/873 874/1/874 872/1/872
+f 872/1/872 874/1/874 795/1/795
+f 873/1/873 877/1/877 874/1/874
+f 877/1/877 796/1/796 874/1/874
+f 877/1/877 878/1/878 796/1/796
+f 876/1/876 877/1/877 873/1/873
+f 875/1/875 876/1/876 873/1/873
+f 881/1/881 876/1/876 875/1/875
+f 880/1/880 877/1/877 876/1/876
+f 875/1/875 873/1/873 871/1/871
+f 1420/1/1420 875/1/875 1421/1/1421
+f 1423/1/1423 1422/1/1422 1424/1/1424
+f 1423/1/1423 1425/1/1425 1422/1/1422
+f 1427/1/1427 1425/1/1425 1423/1/1423
+f 1428/1/1428 1427/1/1427 1423/1/1423
+f 1428/1/1428 1562/1/1562 1427/1/1427
+f 1562/1/1562 1426/1/1426 1427/1/1427
+f 1562/1/1562 1561/1/1561 1426/1/1426
+f 1561/1/1561 1419/1/1419 1426/1/1426
+f 1426/1/1426 1419/1/1419 1425/1/1425
+f 1419/1/1419 884/1/884 1425/1/1425
+f 1425/1/1425 884/1/884 882/1/882
+f 1419/1/1419 885/1/885 884/1/884
+f 884/1/884 885/1/885 883/1/883
+f 1419/1/1419 1557/1/1557 885/1/885
+f 1557/1/1557 886/1/886 885/1/885
+f 1557/1/1557 887/1/887 886/1/886
+f 1554/1/1554 887/1/887 1557/1/1557
+f 1556/1/1556 1554/1/1554 1557/1/1557
+f 1555/1/1555 1554/1/1554 1556/1/1556
+f 1559/1/1559 1555/1/1555 1556/1/1556
+f 1559/1/1559 1556/1/1556 1561/1/1561
+f 1560/1/1560 1559/1/1559 1561/1/1561
+f 1537/1/1537 1559/1/1559 1560/1/1560
+f 1535/1/1535 1537/1/1537 1560/1/1560
+f 1535/1/1535 1560/1/1560 1562/1/1562
+f 1532/1/1532 1537/1/1537 1535/1/1535
+f 1533/1/1533 1532/1/1532 1535/1/1535
+f 1533/1/1533 1535/1/1535 1536/1/1536
+f 1531/1/1531 1532/1/1532 1533/1/1533
+f 1392/1/1392 1531/1/1531 1533/1/1533
+f 1392/1/1392 1533/1/1533 1395/1/1395
+f 1391/1/1391 1531/1/1531 1392/1/1392
+f 1374/1/1374 1391/1/1391 1392/1/1392
+f 1374/1/1374 1392/1/1392 1394/1/1394
+f 1376/1/1376 1391/1/1391 1374/1/1374
+f 1373/1/1373 1376/1/1376 1374/1/1374
+f 1373/1/1373 1374/1/1374 1372/1/1372
+f 1372/1/1372 1367/1/1367 1373/1/1373
+f 1373/1/1373 1367/1/1367 1364/1/1364
+f 1373/1/1373 1364/1/1364 1377/1/1377
+f 1377/1/1377 1364/1/1364 1380/1/1380
+f 1380/1/1380 1376/1/1376 1377/1/1377
+f 1378/1/1378 1376/1/1376 1380/1/1380
+f 1380/1/1380 1363/1/1363 1378/1/1378
+f 1378/1/1378 1363/1/1363 1381/1/1381
+f 1381/1/1381 1379/1/1379 1378/1/1378
+f 1382/1/1382 1379/1/1379 1381/1/1381
+f 1381/1/1381 1357/1/1357 1382/1/1382
+f 1382/1/1382 1357/1/1357 1383/1/1383
+f 1383/1/1383 1357/1/1357 1356/1/1356
+f 1383/1/1383 1356/1/1356 1384/1/1384
+f 1384/1/1384 1385/1/1385 1383/1/1383
+f 1383/1/1383 1385/1/1385 1379/1/1379
+f 1385/1/1385 1388/1/1388 1379/1/1379
+f 1379/1/1379 1388/1/1388 1390/1/1390
+f 1379/1/1379 1390/1/1390 1376/1/1376
+f 1388/1/1388 1480/1/1480 1390/1/1390
+f 1390/1/1390 1480/1/1480 1482/1/1482
+f 1390/1/1390 1482/1/1482 1391/1/1391
+f 1480/1/1480 1481/1/1481 1482/1/1482
+f 1482/1/1482 1481/1/1481 1526/1/1526
+f 1482/1/1482 1526/1/1526 1530/1/1530
+f 1482/1/1482 1530/1/1530 1531/1/1531
+f 1531/1/1531 1530/1/1530 1534/1/1534
+f 1530/1/1530 1539/1/1539 1534/1/1534
+f 1534/1/1534 1539/1/1539 1538/1/1538
+f 1534/1/1534 1538/1/1538 1532/1/1532
+f 1539/1/1539 1540/1/1540 1538/1/1538
+f 1538/1/1538 1540/1/1540 1541/1/1541
+f 1538/1/1538 1541/1/1541 1537/1/1537
+f 1537/1/1537 1541/1/1541 1558/1/1558
+f 1541/1/1541 1553/1/1553 1558/1/1558
+f 1553/1/1553 1555/1/1555 1558/1/1558
+f 1553/1/1553 1552/1/1552 1555/1/1555
+f 1553/1/1553 1551/1/1551 1552/1/1552
+f 1551/1/1551 1418/1/1418 1552/1/1552
+f 1552/1/1552 1418/1/1418 889/1/889
+f 1552/1/1552 889/1/889 1554/1/1554
+f 1418/1/1418 890/1/890 889/1/889
+f 889/1/889 890/1/890 887/1/887
+f 887/1/887 890/1/890 888/1/888
+f 1418/1/1418 891/1/891 890/1/890
+f 891/1/891 892/1/892 890/1/890
+f 890/1/890 892/1/892 893/1/893
+f 891/1/891 896/1/896 892/1/892
+f 896/1/896 1365/1/1365 892/1/892
+f 892/1/892 1365/1/1365 1368/1/1368
+f 1365/1/1365 1366/1/1366 1368/1/1368
+f 1368/1/1368 1366/1/1366 1369/1/1369
+f 1369/1/1369 1366/1/1366 1370/1/1370
+f 1369/1/1369 1370/1/1370 1411/1/1411
+f 1366/1/1366 1371/1/1371 1370/1/1370
+f 1370/1/1370 1371/1/1371 1399/1/1399
+f 1370/1/1370 1399/1/1399 1412/1/1412
+f 1412/1/1412 1399/1/1399 1398/1/1398
+f 1399/1/1399 1371/1/1371 1375/1/1375
+f 1393/1/1393 1399/1/1399 1375/1/1375
+f 1375/1/1375 1374/1/1374 1393/1/1393
+f 1375/1/1375 1371/1/1371 1372/1/1372
+f 1366/1/1366 1367/1/1367 1371/1/1371
+f 1366/1/1366 1361/1/1361 1367/1/1367
+f 1365/1/1365 1361/1/1361 1366/1/1366
+f 1360/1/1360 1361/1/1361 1365/1/1365
+f 1360/1/1360 1358/1/1358 1361/1/1361
+f 1358/1/1358 1362/1/1362 1361/1/1361
+f 1362/1/1362 1364/1/1364 1361/1/1361
+f 1362/1/1362 1363/1/1363 1364/1/1364
+f 1359/1/1359 1363/1/1363 1362/1/1362
+f 1359/1/1359 1357/1/1357 1363/1/1363
+f 1355/1/1355 1357/1/1357 1359/1/1359
+f 1355/1/1355 1359/1/1359 1358/1/1358
+f 901/1/901 1355/1/1355 1358/1/1358
+f 901/1/901 1354/1/1354 1355/1/1355
+f 1354/1/1354 1353/1/1353 1355/1/1355
+f 1351/1/1351 1353/1/1353 1354/1/1354
+f 900/1/900 1351/1/1351 1354/1/1354
+f 905/1/905 1351/1/1351 900/1/900
+f 902/1/902 905/1/905 900/1/900
+f 902/1/902 900/1/900 898/1/898
+f 899/1/899 902/1/902 898/1/898
+f 899/1/899 898/1/898 897/1/897
+f 1508/1/1508 899/1/899 897/1/897
+f 1508/1/1508 897/1/897 1512/1/1512
+f 1511/1/1511 1508/1/1508 1512/1/1512
+f 1511/1/1511 1512/1/1512 1515/1/1515
+f 1514/1/1514 1511/1/1511 1515/1/1515
+f 1514/1/1514 1515/1/1515 1518/1/1518
+f 1520/1/1520 1514/1/1514 1518/1/1518
+f 1520/1/1520 1518/1/1518 1525/1/1525
+f 1524/1/1524 1520/1/1520 1525/1/1525
+f 1524/1/1524 1525/1/1525 1544/1/1544
+f 1526/1/1526 1524/1/1524 1544/1/1544
+f 1526/1/1526 1523/1/1523 1524/1/1524
+f 1544/1/1544 1525/1/1525 1545/1/1545
+f 1544/1/1544 1545/1/1545 1543/1/1543
+f 1530/1/1530 1544/1/1544 1543/1/1543
+f 1543/1/1543 1545/1/1545 1542/1/1542
+f 1543/1/1543 1542/1/1542 1539/1/1539
+f 1545/1/1545 1546/1/1546 1542/1/1542
+f 1546/1/1546 1548/1/1548 1542/1/1542
+f 1542/1/1542 1548/1/1548 1550/1/1550
+f 1542/1/1542 1550/1/1550 1540/1/1540
+f 1540/1/1540 1550/1/1550 1553/1/1553
+f 1548/1/1548 1549/1/1549 1550/1/1550
+f 1550/1/1550 1549/1/1549 1551/1/1551
+f 1548/1/1548 1547/1/1547 1549/1/1549
+f 1547/1/1547 1417/1/1417 1549/1/1549
+f 1549/1/1549 1417/1/1417 1418/1/1418
+f 1547/1/1547 1516/1/1516 1417/1/1417
+f 1516/1/1516 891/1/891 1417/1/1417
+f 1516/1/1516 897/1/897 891/1/891
+f 1517/1/1517 1516/1/1516 1547/1/1547
+f 1546/1/1546 1517/1/1517 1547/1/1547
+f 1518/1/1518 1517/1/1517 1546/1/1546
+f 1515/1/1515 1516/1/1516 1517/1/1517
+f 1546/1/1546 1547/1/1547 1548/1/1548
+f 1525/1/1525 1546/1/1546 1545/1/1545
+f 1523/1/1523 1520/1/1520 1524/1/1524
+f 1523/1/1523 1519/1/1519 1520/1/1520
+f 1521/1/1521 1519/1/1519 1523/1/1523
+f 1481/1/1481 1521/1/1521 1523/1/1523
+f 1481/1/1481 1527/1/1527 1521/1/1521
+f 1527/1/1527 1522/1/1522 1521/1/1521
+f 1527/1/1527 1528/1/1528 1522/1/1522
+f 1528/1/1528 1510/1/1510 1522/1/1522
+f 1522/1/1522 1510/1/1510 1519/1/1519
+f 1510/1/1510 1513/1/1513 1519/1/1519
+f 1519/1/1519 1513/1/1513 1514/1/1514
+f 1510/1/1510 1509/1/1509 1513/1/1513
+f 1513/1/1513 1509/1/1509 1511/1/1511
+f 1510/1/1510 1507/1/1507 1509/1/1509
+f 1507/1/1507 1508/1/1508 1509/1/1509
+f 1507/1/1507 908/1/908 1508/1/1508
+f 1504/1/1504 908/1/908 1507/1/1507
+f 1506/1/1506 1504/1/1504 1507/1/1507
+f 1501/1/1501 1504/1/1504 1506/1/1506
+f 1505/1/1505 1501/1/1501 1506/1/1506
+f 1505/1/1505 1506/1/1506 1528/1/1528
+f 1529/1/1529 1505/1/1505 1528/1/1528
+f 1488/1/1488 1505/1/1505 1529/1/1529
+f 1483/1/1483 1488/1/1488 1529/1/1529
+f 1483/1/1483 1529/1/1529 1527/1/1527
+f 1485/1/1485 1488/1/1488 1483/1/1483
+f 1484/1/1484 1485/1/1485 1483/1/1483
+f 1484/1/1484 1483/1/1483 1480/1/1480
+f 1486/1/1486 1485/1/1485 1484/1/1484
+f 1389/1/1389 1486/1/1486 1484/1/1484
+f 1389/1/1389 1484/1/1484 1388/1/1388
+f 1588/1/1588 1486/1/1486 1389/1/1389
+f 1387/1/1387 1588/1/1588 1389/1/1389
+f 1387/1/1387 1389/1/1389 1385/1/1385
+f 1404/1/1404 1588/1/1588 1387/1/1387
+f 1403/1/1403 1404/1/1404 1387/1/1387
+f 1403/1/1403 1387/1/1387 1402/1/1402
+f 1402/1/1402 1346/1/1346 1403/1/1403
+f 1403/1/1403 1346/1/1346 1344/1/1344
+f 1403/1/1403 1344/1/1344 1405/1/1405
+f 1405/1/1405 1344/1/1344 1406/1/1406
+f 1406/1/1406 1404/1/1404 1405/1/1405
+f 1407/1/1407 1404/1/1404 1406/1/1406
+f 1406/1/1406 1338/1/1338 1407/1/1407
+f 1407/1/1407 1338/1/1338 1409/1/1409
+f 1409/1/1409 1408/1/1408 1407/1/1407
+f 1410/1/1410 1408/1/1408 1409/1/1409
+f 1409/1/1409 1333/1/1333 1410/1/1410
+f 1410/1/1410 1333/1/1333 1336/1/1336
+f 1336/1/1336 1333/1/1333 1332/1/1332
+f 1336/1/1336 1332/1/1332 1335/1/1335
+f 1335/1/1335 1590/1/1590 1336/1/1336
+f 1336/1/1336 1590/1/1590 1408/1/1408
+f 1590/1/1590 1589/1/1589 1408/1/1408
+f 1408/1/1408 1589/1/1589 1587/1/1587
+f 1408/1/1408 1587/1/1587 1404/1/1404
+f 1589/1/1589 1585/1/1585 1587/1/1587
+f 1587/1/1587 1585/1/1585 1575/1/1575
+f 1587/1/1587 1575/1/1575 1588/1/1588
+f 1585/1/1585 1576/1/1576 1575/1/1575
+f 1575/1/1575 1576/1/1576 1574/1/1574
+f 1575/1/1575 1574/1/1574 1493/1/1493
+f 1575/1/1575 1493/1/1493 1486/1/1486
+f 1486/1/1486 1493/1/1493 1489/1/1489
+f 1493/1/1493 1492/1/1492 1489/1/1489
+f 1489/1/1489 1492/1/1492 1487/1/1487
+f 1489/1/1489 1487/1/1487 1485/1/1485
+f 1492/1/1492 1490/1/1490 1487/1/1487
+f 1487/1/1487 1490/1/1490 1491/1/1491
+f 1487/1/1487 1491/1/1491 1488/1/1488
+f 1488/1/1488 1491/1/1491 1498/1/1498
+f 1491/1/1491 1497/1/1497 1498/1/1498
+f 1497/1/1497 1501/1/1501 1498/1/1498
+f 1497/1/1497 1500/1/1500 1501/1/1501
+f 1497/1/1497 1499/1/1499 1500/1/1500
+f 1499/1/1499 913/1/913 1500/1/1500
+f 1500/1/1500 913/1/913 907/1/907
+f 1500/1/1500 907/1/907 1504/1/1504
+f 913/1/913 903/1/903 907/1/907
+f 907/1/907 903/1/903 908/1/908
+f 908/1/908 903/1/903 899/1/899
+f 913/1/913 906/1/906 903/1/903
+f 906/1/906 904/1/904 903/1/903
+f 903/1/903 904/1/904 902/1/902
+f 906/1/906 909/1/909 904/1/904
+f 909/1/909 1345/1/1345 904/1/904
+f 904/1/904 1345/1/1345 905/1/905
+f 1345/1/1345 1347/1/1347 905/1/905
+f 905/1/905 1347/1/1347 1349/1/1349
+f 1349/1/1349 1347/1/1347 1350/1/1350
+f 1349/1/1349 1350/1/1350 1351/1/1351
+f 1347/1/1347 1348/1/1348 1350/1/1350
+f 1350/1/1350 1348/1/1348 1352/1/1352
+f 1350/1/1350 1352/1/1352 1353/1/1353
+f 1353/1/1353 1352/1/1352 1356/1/1356
+f 1352/1/1352 1348/1/1348 1386/1/1386
+f 1384/1/1384 1352/1/1352 1386/1/1386
+f 1386/1/1386 1387/1/1387 1384/1/1384
+f 1386/1/1386 1348/1/1348 1402/1/1402
+f 1347/1/1347 1346/1/1346 1348/1/1348
+f 1347/1/1347 1342/1/1342 1346/1/1346
+f 1345/1/1345 1342/1/1342 1347/1/1347
+f 1341/1/1341 1342/1/1342 1345/1/1345
+f 1341/1/1341 1339/1/1339 1342/1/1342
+f 1339/1/1339 1343/1/1343 1342/1/1342
+f 1343/1/1343 1344/1/1344 1342/1/1342
+f 1343/1/1343 1338/1/1338 1344/1/1344
+f 1337/1/1337 1338/1/1338 1343/1/1343
+f 1337/1/1337 1333/1/1333 1338/1/1338
+f 1334/1/1334 1333/1/1333 1337/1/1337
+f 1334/1/1334 1337/1/1337 1339/1/1339
+f 1340/1/1340 1334/1/1334 1339/1/1339
+f 1340/1/1340 1331/1/1331 1334/1/1334
+f 1331/1/1331 1329/1/1329 1334/1/1334
+f 1326/1/1326 1329/1/1329 1331/1/1331
+f 1323/1/1323 1326/1/1326 1331/1/1331
+f 1322/1/1322 1326/1/1326 1323/1/1323
+f 918/1/918 1322/1/1322 1323/1/1323
+f 918/1/918 1323/1/1323 914/1/914
+f 917/1/917 918/1/918 914/1/914
+f 917/1/917 914/1/914 911/1/911
+f 916/1/916 917/1/917 911/1/911
+f 916/1/916 911/1/911 915/1/915
+f 1321/1/1321 916/1/916 915/1/915
+f 1321/1/1321 915/1/915 1566/1/1566
+f 1568/1/1568 1321/1/1321 1566/1/1566
+f 1568/1/1568 1566/1/1566 1567/1/1567
+f 1572/1/1572 1568/1/1568 1567/1/1567
+f 1572/1/1572 1567/1/1567 1569/1/1569
+f 1573/1/1573 1572/1/1572 1569/1/1569
+f 1573/1/1573 1569/1/1569 1570/1/1570
+f 1574/1/1574 1573/1/1573 1570/1/1570
+f 1574/1/1574 1577/1/1577 1573/1/1573
+f 1570/1/1570 1569/1/1569 1571/1/1571
+f 1570/1/1570 1571/1/1571 1494/1/1494
+f 1493/1/1493 1570/1/1570 1494/1/1494
+f 1494/1/1494 1571/1/1571 1495/1/1495
+f 1494/1/1494 1495/1/1495 1492/1/1492
+f 1571/1/1571 1564/1/1564 1495/1/1495
+f 1564/1/1564 1502/1/1502 1495/1/1495
+f 1495/1/1495 1502/1/1502 1496/1/1496
+f 1495/1/1495 1496/1/1496 1490/1/1490
+f 1490/1/1490 1496/1/1496 1497/1/1497
+f 1502/1/1502 1503/1/1503 1496/1/1496
+f 1496/1/1496 1503/1/1503 1499/1/1499
+f 1502/1/1502 1563/1/1563 1503/1/1503
+f 1563/1/1563 912/1/912 1503/1/1503
+f 1503/1/1503 912/1/912 913/1/913
+f 1563/1/1563 910/1/910 912/1/912
+f 910/1/910 906/1/906 912/1/912
+f 910/1/910 911/1/911 906/1/906
+f 1565/1/1565 910/1/910 1563/1/1563
+f 1564/1/1564 1565/1/1565 1563/1/1563
+f 1567/1/1567 1565/1/1565 1564/1/1564
+f 1566/1/1566 910/1/910 1565/1/1565
+f 1564/1/1564 1563/1/1563 1502/1/1502
+f 1569/1/1569 1564/1/1564 1571/1/1571
+f 1577/1/1577 1572/1/1572 1573/1/1573
+f 1577/1/1577 1579/1/1579 1572/1/1572
+f 1578/1/1578 1579/1/1579 1577/1/1577
+f 1576/1/1576 1578/1/1578 1577/1/1577
+f 1576/1/1576 1580/1/1580 1578/1/1578
+f 1580/1/1580 1581/1/1581 1578/1/1578
+f 1580/1/1580 950/1/950 1581/1/1581
+f 950/1/950 1319/1/1319 1581/1/1581
+f 1581/1/1581 1319/1/1319 1579/1/1579
+f 1319/1/1319 1582/1/1582 1579/1/1579
+f 1579/1/1579 1582/1/1582 1568/1/1568
+f 1319/1/1319 1320/1/1320 1582/1/1582
+f 1582/1/1582 1320/1/1320 1321/1/1321
+f 1319/1/1319 923/1/923 1320/1/1320
+f 923/1/923 916/1/916 1320/1/1320
+f 923/1/923 919/1/919 916/1/916
+f 922/1/922 919/1/919 923/1/923
+f 929/1/929 922/1/922 923/1/923
+f 928/1/928 922/1/922 929/1/929
+f 949/1/949 928/1/928 929/1/929
+f 949/1/949 929/1/929 950/1/950
+f 1583/1/1583 949/1/949 950/1/950
+f 948/1/948 949/1/949 1583/1/1583
+f 1584/1/1584 948/1/948 1583/1/1583
+f 1584/1/1584 1583/1/1583 1580/1/1580
+f 956/1/956 948/1/948 1584/1/1584
+f 1586/1/1586 956/1/956 1584/1/1584
+f 1586/1/1586 1584/1/1584 1585/1/1585
+f 955/1/955 956/1/956 1586/1/1586
+f 1591/1/1591 955/1/955 1586/1/1586
+f 1591/1/1591 1586/1/1586 1589/1/1589
+f 1593/1/1593 955/1/955 1591/1/1591
+f 1592/1/1592 1593/1/1593 1591/1/1591
+f 1592/1/1592 1591/1/1591 1590/1/1590
+f 1594/1/1594 1593/1/1593 1592/1/1592
+f 1635/1/1635 1594/1/1594 1592/1/1592
+f 1635/1/1635 1592/1/1592 1637/1/1637
+f 1637/1/1637 1634/1/1634 1635/1/1635
+f 1635/1/1635 1634/1/1634 1631/1/1631
+f 1635/1/1635 1631/1/1631 1636/1/1636
+f 1636/1/1636 1631/1/1631 1632/1/1632
+f 1632/1/1632 1594/1/1594 1636/1/1636
+f 1633/1/1633 1594/1/1594 1632/1/1632
+f 1632/1/1632 1629/1/1629 1633/1/1633
+f 1633/1/1633 1629/1/1629 1630/1/1630
+f 1630/1/1630 1596/1/1596 1633/1/1633
+f 1604/1/1604 1596/1/1596 1630/1/1630
+f 1630/1/1630 1606/1/1606 1604/1/1604
+f 1604/1/1604 1606/1/1606 1602/1/1602
+f 1602/1/1602 1606/1/1606 1605/1/1605
+f 1602/1/1602 1605/1/1605 1603/1/1603
+f 1603/1/1603 1598/1/1598 1602/1/1602
+f 1602/1/1602 1598/1/1598 1596/1/1596
+f 1598/1/1598 1597/1/1597 1596/1/1596
+f 1596/1/1596 1597/1/1597 1595/1/1595
+f 1596/1/1596 1595/1/1595 1594/1/1594
+f 1597/1/1597 1001/1/1001 1595/1/1595
+f 1595/1/1595 1001/1/1001 952/1/952
+f 1595/1/1595 952/1/952 1593/1/1593
+f 1001/1/1001 999/1/999 952/1/952
+f 952/1/952 999/1/999 953/1/953
+f 952/1/952 953/1/953 951/1/951
+f 952/1/952 951/1/951 955/1/955
+f 953/1/953 954/1/954 951/1/951
+f 951/1/951 954/1/954 942/1/942
+f 951/1/951 942/1/942 943/1/943
+f 951/1/951 943/1/943 956/1/956
+f 956/1/956 943/1/943 945/1/945
+f 943/1/943 941/1/941 945/1/945
+f 945/1/945 941/1/941 946/1/946
+f 945/1/945 946/1/946 948/1/948
+f 948/1/948 946/1/946 947/1/947
+f 946/1/946 930/1/930 947/1/947
+f 930/1/930 928/1/928 947/1/947
+f 930/1/930 927/1/927 928/1/928
+f 930/1/930 931/1/931 927/1/927
+f 931/1/931 926/1/926 927/1/927
+f 927/1/927 926/1/926 921/1/921
+f 927/1/927 921/1/921 922/1/922
+f 926/1/926 920/1/920 921/1/921
+f 921/1/921 920/1/920 919/1/919
+f 919/1/919 920/1/920 917/1/917
+f 926/1/926 924/1/924 920/1/920
+f 924/1/924 925/1/925 920/1/920
+f 920/1/920 925/1/925 918/1/918
+f 924/1/924 976/1/976 925/1/925
+f 976/1/976 1324/1/1324 925/1/925
+f 925/1/925 1324/1/1324 1322/1/1322
+f 1324/1/1324 1327/1/1327 1322/1/1322
+f 1322/1/1322 1327/1/1327 1325/1/1325
+f 1325/1/1325 1327/1/1327 1328/1/1328
+f 1325/1/1325 1328/1/1328 1326/1/1326
+f 1327/1/1327 1639/1/1639 1328/1/1328
+f 1328/1/1328 1639/1/1639 1330/1/1330
+f 1328/1/1328 1330/1/1330 1329/1/1329
+f 1329/1/1329 1330/1/1330 1332/1/1332
+f 1330/1/1330 1639/1/1639 1638/1/1638
+f 1335/1/1335 1330/1/1330 1638/1/1638
+f 1638/1/1638 1592/1/1592 1335/1/1335
+f 1638/1/1638 1639/1/1639 1637/1/1637
+f 1327/1/1327 1634/1/1634 1639/1/1639
+f 1327/1/1327 1628/1/1628 1634/1/1634
+f 1324/1/1324 1628/1/1628 1327/1/1327
+f 1626/1/1626 1628/1/1628 1324/1/1324
+f 1626/1/1626 1624/1/1624 1628/1/1628
+f 1624/1/1624 1627/1/1627 1628/1/1628
+f 1627/1/1627 1631/1/1631 1628/1/1628
+f 1627/1/1627 1629/1/1629 1631/1/1631
+f 1625/1/1625 1629/1/1629 1627/1/1627
+f 1625/1/1625 1606/1/1606 1629/1/1629
+f 1623/1/1623 1606/1/1606 1625/1/1625
+f 1623/1/1623 1625/1/1625 1624/1/1624
+f 1622/1/1622 1623/1/1623 1624/1/1624
+f 1622/1/1622 1621/1/1621 1623/1/1623
+f 1621/1/1621 1609/1/1609 1623/1/1623
+f 1616/1/1616 1609/1/1609 1621/1/1621
+f 1620/1/1620 1616/1/1616 1621/1/1621
+f 1619/1/1619 1616/1/1616 1620/1/1620
+f 978/1/978 1619/1/1619 1620/1/1620
+f 978/1/978 1620/1/1620 975/1/975
+f 972/1/972 978/1/978 975/1/975
+f 972/1/972 975/1/975 973/1/973
+f 969/1/969 972/1/972 973/1/973
+f 969/1/969 973/1/973 967/1/967
+f 965/1/965 969/1/969 967/1/967
+f 965/1/965 967/1/967 964/1/964
+f 963/1/963 965/1/965 964/1/964
+f 963/1/963 964/1/964 960/1/960
+f 959/1/959 963/1/963 960/1/960
+f 959/1/959 960/1/960 958/1/958
+f 957/1/957 959/1/959 958/1/958
+f 957/1/957 958/1/958 954/1/954
+f 954/1/954 958/1/958 944/1/944
+f 958/1/958 938/1/938 944/1/944
+f 944/1/944 938/1/938 940/1/940
+f 942/1/942 944/1/944 940/1/940
+f 938/1/938 935/1/935 940/1/940
+f 940/1/940 935/1/935 934/1/934
+f 940/1/940 934/1/934 941/1/941
+f 941/1/941 934/1/934 930/1/930
+f 935/1/935 933/1/933 934/1/934
+f 934/1/934 933/1/933 931/1/931
+f 935/1/935 936/1/936 933/1/933
+f 936/1/936 932/1/932 933/1/933
+f 933/1/933 932/1/932 926/1/926
+f 936/1/936 937/1/937 932/1/932
+f 937/1/937 924/1/924 932/1/932
+f 937/1/937 973/1/973 924/1/924
+f 939/1/939 937/1/937 936/1/936
+f 938/1/938 939/1/939 936/1/936
+f 960/1/960 939/1/939 938/1/938
+f 964/1/964 937/1/937 939/1/939
+f 938/1/938 936/1/936 935/1/935
+f 961/1/961 959/1/959 957/1/957
+f 953/1/953 961/1/961 957/1/957
+f 961/1/961 962/1/962 959/1/959
+f 1003/1/1003 962/1/962 961/1/961
+f 999/1/999 1003/1/1003 961/1/961
+f 999/1/999 998/1/998 1003/1/1003
+f 998/1/998 1002/1/1002 1003/1/1003
+f 998/1/998 991/1/991 1002/1/1002
+f 991/1/991 970/1/970 1002/1/1002
+f 1002/1/1002 970/1/970 962/1/962
+f 970/1/970 966/1/966 962/1/962
+f 962/1/962 966/1/966 963/1/963
+f 970/1/970 968/1/968 966/1/966
+f 966/1/966 968/1/968 965/1/965
+f 970/1/970 971/1/971 968/1/968
+f 971/1/971 969/1/969 968/1/968
+f 971/1/971 974/1/974 969/1/969
+f 979/1/979 974/1/974 971/1/971
+f 986/1/986 979/1/979 971/1/971
+f 985/1/985 979/1/979 986/1/986
+f 990/1/990 985/1/985 986/1/986
+f 990/1/990 986/1/986 991/1/991
+f 993/1/993 990/1/990 991/1/991
+f 992/1/992 990/1/990 993/1/993
+f 996/1/996 992/1/992 993/1/993
+f 996/1/996 993/1/993 998/1/998
+f 995/1/995 992/1/992 996/1/996
+f 1000/1/1000 995/1/995 996/1/996
+f 1000/1/1000 996/1/996 1001/1/1001
+f 1004/1/1004 995/1/995 1000/1/1000
+f 1599/1/1599 1004/1/1004 1000/1/1000
+f 1599/1/1599 1000/1/1000 1597/1/1597
+f 1601/1/1601 1004/1/1004 1599/1/1599
+f 1600/1/1600 1601/1/1601 1599/1/1599
+f 1600/1/1600 1599/1/1599 1598/1/1598
+f 1652/1/1652 1601/1/1601 1600/1/1600
+f 1655/1/1655 1652/1/1652 1600/1/1600
+f 1655/1/1655 1600/1/1600 1612/1/1612
+f 1612/1/1612 1613/1/1613 1655/1/1655
+f 1655/1/1655 1613/1/1613 1645/1/1645
+f 1655/1/1655 1645/1/1645 1654/1/1654
+f 1654/1/1654 1645/1/1645 1653/1/1653
+f 1653/1/1653 1652/1/1652 1654/1/1654
+f 1651/1/1651 1652/1/1652 1653/1/1653
+f 1653/1/1653 1646/1/1646 1651/1/1651
+f 1651/1/1651 1646/1/1646 1648/1/1648
+f 1648/1/1648 1650/1/1650 1651/1/1651
+f 1649/1/1649 1650/1/1650 1648/1/1648
+f 1648/1/1648 1647/1/1647 1649/1/1649
+f 1649/1/1649 1647/1/1647 1308/1/1308
+f 1308/1/1308 1647/1/1647 1309/1/1309
+f 1308/1/1308 1309/1/1309 1305/1/1305
+f 1305/1/1305 1306/1/1306 1308/1/1308
+f 1308/1/1308 1306/1/1306 1650/1/1650
+f 1306/1/1306 1310/1/1310 1650/1/1650
+f 1650/1/1650 1310/1/1310 1656/1/1656
+f 1650/1/1650 1656/1/1656 1652/1/1652
+f 1310/1/1310 1657/1/1657 1656/1/1656
+f 1656/1/1656 1657/1/1657 1007/1/1007
+f 1656/1/1656 1007/1/1007 1601/1/1601
+f 1657/1/1657 1316/1/1316 1007/1/1007
+f 1007/1/1007 1316/1/1316 1008/1/1008
+f 1007/1/1007 1008/1/1008 1006/1/1006
+f 1007/1/1007 1006/1/1006 1004/1/1004
+f 1004/1/1004 1006/1/1006 1005/1/1005
+f 1006/1/1006 1011/1/1011 1005/1/1005
+f 1005/1/1005 1011/1/1011 997/1/997
+f 1005/1/1005 997/1/997 995/1/995
+f 1011/1/1011 1313/1/1313 997/1/997
+f 997/1/997 1313/1/1313 994/1/994
+f 997/1/997 994/1/994 992/1/992
+f 992/1/992 994/1/994 989/1/989
+f 994/1/994 988/1/988 989/1/989
+f 988/1/988 985/1/985 989/1/989
+f 988/1/988 984/1/984 985/1/985
+f 988/1/988 987/1/987 984/1/984
+f 987/1/987 981/1/981 984/1/984
+f 984/1/984 981/1/981 980/1/980
+f 984/1/984 980/1/980 979/1/979
+f 981/1/981 977/1/977 980/1/980
+f 980/1/980 977/1/977 974/1/974
+f 974/1/974 977/1/977 972/1/972
+f 981/1/981 982/1/982 977/1/977
+f 982/1/982 983/1/983 977/1/977
+f 977/1/977 983/1/983 978/1/978
+f 982/1/982 1031/1/1031 983/1/983
+f 1031/1/1031 1617/1/1617 983/1/983
+f 983/1/983 1617/1/1617 1619/1/1619
+f 1617/1/1617 1614/1/1614 1619/1/1619
+f 1619/1/1619 1614/1/1614 1615/1/1615
+f 1615/1/1615 1614/1/1614 1611/1/1611
+f 1615/1/1615 1611/1/1611 1616/1/1616
+f 1614/1/1614 1610/1/1610 1611/1/1611
+f 1611/1/1611 1610/1/1610 1608/1/1608
+f 1611/1/1611 1608/1/1608 1609/1/1609
+f 1609/1/1609 1608/1/1608 1605/1/1605
+f 1608/1/1608 1610/1/1610 1607/1/1607
+f 1603/1/1603 1608/1/1608 1607/1/1607
+f 1607/1/1607 1600/1/1600 1603/1/1603
+f 1607/1/1607 1610/1/1610 1612/1/1612
+f 1614/1/1614 1613/1/1613 1610/1/1610
+f 1614/1/1614 1618/1/1618 1613/1/1613
+f 1617/1/1617 1618/1/1618 1614/1/1614
+f 1640/1/1640 1618/1/1618 1617/1/1617
+f 1640/1/1640 1641/1/1641 1618/1/1618
+f 1641/1/1641 1644/1/1644 1618/1/1618
+f 1644/1/1644 1645/1/1645 1618/1/1618
+f 1644/1/1644 1646/1/1646 1645/1/1645
+f 1643/1/1643 1646/1/1646 1644/1/1644
+f 1643/1/1643 1647/1/1647 1646/1/1646
+f 1642/1/1642 1647/1/1647 1643/1/1643
+f 1642/1/1642 1643/1/1643 1641/1/1641
+f 1072/1/1072 1642/1/1642 1641/1/1641
+f 1072/1/1072 1071/1/1071 1642/1/1642
+f 1071/1/1071 1074/1/1074 1642/1/1642
+f 1069/1/1069 1074/1/1074 1071/1/1071
+f 1070/1/1070 1069/1/1069 1071/1/1071
+f 1068/1/1068 1069/1/1069 1070/1/1070
+f 1036/1/1036 1068/1/1068 1070/1/1070
+f 1036/1/1036 1070/1/1070 1032/1/1032
+f 1033/1/1033 1036/1/1036 1032/1/1032
+f 1033/1/1033 1032/1/1032 1030/1/1030
+f 1034/1/1034 1033/1/1033 1030/1/1030
+f 1034/1/1034 1030/1/1030 1035/1/1035
+f 1048/1/1048 1034/1/1034 1035/1/1035
+f 1048/1/1048 1035/1/1035 1025/1/1025
+f 1021/1/1021 1048/1/1048 1025/1/1025
+f 1021/1/1021 1025/1/1025 1019/1/1019
+f 1018/1/1018 1021/1/1021 1019/1/1019
+f 1018/1/1018 1019/1/1019 1014/1/1014
+f 1012/1/1012 1018/1/1018 1014/1/1014
+f 1012/1/1012 1014/1/1014 1009/1/1009
+f 1008/1/1008 1012/1/1012 1009/1/1009
+f 1008/1/1008 1013/1/1013 1012/1/1012
+f 1009/1/1009 1014/1/1014 1015/1/1015
+f 1009/1/1009 1015/1/1015 1010/1/1010
+f 1006/1/1006 1009/1/1009 1010/1/1010
+f 1010/1/1010 1015/1/1015 1016/1/1016
+f 1010/1/1010 1016/1/1016 1011/1/1011
+f 1015/1/1015 1017/1/1017 1016/1/1016
+f 1017/1/1017 1024/1/1024 1016/1/1016
+f 1016/1/1016 1024/1/1024 1029/1/1029
+f 1016/1/1016 1029/1/1029 1313/1/1313
+f 1313/1/1313 1029/1/1029 988/1/988
+f 1024/1/1024 1028/1/1028 1029/1/1029
+f 1029/1/1029 1028/1/1028 987/1/987
+f 1024/1/1024 1023/1/1023 1028/1/1028
+f 1023/1/1023 1027/1/1027 1028/1/1028
+f 1028/1/1028 1027/1/1027 981/1/981
+f 1023/1/1023 1026/1/1026 1027/1/1027
+f 1026/1/1026 982/1/982 1027/1/1027
+f 1026/1/1026 1030/1/1030 982/1/982
+f 1022/1/1022 1026/1/1026 1023/1/1023
+f 1017/1/1017 1022/1/1022 1023/1/1023
+f 1019/1/1019 1022/1/1022 1017/1/1017
+f 1025/1/1025 1026/1/1026 1022/1/1022
+f 1017/1/1017 1023/1/1023 1024/1/1024
+f 1014/1/1014 1017/1/1017 1015/1/1015
+f 1013/1/1013 1018/1/1018 1012/1/1012
+f 1013/1/1013 1020/1/1020 1018/1/1018
+f 1314/1/1314 1020/1/1020 1013/1/1013
+f 1316/1/1316 1314/1/1314 1013/1/1013
+f 1316/1/1316 1317/1/1317 1314/1/1314
+f 1317/1/1317 1315/1/1315 1314/1/1314
+f 1317/1/1317 1318/1/1318 1315/1/1315
+f 1318/1/1318 1045/1/1045 1315/1/1315
+f 1315/1/1315 1045/1/1045 1020/1/1020
+f 1045/1/1045 1047/1/1047 1020/1/1020
+f 1020/1/1020 1047/1/1047 1021/1/1021
+f 1045/1/1045 1046/1/1046 1047/1/1047
+f 1047/1/1047 1046/1/1046 1048/1/1048
+f 1045/1/1045 1043/1/1043 1046/1/1046
+f 1043/1/1043 1034/1/1034 1046/1/1046
+f 1043/1/1043 1038/1/1038 1034/1/1034
+f 1042/1/1042 1038/1/1038 1043/1/1043
+f 1044/1/1044 1042/1/1042 1043/1/1043
+f 1684/1/1684 1042/1/1042 1044/1/1044
+f 1776/1/1776 1684/1/1684 1044/1/1044
+f 1776/1/1776 1044/1/1044 1318/1/1318
+f 1777/1/1777 1776/1/1776 1318/1/1318
+f 1665/1/1665 1776/1/1776 1777/1/1777
+f 1659/1/1659 1665/1/1665 1777/1/1777
+f 1659/1/1659 1777/1/1777 1317/1/1317
+f 1661/1/1661 1665/1/1665 1659/1/1659
+f 1658/1/1658 1661/1/1661 1659/1/1659
+f 1658/1/1658 1659/1/1659 1657/1/1657
+f 1660/1/1660 1661/1/1661 1658/1/1658
+f 1307/1/1307 1660/1/1660 1658/1/1658
+f 1307/1/1307 1658/1/1658 1310/1/1310
+f 1087/1/1087 1660/1/1660 1307/1/1307
+f 1083/1/1083 1087/1/1087 1307/1/1307
+f 1083/1/1083 1307/1/1307 1306/1/1306
+f 1084/1/1084 1087/1/1087 1083/1/1083
+f 1081/1/1081 1084/1/1084 1083/1/1083
+f 1081/1/1081 1083/1/1083 1080/1/1080
+f 1080/1/1080 1078/1/1078 1081/1/1081
+f 1081/1/1081 1078/1/1078 1082/1/1082
+f 1082/1/1082 1078/1/1078 1079/1/1079
+f 1082/1/1082 1079/1/1079 1085/1/1085
+f 1085/1/1085 1084/1/1084 1082/1/1082
+f 1085/1/1085 1088/1/1088 1084/1/1084
+f 1088/1/1088 1086/1/1086 1084/1/1084
+f 1088/1/1088 1098/1/1098 1086/1/1086
+f 1098/1/1098 1711/1/1711 1086/1/1086
+f 1086/1/1086 1711/1/1711 1714/1/1714
+f 1086/1/1086 1714/1/1714 1664/1/1664
+f 1086/1/1086 1664/1/1664 1087/1/1087
+f 1714/1/1714 1715/1/1715 1664/1/1664
+f 1664/1/1664 1715/1/1715 1662/1/1662
+f 1664/1/1664 1662/1/1662 1660/1/1660
+f 1660/1/1660 1662/1/1662 1663/1/1663
+f 1662/1/1662 1668/1/1668 1663/1/1663
+f 1663/1/1663 1668/1/1668 1667/1/1667
+f 1663/1/1663 1667/1/1667 1666/1/1666
+f 1663/1/1663 1666/1/1666 1661/1/1661
+f 1667/1/1667 1670/1/1670 1666/1/1666
+f 1666/1/1666 1670/1/1670 1669/1/1669
+f 1666/1/1666 1669/1/1669 1665/1/1665
+f 1665/1/1665 1669/1/1669 1775/1/1775
+f 1669/1/1669 1677/1/1677 1775/1/1775
+f 1677/1/1677 1684/1/1684 1775/1/1775
+f 1677/1/1677 1683/1/1683 1684/1/1684
+f 1677/1/1677 1679/1/1679 1683/1/1683
+f 1679/1/1679 1682/1/1682 1683/1/1683
+f 1683/1/1683 1682/1/1682 1040/1/1040
+f 1683/1/1683 1040/1/1040 1042/1/1042
+f 1682/1/1682 1037/1/1037 1040/1/1040
+f 1040/1/1040 1037/1/1037 1038/1/1038
+f 1038/1/1038 1037/1/1037 1033/1/1033
+f 1682/1/1682 1041/1/1041 1037/1/1037
+f 1041/1/1041 1039/1/1039 1037/1/1037
+f 1037/1/1037 1039/1/1039 1036/1/1036
+f 1041/1/1041 1049/1/1049 1039/1/1039
+f 1049/1/1049 1062/1/1062 1039/1/1039
+f 1039/1/1039 1062/1/1062 1064/1/1064
+f 1039/1/1039 1064/1/1064 1068/1/1068
+f 1064/1/1064 1067/1/1067 1068/1/1068
+f 1064/1/1064 1063/1/1063 1067/1/1067
+f 1063/1/1063 1066/1/1066 1067/1/1067
+f 1066/1/1066 1078/1/1078 1067/1/1067
+f 1067/1/1067 1078/1/1078 1075/1/1075
+f 1067/1/1067 1075/1/1075 1073/1/1073
+f 1067/1/1067 1073/1/1073 1069/1/1069
+f 1073/1/1073 1075/1/1075 1076/1/1076
+f 1073/1/1073 1076/1/1076 1074/1/1074
+f 1074/1/1074 1076/1/1076 1309/1/1309
+f 1076/1/1076 1075/1/1075 1077/1/1077
+f 1305/1/1305 1076/1/1076 1077/1/1077
+f 1077/1/1077 1083/1/1083 1305/1/1305
+f 1077/1/1077 1075/1/1075 1080/1/1080
+f 1061/1/1061 1066/1/1066 1063/1/1063
+f 1062/1/1062 1061/1/1061 1063/1/1063
+f 1057/1/1057 1061/1/1061 1062/1/1062
+f 1057/1/1057 1059/1/1059 1061/1/1061
+f 1059/1/1059 1065/1/1065 1061/1/1061
+f 1059/1/1059 1095/1/1095 1065/1/1065
+f 1095/1/1095 1093/1/1093 1065/1/1065
+f 1065/1/1065 1093/1/1093 1079/1/1079
+f 1065/1/1065 1079/1/1079 1066/1/1066
+f 1089/1/1089 1079/1/1079 1093/1/1093
+f 1089/1/1089 1093/1/1093 1090/1/1090
+f 1090/1/1090 1088/1/1088 1089/1/1089
+f 1091/1/1091 1088/1/1088 1090/1/1090
+f 1091/1/1091 1092/1/1092 1088/1/1088
+f 1096/1/1096 1092/1/1092 1091/1/1091
+f 1091/1/1091 1094/1/1094 1096/1/1096
+f 1096/1/1096 1094/1/1094 1100/1/1100
+f 1096/1/1096 1100/1/1100 1099/1/1099
+f 1099/1/1099 1097/1/1097 1096/1/1096
+f 1101/1/1101 1097/1/1097 1099/1/1099
+f 1101/1/1101 1102/1/1102 1097/1/1097
+f 1102/1/1102 1128/1/1128 1097/1/1097
+f 1097/1/1097 1128/1/1128 1098/1/1098
+f 1097/1/1097 1098/1/1098 1092/1/1092
+f 1128/1/1128 1712/1/1712 1098/1/1098
+f 1128/1/1128 1724/1/1724 1712/1/1712
+f 1724/1/1724 1708/1/1708 1712/1/1712
+f 1712/1/1712 1708/1/1708 1707/1/1707
+f 1712/1/1712 1707/1/1707 1711/1/1711
+f 1711/1/1711 1707/1/1707 1710/1/1710
+f 1707/1/1707 1704/1/1704 1710/1/1710
+f 1710/1/1710 1704/1/1704 1709/1/1709
+f 1710/1/1710 1709/1/1709 1713/1/1713
+f 1710/1/1710 1713/1/1713 1715/1/1715
+f 1715/1/1715 1713/1/1713 1718/1/1718
+f 1715/1/1715 1718/1/1718 1721/1/1721
+f 1718/1/1718 1720/1/1720 1721/1/1721
+f 1721/1/1721 1720/1/1720 1722/1/1722
+f 1721/1/1721 1722/1/1722 1672/1/1672
+f 1662/1/1662 1721/1/1721 1672/1/1672
+f 1672/1/1672 1722/1/1722 1673/1/1673
+f 1672/1/1672 1673/1/1673 1668/1/1668
+f 1668/1/1668 1673/1/1673 1671/1/1671
+f 1673/1/1673 1674/1/1674 1671/1/1671
+f 1674/1/1674 1675/1/1675 1671/1/1671
+f 1671/1/1671 1675/1/1675 1676/1/1676
+f 1671/1/1671 1676/1/1676 1670/1/1670
+f 1670/1/1670 1676/1/1676 1677/1/1677
+f 1675/1/1675 1678/1/1678 1676/1/1676
+f 1676/1/1676 1678/1/1678 1679/1/1679
+f 1675/1/1675 1680/1/1680 1678/1/1678
+f 1680/1/1680 1681/1/1681 1678/1/1678
+f 1678/1/1678 1681/1/1681 1682/1/1682
+f 1685/1/1685 1681/1/1681 1680/1/1680
+f 1674/1/1674 1685/1/1685 1680/1/1680
+f 1688/1/1688 1685/1/1685 1674/1/1674
+f 1722/1/1722 1688/1/1688 1674/1/1674
+f 1688/1/1688 1687/1/1687 1685/1/1685
+f 1687/1/1687 1686/1/1686 1685/1/1685
+f 1687/1/1687 1312/1/1312 1686/1/1686
+f 1312/1/1312 1050/1/1050 1686/1/1686
+f 1686/1/1686 1050/1/1050 1681/1/1681
+f 1681/1/1681 1050/1/1050 1041/1/1041
+f 1312/1/1312 1056/1/1056 1050/1/1050
+f 1056/1/1056 1051/1/1051 1050/1/1050
+f 1050/1/1050 1051/1/1051 1052/1/1052
+f 1050/1/1050 1052/1/1052 1049/1/1049
+f 1052/1/1052 1057/1/1057 1049/1/1049
+f 1052/1/1052 1055/1/1055 1057/1/1057
+f 1051/1/1051 1055/1/1055 1052/1/1052
+f 1051/1/1051 1054/1/1054 1055/1/1055
+f 1054/1/1054 1060/1/1060 1055/1/1055
+f 1055/1/1055 1060/1/1060 1058/1/1058
+f 1055/1/1055 1058/1/1058 1059/1/1059
+f 1060/1/1060 1094/1/1094 1058/1/1058
+f 1058/1/1058 1094/1/1094 1093/1/1093
+f 1060/1/1060 1303/1/1303 1094/1/1094
+f 1302/1/1302 1303/1/1303 1060/1/1060
+f 1301/1/1301 1302/1/1302 1060/1/1060
+f 1301/1/1301 1104/1/1104 1302/1/1302
+f 1301/1/1301 1109/1/1109 1104/1/1104
+f 1109/1/1109 1105/1/1105 1104/1/1104
+f 1101/1/1101 1104/1/1104 1105/1/1105
+f 1101/1/1101 1105/1/1105 1103/1/1103
+f 1103/1/1103 1105/1/1105 1106/1/1106
+f 1106/1/1106 1102/1/1102 1103/1/1103
+f 1106/1/1106 1111/1/1111 1102/1/1102
+f 1111/1/1111 1127/1/1127 1102/1/1102
+f 1111/1/1111 1756/1/1756 1127/1/1127
+f 1756/1/1756 1727/1/1727 1127/1/1127
+f 1727/1/1727 1724/1/1724 1127/1/1127
+f 1727/1/1727 1726/1/1726 1724/1/1724
+f 1726/1/1726 1725/1/1725 1724/1/1724
+f 1726/1/1726 1729/1/1729 1725/1/1725
+f 1729/1/1729 1728/1/1728 1725/1/1725
+f 1725/1/1725 1728/1/1728 1708/1/1708
+f 1708/1/1708 1728/1/1728 1705/1/1705
+f 1708/1/1708 1705/1/1705 1703/1/1703
+f 1705/1/1705 1699/1/1699 1703/1/1703
+f 1703/1/1703 1699/1/1699 1701/1/1701
+f 1703/1/1703 1701/1/1701 1704/1/1704
+f 1704/1/1704 1701/1/1701 1702/1/1702
+f 1701/1/1701 1697/1/1697 1702/1/1702
+f 1702/1/1702 1697/1/1697 1693/1/1693
+f 1702/1/1702 1693/1/1693 1716/1/1716
+f 1709/1/1709 1702/1/1702 1716/1/1716
+f 1716/1/1716 1693/1/1693 1719/1/1719
+f 1716/1/1716 1719/1/1719 1717/1/1717
+f 1713/1/1713 1716/1/1716 1717/1/1717
+f 1717/1/1717 1719/1/1719 1720/1/1720
+f 1719/1/1719 1723/1/1723 1720/1/1720
+f 1720/1/1720 1723/1/1723 1688/1/1688
+f 1719/1/1719 1690/1/1690 1723/1/1723
+f 1723/1/1723 1690/1/1690 1687/1/1687
+f 1719/1/1719 1689/1/1689 1690/1/1690
+f 1689/1/1689 1312/1/1312 1690/1/1690
+f 1689/1/1689 1311/1/1311 1312/1/1312
+f 1692/1/1692 1311/1/1311 1689/1/1689
+f 1693/1/1693 1692/1/1692 1689/1/1689
+f 1694/1/1694 1692/1/1692 1693/1/1693
+f 1694/1/1694 1695/1/1695 1692/1/1692
+f 1695/1/1695 1691/1/1691 1692/1/1692
+f 1698/1/1698 1691/1/1691 1695/1/1695
+f 1696/1/1696 1698/1/1698 1695/1/1695
+f 1700/1/1700 1698/1/1698 1696/1/1696
+f 1699/1/1699 1700/1/1700 1696/1/1696
+f 1706/1/1706 1700/1/1700 1699/1/1699
+f 1706/1/1706 1735/1/1735 1700/1/1700
+f 1735/1/1735 1737/1/1737 1700/1/1700
+f 1735/1/1735 1736/1/1736 1737/1/1737
+f 1736/1/1736 1304/1/1304 1737/1/1737
+f 1737/1/1737 1304/1/1304 1698/1/1698
+f 1736/1/1736 1148/1/1148 1304/1/1304
+f 1148/1/1148 1149/1/1149 1304/1/1304
+f 1304/1/1304 1149/1/1149 1053/1/1053
+f 1304/1/1304 1053/1/1053 1691/1/1691
+f 1691/1/1691 1053/1/1053 1056/1/1056
+f 1691/1/1691 1056/1/1056 1311/1/1311
+f 1149/1/1149 1300/1/1300 1053/1/1053
+f 1053/1/1053 1300/1/1300 1054/1/1054
+f 1300/1/1300 1301/1/1301 1054/1/1054
+f 1149/1/1149 1144/1/1144 1300/1/1300
+f 1144/1/1144 1109/1/1109 1300/1/1300
+f 1144/1/1144 1115/1/1115 1109/1/1109
+f 1115/1/1115 1108/1/1108 1109/1/1109
+f 1114/1/1114 1108/1/1108 1115/1/1115
+f 1114/1/1114 1113/1/1113 1108/1/1108
+f 1113/1/1113 1107/1/1107 1108/1/1108
+f 1108/1/1108 1107/1/1107 1105/1/1105
+f 1113/1/1113 1112/1/1112 1107/1/1107
+f 1110/1/1110 1107/1/1107 1112/1/1112
+f 1110/1/1110 1112/1/1112 1119/1/1119
+f 1119/1/1119 1123/1/1123 1110/1/1110
+f 1110/1/1110 1123/1/1123 1111/1/1111
+f 1120/1/1120 1123/1/1123 1119/1/1119
+f 1119/1/1119 1118/1/1118 1120/1/1120
+f 1120/1/1120 1118/1/1118 1121/1/1121
+f 1121/1/1121 1124/1/1124 1120/1/1120
+f 1125/1/1125 1124/1/1124 1121/1/1121
+f 1121/1/1121 1122/1/1122 1125/1/1125
+f 1125/1/1125 1122/1/1122 1130/1/1130
+f 1130/1/1130 2435/1/2435 1125/1/1125
+f 1137/1/1137 2435/1/2435 1130/1/1130
+f 1137/1/1137 1130/1/1130 1129/1/1129
+f 1134/1/1134 1137/1/1137 1129/1/1129
+f 1134/1/1134 1129/1/1129 1133/1/1133
+f 1134/1/1134 1133/1/1133 1135/1/1135
+f 1134/1/1134 1135/1/1135 2436/1/2436
+f 1135/1/1135 2439/1/2439 2436/1/2436
+f 2436/1/2436 2439/1/2439 2437/1/2437
+f 2437/1/2437 2438/1/2438 2436/1/2436
+f 2436/1/2436 2438/1/2438 2434/1/2434
+f 2436/1/2436 2434/1/2434 1137/1/1137
+f 2438/1/2438 1759/1/1759 2434/1/2434
+f 2434/1/2434 1759/1/1759 1757/1/1757
+f 2434/1/2434 1757/1/1757 2435/1/2435
+f 2435/1/2435 1757/1/1757 1124/1/1124
+f 1124/1/1124 1757/1/1757 1126/1/1126
+f 1124/1/1124 1126/1/1126 1123/1/1123
+f 1123/1/1123 1126/1/1126 1756/1/1756
+f 1126/1/1126 1755/1/1755 1756/1/1756
+f 1126/1/1126 1754/1/1754 1755/1/1755
+f 1755/1/1755 1754/1/1754 1753/1/1753
+f 1755/1/1755 1753/1/1753 1727/1/1727
+f 1753/1/1753 1754/1/1754 1749/1/1749
+f 1748/1/1748 1753/1/1753 1749/1/1749
+f 1748/1/1748 1749/1/1749 1747/1/1747
+f 1746/1/1746 1748/1/1748 1747/1/1747
+f 1746/1/1746 1747/1/1747 1743/1/1743
+f 1743/1/1743 1739/1/1739 1746/1/1746
+f 1746/1/1746 1739/1/1739 1731/1/1731
+f 1746/1/1746 1731/1/1731 1733/1/1733
+f 1733/1/1733 1731/1/1731 1729/1/1729
+f 1731/1/1731 1732/1/1732 1729/1/1729
+f 1729/1/1729 1732/1/1732 1730/1/1730
+f 1730/1/1730 1732/1/1732 1734/1/1734
+f 1730/1/1730 1734/1/1734 1735/1/1735
+f 1732/1/1732 1738/1/1738 1734/1/1734
+f 1734/1/1734 1738/1/1738 1736/1/1736
+f 1738/1/1738 1740/1/1740 1736/1/1736
+f 1739/1/1739 1740/1/1740 1738/1/1738
+f 1741/1/1741 1740/1/1740 1739/1/1739
+f 1741/1/1741 1148/1/1148 1740/1/1740
+f 1147/1/1147 1148/1/1148 1741/1/1741
+f 1742/1/1742 1147/1/1147 1741/1/1741
+f 1742/1/1742 1741/1/1741 1743/1/1743
+f 1743/1/1743 1744/1/1744 1742/1/1742
+f 1742/1/1742 1744/1/1744 1152/1/1152
+f 1744/1/1744 1745/1/1745 1152/1/1152
+f 1152/1/1152 1745/1/1745 1153/1/1153
+f 1152/1/1152 1153/1/1153 1150/1/1150
+f 1147/1/1147 1152/1/1152 1150/1/1150
+f 1147/1/1147 1150/1/1150 1146/1/1146
+f 1146/1/1146 1145/1/1145 1147/1/1147
+f 1146/1/1146 1142/1/1142 1145/1/1145
+f 1142/1/1142 1141/1/1141 1145/1/1145
+f 1145/1/1145 1141/1/1141 1143/1/1143
+f 1145/1/1145 1143/1/1143 1144/1/1144
+f 1143/1/1143 1114/1/1114 1144/1/1144
+f 1141/1/1141 1114/1/1114 1143/1/1143
+f 1141/1/1141 1116/1/1116 1114/1/1114
+f 1141/1/1141 1140/1/1140 1116/1/1116
+f 1140/1/1140 1117/1/1117 1116/1/1116
+f 1116/1/1116 1117/1/1117 1113/1/1113
+f 1117/1/1117 1118/1/1118 1113/1/1113
+f 1117/1/1117 1122/1/1122 1118/1/1118
+f 1132/1/1132 1122/1/1122 1117/1/1117
+f 1131/1/1131 1122/1/1122 1132/1/1132
+f 1133/1/1133 1131/1/1131 1132/1/1132
+f 1133/1/1133 1132/1/1132 1136/1/1136
+f 1136/1/1136 1139/1/1139 1133/1/1133
+f 1133/1/1133 1139/1/1139 2448/1/2448
+f 1139/1/1139 1278/1/1278 2448/1/2448
+f 2448/1/2448 1278/1/1278 2447/1/2447
+f 2448/1/2448 2447/1/2447 2444/1/2444
+f 1135/1/1135 2448/1/2448 2444/1/2444
+f 2444/1/2444 2447/1/2447 2445/1/2445
+f 2444/1/2444 2445/1/2445 2443/1/2443
+f 2439/1/2439 2444/1/2444 2443/1/2443
+f 2439/1/2439 2443/1/2443 2440/1/2440
+f 2440/1/2440 2443/1/2443 2441/1/2441
+f 2440/1/2440 2441/1/2441 2438/1/2438
+f 2443/1/2443 2442/1/2442 2441/1/2441
+f 2442/1/2442 1761/1/1761 2441/1/2441
+f 1761/1/1761 1759/1/1759 2441/1/2441
+f 1198/1/1198 1759/1/1759 1761/1/1761
+f 1198/1/1198 1761/1/1761 1201/1/1201
+f 1198/1/1198 1201/1/1201 1200/1/1200
+f 1197/1/1197 1198/1/1198 1200/1/1200
+f 1197/1/1197 1200/1/1200 1194/1/1194
+f 1191/1/1191 1197/1/1197 1194/1/1194
+f 1191/1/1191 1194/1/1194 1190/1/1190
+f 1190/1/1190 1186/1/1186 1191/1/1191
+f 1191/1/1191 1186/1/1186 1183/1/1183
+f 1191/1/1191 1183/1/1183 1195/1/1195
+f 1195/1/1195 1196/1/1196 1191/1/1191
+f 1198/1/1198 1196/1/1196 1195/1/1195
+f 1198/1/1198 1195/1/1195 1199/1/1199
+f 1195/1/1195 1182/1/1182 1199/1/1199
+f 1199/1/1199 1182/1/1182 1181/1/1181
+f 1199/1/1199 1181/1/1181 1178/1/1178
+f 1199/1/1199 1178/1/1178 1758/1/1758
+f 1759/1/1759 1199/1/1199 1758/1/1758
+f 1758/1/1758 1178/1/1178 1760/1/1760
+f 1758/1/1758 1760/1/1760 1126/1/1126
+f 1126/1/1126 1760/1/1760 1772/1/1772
+f 1772/1/1772 1760/1/1760 1172/1/1172
+f 1773/1/1773 1772/1/1772 1172/1/1172
+f 1773/1/1773 1172/1/1172 1174/1/1174
+f 1175/1/1175 1773/1/1773 1174/1/1174
+f 1175/1/1175 1174/1/1174 1161/1/1161
+f 1160/1/1160 1175/1/1175 1161/1/1161
+f 1160/1/1160 1161/1/1161 1158/1/1158
+f 1153/1/1153 1160/1/1160 1158/1/1158
+f 1153/1/1153 1158/1/1158 1154/1/1154
+f 1158/1/1158 1159/1/1159 1154/1/1154
+f 1154/1/1154 1159/1/1159 1157/1/1157
+f 1154/1/1154 1157/1/1157 1155/1/1155
+f 1151/1/1151 1154/1/1154 1155/1/1155
+f 1151/1/1151 1155/1/1155 1139/1/1139
+f 1146/1/1146 1151/1/1151 1139/1/1139
+f 1139/1/1139 1155/1/1155 1156/1/1156
+f 1150/1/1150 1154/1/1154 1151/1/1151
+f 1155/1/1155 1157/1/1157 1156/1/1156
+f 1157/1/1157 1168/1/1168 1156/1/1156
+f 1156/1/1156 1168/1/1168 1275/1/1275
+f 1156/1/1156 1275/1/1275 1278/1/1278
+f 1278/1/1278 1275/1/1275 1277/1/1277
+f 1275/1/1275 1276/1/1276 1277/1/1277
+f 1277/1/1277 1276/1/1276 2451/1/2451
+f 1277/1/1277 2451/1/2451 2449/1/2449
+f 2447/1/2447 1277/1/1277 2449/1/2449
+f 2449/1/2449 2451/1/2451 2452/1/2452
+f 2449/1/2449 2452/1/2452 2450/1/2450
+f 2445/1/2445 2449/1/2449 2450/1/2450
+f 2445/1/2445 2450/1/2450 2446/1/2446
+f 2446/1/2446 2450/1/2450 2454/1/2454
+f 2446/1/2446 2454/1/2454 2476/1/2476
+f 2442/1/2442 2446/1/2446 2476/1/2476
+f 2476/1/2476 2454/1/2454 1762/1/1762
+f 1762/1/1762 1761/1/1761 2476/1/2476
+f 1762/1/1762 2454/1/2454 1763/1/1763
+f 1763/1/1763 1203/1/1203 1762/1/1762
+f 1762/1/1762 1203/1/1203 1201/1/1201
+f 1201/1/1201 1203/1/1203 1202/1/1202
+f 1202/1/1202 1203/1/1203 1204/1/1204
+f 1202/1/1202 1204/1/1204 1205/1/1205
+f 1206/1/1206 1202/1/1202 1205/1/1205
+f 1206/1/1206 1205/1/1205 1207/1/1207
+f 1208/1/1208 1206/1/1206 1207/1/1207
+f 1208/1/1208 1207/1/1207 1273/1/1273
+f 1192/1/1192 1208/1/1208 1273/1/1273
+f 1192/1/1192 1273/1/1273 1271/1/1271
+f 1271/1/1271 1274/1/1274 1192/1/1192
+f 1188/1/1188 1192/1/1192 1274/1/1274
+f 1275/1/1275 1188/1/1188 1274/1/1274
+f 1188/1/1188 1189/1/1189 1192/1/1192
+f 1193/1/1193 1192/1/1192 1189/1/1189
+f 1193/1/1193 1189/1/1189 1190/1/1190
+f 1187/1/1187 1189/1/1189 1188/1/1188
+f 1185/1/1185 1187/1/1187 1188/1/1188
+f 1168/1/1168 1185/1/1185 1188/1/1188
+f 1167/1/1167 1185/1/1185 1168/1/1168
+f 1165/1/1165 1167/1/1167 1168/1/1168
+f 1165/1/1165 1166/1/1166 1167/1/1167
+f 1166/1/1166 1170/1/1170 1167/1/1167
+f 1169/1/1169 1170/1/1170 1166/1/1166
+f 1164/1/1164 1169/1/1169 1166/1/1166
+f 1171/1/1171 1169/1/1169 1164/1/1164
+f 1162/1/1162 1171/1/1171 1164/1/1164
+f 1162/1/1162 1164/1/1164 1163/1/1163
+f 1159/1/1159 1162/1/1162 1163/1/1163
+f 1161/1/1161 1162/1/1162 1159/1/1159
+f 1163/1/1163 1164/1/1164 1165/1/1165
+f 1163/1/1163 1165/1/1165 1157/1/1157
+f 1174/1/1174 1171/1/1171 1162/1/1162
+f 1171/1/1171 1173/1/1173 1169/1/1169
+f 1173/1/1173 1176/1/1176 1169/1/1169
+f 1169/1/1169 1176/1/1176 1177/1/1177
+f 1176/1/1176 1179/1/1179 1177/1/1177
+f 1177/1/1177 1179/1/1179 1180/1/1180
+f 1177/1/1177 1180/1/1180 1170/1/1170
+f 1170/1/1170 1180/1/1180 1184/1/1184
+f 1170/1/1170 1184/1/1184 1185/1/1185
+f 1180/1/1180 1183/1/1183 1184/1/1184
+f 1180/1/1180 1182/1/1182 1183/1/1183
+f 1179/1/1179 1182/1/1182 1180/1/1180
+f 1176/1/1176 1178/1/1178 1179/1/1179
+f 1173/1/1173 1178/1/1178 1176/1/1176
+f 1172/1/1172 1173/1/1173 1171/1/1171
+f 1169/1/1169 1177/1/1177 1170/1/1170
+f 1164/1/1164 1166/1/1166 1165/1/1165
+f 1167/1/1167 1170/1/1170 1185/1/1185
+f 1185/1/1185 1184/1/1184 1187/1/1187
+f 1184/1/1184 1186/1/1186 1187/1/1187
+f 1187/1/1187 1186/1/1186 1189/1/1189
+f 1271/1/1271 1272/1/1272 1274/1/1274
+f 1276/1/1276 1274/1/1274 1272/1/1272
+f 1270/1/1270 1272/1/1272 1271/1/1271
+f 1271/1/1271 1222/1/1222 1270/1/1270
+f 1270/1/1270 1222/1/1222 1269/1/1269
+f 1270/1/1270 1269/1/1269 2457/1/2457
+f 2455/1/2455 1270/1/1270 2457/1/2457
+f 2455/1/2455 2457/1/2457 2458/1/2458
+f 2458/1/2458 2456/1/2456 2455/1/2455
+f 2452/1/2452 2455/1/2455 2456/1/2456
+f 2453/1/2453 2452/1/2452 2456/1/2456
+f 2453/1/2453 2456/1/2456 2454/1/2454
+f 2454/1/2454 2456/1/2456 2474/1/2474
+f 2456/1/2456 2475/1/2475 2474/1/2474
+f 2474/1/2474 2475/1/2475 2473/1/2473
+f 2474/1/2474 2473/1/2473 1763/1/1763
+f 1764/1/1764 1763/1/1763 2473/1/2473
+f 1764/1/1764 2473/1/2473 2471/1/2471
+f 2471/1/2471 2467/1/2467 1764/1/1764
+f 1764/1/1764 2467/1/2467 1765/1/1765
+f 1212/1/1212 1764/1/1764 1765/1/1765
+f 1212/1/1212 1765/1/1765 1235/1/1235
+f 1229/1/1229 1212/1/1212 1235/1/1235
+f 1229/1/1229 1235/1/1235 1228/1/1228
+f 1228/1/1228 1224/1/1224 1229/1/1229
+f 1229/1/1229 1224/1/1224 1213/1/1213
+f 1224/1/1224 1219/1/1219 1213/1/1213
+f 1213/1/1213 1219/1/1219 1217/1/1217
+f 1213/1/1213 1217/1/1217 1214/1/1214
+f 1213/1/1213 1214/1/1214 1211/1/1211
+f 1212/1/1212 1213/1/1213 1211/1/1211
+f 1203/1/1203 1212/1/1212 1211/1/1211
+f 1211/1/1211 1214/1/1214 1209/1/1209
+f 1211/1/1211 1209/1/1209 1204/1/1204
+f 1214/1/1214 1215/1/1215 1209/1/1209
+f 1210/1/1210 1209/1/1209 1215/1/1215
+f 1210/1/1210 1215/1/1215 1216/1/1216
+f 1207/1/1207 1210/1/1210 1216/1/1216
+f 1216/1/1216 1215/1/1215 1218/1/1218
+f 1216/1/1216 1218/1/1218 1222/1/1222
+f 1218/1/1218 1221/1/1221 1222/1/1222
+f 1220/1/1220 1221/1/1221 1218/1/1218
+f 1219/1/1219 1220/1/1220 1218/1/1218
+f 1223/1/1223 1220/1/1220 1219/1/1219
+f 1223/1/1223 1225/1/1225 1220/1/1220
+f 1226/1/1226 1225/1/1225 1223/1/1223
+f 1227/1/1227 1226/1/1226 1223/1/1223
+f 1227/1/1227 1223/1/1223 1224/1/1224
+f 1230/1/1230 1226/1/1226 1227/1/1227
+f 1231/1/1231 1230/1/1230 1227/1/1227
+f 1231/1/1231 1227/1/1227 1228/1/1228
+f 1234/1/1234 1230/1/1230 1231/1/1231
+f 1231/1/1231 1235/1/1235 1234/1/1234
+f 1236/1/1236 1234/1/1234 1235/1/1235
+f 1235/1/1235 1766/1/1766 1236/1/1236
+f 1236/1/1236 1766/1/1766 1767/1/1767
+f 1767/1/1767 1299/1/1299 1236/1/1236
+f 1236/1/1236 1299/1/1299 1298/1/1298
+f 1298/1/1298 1237/1/1237 1236/1/1236
+f 1298/1/1298 1239/1/1239 1237/1/1237
+f 1239/1/1239 1240/1/1240 1237/1/1237
+f 1237/1/1237 1240/1/1240 1238/1/1238
+f 1237/1/1237 1238/1/1238 1233/1/1233
+f 1237/1/1237 1233/1/1233 1234/1/1234
+f 1233/1/1233 1238/1/1238 1232/1/1232
+f 1233/1/1233 1232/1/1232 1230/1/1230
+f 1238/1/1238 1241/1/1241 1232/1/1232
+f 1232/1/1232 1241/1/1241 1225/1/1225
+f 1241/1/1241 1267/1/1267 1225/1/1225
+f 1225/1/1225 1267/1/1267 1221/1/1221
+f 1267/1/1267 1268/1/1268 1221/1/1221
+f 1221/1/1221 1268/1/1268 1269/1/1269
+f 1268/1/1268 2459/1/2459 1269/1/1269
+f 1268/1/1268 1297/1/1297 2459/1/2459
+f 1297/1/1297 2461/1/2461 2459/1/2459
+f 2459/1/2459 2461/1/2461 2465/1/2465
+f 2466/1/2466 2459/1/2459 2465/1/2465
+f 2468/1/2468 2466/1/2466 2465/1/2465
+f 2468/1/2468 2465/1/2465 2467/1/2467
+f 2465/1/2465 2464/1/2464 2467/1/2467
+f 2467/1/2467 2464/1/2464 2469/1/2469
+f 2463/1/2463 2469/1/2469 2464/1/2464
+f 2461/1/2461 2463/1/2463 2464/1/2464
+f 2460/1/2460 2463/1/2463 2461/1/2461
+f 2460/1/2460 2462/1/2462 2463/1/2463
+f 2462/1/2462 2470/1/2470 2463/1/2463
+f 2462/1/2462 2477/1/2477 2470/1/2470
+f 2470/1/2470 2477/1/2477 1766/1/1766
+f 2470/1/2470 1766/1/1766 2469/1/2469
+f 1766/1/1766 1765/1/1765 2469/1/2469
+f 2462/1/2462 1296/1/1296 2477/1/2477
+f 1296/1/1296 1767/1/1767 2477/1/2477
+f 1767/1/1767 1296/1/1296 2478/1/2478
+f 1767/1/1767 2478/1/2478 1292/1/1292
+f 1292/1/1292 1768/1/1768 1767/1/1767
+f 1768/1/1768 1292/1/1292 1290/1/1290
+f 1768/1/1768 1290/1/1290 1769/1/1769
+f 1768/1/1768 1769/1/1769 2515/1/2515
+f 2515/1/2515 1252/1/1252 1768/1/1768
+f 1768/1/1768 1252/1/1252 1250/1/1250
+f 1768/1/1768 1250/1/1250 1299/1/1299
+f 1299/1/1299 1250/1/1250 1244/1/1244
+f 1250/1/1250 1245/1/1245 1244/1/1244
+f 1244/1/1244 1245/1/1245 1242/1/1242
+f 1244/1/1244 1242/1/1242 1239/1/1239
+f 1245/1/1245 1243/1/1243 1242/1/1242
+f 1242/1/1242 1243/1/1243 1240/1/1240
+f 1240/1/1240 1243/1/1243 1241/1/1241
+f 1243/1/1243 1248/1/1248 1241/1/1241
+f 1243/1/1243 1247/1/1247 1248/1/1248
+f 1247/1/1247 1266/1/1266 1248/1/1248
+f 1248/1/1248 1266/1/1266 1297/1/1297
+f 1266/1/1266 2460/1/2460 1297/1/1297
+f 1266/1/1266 1295/1/1295 2460/1/2460
+f 1265/1/1265 1295/1/1295 1266/1/1266
+f 1265/1/1265 1293/1/1293 1295/1/1295
+f 1293/1/1293 1294/1/1294 1295/1/1295
+f 1295/1/1295 1294/1/1294 1296/1/1296
+f 1293/1/1293 1291/1/1291 1294/1/1294
+f 1291/1/1291 1292/1/1292 1294/1/1294
+f 1281/1/1281 1291/1/1291 1293/1/1293
+f 1282/1/1282 1281/1/1281 1293/1/1293
+f 1263/1/1263 1281/1/1281 1282/1/1282
+f 1262/1/1262 1263/1/1263 1282/1/1282
+f 1262/1/1262 1282/1/1282 1264/1/1264
+f 1254/1/1254 1262/1/1262 1264/1/1264
+f 1254/1/1254 1264/1/1264 1247/1/1247
+f 1246/1/1246 1254/1/1254 1247/1/1247
+f 1253/1/1253 1254/1/1254 1246/1/1246
+f 1251/1/1251 1253/1/1253 1246/1/1246
+f 1251/1/1251 1246/1/1246 1249/1/1249
+f 1252/1/1252 1251/1/1251 1249/1/1249
+f 1249/1/1249 1246/1/1246 1245/1/1245
+f 2513/1/2513 1253/1/1253 1251/1/1251
+f 2515/1/2515 2513/1/2513 1251/1/1251
+f 2514/1/2514 2513/1/2513 2515/1/2515
+f 2510/1/2510 2513/1/2513 2514/1/2514
+f 1769/1/1769 2510/1/2510 2514/1/2514
+f 2510/1/2510 1769/1/1769 1770/1/1770
+f 1770/1/1770 2509/1/2509 2510/1/2510
+f 2509/1/2509 2511/1/2511 2510/1/2510
+f 2510/1/2510 2511/1/2511 2512/1/2512
+f 2511/1/2511 1255/1/1255 2512/1/2512
+f 2512/1/2512 1255/1/1255 2513/1/2513
+f 2511/1/2511 1257/1/1257 1255/1/1255
+f 1257/1/1257 1258/1/1258 1255/1/1255
+f 1255/1/1255 1258/1/1258 1256/1/1256
+f 1255/1/1255 1256/1/1256 1253/1/1253
+f 1258/1/1258 1259/1/1259 1256/1/1256
+f 1256/1/1256 1259/1/1259 1262/1/1262
+f 1258/1/1258 1261/1/1261 1259/1/1259
+f 1259/1/1259 1261/1/1261 1263/1/1263
+f 1261/1/1261 1279/1/1279 1263/1/1263
+f 1263/1/1263 1279/1/1279 1280/1/1280
+f 1279/1/1279 1289/1/1289 1280/1/1280
+f 1280/1/1280 1289/1/1289 1290/1/1290
+f 1280/1/1280 1290/1/1290 1291/1/1291
+f 1290/1/1290 1289/1/1289 1770/1/1770
+f 1770/1/1770 1289/1/1289 1288/1/1288
+f 1287/1/1287 1770/1/1770 1288/1/1288
+f 1285/1/1285 1287/1/1287 1288/1/1288
+f 1285/1/1285 1288/1/1288 1286/1/1286
+f 1283/1/1283 1285/1/1285 1286/1/1286
+f 1283/1/1283 1286/1/1286 1279/1/1279
+f 1283/1/1283 1284/1/1284 1285/1/1285
+f 1260/1/1260 1284/1/1284 1283/1/1283
+f 1260/1/1260 1283/1/1283 1261/1/1261
+f 1284/1/1284 1260/1/1260 2504/1/2504
+f 1284/1/1284 2504/1/2504 1287/1/1287
+f 1287/1/1287 2504/1/2504 1771/1/1771
+f 1771/1/1771 2504/1/2504 2506/1/2506
+f 2506/1/2506 1770/1/1770 1771/1/1771
+f 1770/1/1770 2506/1/2506 2507/1/2507
+f 2506/1/2506 2508/1/2508 2507/1/2507
+f 2507/1/2507 2508/1/2508 2511/1/2511
+f 2506/1/2506 2504/1/2504 2508/1/2508
+f 2504/1/2504 2505/1/2505 2508/1/2508
+f 2508/1/2508 2505/1/2505 1257/1/1257
+f 2505/1/2505 2504/1/2504 1258/1/1258
+f 1260/1/1260 1258/1/1258 2504/1/2504
+f 1284/1/1284 1287/1/1287 1285/1/1285
+f 1287/1/1287 1771/1/1771 1770/1/1770
+f 1286/1/1286 1288/1/1288 1289/1/1289
+f 1286/1/1286 1289/1/1289 1279/1/1279
+f 1261/1/1261 1283/1/1283 1279/1/1279
+f 1258/1/1258 1260/1/1260 1261/1/1261
+f 2505/1/2505 1258/1/1258 1257/1/1257
+f 2508/1/2508 1257/1/1257 2511/1/2511
+f 2507/1/2507 2511/1/2511 2509/1/2509
+f 2509/1/2509 1770/1/1770 2507/1/2507
+f 2510/1/2510 2512/1/2512 2513/1/2513
+f 2513/1/2513 1255/1/1255 1253/1/1253
+f 1253/1/1253 1256/1/1256 1254/1/1254
+f 1264/1/1264 1265/1/1265 1247/1/1247
+f 1256/1/1256 1262/1/1262 1254/1/1254
+f 1264/1/1264 1282/1/1282 1265/1/1265
+f 1259/1/1259 1263/1/1263 1262/1/1262
+f 1263/1/1263 1280/1/1280 1281/1/1281
+f 1281/1/1281 1280/1/1280 1291/1/1291
+f 1282/1/1282 1293/1/1293 1265/1/1265
+f 1247/1/1247 1265/1/1265 1266/1/1266
+f 1246/1/1246 1247/1/1247 1243/1/1243
+f 1245/1/1245 1246/1/1246 1243/1/1243
+f 1250/1/1250 1249/1/1249 1245/1/1245
+f 1252/1/1252 1249/1/1249 1250/1/1250
+f 2515/1/2515 1251/1/1251 1252/1/1252
+f 2515/1/2515 1769/1/1769 2514/1/2514
+f 1769/1/1769 1290/1/1290 1770/1/1770
+f 1291/1/1291 1290/1/1290 1292/1/1292
+f 1294/1/1294 1292/1/1292 2478/1/2478
+f 1294/1/1294 2478/1/2478 1296/1/1296
+f 1295/1/1295 1296/1/1296 2462/1/2462
+f 1295/1/1295 2462/1/2462 2460/1/2460
+f 2463/1/2463 2470/1/2470 2469/1/2469
+f 2472/1/2472 2466/1/2466 2468/1/2468
+f 2472/1/2472 2468/1/2468 2471/1/2471
+f 2458/1/2458 2466/1/2466 2472/1/2472
+f 2472/1/2472 2475/1/2475 2458/1/2458
+f 2457/1/2457 2459/1/2459 2466/1/2466
+f 2461/1/2461 2464/1/2464 2465/1/2465
+f 1297/1/1297 2460/1/2460 2461/1/2461
+f 1248/1/1248 1297/1/1297 1268/1/1268
+f 1267/1/1267 1248/1/1248 1268/1/1268
+f 1241/1/1241 1248/1/1248 1267/1/1267
+f 1240/1/1240 1241/1/1241 1238/1/1238
+f 1239/1/1239 1242/1/1242 1240/1/1240
+f 1244/1/1244 1239/1/1239 1298/1/1298
+f 1298/1/1298 1299/1/1299 1244/1/1244
+f 1767/1/1767 1768/1/1768 1299/1/1299
+f 1766/1/1766 2477/1/2477 1767/1/1767
+f 1236/1/1236 1237/1/1237 1234/1/1234
+f 1234/1/1234 1233/1/1233 1230/1/1230
+f 1230/1/1230 1232/1/1232 1226/1/1226
+f 1232/1/1232 1225/1/1225 1226/1/1226
+f 1225/1/1225 1221/1/1221 1220/1/1220
+f 1217/1/1217 1218/1/1218 1215/1/1215
+f 1205/1/1205 1209/1/1209 1210/1/1210
+f 1214/1/1214 1217/1/1217 1215/1/1215
+f 1219/1/1219 1218/1/1218 1217/1/1217
+f 1224/1/1224 1223/1/1223 1219/1/1219
+f 1228/1/1228 1227/1/1227 1224/1/1224
+f 1228/1/1228 1235/1/1235 1231/1/1231
+f 1229/1/1229 1213/1/1213 1212/1/1212
+f 1235/1/1235 1765/1/1765 1766/1/1766
+f 1765/1/1765 2467/1/2467 2469/1/2469
+f 2471/1/2471 2468/1/2468 2467/1/2467
+f 2471/1/2471 2473/1/2473 2472/1/2472
+f 1764/1/1764 1212/1/1212 1763/1/1763
+f 2472/1/2472 2473/1/2473 2475/1/2475
+f 2458/1/2458 2475/1/2475 2456/1/2456
+f 2458/1/2458 2457/1/2457 2466/1/2466
+f 2457/1/2457 1269/1/1269 2459/1/2459
+f 1221/1/1221 1269/1/1269 1222/1/1222
+f 1271/1/1271 1216/1/1216 1222/1/1222
+f 1270/1/1270 2455/1/2455 1272/1/1272
+f 2451/1/2451 1272/1/1272 2455/1/2455
+f 1273/1/1273 1216/1/1216 1271/1/1271
+f 1193/1/1193 1208/1/1208 1192/1/1192
+f 1193/1/1193 1194/1/1194 1208/1/1208
+f 1273/1/1273 1207/1/1207 1216/1/1216
+f 1194/1/1194 1206/1/1206 1208/1/1208
+f 1207/1/1207 1205/1/1205 1210/1/1210
+f 1200/1/1200 1202/1/1202 1206/1/1206
+f 1205/1/1205 1204/1/1204 1209/1/1209
+f 1203/1/1203 1211/1/1211 1204/1/1204
+f 1763/1/1763 1212/1/1212 1203/1/1203
+f 2454/1/2454 2474/1/2474 1763/1/1763
+f 2450/1/2450 2453/1/2453 2454/1/2454
+f 2450/1/2450 2452/1/2452 2453/1/2453
+f 2451/1/2451 2455/1/2455 2452/1/2452
+f 1276/1/1276 1272/1/1272 2451/1/2451
+f 1275/1/1275 1274/1/1274 1276/1/1276
+f 1168/1/1168 1188/1/1188 1275/1/1275
+f 1157/1/1157 1165/1/1165 1168/1/1168
+f 1159/1/1159 1163/1/1163 1157/1/1157
+f 1158/1/1158 1161/1/1161 1159/1/1159
+f 1752/1/1752 1175/1/1175 1160/1/1160
+f 1750/1/1750 1752/1/1752 1160/1/1160
+f 1750/1/1750 1160/1/1160 1745/1/1745
+f 1750/1/1750 1751/1/1751 1752/1/1752
+f 1751/1/1751 1774/1/1774 1752/1/1752
+f 1751/1/1751 1754/1/1754 1774/1/1774
+f 1754/1/1754 1772/1/1772 1774/1/1774
+f 1749/1/1749 1751/1/1751 1750/1/1750
+f 1752/1/1752 1774/1/1774 1175/1/1175
+f 1161/1/1161 1174/1/1174 1162/1/1162
+f 1774/1/1774 1773/1/1773 1175/1/1175
+f 1174/1/1174 1172/1/1172 1171/1/1171
+f 1774/1/1774 1772/1/1772 1773/1/1773
+f 1172/1/1172 1760/1/1760 1173/1/1173
+f 1760/1/1760 1178/1/1178 1173/1/1173
+f 1178/1/1178 1181/1/1181 1179/1/1179
+f 1179/1/1179 1181/1/1181 1182/1/1182
+f 1195/1/1195 1183/1/1183 1182/1/1182
+f 1184/1/1184 1183/1/1183 1186/1/1186
+f 1190/1/1190 1189/1/1189 1186/1/1186
+f 1190/1/1190 1194/1/1194 1193/1/1193
+f 1191/1/1191 1196/1/1196 1197/1/1197
+f 1194/1/1194 1200/1/1200 1206/1/1206
+f 1196/1/1196 1198/1/1198 1197/1/1197
+f 1200/1/1200 1201/1/1201 1202/1/1202
+f 1762/1/1762 1201/1/1201 1761/1/1761
+f 1199/1/1199 1759/1/1759 1198/1/1198
+f 2442/1/2442 2476/1/2476 1761/1/1761
+f 2443/1/2443 2446/1/2446 2442/1/2442
+f 2443/1/2443 2445/1/2445 2446/1/2446
+f 2447/1/2447 2449/1/2449 2445/1/2445
+f 1278/1/1278 1277/1/1277 2447/1/2447
+f 1139/1/1139 1156/1/1156 1278/1/1278
+f 1136/1/1136 1138/1/1138 1139/1/1139
+f 1139/1/1139 1138/1/1138 1142/1/1142
+f 1136/1/1136 1132/1/1132 1138/1/1138
+f 1132/1/1132 1140/1/1140 1138/1/1138
+f 1129/1/1129 1122/1/1122 1131/1/1131
+f 1140/1/1140 1132/1/1132 1117/1/1117
+f 1138/1/1138 1140/1/1140 1141/1/1141
+f 1142/1/1142 1138/1/1138 1141/1/1141
+f 1139/1/1139 1142/1/1142 1146/1/1146
+f 1146/1/1146 1150/1/1150 1151/1/1151
+f 1150/1/1150 1153/1/1153 1154/1/1154
+f 1745/1/1745 1160/1/1160 1153/1/1153
+f 1744/1/1744 1750/1/1750 1745/1/1745
+f 1747/1/1747 1750/1/1750 1744/1/1744
+f 1742/1/1742 1152/1/1152 1147/1/1147
+f 1147/1/1147 1145/1/1145 1148/1/1148
+f 1739/1/1739 1738/1/1738 1732/1/1732
+f 1739/1/1739 1732/1/1732 1731/1/1731
+f 1743/1/1743 1741/1/1741 1739/1/1739
+f 1743/1/1743 1747/1/1747 1744/1/1744
+f 1733/1/1733 1748/1/1748 1746/1/1746
+f 1747/1/1747 1749/1/1749 1750/1/1750
+f 1733/1/1733 1753/1/1753 1748/1/1748
+f 1726/1/1726 1753/1/1753 1733/1/1733
+f 1749/1/1749 1754/1/1754 1751/1/1751
+f 1126/1/1126 1772/1/1772 1754/1/1754
+f 1757/1/1757 1758/1/1758 1126/1/1126
+f 1759/1/1759 1758/1/1758 1757/1/1757
+f 2441/1/2441 1759/1/1759 2438/1/2438
+f 2440/1/2440 2438/1/2438 2437/1/2437
+f 2437/1/2437 2439/1/2439 2440/1/2440
+f 1135/1/1135 2444/1/2444 2439/1/2439
+f 1133/1/1133 2448/1/2448 1135/1/1135
+f 1133/1/1133 1129/1/1129 1131/1/1131
+f 1134/1/1134 2436/1/2436 1137/1/1137
+f 1137/1/1137 2434/1/2434 2435/1/2435
+f 1129/1/1129 1130/1/1130 1122/1/1122
+f 1125/1/1125 2435/1/2435 1124/1/1124
+f 1121/1/1121 1118/1/1118 1122/1/1122
+f 1120/1/1120 1124/1/1124 1123/1/1123
+f 1119/1/1119 1112/1/1112 1118/1/1118
+f 1106/1/1106 1107/1/1107 1110/1/1110
+f 1113/1/1113 1118/1/1118 1112/1/1112
+f 1116/1/1116 1113/1/1113 1114/1/1114
+f 1144/1/1144 1114/1/1114 1115/1/1115
+f 1145/1/1145 1144/1/1144 1149/1/1149
+f 1148/1/1148 1145/1/1145 1149/1/1149
+f 1740/1/1740 1148/1/1148 1736/1/1736
+f 1734/1/1734 1736/1/1736 1735/1/1735
+f 1730/1/1730 1735/1/1735 1706/1/1706
+f 1728/1/1728 1730/1/1730 1706/1/1706
+f 1700/1/1700 1737/1/1737 1698/1/1698
+f 1698/1/1698 1304/1/1304 1691/1/1691
+f 1696/1/1696 1695/1/1695 1694/1/1694
+f 1696/1/1696 1694/1/1694 1697/1/1697
+f 1692/1/1692 1691/1/1691 1311/1/1311
+f 1693/1/1693 1689/1/1689 1719/1/1719
+f 1697/1/1697 1694/1/1694 1693/1/1693
+f 1701/1/1701 1696/1/1696 1697/1/1697
+f 1699/1/1699 1696/1/1696 1701/1/1701
+f 1705/1/1705 1706/1/1706 1699/1/1699
+f 1728/1/1728 1706/1/1706 1705/1/1705
+f 1729/1/1729 1730/1/1730 1728/1/1728
+f 1733/1/1733 1729/1/1729 1726/1/1726
+f 1727/1/1727 1753/1/1753 1726/1/1726
+f 1756/1/1756 1755/1/1755 1727/1/1727
+f 1123/1/1123 1756/1/1756 1111/1/1111
+f 1110/1/1110 1111/1/1111 1106/1/1106
+f 1106/1/1106 1105/1/1105 1107/1/1107
+f 1100/1/1100 1104/1/1104 1101/1/1101
+f 1100/1/1100 1303/1/1303 1104/1/1104
+f 1108/1/1108 1105/1/1105 1109/1/1109
+f 1300/1/1300 1109/1/1109 1301/1/1301
+f 1302/1/1302 1104/1/1104 1303/1/1303
+f 1054/1/1054 1301/1/1301 1060/1/1060
+f 1053/1/1053 1054/1/1054 1051/1/1051
+f 1056/1/1056 1053/1/1053 1051/1/1051
+f 1311/1/1311 1056/1/1056 1312/1/1312
+f 1690/1/1690 1312/1/1312 1687/1/1687
+f 1723/1/1723 1687/1/1687 1688/1/1688
+f 1685/1/1685 1686/1/1686 1681/1/1681
+f 1674/1/1674 1680/1/1680 1675/1/1675
+f 1722/1/1722 1674/1/1674 1673/1/1673
+f 1720/1/1720 1688/1/1688 1722/1/1722
+f 1718/1/1718 1717/1/1717 1720/1/1720
+f 1713/1/1713 1717/1/1717 1718/1/1718
+f 1709/1/1709 1716/1/1716 1713/1/1713
+f 1704/1/1704 1702/1/1702 1709/1/1709
+f 1707/1/1707 1703/1/1703 1704/1/1704
+f 1708/1/1708 1703/1/1703 1707/1/1707
+f 1724/1/1724 1725/1/1725 1708/1/1708
+f 1127/1/1127 1724/1/1724 1128/1/1128
+f 1102/1/1102 1127/1/1127 1128/1/1128
+f 1103/1/1103 1102/1/1102 1101/1/1101
+f 1099/1/1099 1100/1/1100 1101/1/1101
+f 1094/1/1094 1303/1/1303 1100/1/1100
+f 1091/1/1091 1093/1/1093 1094/1/1094
+f 1096/1/1096 1097/1/1097 1092/1/1092
+f 1090/1/1090 1093/1/1093 1091/1/1091
+f 1058/1/1058 1093/1/1093 1095/1/1095
+f 1059/1/1059 1058/1/1058 1095/1/1095
+f 1055/1/1055 1059/1/1059 1057/1/1057
+f 1061/1/1061 1065/1/1065 1066/1/1066
+f 1062/1/1062 1063/1/1063 1064/1/1064
+f 1049/1/1049 1057/1/1057 1062/1/1062
+f 1050/1/1050 1049/1/1049 1041/1/1041
+f 1681/1/1681 1041/1/1041 1682/1/1682
+f 1678/1/1678 1682/1/1682 1679/1/1679
+f 1676/1/1676 1679/1/1679 1677/1/1677
+f 1670/1/1670 1677/1/1677 1669/1/1669
+f 1667/1/1667 1671/1/1671 1670/1/1670
+f 1668/1/1668 1671/1/1671 1667/1/1667
+f 1662/1/1662 1672/1/1672 1668/1/1668
+f 1715/1/1715 1721/1/1721 1662/1/1662
+f 1714/1/1714 1710/1/1710 1715/1/1715
+f 1711/1/1711 1710/1/1710 1714/1/1714
+f 1098/1/1098 1712/1/1712 1711/1/1711
+f 1092/1/1092 1098/1/1098 1088/1/1088
+f 1089/1/1089 1088/1/1088 1085/1/1085
+f 1085/1/1085 1079/1/1079 1089/1/1089
+f 1066/1/1066 1079/1/1079 1078/1/1078
+f 1080/1/1080 1075/1/1075 1078/1/1078
+f 1080/1/1080 1083/1/1083 1077/1/1077
+f 1082/1/1082 1084/1/1084 1081/1/1081
+f 1084/1/1084 1086/1/1086 1087/1/1087
+f 1087/1/1087 1664/1/1664 1660/1/1660
+f 1660/1/1660 1663/1/1663 1661/1/1661
+f 1661/1/1661 1666/1/1666 1665/1/1665
+f 1665/1/1665 1775/1/1775 1776/1/1776
+f 1775/1/1775 1684/1/1684 1776/1/1776
+f 1684/1/1684 1683/1/1683 1042/1/1042
+f 1042/1/1042 1040/1/1040 1038/1/1038
+f 1044/1/1044 1043/1/1043 1045/1/1045
+f 1318/1/1318 1044/1/1044 1045/1/1045
+f 1777/1/1777 1318/1/1318 1317/1/1317
+f 1659/1/1659 1317/1/1317 1316/1/1316
+f 1314/1/1314 1315/1/1315 1020/1/1020
+f 1014/1/1014 1019/1/1019 1017/1/1017
+f 1020/1/1020 1021/1/1021 1018/1/1018
+f 1019/1/1019 1025/1/1025 1022/1/1022
+f 1047/1/1047 1048/1/1048 1021/1/1021
+f 1025/1/1025 1035/1/1035 1026/1/1026
+f 1046/1/1046 1034/1/1034 1048/1/1048
+f 1035/1/1035 1030/1/1030 1026/1/1026
+f 1038/1/1038 1033/1/1033 1034/1/1034
+f 1030/1/1030 1032/1/1032 1031/1/1031
+f 1032/1/1032 1072/1/1072 1031/1/1031
+f 1031/1/1031 1072/1/1072 1640/1/1640
+f 1037/1/1037 1036/1/1036 1033/1/1033
+f 1032/1/1032 1070/1/1070 1072/1/1072
+f 1039/1/1039 1068/1/1068 1036/1/1036
+f 1068/1/1068 1067/1/1067 1069/1/1069
+f 1069/1/1069 1073/1/1073 1074/1/1074
+f 1070/1/1070 1071/1/1071 1072/1/1072
+f 1074/1/1074 1647/1/1647 1642/1/1642
+f 1641/1/1641 1643/1/1643 1644/1/1644
+f 1072/1/1072 1641/1/1641 1640/1/1640
+f 1031/1/1031 1640/1/1640 1617/1/1617
+f 1030/1/1030 1031/1/1031 982/1/982
+f 1027/1/1027 982/1/982 981/1/981
+f 1028/1/1028 981/1/981 987/1/987
+f 1029/1/1029 987/1/987 988/1/988
+f 1313/1/1313 988/1/988 994/1/994
+f 1011/1/1011 1016/1/1016 1313/1/1313
+f 1006/1/1006 1010/1/1010 1011/1/1011
+f 1008/1/1008 1009/1/1009 1006/1/1006
+f 1316/1/1316 1013/1/1013 1008/1/1008
+f 1657/1/1657 1659/1/1659 1316/1/1316
+f 1310/1/1310 1658/1/1658 1657/1/1657
+f 1306/1/1306 1307/1/1307 1310/1/1310
+f 1305/1/1305 1083/1/1083 1306/1/1306
+f 1305/1/1305 1309/1/1309 1076/1/1076
+f 1074/1/1074 1309/1/1309 1647/1/1647
+f 1308/1/1308 1650/1/1650 1649/1/1649
+f 1648/1/1648 1646/1/1646 1647/1/1647
+f 1651/1/1651 1650/1/1650 1652/1/1652
+f 1653/1/1653 1645/1/1645 1646/1/1646
+f 1618/1/1618 1645/1/1645 1613/1/1613
+f 1612/1/1612 1610/1/1610 1613/1/1613
+f 1612/1/1612 1600/1/1600 1607/1/1607
+f 1654/1/1654 1652/1/1652 1655/1/1655
+f 1652/1/1652 1656/1/1656 1601/1/1601
+f 1601/1/1601 1007/1/1007 1004/1/1004
+f 1004/1/1004 1005/1/1005 995/1/995
+f 995/1/995 997/1/997 992/1/992
+f 992/1/992 989/1/989 990/1/990
+f 989/1/989 985/1/985 990/1/990
+f 985/1/985 984/1/984 979/1/979
+f 979/1/979 980/1/980 974/1/974
+f 986/1/986 971/1/971 970/1/970
+f 991/1/991 986/1/986 970/1/970
+f 993/1/993 991/1/991 998/1/998
+f 996/1/996 998/1/998 999/1/999
+f 1003/1/1003 1002/1/1002 962/1/962
+f 958/1/958 960/1/960 938/1/938
+f 962/1/962 963/1/963 959/1/959
+f 960/1/960 964/1/964 939/1/939
+f 966/1/966 965/1/965 963/1/963
+f 964/1/964 967/1/967 937/1/937
+f 968/1/968 969/1/969 965/1/965
+f 967/1/967 973/1/973 937/1/937
+f 974/1/974 972/1/972 969/1/969
+f 973/1/973 975/1/975 976/1/976
+f 975/1/975 1622/1/1622 976/1/976
+f 976/1/976 1622/1/1622 1626/1/1626
+f 977/1/977 978/1/978 972/1/972
+f 975/1/975 1620/1/1620 1622/1/1622
+f 983/1/983 1619/1/1619 978/1/978
+f 1619/1/1619 1615/1/1615 1616/1/1616
+f 1616/1/1616 1611/1/1611 1609/1/1609
+f 1620/1/1620 1621/1/1621 1622/1/1622
+f 1609/1/1609 1606/1/1606 1623/1/1623
+f 1624/1/1624 1625/1/1625 1627/1/1627
+f 1622/1/1622 1624/1/1624 1626/1/1626
+f 976/1/976 1626/1/1626 1324/1/1324
+f 973/1/973 976/1/976 924/1/924
+f 932/1/932 924/1/924 926/1/926
+f 933/1/933 926/1/926 931/1/931
+f 934/1/934 931/1/931 930/1/930
+f 941/1/941 930/1/930 946/1/946
+f 943/1/943 940/1/940 941/1/941
+f 942/1/942 940/1/940 943/1/943
+f 954/1/954 944/1/944 942/1/942
+f 953/1/953 957/1/957 954/1/954
+f 999/1/999 961/1/961 953/1/953
+f 1001/1/1001 996/1/996 999/1/999
+f 1597/1/1597 1000/1/1000 1001/1/1001
+f 1598/1/1598 1599/1/1599 1597/1/1597
+f 1603/1/1603 1600/1/1600 1598/1/1598
+f 1603/1/1603 1605/1/1605 1608/1/1608
+f 1609/1/1609 1605/1/1605 1606/1/1606
+f 1602/1/1602 1596/1/1596 1604/1/1604
+f 1630/1/1630 1629/1/1629 1606/1/1606
+f 1633/1/1633 1596/1/1596 1594/1/1594
+f 1632/1/1632 1631/1/1631 1629/1/1629
+f 1628/1/1628 1631/1/1631 1634/1/1634
+f 1637/1/1637 1639/1/1639 1634/1/1634
+f 1637/1/1637 1592/1/1592 1638/1/1638
+f 1636/1/1636 1594/1/1594 1635/1/1635
+f 1594/1/1594 1595/1/1595 1593/1/1593
+f 1593/1/1593 952/1/952 955/1/955
+f 955/1/955 951/1/951 956/1/956
+f 956/1/956 945/1/945 948/1/948
+f 948/1/948 947/1/947 949/1/949
+f 947/1/947 928/1/928 949/1/949
+f 928/1/928 927/1/927 922/1/922
+f 922/1/922 921/1/921 919/1/919
+f 929/1/929 923/1/923 1319/1/1319
+f 950/1/950 929/1/929 1319/1/1319
+f 1583/1/1583 950/1/950 1580/1/1580
+f 1584/1/1584 1580/1/1580 1576/1/1576
+f 1578/1/1578 1581/1/1581 1579/1/1579
+f 1569/1/1569 1567/1/1567 1564/1/1564
+f 1579/1/1579 1568/1/1568 1572/1/1572
+f 1567/1/1567 1566/1/1566 1565/1/1565
+f 1582/1/1582 1321/1/1321 1568/1/1568
+f 1566/1/1566 915/1/915 910/1/910
+f 1320/1/1320 916/1/916 1321/1/1321
+f 915/1/915 911/1/911 910/1/910
+f 919/1/919 917/1/917 916/1/916
+f 911/1/911 914/1/914 909/1/909
+f 914/1/914 1340/1/1340 909/1/909
+f 909/1/909 1340/1/1340 1341/1/1341
+f 920/1/920 918/1/918 917/1/917
+f 914/1/914 1323/1/1323 1340/1/1340
+f 925/1/925 1322/1/1322 918/1/918
+f 1322/1/1322 1325/1/1325 1326/1/1326
+f 1326/1/1326 1328/1/1328 1329/1/1329
+f 1323/1/1323 1331/1/1331 1340/1/1340
+f 1329/1/1329 1333/1/1333 1334/1/1334
+f 1339/1/1339 1337/1/1337 1343/1/1343
+f 1340/1/1340 1339/1/1339 1341/1/1341
+f 909/1/909 1341/1/1341 1345/1/1345
+f 911/1/911 909/1/909 906/1/906
+f 912/1/912 906/1/906 913/1/913
+f 1503/1/1503 913/1/913 1499/1/1499
+f 1496/1/1496 1499/1/1499 1497/1/1497
+f 1490/1/1490 1497/1/1497 1491/1/1491
+f 1492/1/1492 1495/1/1495 1490/1/1490
+f 1493/1/1493 1494/1/1494 1492/1/1492
+f 1574/1/1574 1570/1/1570 1493/1/1493
+f 1576/1/1576 1577/1/1577 1574/1/1574
+f 1585/1/1585 1584/1/1584 1576/1/1576
+f 1589/1/1589 1586/1/1586 1585/1/1585
+f 1590/1/1590 1591/1/1591 1589/1/1589
+f 1335/1/1335 1592/1/1592 1590/1/1590
+f 1335/1/1335 1332/1/1332 1330/1/1330
+f 1329/1/1329 1332/1/1332 1333/1/1333
+f 1336/1/1336 1408/1/1408 1410/1/1410
+f 1409/1/1409 1338/1/1338 1333/1/1333
+f 1407/1/1407 1408/1/1408 1404/1/1404
+f 1406/1/1406 1344/1/1344 1338/1/1338
+f 1342/1/1342 1344/1/1344 1346/1/1346
+f 1402/1/1402 1348/1/1348 1346/1/1346
+f 1402/1/1402 1387/1/1387 1386/1/1386
+f 1405/1/1405 1404/1/1404 1403/1/1403
+f 1404/1/1404 1587/1/1587 1588/1/1588
+f 1588/1/1588 1575/1/1575 1486/1/1486
+f 1486/1/1486 1489/1/1489 1485/1/1485
+f 1485/1/1485 1487/1/1487 1488/1/1488
+f 1488/1/1488 1498/1/1498 1505/1/1505
+f 1498/1/1498 1501/1/1501 1505/1/1505
+f 1501/1/1501 1500/1/1500 1504/1/1504
+f 1504/1/1504 907/1/907 908/1/908
+f 1506/1/1506 1507/1/1507 1510/1/1510
+f 1528/1/1528 1506/1/1506 1510/1/1510
+f 1529/1/1529 1528/1/1528 1527/1/1527
+f 1483/1/1483 1527/1/1527 1481/1/1481
+f 1521/1/1521 1522/1/1522 1519/1/1519
+f 1525/1/1525 1518/1/1518 1546/1/1546
+f 1519/1/1519 1514/1/1514 1520/1/1520
+f 1518/1/1518 1515/1/1515 1517/1/1517
+f 1513/1/1513 1511/1/1511 1514/1/1514
+f 1515/1/1515 1512/1/1512 1516/1/1516
+f 1509/1/1509 1508/1/1508 1511/1/1511
+f 1512/1/1512 897/1/897 1516/1/1516
+f 908/1/908 899/1/899 1508/1/1508
+f 897/1/897 898/1/898 896/1/896
+f 898/1/898 901/1/901 896/1/896
+f 896/1/896 901/1/901 1360/1/1360
+f 903/1/903 902/1/902 899/1/899
+f 898/1/898 900/1/900 901/1/901
+f 904/1/904 905/1/905 902/1/902
+f 905/1/905 1349/1/1349 1351/1/1351
+f 1351/1/1351 1350/1/1350 1353/1/1353
+f 900/1/900 1354/1/1354 901/1/901
+f 1353/1/1353 1357/1/1357 1355/1/1355
+f 1358/1/1358 1359/1/1359 1362/1/1362
+f 901/1/901 1358/1/1358 1360/1/1360
+f 896/1/896 1360/1/1360 1365/1/1365
+f 897/1/897 896/1/896 891/1/891
+f 1417/1/1417 891/1/891 1418/1/1418
+f 1549/1/1549 1418/1/1418 1551/1/1551
+f 1550/1/1550 1551/1/1551 1553/1/1553
+f 1540/1/1540 1553/1/1553 1541/1/1541
+f 1539/1/1539 1542/1/1542 1540/1/1540
+f 1530/1/1530 1543/1/1543 1539/1/1539
+f 1526/1/1526 1544/1/1544 1530/1/1530
+f 1481/1/1481 1523/1/1523 1526/1/1526
+f 1480/1/1480 1483/1/1483 1481/1/1481
+f 1388/1/1388 1484/1/1484 1480/1/1480
+f 1385/1/1385 1389/1/1389 1388/1/1388
+f 1384/1/1384 1387/1/1387 1385/1/1385
+f 1384/1/1384 1356/1/1356 1352/1/1352
+f 1353/1/1353 1356/1/1356 1357/1/1357
+f 1383/1/1383 1379/1/1379 1382/1/1382
+f 1381/1/1381 1363/1/1363 1357/1/1357
+f 1378/1/1378 1379/1/1379 1376/1/1376
+f 1380/1/1380 1364/1/1364 1363/1/1363
+f 1361/1/1361 1364/1/1364 1367/1/1367
+f 1372/1/1372 1371/1/1371 1367/1/1367
+f 1372/1/1372 1374/1/1374 1375/1/1375
+f 1377/1/1377 1376/1/1376 1373/1/1373
+f 1376/1/1376 1390/1/1390 1391/1/1391
+f 1391/1/1391 1482/1/1482 1531/1/1531
+f 1531/1/1531 1534/1/1534 1532/1/1532
+f 1532/1/1532 1538/1/1538 1537/1/1537
+f 1537/1/1537 1558/1/1558 1559/1/1559
+f 1558/1/1558 1555/1/1555 1559/1/1559
+f 1555/1/1555 1552/1/1552 1554/1/1554
+f 1554/1/1554 889/1/889 887/1/887
+f 1556/1/1556 1557/1/1557 1419/1/1419
+f 1561/1/1561 1556/1/1556 1419/1/1419
+f 1560/1/1560 1561/1/1561 1562/1/1562
+f 1535/1/1535 1562/1/1562 1428/1/1428
+f 1427/1/1427 1426/1/1426 1425/1/1425
+f 1420/1/1420 881/1/881 875/1/875
+f 1425/1/1425 882/1/882 1422/1/1422
+f 881/1/881 880/1/880 876/1/876
+f 884/1/884 883/1/883 882/1/882
+f 880/1/880 879/1/879 877/1/877
+f 885/1/885 886/1/886 883/1/883
+f 879/1/879 878/1/878 877/1/877
+f 887/1/887 888/1/888 886/1/886
+f 878/1/878 894/1/894 895/1/895
+f 894/1/894 1415/1/1415 895/1/895
+f 895/1/895 1415/1/1415 2433/1/2433
+f 890/1/890 893/1/893 888/1/888
+f 894/1/894 1413/1/1413 1415/1/1415
+f 892/1/892 1368/1/1368 893/1/893
+f 1368/1/1368 1369/1/1369 1411/1/1411
+f 1411/1/1411 1370/1/1370 1412/1/1412
+f 1413/1/1413 1414/1/1414 1415/1/1415
+f 1412/1/1412 1401/1/1401 1416/1/1416
+f 2432/1/2432 2431/1/2431 2430/1/2430
+f 1415/1/1415 2432/1/2432 2433/1/2433
+f 895/1/895 2433/1/2433 1796/1/1796
+f 878/1/878 895/1/895 796/1/796
+f 874/1/874 796/1/796 795/1/795
+f 872/1/872 795/1/795 870/1/870
+f 869/1/869 870/1/870 867/1/867
+f 865/1/865 867/1/867 866/1/866
+f 864/1/864 868/1/868 865/1/865
+f 863/1/863 1431/1/1431 864/1/864
+f 1429/1/1429 1430/1/1430 863/1/863
+f 1428/1/1428 1423/1/1423 1429/1/1429
+f 1536/1/1536 1535/1/1535 1428/1/1428
+f 1395/1/1395 1533/1/1533 1536/1/1536
+f 1394/1/1394 1392/1/1392 1395/1/1395
+f 1393/1/1393 1374/1/1374 1394/1/1394
+f 1393/1/1393 1398/1/1398 1399/1/1399
+f 1412/1/1412 1398/1/1398 1401/1/1401
+f 1396/1/1396 1397/1/1397 1400/1/1400
+f 1814/1/1814 1813/1/1813 1401/1/1401
+f 1812/1/1812 1397/1/1397 1809/1/1809
+f 1811/1/1811 1808/1/1808 1813/1/1813
+f 1800/1/1800 1808/1/1808 1801/1/1801
+f 1803/1/1803 1799/1/1799 1801/1/1801
+f 1803/1/1803 1806/1/1806 1802/1/1802
+f 1810/1/1810 1809/1/1809 1807/1/1807
+f 1809/1/1809 1815/1/1815 1816/1/1816
+f 1816/1/1816 862/1/862 859/1/859
+f 859/1/859 861/1/861 858/1/858
+f 858/1/858 860/1/860 808/1/808
+f 808/1/808 809/1/809 805/1/805
+f 809/1/809 801/1/801 805/1/805
+f 801/1/801 800/1/800 798/1/798
+f 798/1/798 797/1/797 792/1/792
+f 802/1/802 799/1/799 803/1/803
+f 806/1/806 802/1/802 803/1/803
+f 807/1/807 806/1/806 810/1/810
+f 812/1/812 810/1/810 814/1/814
+f 813/1/813 811/1/811 815/1/815
+f 824/1/824 826/1/826 827/1/827
+f 815/1/815 825/1/825 821/1/821
+f 826/1/826 834/1/834 833/1/833
+f 856/1/856 855/1/855 825/1/825
+f 834/1/834 789/1/789 786/1/786
+f 804/1/804 788/1/788 855/1/855
+f 789/1/789 784/1/784 786/1/786
+f 792/1/792 790/1/790 788/1/788
+f 784/1/784 787/1/787 783/1/783
+f 787/1/787 1788/1/1788 783/1/783
+f 783/1/783 1788/1/1788 1784/1/1784
+f 793/1/793 791/1/791 790/1/790
+f 787/1/787 1789/1/1789 1788/1/1788
+f 794/1/794 1792/1/1792 791/1/791
+f 1792/1/1792 1794/1/1794 1791/1/1791
+f 1791/1/1791 1795/1/1795 1793/1/1793
+f 1789/1/1789 1790/1/1790 1788/1/1788
+f 1793/1/1793 1948/1/1948 1787/1/1787
+f 1782/1/1782 1785/1/1785 1781/1/1781
+f 1788/1/1788 1782/1/1782 1784/1/1784
+f 783/1/783 1784/1/1784 762/1/762
+f 784/1/784 783/1/783 781/1/781
+f 785/1/785 781/1/781 780/1/780
+f 835/1/835 780/1/780 837/1/837
+f 836/1/836 837/1/837 839/1/839
+f 838/1/838 839/1/839 844/1/844
+f 853/1/853 830/1/830 838/1/838
+f 829/1/829 830/1/830 853/1/853
+f 822/1/822 828/1/828 829/1/829
+f 817/1/817 820/1/820 822/1/822
+f 814/1/814 816/1/816 817/1/817
+f 818/1/818 812/1/812 814/1/814
+f 1819/1/1819 857/1/857 818/1/818
+f 1818/1/1818 1817/1/1817 1819/1/1819
+f 1805/1/1805 1806/1/1806 1818/1/1818
+f 1805/1/1805 1804/1/1804 1798/1/1798
+f 1793/1/1793 1804/1/1804 1948/1/1948
+f 1820/1/1820 1821/1/1821 1947/1/1947
+f 1946/1/1946 1786/1/1786 1948/1/1948
+f 1944/1/1944 1821/1/1821 1823/1/1823
+f 1945/1/1945 1779/1/1779 1786/1/1786
+f 1778/1/1778 1779/1/1779 1780/1/1780
+f 1941/1/1941 1942/1/1942 1780/1/1780
+f 1941/1/1941 1825/1/1825 1938/1/1938
+f 1943/1/1943 1823/1/1823 1940/1/1940
+f 1823/1/1823 1822/1/1822 1824/1/1824
+f 1824/1/1824 819/1/819 854/1/854
+f 854/1/854 823/1/823 850/1/850
+f 850/1/850 848/1/848 847/1/847
+f 847/1/847 843/1/843 845/1/845
+f 843/1/843 842/1/842 845/1/845
+f 842/1/842 840/1/840 841/1/841
+f 841/1/841 782/1/782 776/1/776
+f 846/1/846 775/1/775 778/1/778
+f 851/1/851 846/1/846 778/1/778
+f 849/1/849 851/1/851 1831/1/1831
+f 1830/1/1830 1831/1/1831 1832/1/1832
+f 1834/1/1834 852/1/852 1836/1/1836
+f 1841/1/1841 1842/1/1842 1848/1/1848
+f 1836/1/1836 1837/1/1837 1838/1/1838
+f 1842/1/1842 768/1/768 1854/1/1854
+f 777/1/777 767/1/767 1837/1/1837
+f 768/1/768 764/1/764 765/1/765
+f 774/1/774 763/1/763 767/1/767
+f 764/1/764 759/1/759 765/1/765
+f 776/1/776 757/1/757 763/1/763
+f 759/1/759 756/1/756 755/1/755
+f 756/1/756 747/1/747 755/1/755
+f 755/1/755 747/1/747 746/1/746
+f 779/1/779 758/1/758 757/1/757
+f 756/1/756 754/1/754 747/1/747
+f 761/1/761 760/1/760 758/1/758
+f 760/1/760 1949/1/1949 752/1/752
+f 752/1/752 753/1/753 748/1/748
+f 754/1/754 749/1/749 747/1/747
+f 748/1/748 744/1/744 745/1/745
+f 743/1/743 742/1/742 741/1/741
+f 747/1/747 743/1/743 746/1/746
+f 755/1/755 746/1/746 715/1/715
+f 759/1/759 755/1/755 766/1/766
+f 769/1/769 766/1/766 770/1/770
+f 1856/1/1856 770/1/770 1858/1/1858
+f 1851/1/1851 1858/1/1858 1933/1/1933
+f 1852/1/1852 1933/1/1933 1932/1/1932
+f 1850/1/1850 1849/1/1849 1852/1/1852
+f 1847/1/1847 1849/1/1849 1850/1/1850
+f 1843/1/1843 1846/1/1846 1847/1/1847
+f 1839/1/1839 1840/1/1840 1843/1/1843
+f 1832/1/1832 1835/1/1835 1839/1/1839
+f 1833/1/1833 1830/1/1830 1832/1/1832
+f 1829/1/1829 1828/1/1828 1833/1/1833
+f 1827/1/1827 1826/1/1826 1829/1/1829
+f 1937/1/1937 1825/1/1825 1827/1/1827
+f 1937/1/1937 750/1/750 1939/1/1939
+f 748/1/748 750/1/750 744/1/744
+f 751/1/751 736/1/736 1950/1/1950
+f 738/1/738 739/1/739 744/1/744
+f 735/1/735 736/1/736 728/1/728
+f 737/1/737 734/1/734 739/1/739
+f 740/1/740 734/1/734 732/1/732
+f 727/1/727 718/1/718 732/1/732
+f 727/1/727 725/1/725 723/1/723
+f 733/1/733 728/1/728 731/1/731
+f 728/1/728 1936/1/1936 729/1/729
+f 729/1/729 1844/1/1844 1935/1/1935
+f 1935/1/1935 1845/1/1845 1930/1/1930
+f 1930/1/1930 1934/1/1934 1928/1/1928
+f 1928/1/1928 1931/1/1931 1866/1/1866
+f 1931/1/1931 1860/1/1860 1866/1/1866
+f 1860/1/1860 1857/1/1857 1859/1/1859
+f 1859/1/1859 772/1/772 773/1/773
+f 1861/1/1861 1862/1/1862 1864/1/1864
+f 1867/1/1867 1861/1/1861 1864/1/1864
+f 1929/1/1929 1867/1/1867 1876/1/1876
+f 1927/1/1927 1876/1/1876 1877/1/1877
+f 1873/1/1873 1870/1/1870 1869/1/1869
+f 1880/1/1880 1881/1/1881 1887/1/1887
+f 1869/1/1869 1872/1/1872 1875/1/1875
+f 1881/1/1881 1914/1/1914 1893/1/1893
+f 1868/1/1868 1871/1/1871 1872/1/1872
+f 1914/1/1914 1454/1/1454 1455/1/1455
+f 1865/1/1865 1863/1/1863 1871/1/1871
+f 1454/1/1454 709/1/709 1455/1/1455
+f 773/1/773 708/1/708 1863/1/1863
+f 709/1/709 703/1/703 701/1/701
+f 703/1/703 702/1/702 701/1/701
+f 701/1/701 702/1/702 700/1/700
+f 771/1/771 707/1/707 708/1/708
+f 703/1/703 706/1/706 702/1/702
+f 714/1/714 710/1/710 707/1/707
+f 710/1/710 713/1/713 711/1/711
+f 711/1/711 716/1/716 717/1/717
+f 706/1/706 704/1/704 702/1/702
+f 717/1/717 720/1/720 705/1/705
+f 698/1/698 1444/1/1444 699/1/699
+f 702/1/702 698/1/698 700/1/700
+f 701/1/701 700/1/700 697/1/697
+f 709/1/709 701/1/701 1453/1/1453
+f 1913/1/1913 1453/1/1453 1903/1/1903
+f 1895/1/1895 1903/1/1903 1896/1/1896
+f 1891/1/1891 1896/1/1896 1897/1/1897
+f 1892/1/1892 1897/1/1897 1899/1/1899
+f 1889/1/1889 1888/1/1888 1892/1/1892
+f 1883/1/1883 1886/1/1886 1889/1/1889
+f 1879/1/1879 1882/1/1882 1883/1/1883
+f 1877/1/1877 1874/1/1874 1879/1/1879
+f 1925/1/1925 1927/1/1927 1877/1/1877
+f 1432/1/1432 1926/1/1926 1925/1/1925
+f 726/1/726 730/1/730 1432/1/1432
+f 722/1/722 725/1/725 726/1/726
+f 722/1/722 721/1/721 719/1/719
+f 717/1/717 721/1/721 720/1/720
+f 724/1/724 1433/1/1433 1435/1/1435
+f 1436/1/1436 1439/1/1439 720/1/720
+f 1438/1/1438 1433/1/1433 1437/1/1437
+f 1440/1/1440 696/1/696 1439/1/1439
+f 695/1/695 696/1/696 693/1/693
+f 694/1/694 690/1/690 693/1/693
+f 694/1/694 1443/1/1443 691/1/691
+f 1441/1/1441 1437/1/1437 1442/1/1442
+f 1437/1/1437 1434/1/1434 1452/1/1452
+f 1452/1/1452 1884/1/1884 1923/1/1923
+f 1923/1/1923 1924/1/1924 1921/1/1921
+f 1921/1/1921 1898/1/1898 1922/1/1922
+f 1922/1/1922 1902/1/1902 1907/1/1907
+f 1902/1/1902 1901/1/1901 1907/1/1907
+f 1901/1/1901 1900/1/1900 1905/1/1905
+f 1905/1/1905 1904/1/1904 1911/1/1911
+f 1906/1/1906 1908/1/1908 1910/1/1910
+f 1909/1/1909 1906/1/1906 1910/1/1910
+f 1917/1/1917 1909/1/1909 1916/1/1916
+f 1918/1/1918 1916/1/1916 650/1/650
+f 1478/1/1478 1915/1/1915 1477/1/1477
+f 647/1/647 652/1/652 653/1/653
+f 1477/1/1477 1475/1/1475 651/1/651
+f 652/1/652 673/1/673 656/1/656
+f 1476/1/1476 672/1/672 1475/1/1475
+f 673/1/673 668/1/668 662/1/662
+f 1912/1/1912 671/1/671 672/1/672
+f 668/1/668 664/1/664 662/1/662
+f 1911/1/1911 669/1/669 671/1/671
+f 664/1/664 670/1/670 665/1/665
+f 670/1/670 675/1/675 665/1/665
+f 665/1/665 675/1/675 2420/1/2420
+f 1456/1/1456 676/1/676 669/1/669
+f 670/1/670 674/1/674 675/1/675
+f 678/1/678 677/1/677 676/1/676
+f 677/1/677 681/1/681 679/1/679
+f 679/1/679 682/1/682 683/1/683
+f 674/1/674 680/1/680 675/1/675
+f 683/1/683 685/1/685 684/1/684
+f 2421/1/2421 2424/1/2424 2422/1/2422
+f 675/1/675 2421/1/2421 2420/1/2420
+f 665/1/665 2420/1/2420 1975/1/1975
+f 664/1/664 665/1/665 663/1/663
+f 657/1/657 663/1/663 660/1/660
+f 658/1/658 660/1/660 661/1/661
+f 659/1/659 661/1/661 1464/1/1464
+f 1466/1/1466 1464/1/1464 1467/1/1467
+f 639/1/639 646/1/646 1466/1/1466
+f 638/1/638 641/1/641 639/1/639
+f 643/1/643 642/1/642 638/1/638
+f 650/1/650 649/1/649 643/1/643
+f 1919/1/1919 1918/1/1918 650/1/650
+f 1447/1/1447 1920/1/1920 1919/1/1919
+f 1445/1/1445 1448/1/1448 1447/1/1447
+f 689/1/689 1443/1/1443 1445/1/1445
+f 689/1/689 687/1/687 686/1/686
+f 683/1/683 687/1/687 685/1/685
+f 688/1/688 1446/1/1446 1449/1/1449
+f 1450/1/1450 2425/1/2425 685/1/685
+f 2429/1/2429 1446/1/1446 1951/1/1951
+f 2428/1/2428 2423/1/2423 2425/1/2425
+f 1976/1/1976 2423/1/2423 1970/1/1970
+f 1969/1/1969 1968/1/1968 1970/1/1970
+f 1969/1/1969 1953/1/1953 1963/1/1963
+f 2427/1/2427 1951/1/1951 2426/1/2426
+f 1951/1/1951 1451/1/1451 1952/1/1952
+f 1952/1/1952 644/1/644 637/1/637
+f 629/1/629 631/1/631 607/1/607
+f 629/1/629 607/1/607 606/1/606
+f 1958/1/1958 629/1/629 606/1/606
+f 637/1/637 636/1/636 630/1/630
+f 636/1/636 640/1/640 634/1/634
+f 634/1/634 1468/1/1468 635/1/635
+f 1470/1/1470 1469/1/1469 1471/1/1471
+f 1465/1/1465 1463/1/1463 1468/1/1468
+f 1463/1/1463 1461/1/1461 1462/1/1462
+f 1462/1/1462 1459/1/1459 1457/1/1457
+f 1469/1/1469 1473/1/1473 1471/1/1471
+f 1470/1/1470 1471/1/1471 1472/1/1472
+f 632/1/632 1470/1/1470 1472/1/1472
+f 631/1/631 632/1/632 607/1/607
+f 600/1/600 597/1/597 598/1/598
+f 600/1/600 598/1/598 601/1/601
+f 633/1/633 596/1/596 599/1/599
+f 596/1/596 594/1/594 591/1/591
+f 594/1/594 592/1/592 591/1/591
+f 589/1/589 588/1/588 585/1/585
+f 595/1/595 593/1/593 592/1/592
+f 1457/1/1457 1458/1/1458 593/1/593
+f 667/1/667 1460/1/1460 1458/1/1458
+f 1474/1/1474 1977/1/1977 1979/1/1979
+f 1474/1/1474 1979/1/1979 586/1/586
+f 666/1/666 1974/1/1974 1460/1/1460
+f 1974/1/1974 1972/1/1972 1973/1/1973
+f 1973/1/1973 1967/1/1967 1966/1/1966
+f 1977/1/1977 1978/1/1978 1979/1/1979
+f 1966/1/1966 1965/1/1965 1980/1/1980
+f 1981/1/1981 1982/1/1982 1984/1/1984
+f 1979/1/1979 1981/1/1981 1983/1/1983
+f 586/1/586 1979/1/1979 1983/1/1983
+f 587/1/587 1474/1/1474 586/1/586
+f 588/1/588 587/1/587 585/1/585
+f 589/1/589 585/1/585 584/1/584
+f 590/1/590 589/1/589 584/1/584
+f 597/1/597 590/1/590 598/1/598
+f 601/1/601 598/1/598 602/1/602
+f 604/1/604 600/1/600 601/1/601
+f 606/1/606 607/1/607 604/1/604
+f 605/1/605 603/1/603 609/1/609
+f 603/1/603 581/1/581 609/1/609
+f 582/1/582 576/1/576 574/1/574
+f 582/1/582 574/1/574 614/1/614
+f 583/1/583 579/1/579 581/1/581
+f 579/1/579 580/1/580 577/1/577
+f 577/1/577 578/1/578 566/1/566
+f 576/1/576 575/1/575 574/1/574
+f 614/1/614 574/1/574 615/1/615
+f 611/1/611 582/1/582 614/1/614
+f 610/1/610 611/1/611 612/1/612
+f 608/1/608 610/1/610 612/1/612
+f 1995/1/1995 606/1/606 608/1/608
+f 1958/1/1958 606/1/606 1995/1/1995
+f 1956/1/1956 629/1/629 1958/1/1958
+f 1955/1/1955 1954/1/1954 1956/1/1956
+f 1959/1/1959 1953/1/1953 1955/1/1955
+f 1959/1/1959 1961/1/1961 1962/1/1962
+f 1966/1/1966 1961/1/1961 1965/1/1965
+f 1960/1/1960 1957/1/1957 1964/1/1964
+f 1987/1/1987 1986/1/1986 1965/1/1965
+f 1988/1/1988 1989/1/1989 1986/1/1986
+f 1990/1/1990 1957/1/1957 1994/1/1994
+f 1993/1/1993 1989/1/1989 1988/1/1988
+f 1985/1/1985 1989/1/1989 1992/1/1992
+f 2015/1/2015 2010/1/2010 1992/1/1992
+f 1991/1/1991 1994/1/1994 1996/1/1996
+f 2008/1/2008 2010/1/2010 2015/1/2015
+f 2013/1/2013 2010/1/2010 2011/1/2011
+f 2012/1/2012 2011/1/2011 544/1/544
+f 564/1/564 2012/1/2012 544/1/544
+f 565/1/565 2014/1/2014 564/1/564
+f 567/1/567 565/1/565 562/1/562
+f 566/1/566 562/1/562 568/1/568
+f 571/1/571 568/1/568 569/1/569
+f 573/1/573 569/1/569 572/1/572
+f 618/1/618 573/1/573 572/1/572
+f 613/1/613 618/1/618 617/1/617
+f 616/1/616 613/1/613 617/1/617
+f 1998/1/1998 616/1/616 2001/1/2001
+f 1999/1/1999 2001/1/2001 2003/1/2003
+f 2000/1/2000 1997/1/1997 1999/1/1999
+f 2004/1/2004 1996/1/1996 2000/1/2000
+f 2004/1/2004 2006/1/2006 2007/1/2007
+f 541/1/541 2006/1/2006 537/1/537
+f 2005/1/2005 2002/1/2002 2009/1/2009
+f 536/1/536 534/1/534 537/1/537
+f 533/1/533 530/1/530 534/1/534
+f 535/1/535 2002/1/2002 531/1/531
+f 532/1/532 530/1/530 533/1/533
+f 525/1/525 526/1/526 529/1/529
+f 525/1/525 523/1/523 526/1/526
+f 521/1/521 523/1/523 525/1/525
+f 542/1/542 534/1/534 530/1/530
+f 440/1/440 539/1/539 542/1/542
+f 439/1/439 538/1/538 440/1/440
+f 545/1/545 543/1/543 439/1/439
+f 560/1/560 546/1/546 545/1/545
+f 563/1/563 560/1/560 558/1/558
+f 570/1/570 558/1/558 623/1/623
+f 621/1/621 623/1/623 624/1/624
+f 619/1/619 621/1/621 622/1/622
+f 620/1/620 622/1/622 2410/1/2410
+f 2021/1/2021 620/1/620 2410/1/2410
+f 2409/1/2409 626/1/626 2407/1/2407
+f 2405/1/2405 2408/1/2408 2402/1/2402
+f 626/1/626 627/1/627 2407/1/2407
+f 627/1/627 625/1/625 628/1/628
+f 628/1/628 559/1/559 561/1/561
+f 2408/1/2408 2411/1/2411 2402/1/2402
+f 2405/1/2405 2402/1/2402 2401/1/2401
+f 2404/1/2404 2405/1/2405 2401/1/2401
+f 2019/1/2019 2406/1/2406 2404/1/2404
+f 2017/1/2017 2021/1/2021 2019/1/2019
+f 2020/1/2020 2398/1/2398 2397/1/2397
+f 2397/1/2397 2399/1/2399 2396/1/2396
+f 2393/1/2393 2395/1/2395 2392/1/2392
+f 2395/1/2395 2389/1/2389 2392/1/2392
+f 2399/1/2399 2400/1/2400 2396/1/2396
+f 2395/1/2395 2414/1/2414 2415/1/2415
+f 2403/1/2403 2413/1/2413 2400/1/2400
+f 2414/1/2414 554/1/554 2415/1/2415
+f 2412/1/2412 1479/1/1479 2413/1/2413
+f 561/1/561 553/1/553 1479/1/1479
+f 557/1/557 443/1/443 553/1/553
+f 443/1/443 436/1/436 438/1/438
+f 438/1/438 437/1/437 441/1/441
+f 441/1/441 526/1/526 523/1/523
+f 527/1/527 524/1/524 528/1/528
+f 442/1/442 527/1/527 528/1/528
+f 444/1/444 442/1/442 445/1/445
+f 448/1/448 444/1/444 445/1/445
+f 554/1/554 448/1/448 555/1/555
+f 2415/1/2415 554/1/554 555/1/555
+f 2395/1/2395 2415/1/2415 2389/1/2389
+f 2392/1/2392 2389/1/2389 2387/1/2387
+f 2384/1/2384 2390/1/2390 2380/1/2380
+f 2380/1/2380 556/1/556 2377/1/2377
+f 2381/1/2381 2379/1/2379 2378/1/2378
+f 2381/1/2381 2378/1/2378 2382/1/2382
+f 2376/1/2376 2377/1/2377 454/1/454
+f 2374/1/2374 2373/1/2373 2371/1/2371
+f 2382/1/2382 2378/1/2378 2374/1/2374
+f 2385/1/2385 2381/1/2381 2382/1/2382
+f 2388/1/2388 2383/1/2383 2385/1/2385
+f 2386/1/2386 2383/1/2383 2388/1/2388
+f 2391/1/2391 2387/1/2387 2386/1/2386
+f 2023/1/2023 2394/1/2394 2391/1/2391
+f 2018/1/2018 2023/1/2023 2022/1/2022
+f 2016/1/2016 2017/1/2017 2018/1/2018
+f 531/1/531 2016/1/2016 518/1/518
+f 525/1/525 518/1/518 521/1/521
+f 520/1/520 523/1/523 521/1/521
+f 522/1/522 520/1/520 516/1/516
+f 522/1/522 516/1/516 509/1/509
+f 508/1/508 509/1/509 511/1/511
+f 511/1/511 510/1/510 508/1/508
+f 517/1/517 513/1/513 512/1/512
+f 513/1/513 519/1/519 514/1/514
+f 508/1/508 510/1/510 507/1/507
+f 507/1/507 504/1/504 508/1/508
+f 506/1/506 504/1/504 505/1/505
+f 459/1/459 506/1/506 505/1/505
+f 450/1/450 459/1/459 456/1/456
+f 447/1/447 446/1/446 450/1/450
+f 449/1/449 447/1/447 451/1/451
+f 454/1/454 451/1/451 455/1/455
+f 2369/1/2369 455/1/455 2367/1/2367
+f 2047/1/2047 2367/1/2367 2048/1/2048
+f 2368/1/2368 2367/1/2367 2047/1/2047
+f 2370/1/2370 2368/1/2368 2372/1/2372
+f 2419/1/2419 2370/1/2370 2372/1/2372
+f 2418/1/2418 2370/1/2370 2419/1/2419
+f 2417/1/2417 2375/1/2375 2418/1/2418
+f 2027/1/2027 2416/1/2416 2417/1/2417
+f 2025/1/2025 2024/1/2024 2027/1/2027
+f 514/1/514 2025/1/2025 515/1/515
+f 2026/1/2026 2030/1/2030 2028/1/2028
+f 2028/1/2028 2039/1/2039 2036/1/2036
+f 2036/1/2036 2040/1/2040 2037/1/2037
+f 2037/1/2037 2041/1/2041 2042/1/2042
+f 2033/1/2033 2038/1/2038 2034/1/2034
+f 2042/1/2042 2044/1/2044 2043/1/2043
+f 2042/1/2042 2045/1/2045 2044/1/2044
+f 2050/1/2050 2049/1/2049 2051/1/2051
+f 2046/1/2046 552/1/552 2045/1/2045
+f 2049/1/2049 549/1/549 2051/1/2051
+f 551/1/551 453/1/453 552/1/552
+f 453/1/453 452/1/452 458/1/458
+f 452/1/452 457/1/457 458/1/458
+f 457/1/457 460/1/460 461/1/461
+f 461/1/461 460/1/460 500/1/500
+f 466/1/466 467/1/467 464/1/464
+f 465/1/465 464/1/464 469/1/469
+f 463/1/463 462/1/462 465/1/465
+f 549/1/549 463/1/463 550/1/550
+f 2051/1/2051 549/1/549 550/1/550
+f 2050/1/2050 2051/1/2051 2052/1/2052
+f 2053/1/2053 2050/1/2050 2052/1/2052
+f 2060/1/2060 2053/1/2053 2061/1/2061
+f 2063/1/2063 2061/1/2061 2064/1/2064
+f 2035/1/2035 2062/1/2062 2063/1/2063
+f 2031/1/2031 2034/1/2034 2035/1/2035
+f 2029/1/2029 2032/1/2032 2031/1/2031
+f 496/1/496 2029/1/2029 493/1/493
+f 498/1/498 515/1/515 496/1/496
+f 503/1/503 498/1/498 502/1/502
+f 502/1/502 501/1/501 503/1/503
+f 460/1/460 501/1/501 500/1/500
+f 461/1/461 500/1/500 483/1/483
+f 497/1/497 495/1/495 499/1/499
+f 472/1/472 483/1/483 484/1/484
+f 468/1/468 472/1/472 473/1/473
+f 481/1/481 474/1/474 473/1/473
+f 482/1/482 495/1/495 486/1/486
+f 485/1/485 474/1/474 481/1/481
+f 476/1/476 474/1/474 479/1/479
+f 2364/1/2364 2363/1/2363 479/1/479
+f 480/1/480 487/1/487 488/1/488
+f 486/1/486 491/1/491 487/1/487
+f 491/1/491 494/1/494 2069/1/2069
+f 2069/1/2069 2066/1/2066 359/1/359
+f 2066/1/2066 2065/1/2065 317/1/317
+f 318/1/318 316/1/316 312/1/312
+f 2065/1/2065 2067/1/2067 317/1/317
+f 316/1/316 315/1/315 311/1/311
+f 2059/1/2059 2068/1/2068 2067/1/2067
+f 2068/1/2068 2058/1/2058 2057/1/2057
+f 2057/1/2057 2054/1/2054 2056/1/2056
+f 315/1/315 314/1/314 311/1/311
+f 316/1/316 311/1/311 312/1/312
+f 320/1/320 312/1/312 313/1/313
+f 319/1/319 320/1/320 321/1/321
+f 296/1/296 298/1/298 294/1/294
+f 298/1/298 297/1/297 294/1/294
+f 294/1/294 297/1/297 293/1/293
+f 322/1/322 300/1/300 299/1/299
+f 298/1/298 301/1/301 297/1/297
+f 301/1/301 303/1/303 297/1/297
+f 297/1/297 303/1/303 302/1/302
+f 303/1/303 304/1/304 302/1/302
+f 306/1/306 304/1/304 303/1/303
+f 309/1/309 307/1/307 300/1/300
+f 301/1/301 306/1/306 303/1/303
+f 309/1/309 308/1/308 307/1/307
+f 306/1/306 360/1/360 304/1/304
+f 310/1/310 363/1/363 308/1/308
+f 360/1/360 361/1/361 304/1/304
+f 304/1/304 361/1/361 362/1/362
+f 2056/1/2056 2055/1/2055 363/1/363
+f 2055/1/2055 478/1/478 364/1/364
+f 364/1/364 470/1/470 477/1/477
+f 477/1/477 475/1/475 2092/1/2092
+f 365/1/365 2091/1/2091 2093/1/2093
+f 361/1/361 365/1/365 362/1/362
+f 304/1/304 362/1/362 305/1/305
+f 302/1/302 304/1/304 305/1/305
+f 297/1/297 302/1/302 285/1/285
+f 297/1/297 285/1/285 293/1/293
+f 292/1/292 294/1/294 293/1/293
+f 283/1/283 280/1/280 273/1/273
+f 286/1/286 282/1/282 281/1/281
+f 282/1/282 284/1/284 277/1/277
+f 277/1/277 278/1/278 275/1/275
+f 280/1/280 274/1/274 272/1/272
+f 280/1/280 272/1/272 273/1/273
+f 289/1/289 283/1/283 273/1/273
+f 288/1/288 283/1/283 289/1/289
+f 290/1/290 287/1/287 288/1/288
+f 295/1/295 292/1/292 290/1/290
+f 323/1/323 321/1/321 295/1/295
+f 492/1/492 323/1/323 2071/1/2071
+f 489/1/489 490/1/490 492/1/492
+f 2364/1/2364 489/1/489 2365/1/2365
+f 2365/1/2365 2363/1/2363 2364/1/2364
+f 2092/1/2092 2363/1/2363 2087/1/2087
+f 2088/1/2088 2087/1/2087 2084/1/2084
+f 2366/1/2366 2070/1/2070 2086/1/2086
+f 2079/1/2079 2084/1/2084 2080/1/2080
+f 2083/1/2083 2079/1/2079 2078/1/2078
+f 2083/1/2083 2078/1/2078 2082/1/2082
+f 2077/1/2077 2082/1/2082 2078/1/2078
+f 2076/1/2076 2070/1/2070 2072/1/2072
+f 2081/1/2081 2082/1/2082 2077/1/2077
+f 2083/1/2083 2082/1/2082 2097/1/2097
+f 2094/1/2094 2083/1/2083 2097/1/2097
+f 2095/1/2095 2090/1/2090 2094/1/2094
+f 366/1/366 2095/1/2095 367/1/367
+f 279/1/279 367/1/367 276/1/276
+f 275/1/275 276/1/276 263/1/263
+f 269/1/269 263/1/263 262/1/262
+f 267/1/267 262/1/262 264/1/264
+f 270/1/270 268/1/268 267/1/267
+f 327/1/327 270/1/270 331/1/331
+f 328/1/328 327/1/327 331/1/331
+f 332/1/332 271/1/271 340/1/340
+f 271/1/271 265/1/265 340/1/340
+f 265/1/265 261/1/261 266/1/266
+f 261/1/261 259/1/259 258/1/258
+f 341/1/341 260/1/260 344/1/344
+f 338/1/338 341/1/341 339/1/339
+f 334/1/334 338/1/338 339/1/339
+f 329/1/329 333/1/333 334/1/334
+f 326/1/326 328/1/328 329/1/329
+f 325/1/325 291/1/291 326/1/326
+f 2073/1/2073 324/1/324 325/1/325
+f 2072/1/2072 2073/1/2073 2074/1/2074
+f 2104/1/2104 2074/1/2074 2107/1/2107
+f 2107/1/2107 2103/1/2103 2104/1/2104
+f 2098/1/2098 2103/1/2103 2101/1/2101
+f 2099/1/2099 2098/1/2098 2101/1/2101
+f 2096/1/2096 2099/1/2099 2100/1/2100
+f 257/1/257 2096/1/2096 2100/1/2100
+f 2359/1/2359 2102/1/2102 2358/1/2358
+f 2358/1/2358 2102/1/2102 2109/1/2109
+f 2360/1/2360 2355/1/2355 2361/1/2361
+f 255/1/255 2360/1/2360 2361/1/2361
+f 253/1/253 255/1/255 254/1/254
+f 252/1/252 257/1/257 253/1/253
+f 258/1/258 252/1/252 251/1/251
+f 250/1/250 251/1/251 248/1/248
+f 343/1/343 250/1/250 346/1/346
+f 345/1/345 346/1/346 348/1/348
+f 347/1/347 345/1/345 348/1/348
+f 336/1/336 337/1/337 347/1/347
+f 330/1/330 335/1/335 336/1/336
+f 2112/1/2112 330/1/330 2114/1/2114
+f 2111/1/2111 2075/1/2075 2112/1/2112
+f 2105/1/2105 2111/1/2111 2110/1/2110
+f 2110/1/2110 2106/1/2106 2105/1/2105
+f 2102/1/2102 2106/1/2106 2109/1/2109
+f 2358/1/2358 2109/1/2109 2354/1/2354
+f 2108/1/2108 2113/1/2113 2357/1/2357
+f 2352/1/2352 2354/1/2354 2353/1/2353
+f 2356/1/2356 2352/1/2352 2351/1/2351
+f 2119/1/2119 375/1/375 2351/1/2351
+f 2118/1/2118 2113/1/2113 2115/1/2115
+f 2349/1/2349 375/1/375 2119/1/2119
+f 374/1/374 375/1/375 373/1/373
+f 374/1/374 373/1/373 183/1/183
+f 182/1/182 183/1/183 371/1/371
+f 2350/1/2350 2120/1/2120 372/1/372
+f 2115/1/2115 2117/1/2117 2120/1/2120
+f 2117/1/2117 2116/1/2116 2122/1/2122
+f 2124/1/2124 2123/1/2123 2127/1/2127
+f 2116/1/2116 356/1/356 2122/1/2122
+f 356/1/356 350/1/350 352/1/352
+f 352/1/352 349/1/349 351/1/351
+f 349/1/349 247/1/247 351/1/351
+f 353/1/353 242/1/242 241/1/241
+f 353/1/353 241/1/241 357/1/357
+f 245/1/245 243/1/243 247/1/247
+f 246/1/246 244/1/244 243/1/243
+f 244/1/244 249/1/249 237/1/237
+f 242/1/242 238/1/238 241/1/241
+f 357/1/357 241/1/241 239/1/239
+f 354/1/354 353/1/353 357/1/357
+f 355/1/355 354/1/354 2217/1/2217
+f 2123/1/2123 2217/1/2217 2127/1/2127
+f 2215/1/2215 358/1/358 2214/1/2214
+f 2214/1/2214 2216/1/2216 2210/1/2210
+f 2213/1/2213 2212/1/2212 2207/1/2207
+f 2203/1/2203 2209/1/2209 2204/1/2204
+f 2209/1/2209 2220/1/2220 2204/1/2204
+f 2204/1/2204 2220/1/2220 2221/1/2221
+f 2220/1/2220 232/1/232 2221/1/2221
+f 2219/1/2219 232/1/232 2220/1/2220
+f 2210/1/2210 2211/1/2211 2208/1/2208
+f 2209/1/2209 2219/1/2219 2220/1/2220
+f 2210/1/2210 2218/1/2218 2211/1/2211
+f 2219/1/2219 235/1/235 232/1/232
+f 240/1/240 233/1/233 2218/1/2218
+f 236/1/236 234/1/234 233/1/233
+f 237/1/237 224/1/224 234/1/234
+f 224/1/224 256/1/256 225/1/225
+f 225/1/225 376/1/376 221/1/221
+f 374/1/374 183/1/183 221/1/221
+f 219/1/219 184/1/184 217/1/217
+f 220/1/220 217/1/217 218/1/218
+f 223/1/223 218/1/218 190/1/190
+f 231/1/231 222/1/222 223/1/223
+f 235/1/235 231/1/231 232/1/232
+f 2221/1/2221 232/1/232 229/1/229
+f 2204/1/2204 2221/1/2221 2222/1/2222
+f 2201/1/2201 2222/1/2222 2202/1/2202
+f 2197/1/2197 2201/1/2201 2202/1/2202
+f 2198/1/2198 2199/1/2199 2197/1/2197
+f 2200/1/2200 2199/1/2199 2198/1/2198
+f 2206/1/2206 2205/1/2205 2200/1/2200
+f 2128/1/2128 2207/1/2207 2206/1/2206
+f 2124/1/2124 2127/1/2127 2128/1/2128
+f 2121/1/2121 2124/1/2124 2125/1/2125
+f 378/1/378 2121/1/2121 2125/1/2125
+f 371/1/371 378/1/378 182/1/182
+f 182/1/182 181/1/181 183/1/183
+f 185/1/185 181/1/181 180/1/180
+f 179/1/179 175/1/175 178/1/178
+f 171/1/171 180/1/180 174/1/174
+f 168/1/168 172/1/172 171/1/171
+f 165/1/165 164/1/164 168/1/168
+f 170/1/170 173/1/173 169/1/169
+f 175/1/175 176/1/176 173/1/173
+f 176/1/176 2126/1/2126 2129/1/2129
+f 2129/1/2129 2130/1/2130 2131/1/2131
+f 2131/1/2131 2196/1/2196 2195/1/2195
+f 2195/1/2195 2194/1/2194 2189/1/2189
+f 2194/1/2194 2190/1/2190 2189/1/2189
+f 2187/1/2187 2186/1/2186 2182/1/2182
+f 2186/1/2186 2191/1/2191 2184/1/2184
+f 2192/1/2192 2193/1/2193 2190/1/2190
+f 2191/1/2191 2224/1/2224 2184/1/2184
+f 2223/1/2223 230/1/230 2193/1/2193
+f 230/1/230 227/1/227 228/1/228
+f 228/1/228 226/1/226 189/1/189
+f 2224/1/2224 368/1/368 2175/1/2175
+f 2175/1/2175 2174/1/2174 2178/1/2178
+f 2170/1/2170 2171/1/2171 2172/1/2172
+f 2174/1/2174 2176/1/2176 2177/1/2177
+f 2180/1/2180 2181/1/2181 2176/1/2176
+f 2180/1/2180 2226/1/2226 2181/1/2181
+f 2228/1/2228 2226/1/2226 2180/1/2180
+f 2227/1/2227 2226/1/2226 2228/1/2228
+f 2145/1/2145 2227/1/2227 2165/1/2165
+f 2225/1/2225 2226/1/2226 2227/1/2227
+f 2181/1/2181 2226/1/2226 2225/1/2225
+f 2141/1/2141 2179/1/2179 2181/1/2181
+f 2138/1/2138 2179/1/2179 2141/1/2141
+f 2139/1/2139 2185/1/2185 2138/1/2138
+f 2133/1/2133 2188/1/2188 2139/1/2139
+f 2132/1/2132 2133/1/2133 2134/1/2134
+f 162/1/162 2132/1/2132 2134/1/2134
+f 161/1/161 177/1/177 162/1/162
+f 165/1/165 161/1/161 160/1/160
+f 156/1/156 163/1/163 160/1/160
+f 163/1/163 166/1/166 167/1/167
+f 150/1/150 155/1/155 154/1/154
+f 191/1/191 167/1/167 166/1/166
+f 191/1/191 192/1/192 189/1/189
+f 194/1/194 195/1/195 193/1/193
+f 197/1/197 195/1/195 194/1/194
+f 197/1/197 198/1/198 195/1/195
+f 192/1/192 370/1/370 369/1/369
+f 216/1/216 2172/1/2172 370/1/370
+f 195/1/195 198/1/198 214/1/214
+f 214/1/214 198/1/198 210/1/210
+f 214/1/214 210/1/210 212/1/212
+f 216/1/216 2170/1/2170 2172/1/2172
+f 2170/1/2170 2173/1/2173 2171/1/2171
+f 2166/1/2166 2167/1/2167 2173/1/2173
+f 2161/1/2161 2162/1/2162 2166/1/2166
+f 2168/1/2168 2157/1/2157 2161/1/2161
+f 2169/1/2169 214/1/214 215/1/215
+f 215/1/215 214/1/214 212/1/212
+f 2168/1/2168 213/1/213 2158/1/2158
+f 2158/1/2158 2153/1/2153 2154/1/2154
+f 416/1/416 425/1/425 2153/1/2153
+f 409/1/409 414/1/414 412/1/412
+f 409/1/409 413/1/413 414/1/414
+f 405/1/405 413/1/413 409/1/409
+f 416/1/416 418/1/418 425/1/425
+f 413/1/413 415/1/415 414/1/414
+f 413/1/413 407/1/407 415/1/415
+f 407/1/407 417/1/417 415/1/415
+f 407/1/407 382/1/382 417/1/417
+f 423/1/423 425/1/425 418/1/418
+f 2152/1/2152 425/1/425 423/1/423
+f 2148/1/2148 2151/1/2151 2152/1/2152
+f 2149/1/2149 2151/1/2151 2148/1/2148
+f 2147/1/2147 2150/1/2150 2149/1/2149
+f 2143/1/2143 2164/1/2164 2147/1/2147
+f 2140/1/2140 2144/1/2144 2143/1/2143
+f 2137/1/2137 2142/1/2142 2140/1/2140
+f 2136/1/2136 2137/1/2137 2135/1/2135
+f 159/1/159 2135/1/2135 158/1/158
+f 152/1/152 159/1/159 158/1/158
+f 151/1/151 157/1/157 152/1/152
+f 151/1/151 150/1/150 154/1/154
+f 143/1/143 148/1/148 147/1/147
+f 153/1/153 155/1/155 150/1/150
+f 143/1/143 149/1/149 148/1/148
+f 145/1/145 149/1/149 143/1/143
+f 153/1/153 196/1/196 155/1/155
+f 194/1/194 196/1/196 197/1/197
+f 145/1/145 199/1/199 149/1/149
+f 200/1/200 198/1/198 197/1/197
+f 200/1/200 210/1/210 198/1/198
+f 212/1/212 210/1/210 211/1/211
+f 204/1/204 208/1/208 211/1/211
+f 207/1/207 208/1/208 204/1/204
+f 203/1/203 199/1/199 146/1/146
+f 204/1/204 202/1/202 205/1/205
+f 204/1/204 205/1/205 207/1/207
+f 207/1/207 209/1/209 208/1/208
+f 410/1/410 209/1/209 411/1/411
+f 410/1/410 411/1/411 408/1/408
+f 409/1/409 408/1/408 405/1/405
+f 405/1/405 407/1/407 413/1/413
+f 406/1/406 383/1/383 407/1/407
+f 390/1/390 384/1/384 406/1/406
+f 403/1/403 404/1/404 399/1/399
+f 398/1/398 391/1/391 390/1/390
+f 391/1/391 386/1/386 390/1/390
+f 394/1/394 393/1/393 392/1/392
+f 393/1/393 106/1/106 392/1/392
+f 98/1/98 106/1/106 393/1/393
+f 98/1/98 99/1/99 106/1/106
+f 99/1/99 104/1/104 106/1/106
+f 104/1/104 99/1/99 100/1/100
+f 391/1/391 389/1/389 386/1/386
+f 390/1/390 386/1/386 384/1/384
+f 406/1/406 384/1/384 383/1/383
+f 383/1/383 382/1/382 407/1/407
+f 420/1/420 417/1/417 382/1/382
+f 422/1/422 419/1/419 420/1/420
+f 126/1/126 419/1/419 422/1/422
+f 125/1/125 424/1/424 126/1/126
+f 122/1/122 2146/1/2146 125/1/125
+f 131/1/131 2146/1/2146 122/1/122
+f 130/1/130 138/1/138 131/1/131
+f 137/1/137 138/1/138 130/1/130
+f 142/1/142 379/1/379 137/1/137
+f 147/1/147 142/1/142 143/1/143
+f 144/1/144 145/1/145 143/1/143
+f 145/1/145 146/1/146 199/1/199
+f 140/1/140 139/1/139 135/1/135
+f 141/1/141 201/1/201 146/1/146
+f 136/1/136 135/1/135 129/1/129
+f 134/1/134 206/1/206 201/1/201
+f 132/1/132 129/1/129 128/1/128
+f 2276/1/2276 2277/1/2277 2275/1/2275
+f 133/1/133 2278/1/2278 206/1/206
+f 2276/1/2276 2233/1/2233 2277/1/2277
+f 2235/1/2235 2278/1/2278 2279/1/2279
+f 2235/1/2235 2279/1/2279 2230/1/2230
+f 2236/1/2236 2234/1/2234 2233/1/2233
+f 2236/1/2236 2237/1/2237 2234/1/2234
+f 2241/1/2241 2237/1/2237 2236/1/2236
+f 2231/1/2231 2229/1/2229 2230/1/2230
+f 2231/1/2231 2232/1/2232 2229/1/2229
+f 2238/1/2238 2234/1/2234 2237/1/2237
+f 2239/1/2239 2242/1/2242 2232/1/2232
+f 400/1/400 2232/1/2232 2242/1/2242
+f 399/1/399 400/1/400 396/1/396
+f 401/1/401 91/1/91 95/1/95
+f 395/1/395 396/1/396 397/1/397
+f 395/1/395 98/1/98 393/1/393
+f 94/1/94 95/1/95 91/1/91
+f 98/1/98 96/1/96 99/1/99
+f 91/1/91 93/1/93 94/1/94
+f 91/1/91 90/1/90 93/1/93
+f 90/1/90 92/1/92 93/1/93
+f 100/1/100 99/1/99 96/1/96
+f 103/1/103 104/1/104 100/1/100
+f 106/1/106 104/1/104 107/1/107
+f 109/1/109 388/1/388 107/1/107
+f 387/1/387 388/1/388 109/1/109
+f 116/1/116 385/1/385 387/1/387
+f 119/1/119 381/1/381 116/1/116
+f 118/1/118 380/1/380 119/1/119
+f 117/1/117 421/1/421 118/1/118
+f 120/1/120 121/1/121 117/1/117
+f 123/1/123 120/1/120 124/1/124
+f 128/1/128 127/1/127 123/1/123
+f 2275/1/2275 128/1/128 2276/1/2276
+f 2273/1/2273 2233/1/2233 2276/1/2276
+f 2273/1/2273 2236/1/2236 2233/1/2233
+f 2274/1/2274 2270/1/2270 2272/1/2272
+f 2271/1/2271 2241/1/2241 2236/1/2236
+f 2240/1/2240 2237/1/2237 2241/1/2241
+f 2269/1/2269 2270/1/2270 2266/1/2266
+f 2248/1/2248 2240/1/2240 2268/1/2268
+f 2248/1/2248 2243/1/2243 2240/1/2240
+f 2244/1/2244 2243/1/2243 2246/1/2246
+f 2249/1/2249 2250/1/2250 2246/1/2246
+f 2250/1/2250 91/1/91 401/1/401
+f 89/1/89 90/1/90 91/1/91
+f 89/1/89 80/1/80 90/1/90
+f 76/1/76 90/1/90 80/1/80
+f 89/1/89 86/1/86 80/1/80
+f 86/1/86 81/1/81 80/1/80
+f 77/1/77 80/1/80 81/1/81
+f 83/1/83 81/1/81 86/1/86
+f 79/1/79 81/1/81 83/1/83
+f 79/1/79 83/1/83 82/1/82
+f 86/1/86 89/1/89 88/1/88
+f 2252/1/2252 2251/1/2251 2254/1/2254
+f 2253/1/2253 2254/1/2254 2251/1/2251
+f 2255/1/2255 88/1/88 89/1/89
+f 86/1/86 88/1/88 83/1/83
+f 82/1/82 83/1/83 85/1/85
+f 84/1/84 82/1/82 85/1/85
+f 84/1/84 85/1/85 429/1/429
+f 84/1/84 429/1/429 430/1/430
+f 430/1/430 429/1/429 431/1/431
+f 430/1/430 431/1/431 2313/1/2313
+f 433/1/433 430/1/430 2313/1/2313
+f 2313/1/2313 431/1/431 2348/1/2348
+f 2313/1/2313 2348/1/2348 2314/1/2314
+f 2306/1/2306 2313/1/2313 2314/1/2314
+f 2306/1/2306 2314/1/2314 2315/1/2315
+f 2306/1/2306 2315/1/2315 2310/1/2310
+f 2310/1/2310 2315/1/2315 2316/1/2316
+f 2310/1/2310 2316/1/2316 2317/1/2317
+f 2311/1/2311 2310/1/2310 2317/1/2317
+f 2311/1/2311 2317/1/2317 2338/1/2338
+f 2345/1/2345 2311/1/2311 2338/1/2338
+f 2345/1/2345 2338/1/2338 2346/1/2346
+f 2484/1/2484 2345/1/2345 2346/1/2346
+f 2484/1/2484 2346/1/2346 2347/1/2347
+f 2494/1/2494 2484/1/2484 2347/1/2347
+f 2494/1/2494 2347/1/2347 2497/1/2497
+f 2497/1/2497 2495/1/2495 2494/1/2494
+f 2494/1/2494 2495/1/2495 2492/1/2492
+f 2494/1/2494 2492/1/2492 2491/1/2491
+f 2491/1/2491 2492/1/2492 2490/1/2490
+f 2491/1/2491 2490/1/2490 2486/1/2486
+f 2486/1/2486 2484/1/2484 2491/1/2491
+f 2486/1/2486 2482/1/2482 2484/1/2484
+f 2485/1/2485 2482/1/2482 2486/1/2486
+f 2483/1/2483 2482/1/2482 2485/1/2485
+f 2485/1/2485 2487/1/2487 2483/1/2483
+f 2485/1/2485 2489/1/2489 2487/1/2487
+f 2487/1/2487 2489/1/2489 2488/1/2488
+f 2485/1/2485 2490/1/2490 2489/1/2489
+f 2490/1/2490 2329/1/2329 2489/1/2489
+f 2489/1/2489 2329/1/2329 2499/1/2499
+f 2499/1/2499 2329/1/2329 2326/1/2326
+f 2328/1/2328 2326/1/2326 2329/1/2329
+f 2328/1/2328 2329/1/2329 2330/1/2330
+f 2327/1/2327 2328/1/2328 2330/1/2330
+f 2327/1/2327 2330/1/2330 2332/1/2332
+f 2331/1/2331 2327/1/2327 2332/1/2332
+f 2331/1/2331 2332/1/2332 2336/1/2336
+f 2331/1/2331 2336/1/2336 2337/1/2337
+f 2331/1/2331 2337/1/2337 2338/1/2338
+f 2338/1/2338 2337/1/2337 2343/1/2343
+f 2338/1/2338 2343/1/2343 2347/1/2347
+f 2343/1/2343 2498/1/2498 2347/1/2347
+f 2498/1/2498 2343/1/2343 2344/1/2344
+f 2344/1/2344 2496/1/2496 2498/1/2498
+f 2498/1/2498 2496/1/2496 2497/1/2497
+f 2496/1/2496 2344/1/2344 2493/1/2493
+f 2496/1/2496 2493/1/2493 2495/1/2495
+f 2344/1/2344 2335/1/2335 2493/1/2493
+f 2493/1/2493 2335/1/2335 2490/1/2490
+f 2344/1/2344 2339/1/2339 2335/1/2335
+f 2334/1/2334 2335/1/2335 2339/1/2339
+f 2334/1/2334 2339/1/2339 2336/1/2336
+f 2333/1/2333 2334/1/2334 2336/1/2336
+f 2333/1/2333 2329/1/2329 2334/1/2334
+f 2336/1/2336 2339/1/2339 2340/1/2340
+f 2339/1/2339 2341/1/2341 2340/1/2340
+f 2341/1/2341 2342/1/2342 2340/1/2340
+f 2337/1/2337 2340/1/2340 2342/1/2342
+f 2341/1/2341 2344/1/2344 2342/1/2342
+f 2329/1/2329 2335/1/2335 2334/1/2334
+f 2339/1/2339 2344/1/2344 2341/1/2341
+f 2343/1/2343 2342/1/2342 2344/1/2344
+f 2342/1/2342 2343/1/2343 2337/1/2337
+f 2336/1/2336 2340/1/2340 2337/1/2337
+f 2332/1/2332 2333/1/2333 2336/1/2336
+f 2317/1/2317 2327/1/2327 2331/1/2331
+f 2317/1/2317 2319/1/2319 2327/1/2327
+f 2319/1/2319 2325/1/2325 2327/1/2327
+f 2319/1/2319 2321/1/2321 2325/1/2325
+f 2321/1/2321 2326/1/2326 2325/1/2325
+f 2321/1/2321 2324/1/2324 2326/1/2326
+f 2320/1/2320 2324/1/2324 2321/1/2321
+f 2316/1/2316 2320/1/2320 2321/1/2321
+f 2316/1/2316 2318/1/2318 2320/1/2320
+f 2318/1/2318 2324/1/2324 2320/1/2320
+f 2316/1/2316 2321/1/2321 2319/1/2319
+f 2332/1/2332 2330/1/2330 2333/1/2333
+f 2327/1/2327 2325/1/2325 2328/1/2328
+f 2329/1/2329 2333/1/2333 2330/1/2330
+f 2325/1/2325 2326/1/2326 2328/1/2328
+f 2490/1/2490 2335/1/2335 2329/1/2329
+f 2486/1/2486 2490/1/2490 2485/1/2485
+f 2490/1/2490 2492/1/2492 2493/1/2493
+f 2492/1/2492 2495/1/2495 2493/1/2493
+f 2497/1/2497 2496/1/2496 2495/1/2495
+f 2497/1/2497 2347/1/2347 2498/1/2498
+f 2491/1/2491 2484/1/2484 2494/1/2494
+f 2482/1/2482 2345/1/2345 2484/1/2484
+f 2482/1/2482 2312/1/2312 2345/1/2345
+f 2479/1/2479 2312/1/2312 2482/1/2482
+f 2346/1/2346 2338/1/2338 2347/1/2347
+f 2312/1/2312 2311/1/2311 2345/1/2345
+f 2312/1/2312 2307/1/2307 2311/1/2311
+f 2338/1/2338 2317/1/2317 2331/1/2331
+f 2307/1/2307 2310/1/2310 2311/1/2311
+f 2317/1/2317 2316/1/2316 2319/1/2319
+f 2315/1/2315 2318/1/2318 2316/1/2316
+f 2315/1/2315 2322/1/2322 2318/1/2318
+f 2318/1/2318 2322/1/2322 2323/1/2323
+f 2323/1/2323 2322/1/2322 432/1/432
+f 2348/1/2348 432/1/432 2322/1/2322
+f 2314/1/2314 2322/1/2322 2315/1/2315
+f 2314/1/2314 2348/1/2348 2322/1/2322
+f 431/1/431 432/1/432 2348/1/2348
+f 431/1/431 428/1/428 432/1/432
+f 429/1/429 428/1/428 431/1/431
+f 85/1/85 426/1/426 429/1/429
+f 429/1/429 426/1/426 428/1/428
+f 427/1/427 432/1/432 428/1/428
+f 87/1/87 2294/1/2294 2295/1/2295
+f 2292/1/2292 2295/1/2295 2294/1/2294
+f 2323/1/2323 432/1/432 427/1/427
+f 2323/1/2323 2324/1/2324 2318/1/2318
+f 2501/1/2501 2326/1/2326 2324/1/2324
+f 2499/1/2499 2326/1/2326 2501/1/2501
+f 2489/1/2489 2499/1/2499 2488/1/2488
+f 2483/1/2483 2487/1/2487 2488/1/2488
+f 2483/1/2483 2479/1/2479 2482/1/2482
+f 2480/1/2480 2308/1/2308 2481/1/2481
+f 2479/1/2479 2309/1/2309 2312/1/2312
+f 2304/1/2304 2305/1/2305 2308/1/2308
+f 2309/1/2309 2307/1/2307 2312/1/2312
+f 2303/1/2303 435/1/435 2305/1/2305
+f 2307/1/2307 2306/1/2306 2310/1/2310
+f 433/1/433 2313/1/2313 2306/1/2306
+f 433/1/433 84/1/84 430/1/430
+f 78/1/78 82/1/82 84/1/84
+f 78/1/78 79/1/79 82/1/82
+f 77/1/77 81/1/81 79/1/79
+f 76/1/76 80/1/80 77/1/77
+f 92/1/92 90/1/90 76/1/76
+f 93/1/93 92/1/92 97/1/97
+f 71/1/71 101/1/101 97/1/97
+f 69/1/69 102/1/102 71/1/71
+f 108/1/108 105/1/105 69/1/69
+f 111/1/111 113/1/113 108/1/108
+f 114/1/114 112/1/112 111/1/111
+f 2270/1/2270 114/1/114 2266/1/2266
+f 2267/1/2267 2266/1/2266 2265/1/2265
+f 2264/1/2264 2247/1/2247 2265/1/2265
+f 2253/1/2253 2251/1/2251 2247/1/2247
+f 2258/1/2258 2254/1/2254 2253/1/2253
+f 2261/1/2261 2256/1/2256 2258/1/2258
+f 2283/1/2283 2256/1/2256 2261/1/2261
+f 2261/1/2261 2263/1/2263 2281/1/2281
+f 2260/1/2260 2262/1/2262 2259/1/2259
+f 2262/1/2262 115/1/115 2280/1/2280
+f 2280/1/2280 110/1/110 68/1/68
+f 2263/1/2263 2284/1/2284 2281/1/2281
+f 2261/1/2261 2281/1/2281 2282/1/2282
+f 2282/1/2282 2283/1/2283 2261/1/2261
+f 2283/1/2283 2293/1/2293 2256/1/2256
+f 2292/1/2292 2294/1/2294 2293/1/2293
+f 2298/1/2298 2295/1/2295 2292/1/2292
+f 2291/1/2291 2296/1/2296 2298/1/2298
+f 2289/1/2289 2286/1/2286 2290/1/2290
+f 2299/1/2299 2296/1/2296 2291/1/2291
+f 2299/1/2299 2302/1/2302 2296/1/2296
+f 2502/1/2502 2503/1/2503 2302/1/2302
+f 2500/1/2500 2502/1/2502 2480/1/2480
+f 2480/1/2480 2304/1/2304 2308/1/2308
+f 2301/1/2301 2288/1/2288 2300/1/2300
+f 2304/1/2304 2303/1/2303 2305/1/2305
+f 2286/1/2286 2287/1/2287 2288/1/2288
+f 2303/1/2303 434/1/434 435/1/435
+f 2285/1/2285 70/1/70 2287/1/2287
+f 434/1/434 75/1/75 435/1/435
+f 67/1/67 74/1/74 75/1/75
+f 68/1/68 65/1/65 70/1/70
+f 67/1/67 66/1/66 73/1/73
+f 65/1/65 72/1/72 66/1/66
+f 2516/1/2516 2517/1/2517 2518/1/2518
+f 2521/1/2521 2516/1/2516 2518/1/2518
+f 2521/1/2521 2518/1/2518 2591/1/2591
+f 2521/1/2521 2591/1/2591 2596/1/2596
+f 4858/1/4858 2521/1/2521 2596/1/2596
+f 4858/1/4858 2596/1/2596 4863/1/4863
+f 4859/1/4859 4858/1/4858 4863/1/4863
+f 4859/1/4859 4863/1/4863 4864/1/4864
+f 4872/1/4872 4859/1/4859 4864/1/4864
+f 4872/1/4872 4864/1/4864 4873/1/4873
+f 4873/1/4873 4877/1/4877 4872/1/4872
+f 4872/1/4872 4877/1/4877 4878/1/4878
+f 4872/1/4872 4878/1/4878 4881/1/4881
+f 4872/1/4872 4881/1/4881 4883/1/4883
+f 4883/1/4883 4881/1/4881 4862/1/4862
+f 4862/1/4862 4859/1/4859 4883/1/4883
+f 4862/1/4862 4857/1/4857 4859/1/4859
+f 4861/1/4861 4857/1/4857 4862/1/4862
+f 4862/1/4862 4884/1/4884 4861/1/4861
+f 4884/1/4884 4885/1/4885 4861/1/4861
+f 4861/1/4861 4885/1/4885 4860/1/4860
+f 4860/1/4860 4885/1/4885 4889/1/4889
+f 4860/1/4860 4889/1/4889 4890/1/4890
+f 4860/1/4860 4890/1/4890 4896/1/4896
+f 4896/1/4896 4853/1/4853 4860/1/4860
+f 4860/1/4860 4853/1/4853 4857/1/4857
+f 4853/1/4853 4856/1/4856 4857/1/4857
+f 4857/1/4857 4856/1/4856 4858/1/4858
+f 4853/1/4853 4852/1/4852 4856/1/4856
+f 4852/1/4852 2521/1/2521 4856/1/4856
+f 4852/1/4852 2519/1/2519 2521/1/2521
+f 2539/1/2539 2519/1/2519 4852/1/4852
+f 4851/1/4851 2539/1/2539 4852/1/4852
+f 4850/1/4850 2539/1/2539 4851/1/4851
+f 4854/1/4854 4850/1/4850 4851/1/4851
+f 4854/1/4854 4851/1/4851 4855/1/4855
+f 4855/1/4855 4895/1/4895 4854/1/4854
+f 4895/1/4895 4897/1/4897 4854/1/4854
+f 4854/1/4854 4897/1/4897 4902/1/4902
+f 4902/1/4902 4897/1/4897 4903/1/4903
+f 4902/1/4902 4903/1/4903 4904/1/4904
+f 4904/1/4904 4850/1/4850 4902/1/4902
+f 4905/1/4905 4850/1/4850 4904/1/4904
+f 4905/1/4905 4846/1/4846 4850/1/4850
+f 4846/1/4846 2527/1/2527 4850/1/4850
+f 4846/1/4846 2530/1/2530 2527/1/2527
+f 2530/1/2530 2525/1/2525 2527/1/2527
+f 2527/1/2527 2525/1/2525 2524/1/2524
+f 2527/1/2527 2524/1/2524 2539/1/2539
+f 2525/1/2525 2526/1/2526 2524/1/2524
+f 2524/1/2524 2526/1/2526 2520/1/2520
+f 2524/1/2524 2520/1/2520 2519/1/2519
+f 2519/1/2519 2520/1/2520 2516/1/2516
+f 2520/1/2520 2522/1/2522 2516/1/2516
+f 2516/1/2516 2522/1/2522 2523/1/2523
+f 2522/1/2522 2579/1/2579 2523/1/2523
+f 2523/1/2523 2579/1/2579 2578/1/2578
+f 2523/1/2523 2578/1/2578 2517/1/2517
+f 2517/1/2517 2578/1/2578 2581/1/2581
+f 2517/1/2517 2581/1/2581 2586/1/2586
+f 2586/1/2586 2581/1/2581 2584/1/2584
+f 2586/1/2586 2584/1/2584 2587/1/2587
+f 2518/1/2518 2586/1/2586 2587/1/2587
+f 2587/1/2587 2584/1/2584 2588/1/2588
+f 2587/1/2587 2588/1/2588 2590/1/2590
+f 2591/1/2591 2587/1/2587 2590/1/2590
+f 2591/1/2591 2590/1/2590 2597/1/2597
+f 2591/1/2591 2597/1/2597 2598/1/2598
+f 2599/1/2599 2591/1/2591 2598/1/2598
+f 2599/1/2599 2598/1/2598 2604/1/2604
+f 2599/1/2599 2604/1/2604 2605/1/2605
+f 4865/1/4865 2599/1/2599 2605/1/2605
+f 4865/1/4865 2605/1/2605 4866/1/4866
+f 4871/1/4871 4865/1/4865 4866/1/4866
+f 4871/1/4871 4866/1/4866 4874/1/4874
+f 4875/1/4875 4871/1/4871 4874/1/4874
+f 4875/1/4875 4874/1/4874 4928/1/4928
+f 4928/1/4928 4932/1/4932 4875/1/4875
+f 4875/1/4875 4932/1/4932 4933/1/4933
+f 4875/1/4875 4933/1/4933 4876/1/4876
+f 4875/1/4875 4876/1/4876 4873/1/4873
+f 4876/1/4876 4933/1/4933 4879/1/4879
+f 4876/1/4876 4879/1/4879 4877/1/4877
+f 4877/1/4877 4879/1/4879 4880/1/4880
+f 4879/1/4879 2614/1/2614 4880/1/4880
+f 2614/1/2614 2616/1/2616 4880/1/4880
+f 2616/1/2616 4886/1/4886 4880/1/4880
+f 4882/1/4882 4880/1/4880 4886/1/4886
+f 4882/1/4882 4886/1/4886 4884/1/4884
+f 4884/1/4884 4886/1/4886 4887/1/4887
+f 4888/1/4888 4887/1/4887 4886/1/4886
+f 2618/1/2618 4888/1/4888 4886/1/4886
+f 2618/1/2618 4886/1/4886 2617/1/2617
+f 2617/1/2617 2610/1/2610 2618/1/2618
+f 2618/1/2618 2610/1/2610 2619/1/2619
+f 2619/1/2619 2601/1/2601 2618/1/2618
+f 2618/1/2618 2601/1/2601 2589/1/2589
+f 2618/1/2618 2589/1/2589 2583/1/2583
+f 2583/1/2583 2589/1/2589 2585/1/2585
+f 2583/1/2583 2585/1/2585 2582/1/2582
+f 2582/1/2582 2576/1/2576 2583/1/2583
+f 4893/1/4893 2583/1/2583 2576/1/2576
+f 4893/1/4893 2576/1/2576 4899/1/4899
+f 4899/1/4899 4898/1/4898 4893/1/4893
+f 4898/1/4898 4894/1/4894 4893/1/4893
+f 4893/1/4893 4894/1/4894 4892/1/4892
+f 4893/1/4893 4892/1/4892 4888/1/4888
+f 4888/1/4888 4892/1/4892 4889/1/4889
+f 4889/1/4889 4892/1/4892 4891/1/4891
+f 4891/1/4891 4892/1/4892 4894/1/4894
+f 4891/1/4891 4894/1/4894 4895/1/4895
+f 4897/1/4897 4894/1/4894 4898/1/4898
+f 4897/1/4897 4898/1/4898 4900/1/4900
+f 4901/1/4901 4900/1/4900 4898/1/4898
+f 4925/1/4925 4900/1/4900 4901/1/4901
+f 4901/1/4901 4899/1/4899 4925/1/4925
+f 4925/1/4925 4899/1/4899 4924/1/4924
+f 4925/1/4925 4924/1/4924 4926/1/4926
+f 4926/1/4926 4907/1/4907 4925/1/4925
+f 4926/1/4926 4912/1/4912 4907/1/4907
+f 4910/1/4910 4907/1/4907 4912/1/4912
+f 4910/1/4910 4912/1/4912 4913/1/4913
+f 4910/1/4910 4913/1/4913 4911/1/4911
+f 4849/1/4849 4910/1/4910 4911/1/4911
+f 4849/1/4849 4911/1/4911 4848/1/4848
+f 4848/1/4848 3984/1/3984 4849/1/4849
+f 4849/1/4849 3984/1/3984 4846/1/4846
+f 4849/1/4849 4846/1/4846 4909/1/4909
+f 4909/1/4909 4846/1/4846 4908/1/4908
+f 4908/1/4908 4906/1/4906 4909/1/4909
+f 4906/1/4906 4910/1/4910 4909/1/4909
+f 4905/1/4905 4906/1/4906 4908/1/4908
+f 4905/1/4905 4903/1/4903 4906/1/4906
+f 4903/1/4903 4907/1/4907 4906/1/4906
+f 4903/1/4903 4900/1/4900 4907/1/4907
+f 4847/1/4847 3984/1/3984 4848/1/4848
+f 4848/1/4848 4914/1/4914 4847/1/4847
+f 4847/1/4847 4914/1/4914 3983/1/3983
+f 4847/1/4847 3983/1/3983 3981/1/3981
+f 3981/1/3981 3983/1/3983 3982/1/3982
+f 3982/1/3982 3959/1/3959 3981/1/3981
+f 3959/1/3959 2536/1/2536 3981/1/3981
+f 3981/1/3981 2536/1/2536 2533/1/2533
+f 3981/1/3981 2533/1/2533 3984/1/3984
+f 3984/1/3984 2533/1/2533 2530/1/2530
+f 2533/1/2533 2528/1/2528 2530/1/2530
+f 2533/1/2533 2531/1/2531 2528/1/2528
+f 2531/1/2531 2532/1/2532 2528/1/2528
+f 2528/1/2528 2532/1/2532 2529/1/2529
+f 2528/1/2528 2529/1/2529 2525/1/2525
+f 2532/1/2532 2543/1/2543 2529/1/2529
+f 2529/1/2529 2543/1/2543 2547/1/2547
+f 2529/1/2529 2547/1/2547 2546/1/2546
+f 2529/1/2529 2546/1/2546 2526/1/2526
+f 2526/1/2526 2546/1/2546 2550/1/2550
+f 2526/1/2526 2550/1/2550 2552/1/2552
+f 2526/1/2526 2552/1/2552 2551/1/2551
+f 2552/1/2552 2556/1/2556 2551/1/2551
+f 2551/1/2551 2556/1/2556 2557/1/2557
+f 2551/1/2551 2557/1/2557 2595/1/2595
+f 2520/1/2520 2551/1/2551 2595/1/2595
+f 2520/1/2520 2595/1/2595 2593/1/2593
+f 2595/1/2595 2594/1/2594 2593/1/2593
+f 2593/1/2593 2594/1/2594 2592/1/2592
+f 2593/1/2593 2592/1/2592 2522/1/2522
+f 2594/1/2594 2574/1/2574 2592/1/2592
+f 2592/1/2592 2574/1/2574 2579/1/2579
+f 2575/1/2575 2579/1/2579 2574/1/2574
+f 2572/1/2572 2575/1/2575 2574/1/2574
+f 2572/1/2572 2574/1/2574 2563/1/2563
+f 2571/1/2571 2572/1/2572 2563/1/2563
+f 2571/1/2571 2563/1/2563 2568/1/2568
+f 2568/1/2568 2570/1/2570 2571/1/2571
+f 4923/1/4923 2571/1/2571 2570/1/2570
+f 2567/1/2567 4923/1/4923 2570/1/2570
+f 2567/1/2567 4922/1/4922 4923/1/4923
+f 4922/1/4922 4921/1/4921 4923/1/4923
+f 4923/1/4923 4921/1/4921 4924/1/4924
+f 4922/1/4922 4918/1/4918 4921/1/4921
+f 4912/1/4912 4921/1/4921 4918/1/4918
+f 4912/1/4912 4918/1/4918 4916/1/4916
+f 4916/1/4916 4918/1/4918 4917/1/4917
+f 4917/1/4917 4915/1/4915 4916/1/4916
+f 4916/1/4916 4915/1/4915 4913/1/4913
+f 4914/1/4914 4913/1/4913 4915/1/4915
+f 4914/1/4914 4915/1/4915 3977/1/3977
+f 3977/1/3977 4915/1/4915 3975/1/3975
+f 3977/1/3977 3975/1/3975 3976/1/3976
+f 3977/1/3977 3976/1/3976 3964/1/3964
+f 3980/1/3980 3977/1/3977 3964/1/3964
+f 3980/1/3980 3964/1/3964 3978/1/3978
+f 3979/1/3979 3980/1/3980 3978/1/3978
+f 3978/1/3978 3959/1/3959 3979/1/3979
+f 3960/1/3960 3959/1/3959 3978/1/3978
+f 3978/1/3978 3961/1/3961 3960/1/3960
+f 3960/1/3960 3961/1/3961 3958/1/3958
+f 3958/1/3958 3955/1/3955 3960/1/3960
+f 3956/1/3956 3955/1/3955 3958/1/3958
+f 3958/1/3958 3957/1/3957 3956/1/3956
+f 3956/1/3956 3957/1/3957 3954/1/3954
+f 3954/1/3954 3953/1/3953 3956/1/3956
+f 3950/1/3950 3953/1/3953 3954/1/3954
+f 3954/1/3954 3949/1/3949 3950/1/3950
+f 3950/1/3950 3949/1/3949 3946/1/3946
+f 3950/1/3950 3946/1/3946 3951/1/3951
+f 3951/1/3951 3952/1/3952 3950/1/3950
+f 3947/1/3947 3952/1/3952 3951/1/3951
+f 3947/1/3947 3696/1/3696 3952/1/3952
+f 3696/1/3696 2542/1/2542 3952/1/3952
+f 3952/1/3952 2542/1/2542 3953/1/3953
+f 3953/1/3953 2542/1/2542 2540/1/2540
+f 3953/1/3953 2540/1/2540 3955/1/3955
+f 3955/1/3955 2540/1/2540 2537/1/2537
+f 3955/1/3955 2537/1/2537 3959/1/3959
+f 2540/1/2540 2538/1/2538 2537/1/2537
+f 2537/1/2537 2538/1/2538 2534/1/2534
+f 2537/1/2537 2534/1/2534 2536/1/2536
+f 2536/1/2536 2534/1/2534 2531/1/2531
+f 2534/1/2534 2535/1/2535 2531/1/2531
+f 2534/1/2534 3699/1/3699 2535/1/2535
+f 3699/1/3699 3703/1/3703 2535/1/2535
+f 2535/1/2535 3703/1/3703 2544/1/2544
+f 2535/1/2535 2544/1/2544 2532/1/2532
+f 2532/1/2532 2544/1/2544 2545/1/2545
+f 2544/1/2544 2631/1/2631 2545/1/2545
+f 2545/1/2545 2631/1/2631 2627/1/2627
+f 2545/1/2545 2627/1/2627 2543/1/2543
+f 2543/1/2543 2627/1/2627 2626/1/2626
+f 2627/1/2627 2625/1/2625 2626/1/2626
+f 2626/1/2626 2625/1/2625 2624/1/2624
+f 2626/1/2626 2624/1/2624 2548/1/2548
+f 2547/1/2547 2626/1/2626 2548/1/2548
+f 2548/1/2548 2624/1/2624 2554/1/2554
+f 2548/1/2548 2554/1/2554 2549/1/2549
+f 2546/1/2546 2548/1/2548 2549/1/2549
+f 2549/1/2549 2554/1/2554 2555/1/2555
+f 2549/1/2549 2555/1/2555 2553/1/2553
+f 2550/1/2550 2549/1/2549 2553/1/2553
+f 2553/1/2553 2555/1/2555 2556/1/2556
+f 2558/1/2558 2556/1/2556 2555/1/2555
+f 2559/1/2559 2558/1/2558 2555/1/2555
+f 2559/1/2559 2555/1/2555 2560/1/2560
+f 2564/1/2564 2559/1/2559 2560/1/2560
+f 2564/1/2564 2560/1/2560 2565/1/2565
+f 2565/1/2565 2569/1/2569 2564/1/2564
+f 2564/1/2564 2569/1/2569 2567/1/2567
+f 2564/1/2564 2567/1/2567 2568/1/2568
+f 2568/1/2568 2561/1/2561 2564/1/2564
+f 2620/1/2620 2569/1/2569 2565/1/2565
+f 2565/1/2565 2566/1/2566 2620/1/2620
+f 2620/1/2620 2566/1/2566 2621/1/2621
+f 2620/1/2620 2621/1/2621 2622/1/2622
+f 2620/1/2620 2622/1/2622 2623/1/2623
+f 2623/1/2623 3743/1/3743 2620/1/2620
+f 2623/1/2623 3742/1/3742 3743/1/3743
+f 3743/1/3743 3742/1/3742 4920/1/4920
+f 3743/1/3743 4920/1/4920 2569/1/2569
+f 2569/1/2569 4920/1/4920 4922/1/4922
+f 3742/1/3742 4919/1/4919 4920/1/4920
+f 4920/1/4920 4919/1/4919 4918/1/4918
+f 3742/1/3742 3973/1/3973 4919/1/4919
+f 3975/1/3975 4919/1/4919 3973/1/3973
+f 3975/1/3975 3973/1/3973 3974/1/3974
+f 3974/1/3974 3973/1/3973 3972/1/3972
+f 3974/1/3974 3972/1/3972 3966/1/3966
+f 3966/1/3966 3964/1/3964 3974/1/3974
+f 3966/1/3966 3962/1/3962 3964/1/3964
+f 3961/1/3961 3964/1/3964 3962/1/3962
+f 3961/1/3961 3962/1/3962 3957/1/3957
+f 3957/1/3957 3962/1/3962 3963/1/3963
+f 3957/1/3957 3963/1/3963 3949/1/3949
+f 3967/1/3967 3949/1/3949 3963/1/3963
+f 3967/1/3967 3963/1/3963 3965/1/3965
+f 3965/1/3965 3731/1/3731 3967/1/3967
+f 3967/1/3967 3731/1/3731 3968/1/3968
+f 3967/1/3967 3968/1/3968 3944/1/3944
+f 3944/1/3944 3945/1/3945 3967/1/3967
+f 3944/1/3944 3942/1/3942 3945/1/3945
+f 3943/1/3943 3945/1/3945 3942/1/3942
+f 3943/1/3943 3942/1/3942 3940/1/3940
+f 3943/1/3943 3940/1/3940 3939/1/3939
+f 3948/1/3948 3943/1/3943 3939/1/3939
+f 3948/1/3948 3939/1/3939 3941/1/3941
+f 3985/1/3985 3948/1/3948 3941/1/3941
+f 3985/1/3985 3941/1/3941 3987/1/3987
+f 3987/1/3987 3986/1/3986 3985/1/3985
+f 3985/1/3985 3986/1/3986 3696/1/3696
+f 3986/1/3986 3692/1/3692 3696/1/3696
+f 3692/1/3692 3691/1/3691 3696/1/3696
+f 3692/1/3692 3655/1/3655 3691/1/3691
+f 3655/1/3655 3650/1/3650 3691/1/3691
+f 3691/1/3691 3650/1/3650 3694/1/3694
+f 3691/1/3691 3694/1/3694 2541/1/2541
+f 2542/1/2542 3691/1/3691 2541/1/2541
+f 2541/1/2541 3694/1/3694 3697/1/3697
+f 2541/1/2541 3697/1/3697 2538/1/2538
+f 2538/1/2538 3697/1/3697 3698/1/3698
+f 3697/1/3697 3700/1/3700 3698/1/3698
+f 3698/1/3698 3700/1/3700 3702/1/3702
+f 3698/1/3698 3702/1/3702 3701/1/3701
+f 3698/1/3698 3701/1/3701 3699/1/3699
+f 3699/1/3699 3701/1/3701 3704/1/3704
+f 3701/1/3701 3706/1/3706 3704/1/3704
+f 3704/1/3704 3706/1/3706 3737/1/3737
+f 3704/1/3704 3737/1/3737 3703/1/3703
+f 3703/1/3703 3737/1/3737 3740/1/3740
+f 3737/1/3737 3738/1/3738 3740/1/3740
+f 3740/1/3740 3738/1/3738 2628/1/2628
+f 3740/1/3740 2628/1/2628 2631/1/2631
+f 2629/1/2629 2628/1/2628 3738/1/3738
+f 3739/1/3739 2629/1/2629 3738/1/3738
+f 3739/1/3739 3738/1/3738 3736/1/3736
+f 3734/1/3734 3739/1/3739 3736/1/3736
+f 3734/1/3734 3736/1/3736 3732/1/3732
+f 3734/1/3734 3732/1/3732 3729/1/3729
+f 3729/1/3729 3731/1/3731 3734/1/3734
+f 3734/1/3734 3731/1/3731 3742/1/3742
+f 3734/1/3734 3742/1/3742 3741/1/3741
+f 3731/1/3731 3971/1/3971 3742/1/3742
+f 3731/1/3731 3970/1/3970 3971/1/3971
+f 3971/1/3971 3970/1/3970 3972/1/3972
+f 3729/1/3729 3728/1/3728 3731/1/3731
+f 3728/1/3728 3969/1/3969 3731/1/3731
+f 3726/1/3726 3969/1/3969 3728/1/3728
+f 3725/1/3725 3726/1/3726 3728/1/3728
+f 3724/1/3724 3726/1/3726 3725/1/3725
+f 3725/1/3725 3717/1/3717 3724/1/3724
+f 3724/1/3724 3717/1/3717 3718/1/3718
+f 3724/1/3724 3718/1/3718 3722/1/3722
+f 3724/1/3724 3722/1/3722 3637/1/3637
+f 3637/1/3637 3727/1/3727 3724/1/3724
+f 3727/1/3727 3637/1/3637 3635/1/3635
+f 3923/1/3923 3727/1/3727 3635/1/3635
+f 3923/1/3923 3635/1/3635 3630/1/3630
+f 3923/1/3923 3630/1/3630 3924/1/3924
+f 3933/1/3933 3923/1/3923 3924/1/3924
+f 3933/1/3933 3924/1/3924 3930/1/3930
+f 3930/1/3930 3934/1/3934 3933/1/3933
+f 3933/1/3933 3934/1/3934 3936/1/3936
+f 3933/1/3933 3936/1/3936 3935/1/3935
+f 3935/1/3935 3936/1/3936 3940/1/3940
+f 3937/1/3937 3936/1/3936 3934/1/3934
+f 3937/1/3937 3934/1/3934 3938/1/3938
+f 3937/1/3937 3938/1/3938 3989/1/3989
+f 3987/1/3987 3937/1/3937 3989/1/3989
+f 3989/1/3989 3988/1/3988 3987/1/3987
+f 3990/1/3990 3988/1/3988 3989/1/3989
+f 3990/1/3990 3991/1/3991 3988/1/3988
+f 3991/1/3991 3747/1/3747 3988/1/3988
+f 3988/1/3988 3747/1/3747 3693/1/3693
+f 3988/1/3988 3693/1/3693 3986/1/3986
+f 3747/1/3747 3654/1/3654 3693/1/3693
+f 3693/1/3693 3654/1/3654 3655/1/3655
+f 3654/1/3654 3649/1/3649 3655/1/3655
+f 3654/1/3654 3653/1/3653 3649/1/3649
+f 3653/1/3653 3651/1/3651 3649/1/3649
+f 3649/1/3649 3651/1/3651 3646/1/3646
+f 3649/1/3649 3646/1/3646 3650/1/3650
+f 3646/1/3646 3647/1/3647 3650/1/3650
+f 3650/1/3650 3647/1/3647 3695/1/3695
+f 3647/1/3647 3648/1/3648 3695/1/3695
+f 3695/1/3695 3648/1/3648 3746/1/3746
+f 3695/1/3695 3746/1/3746 3721/1/3721
+f 3695/1/3695 3721/1/3721 3720/1/3720
+f 3694/1/3694 3695/1/3695 3720/1/3720
+f 3694/1/3694 3720/1/3720 3713/1/3713
+f 3720/1/3720 3714/1/3714 3713/1/3713
+f 3713/1/3713 3714/1/3714 3711/1/3711
+f 3713/1/3713 3711/1/3711 3710/1/3710
+f 3697/1/3697 3713/1/3713 3710/1/3710
+f 3710/1/3710 3711/1/3711 3708/1/3708
+f 3710/1/3710 3708/1/3708 3700/1/3700
+f 3700/1/3700 3708/1/3708 3707/1/3707
+f 3708/1/3708 3709/1/3709 3707/1/3707
+f 3707/1/3707 3709/1/3709 3705/1/3705
+f 3702/1/3702 3707/1/3707 3705/1/3705
+f 3733/1/3733 3705/1/3705 3709/1/3709
+f 3730/1/3730 3733/1/3733 3709/1/3709
+f 3730/1/3730 3709/1/3709 3716/1/3716
+f 3725/1/3725 3730/1/3730 3716/1/3716
+f 3729/1/3729 3730/1/3730 3725/1/3725
+f 3716/1/3716 3709/1/3709 3712/1/3712
+f 3716/1/3716 3712/1/3712 3717/1/3717
+f 3717/1/3717 3712/1/3712 3715/1/3715
+f 3711/1/3711 3715/1/3715 3712/1/3712
+f 3729/1/3729 3733/1/3733 3730/1/3730
+f 3732/1/3732 3705/1/3705 3733/1/3733
+f 3732/1/3732 3706/1/3706 3705/1/3705
+f 3735/1/3735 3706/1/3706 3732/1/3732
+f 3708/1/3708 3712/1/3712 3709/1/3709
+f 3711/1/3711 3712/1/3712 3708/1/3708
+f 3714/1/3714 3715/1/3715 3711/1/3711
+f 3714/1/3714 3719/1/3719 3715/1/3715
+f 3718/1/3718 3715/1/3715 3719/1/3719
+f 3721/1/3721 3719/1/3719 3714/1/3714
+f 3721/1/3721 3723/1/3723 3719/1/3719
+f 3722/1/3722 3719/1/3719 3723/1/3723
+f 3722/1/3722 3723/1/3723 3744/1/3744
+f 3722/1/3722 3744/1/3744 3636/1/3636
+f 3636/1/3636 3744/1/3744 3638/1/3638
+f 3636/1/3636 3638/1/3638 3634/1/3634
+f 3633/1/3633 3636/1/3636 3634/1/3634
+f 3633/1/3633 3634/1/3634 3629/1/3629
+f 3630/1/3630 3633/1/3633 3629/1/3629
+f 3630/1/3630 3629/1/3629 3628/1/3628
+f 3922/1/3922 3630/1/3630 3628/1/3628
+f 3922/1/3922 3628/1/3628 3920/1/3920
+f 3924/1/3924 3922/1/3922 3920/1/3920
+f 3623/1/3623 3920/1/3920 3628/1/3628
+f 3624/1/3624 3623/1/3623 3628/1/3628
+f 3621/1/3621 3623/1/3623 3624/1/3624
+f 3626/1/3626 3621/1/3621 3624/1/3624
+f 3626/1/3626 3624/1/3624 3664/1/3664
+f 3662/1/3662 3626/1/3626 3664/1/3664
+f 3662/1/3662 3664/1/3664 3644/1/3644
+f 3662/1/3662 3644/1/3644 3643/1/3643
+f 3659/1/3659 3662/1/3662 3643/1/3643
+f 3652/1/3652 3659/1/3659 3643/1/3643
+f 3652/1/3652 3643/1/3643 3651/1/3651
+f 3651/1/3651 3643/1/3643 3645/1/3645
+f 3643/1/3643 3640/1/3640 3645/1/3645
+f 3640/1/3640 3641/1/3641 3645/1/3645
+f 3645/1/3645 3641/1/3641 3646/1/3646
+f 3646/1/3646 3641/1/3641 3642/1/3642
+f 3639/1/3639 3642/1/3642 3641/1/3641
+f 3638/1/3638 3642/1/3642 3639/1/3639
+f 3642/1/3642 3638/1/3638 3648/1/3648
+f 3648/1/3648 3638/1/3638 3745/1/3745
+f 3640/1/3640 3639/1/3639 3641/1/3641
+f 3640/1/3640 3632/1/3632 3639/1/3639
+f 3634/1/3634 3639/1/3639 3632/1/3632
+f 3631/1/3631 3632/1/3632 3640/1/3640
+f 3644/1/3644 3631/1/3631 3640/1/3640
+f 3631/1/3631 3629/1/3629 3632/1/3632
+f 3624/1/3624 3629/1/3629 3631/1/3631
+f 3658/1/3658 3659/1/3659 3652/1/3652
+f 3653/1/3653 3658/1/3658 3652/1/3652
+f 3657/1/3657 3658/1/3658 3653/1/3653
+f 3656/1/3656 3657/1/3657 3653/1/3653
+f 3672/1/3672 3657/1/3657 3656/1/3656
+f 3748/1/3748 3672/1/3672 3656/1/3656
+f 3748/1/3748 3656/1/3656 3747/1/3747
+f 3749/1/3749 3672/1/3672 3748/1/3748
+f 3995/1/3995 3749/1/3749 3748/1/3748
+f 3995/1/3995 3748/1/3748 3991/1/3991
+f 3994/1/3994 3995/1/3995 3991/1/3991
+f 3994/1/3994 3991/1/3991 3993/1/3993
+f 3993/1/3993 3996/1/3996 3994/1/3994
+f 3994/1/3994 3996/1/3996 3997/1/3997
+f 3997/1/3997 3996/1/3996 3998/1/3998
+f 3997/1/3997 3998/1/3998 3999/1/3999
+f 3999/1/3999 3750/1/3750 3997/1/3997
+f 3997/1/3997 3750/1/3750 3995/1/3995
+f 3754/1/3754 3750/1/3750 3999/1/3999
+f 3999/1/3999 4000/1/4000 3754/1/3754
+f 3754/1/3754 4000/1/4000 3802/1/3802
+f 3754/1/3754 3802/1/3802 3752/1/3752
+f 3752/1/3752 3802/1/3802 3801/1/3801
+f 3801/1/3801 3753/1/3753 3752/1/3752
+f 3752/1/3752 3753/1/3753 3750/1/3750
+f 3753/1/3753 3751/1/3751 3750/1/3750
+f 3750/1/3750 3751/1/3751 3749/1/3749
+f 3751/1/3751 3673/1/3673 3749/1/3749
+f 3751/1/3751 3679/1/3679 3673/1/3673
+f 3679/1/3679 3677/1/3677 3673/1/3673
+f 3673/1/3673 3677/1/3677 3674/1/3674
+f 3673/1/3673 3674/1/3674 3670/1/3670
+f 3673/1/3673 3670/1/3670 3672/1/3672
+f 3674/1/3674 3671/1/3671 3670/1/3670
+f 3670/1/3670 3671/1/3671 3666/1/3666
+f 3670/1/3670 3666/1/3666 3657/1/3657
+f 3657/1/3657 3666/1/3666 3661/1/3661
+f 3666/1/3666 3665/1/3665 3661/1/3661
+f 3661/1/3661 3665/1/3665 3660/1/3660
+f 3661/1/3661 3660/1/3660 3658/1/3658
+f 3665/1/3665 3663/1/3663 3660/1/3660
+f 3660/1/3660 3663/1/3663 3662/1/3662
+f 3665/1/3665 3669/1/3669 3663/1/3663
+f 3669/1/3669 3683/1/3683 3663/1/3663
+f 3683/1/3683 3625/1/3625 3663/1/3663
+f 3663/1/3663 3625/1/3625 3626/1/3626
+f 3683/1/3683 3684/1/3684 3625/1/3625
+f 3684/1/3684 3627/1/3627 3625/1/3625
+f 3625/1/3625 3627/1/3627 3621/1/3621
+f 3627/1/3627 3622/1/3622 3621/1/3621
+f 3687/1/3687 3622/1/3622 3627/1/3627
+f 3687/1/3687 3911/1/3911 3622/1/3622
+f 3911/1/3911 3913/1/3913 3622/1/3622
+f 3622/1/3622 3913/1/3913 3919/1/3919
+f 3622/1/3622 3919/1/3919 3623/1/3623
+f 3913/1/3913 3921/1/3921 3919/1/3919
+f 3919/1/3919 3921/1/3921 3920/1/3920
+f 3921/1/3921 3926/1/3926 3920/1/3920
+f 3926/1/3926 3929/1/3929 3920/1/3920
+f 3930/1/3930 3920/1/3920 3929/1/3929
+f 3929/1/3929 3932/1/3932 3930/1/3930
+f 3929/1/3929 3931/1/3931 3932/1/3932
+f 3996/1/3996 3932/1/3932 3931/1/3931
+f 3992/1/3992 3932/1/3932 3996/1/3996
+f 3938/1/3938 3932/1/3932 3992/1/3992
+f 3990/1/3990 3938/1/3938 3992/1/3992
+f 3990/1/3990 3992/1/3992 3993/1/3993
+f 3926/1/3926 3931/1/3931 3929/1/3929
+f 4001/1/4001 3931/1/3931 3926/1/3926
+f 3928/1/3928 4001/1/4001 3926/1/3926
+f 3928/1/3928 4000/1/4000 4001/1/4001
+f 4000/1/4000 3998/1/3998 4001/1/4001
+f 4001/1/4001 3998/1/3998 3931/1/3931
+f 3921/1/3921 3928/1/3928 3926/1/3926
+f 3927/1/3927 3928/1/3928 3921/1/3921
+f 3927/1/3927 4002/1/4002 3928/1/3928
+f 4002/1/4002 3804/1/3804 3928/1/3928
+f 3804/1/3804 3802/1/3802 3928/1/3928
+f 3804/1/3804 3795/1/3795 3802/1/3802
+f 3790/1/3790 3795/1/3795 3804/1/3804
+f 3803/1/3803 3790/1/3790 3804/1/3804
+f 3791/1/3791 3790/1/3790 3803/1/3803
+f 3791/1/3791 3803/1/3803 4002/1/4002
+f 3788/1/3788 3790/1/3790 3791/1/3791
+f 3805/1/3805 3788/1/3788 3791/1/3791
+f 3805/1/3805 3791/1/3791 3913/1/3913
+f 3913/1/3913 3791/1/3791 3927/1/3927
+f 3787/1/3787 3788/1/3788 3805/1/3805
+f 3912/1/3912 3787/1/3787 3805/1/3805
+f 3912/1/3912 3805/1/3805 3911/1/3911
+f 3908/1/3908 3912/1/3912 3911/1/3911
+f 3908/1/3908 3911/1/3911 3910/1/3910
+f 3909/1/3909 3908/1/3908 3910/1/3910
+f 3909/1/3909 3910/1/3910 3689/1/3689
+f 3690/1/3690 3909/1/3909 3689/1/3689
+f 3690/1/3690 3689/1/3689 3688/1/3688
+f 3682/1/3682 3690/1/3690 3688/1/3688
+f 3682/1/3682 3688/1/3688 3676/1/3676
+f 3675/1/3675 3682/1/3682 3676/1/3676
+f 3675/1/3675 3676/1/3676 3671/1/3671
+f 3671/1/3671 3676/1/3676 3667/1/3667
+f 3676/1/3676 3685/1/3685 3667/1/3667
+f 3667/1/3667 3685/1/3685 3668/1/3668
+f 3667/1/3667 3668/1/3668 3665/1/3665
+f 3685/1/3685 3683/1/3683 3668/1/3668
+f 3678/1/3678 3682/1/3682 3675/1/3675
+f 3674/1/3674 3678/1/3678 3675/1/3675
+f 3678/1/3678 3906/1/3906 3682/1/3682
+f 3906/1/3906 3905/1/3905 3682/1/3682
+f 3904/1/3904 3905/1/3905 3906/1/3906
+f 3681/1/3681 3904/1/3904 3906/1/3906
+f 4003/1/4003 3904/1/3904 3681/1/3681
+f 3677/1/3677 4003/1/4003 3681/1/3681
+f 3677/1/3677 3681/1/3681 3678/1/3678
+f 3680/1/3680 4003/1/4003 3677/1/3677
+f 3680/1/3680 3898/1/3898 4003/1/4003
+f 3898/1/3898 3900/1/3900 4003/1/4003
+f 3898/1/3898 3895/1/3895 3900/1/3900
+f 3895/1/3895 3899/1/3899 3900/1/3900
+f 3900/1/3900 3899/1/3899 3903/1/3903
+f 3900/1/3900 3903/1/3903 3904/1/3904
+f 3899/1/3899 3902/1/3902 3903/1/3903
+f 3903/1/3903 3902/1/3902 3907/1/3907
+f 3903/1/3903 3907/1/3907 3905/1/3905
+f 3905/1/3905 3907/1/3907 3909/1/3909
+f 3902/1/3902 3908/1/3908 3907/1/3907
+f 3902/1/3902 3914/1/3914 3908/1/3908
+f 3901/1/3901 3914/1/3914 3902/1/3902
+f 3901/1/3901 3915/1/3915 3914/1/3914
+f 3915/1/3915 3912/1/3912 3914/1/3914
+f 3915/1/3915 3916/1/3916 3912/1/3912
+f 3917/1/3917 3916/1/3916 3915/1/3915
+f 3892/1/3892 3917/1/3917 3915/1/3915
+f 3892/1/3892 3915/1/3915 3893/1/3893
+f 3891/1/3891 3892/1/3892 3893/1/3893
+f 3891/1/3891 3893/1/3893 3894/1/3894
+f 3891/1/3891 3894/1/3894 3895/1/3895
+f 3890/1/3890 3891/1/3891 3895/1/3895
+f 3896/1/3896 3890/1/3890 3895/1/3895
+f 3889/1/3889 3890/1/3890 3896/1/3896
+f 3897/1/3897 3889/1/3889 3896/1/3896
+f 3897/1/3897 3896/1/3896 3898/1/3898
+f 3888/1/3888 3889/1/3889 3897/1/3897
+f 3758/1/3758 3888/1/3888 3897/1/3897
+f 3758/1/3758 3897/1/3897 3679/1/3679
+f 3755/1/3755 3758/1/3758 3679/1/3679
+f 3757/1/3757 3758/1/3758 3755/1/3755
+f 3756/1/3756 3757/1/3757 3755/1/3755
+f 3756/1/3756 3755/1/3755 3753/1/3753
+f 3799/1/3799 3756/1/3756 3753/1/3753
+f 3799/1/3799 3753/1/3753 3800/1/3800
+f 3800/1/3800 3795/1/3795 3799/1/3799
+f 3799/1/3799 3795/1/3795 3794/1/3794
+f 3799/1/3799 3794/1/3794 3798/1/3798
+f 3798/1/3798 3794/1/3794 3793/1/3793
+f 3798/1/3798 3793/1/3793 3797/1/3797
+f 3797/1/3797 3756/1/3756 3798/1/3798
+f 3763/1/3763 3756/1/3756 3797/1/3797
+f 3763/1/3763 3760/1/3760 3756/1/3756
+f 3762/1/3762 3760/1/3760 3763/1/3763
+f 3763/1/3763 3796/1/3796 3762/1/3762
+f 3762/1/3762 3796/1/3796 3770/1/3770
+f 3762/1/3762 3770/1/3770 3767/1/3767
+f 3767/1/3767 3764/1/3764 3762/1/3762
+f 3769/1/3769 3764/1/3764 3767/1/3767
+f 3767/1/3767 3771/1/3771 3769/1/3769
+f 3769/1/3769 3771/1/3771 3772/1/3772
+f 3769/1/3769 3772/1/3772 3768/1/3768
+f 3768/1/3768 3772/1/3772 3773/1/3773
+f 3768/1/3768 3773/1/3773 3774/1/3774
+f 3774/1/3774 3766/1/3766 3768/1/3768
+f 3768/1/3768 3766/1/3766 3764/1/3764
+f 3766/1/3766 3765/1/3765 3764/1/3764
+f 3764/1/3764 3765/1/3765 3761/1/3761
+f 3764/1/3764 3761/1/3761 3760/1/3760
+f 3760/1/3760 3761/1/3761 3757/1/3757
+f 3761/1/3761 3759/1/3759 3757/1/3757
+f 3761/1/3761 3849/1/3849 3759/1/3759
+f 3849/1/3849 3887/1/3887 3759/1/3759
+f 3759/1/3759 3887/1/3887 3888/1/3888
+f 3887/1/3887 3881/1/3881 3888/1/3888
+f 3888/1/3888 3881/1/3881 3885/1/3885
+f 3881/1/3881 3882/1/3882 3885/1/3885
+f 3885/1/3885 3882/1/3882 3886/1/3886
+f 3885/1/3885 3886/1/3886 3889/1/3889
+f 3882/1/3882 3884/1/3884 3886/1/3886
+f 3886/1/3886 3884/1/3884 3891/1/3891
+f 3882/1/3882 3878/1/3878 3884/1/3884
+f 3878/1/3878 3883/1/3883 3884/1/3884
+f 3884/1/3884 3883/1/3883 3892/1/3892
+f 3878/1/3878 3875/1/3875 3883/1/3883
+f 3875/1/3875 3918/1/3918 3883/1/3883
+f 3883/1/3883 3918/1/3918 3917/1/3917
+f 3918/1/3918 3863/1/3863 3917/1/3917
+f 3862/1/3862 3863/1/3863 3918/1/3918
+f 3862/1/3862 3835/1/3835 3863/1/3863
+f 3835/1/3835 3783/1/3783 3863/1/3863
+f 3863/1/3863 3783/1/3783 3784/1/3784
+f 3863/1/3863 3784/1/3784 3916/1/3916
+f 3916/1/3916 3784/1/3784 3787/1/3787
+f 3784/1/3784 3785/1/3785 3787/1/3787
+f 3784/1/3784 3780/1/3780 3785/1/3785
+f 3780/1/3780 3781/1/3781 3785/1/3785
+f 3785/1/3785 3781/1/3781 3786/1/3786
+f 3785/1/3785 3786/1/3786 3788/1/3788
+f 3788/1/3788 3786/1/3786 3789/1/3789
+f 3786/1/3786 3782/1/3782 3789/1/3789
+f 3782/1/3782 3793/1/3793 3789/1/3789
+f 3789/1/3789 3793/1/3793 3792/1/3792
+f 3789/1/3789 3792/1/3792 3790/1/3790
+f 3782/1/3782 3796/1/3796 3793/1/3793
+f 3781/1/3781 3782/1/3782 3786/1/3786
+f 3781/1/3781 3777/1/3777 3782/1/3782
+f 3777/1/3777 3770/1/3770 3782/1/3782
+f 3777/1/3777 3771/1/3771 3770/1/3770
+f 3775/1/3775 3771/1/3771 3777/1/3777
+f 3778/1/3778 3775/1/3775 3777/1/3777
+f 3780/1/3780 3775/1/3775 3778/1/3778
+f 3779/1/3779 3775/1/3775 3780/1/3780
+f 3783/1/3783 3779/1/3779 3780/1/3780
+f 3806/1/3806 3779/1/3779 3783/1/3783
+f 3806/1/3806 3809/1/3809 3779/1/3779
+f 3809/1/3809 3776/1/3776 3779/1/3779
+f 3809/1/3809 3810/1/3810 3776/1/3776
+f 3810/1/3810 3815/1/3815 3776/1/3776
+f 3815/1/3815 3773/1/3773 3776/1/3776
+f 3815/1/3815 3816/1/3816 3773/1/3773
+f 3845/1/3845 3773/1/3773 3816/1/3816
+f 3845/1/3845 3816/1/3816 3844/1/3844
+f 3844/1/3844 3766/1/3766 3845/1/3845
+f 3844/1/3844 3841/1/3841 3766/1/3766
+f 3841/1/3841 3847/1/3847 3766/1/3766
+f 3841/1/3841 3846/1/3846 3847/1/3847
+f 3846/1/3846 4010/1/4010 3847/1/3847
+f 3847/1/3847 4010/1/4010 4005/1/4005
+f 3847/1/3847 4005/1/4005 3765/1/3765
+f 3765/1/3765 4005/1/4005 3849/1/3849
+f 4005/1/4005 4006/1/4006 3849/1/3849
+f 3849/1/3849 4006/1/4006 4004/1/4004
+f 4006/1/4006 3880/1/3880 4004/1/4004
+f 4004/1/4004 3880/1/3880 3879/1/3879
+f 4004/1/4004 3879/1/3879 3887/1/3887
+f 3880/1/3880 3874/1/3874 3879/1/3879
+f 3879/1/3879 3874/1/3874 3876/1/3876
+f 3879/1/3879 3876/1/3876 3881/1/3881
+f 3881/1/3881 3876/1/3876 3877/1/3877
+f 3876/1/3876 3873/1/3873 3877/1/3877
+f 3873/1/3873 3878/1/3878 3877/1/3877
+f 3874/1/3874 3873/1/3873 3876/1/3876
+f 3874/1/3874 3871/1/3871 3873/1/3873
+f 3871/1/3871 3872/1/3872 3873/1/3873
+f 3873/1/3873 3872/1/3872 3875/1/3875
+f 3872/1/3872 3862/1/3862 3875/1/3875
+f 3864/1/3864 3862/1/3862 3872/1/3872
+f 3864/1/3864 3859/1/3859 3862/1/3862
+f 3861/1/3861 3859/1/3859 3864/1/3864
+f 3865/1/3865 3861/1/3861 3864/1/3864
+f 3865/1/3865 3864/1/3864 3871/1/3871
+f 3868/1/3868 3865/1/3865 3871/1/3871
+f 3866/1/3866 3865/1/3865 3868/1/3868
+f 3870/1/3870 3866/1/3866 3868/1/3868
+f 4007/1/4007 3870/1/3870 3868/1/3868
+f 4007/1/4007 3868/1/3868 3880/1/3880
+f 4009/1/4009 3870/1/3870 4007/1/4007
+f 4006/1/4006 4009/1/4009 4007/1/4007
+f 4008/1/4008 4009/1/4009 4006/1/4006
+f 4008/1/4008 4012/1/4012 4009/1/4009
+f 4012/1/4012 3869/1/3869 4009/1/4009
+f 4012/1/4012 4014/1/4014 3869/1/3869
+f 4014/1/4014 3867/1/3867 3869/1/3869
+f 3869/1/3869 3867/1/3867 3866/1/3866
+f 3867/1/3867 3860/1/3860 3866/1/3866
+f 3866/1/3866 3860/1/3860 3861/1/3861
+f 3860/1/3860 3856/1/3856 3861/1/3861
+f 3857/1/3857 3856/1/3856 3860/1/3860
+f 3857/1/3857 3855/1/3855 3856/1/3856
+f 3855/1/3855 3834/1/3834 3856/1/3856
+f 3856/1/3856 3834/1/3834 3835/1/3835
+f 3856/1/3856 3835/1/3835 3859/1/3859
+f 3834/1/3834 3806/1/3806 3835/1/3835
+f 3834/1/3834 3807/1/3807 3806/1/3806
+f 3807/1/3807 3808/1/3808 3806/1/3806
+f 3807/1/3807 3812/1/3812 3808/1/3808
+f 3812/1/3812 3813/1/3813 3808/1/3808
+f 3808/1/3808 3813/1/3813 3811/1/3811
+f 3808/1/3808 3811/1/3811 3810/1/3810
+f 3811/1/3811 3814/1/3814 3810/1/3810
+f 3811/1/3811 3817/1/3817 3814/1/3814
+f 3814/1/3814 3817/1/3817 3816/1/3816
+f 3843/1/3843 3816/1/3816 3817/1/3817
+f 3843/1/3843 3817/1/3817 3842/1/3842
+f 3842/1/3842 3841/1/3841 3843/1/3843
+f 3839/1/3839 3841/1/3841 3842/1/3842
+f 3839/1/3839 3840/1/3840 3841/1/3841
+f 3837/1/3837 3840/1/3840 3839/1/3839
+f 3839/1/3839 3822/1/3822 3837/1/3837
+f 3837/1/3837 3822/1/3822 3821/1/3821
+f 3837/1/3837 3821/1/3821 3838/1/3838
+f 3838/1/3838 3373/1/3373 3837/1/3837
+f 3848/1/3848 3373/1/3373 3838/1/3838
+f 3838/1/3838 3826/1/3826 3848/1/3848
+f 3848/1/3848 3826/1/3826 3836/1/3836
+f 3848/1/3848 3836/1/3836 3372/1/3372
+f 3372/1/3372 3836/1/3836 3194/1/3194
+f 3372/1/3372 3194/1/3194 3371/1/3371
+f 3371/1/3371 3370/1/3370 3372/1/3372
+f 3372/1/3372 3370/1/3370 3373/1/3373
+f 3370/1/3370 3374/1/3374 3373/1/3373
+f 3373/1/3373 3374/1/3374 3375/1/3375
+f 3373/1/3373 3375/1/3375 3840/1/3840
+f 3840/1/3840 3375/1/3375 3846/1/3846
+f 3375/1/3375 4037/1/4037 3846/1/3846
+f 3375/1/3375 4036/1/4036 4037/1/4037
+f 4036/1/4036 4033/1/4033 4037/1/4037
+f 4037/1/4037 4033/1/4033 4027/1/4027
+f 4037/1/4037 4027/1/4027 4010/1/4010
+f 4010/1/4010 4027/1/4027 4011/1/4011
+f 4027/1/4027 4024/1/4024 4011/1/4011
+f 4011/1/4011 4024/1/4024 4015/1/4015
+f 4011/1/4011 4015/1/4015 4013/1/4013
+f 4011/1/4011 4013/1/4013 4008/1/4008
+f 4005/1/4005 4011/1/4011 4008/1/4008
+f 4015/1/4015 4016/1/4016 4013/1/4013
+f 4013/1/4013 4016/1/4016 4014/1/4014
+f 4016/1/4016 4017/1/4017 4014/1/4014
+f 4016/1/4016 4018/1/4018 4017/1/4017
+f 4018/1/4018 3858/1/3858 4017/1/4017
+f 4017/1/4017 3858/1/3858 3857/1/3857
+f 4017/1/4017 3857/1/3857 3867/1/3867
+f 4018/1/4018 4019/1/4019 3858/1/3858
+f 4019/1/4019 3851/1/3851 3858/1/3858
+f 3858/1/3858 3851/1/3851 3855/1/3855
+f 3854/1/3854 3851/1/3851 4019/1/4019
+f 4020/1/4020 3854/1/3854 4019/1/4019
+f 4021/1/4021 3854/1/3854 4020/1/4020
+f 4022/1/4022 4021/1/4021 4020/1/4020
+f 4022/1/4022 4020/1/4020 4023/1/4023
+f 4024/1/4024 4022/1/4022 4023/1/4023
+f 4025/1/4025 4022/1/4022 4024/1/4024
+f 4025/1/4025 4026/1/4026 4022/1/4022
+f 4028/1/4028 4026/1/4026 4025/1/4025
+f 4027/1/4027 4028/1/4028 4025/1/4025
+f 4028/1/4028 4030/1/4030 4026/1/4026
+f 4030/1/4030 4029/1/4029 4026/1/4026
+f 4026/1/4026 4029/1/4029 4021/1/4021
+f 4029/1/4029 3853/1/3853 4021/1/4021
+f 4029/1/4029 4048/1/4048 3853/1/3853
+f 4048/1/4048 3852/1/3852 3853/1/3853
+f 3853/1/3853 3852/1/3852 3850/1/3850
+f 3853/1/3853 3850/1/3850 3854/1/3854
+f 3852/1/3852 3829/1/3829 3850/1/3850
+f 3850/1/3850 3829/1/3829 3830/1/3830
+f 3850/1/3850 3830/1/3830 3851/1/3851
+f 3851/1/3851 3830/1/3830 3834/1/3834
+f 3829/1/3829 3827/1/3827 3830/1/3830
+f 3830/1/3830 3827/1/3827 3807/1/3807
+f 3829/1/3829 3828/1/3828 3827/1/3827
+f 3828/1/3828 3824/1/3824 3827/1/3827
+f 3827/1/3827 3824/1/3824 3812/1/3812
+f 3824/1/3824 3819/1/3819 3812/1/3812
+f 3824/1/3824 3823/1/3823 3819/1/3819
+f 3823/1/3823 3820/1/3820 3819/1/3819
+f 3819/1/3819 3820/1/3820 3818/1/3818
+f 3819/1/3819 3818/1/3818 3813/1/3813
+f 3820/1/3820 3821/1/3821 3818/1/3818
+f 3820/1/3820 3826/1/3826 3821/1/3821
+f 3825/1/3825 3826/1/3826 3820/1/3820
+f 3823/1/3823 3825/1/3825 3820/1/3820
+f 3824/1/3824 3825/1/3825 3823/1/3823
+f 3193/1/3193 3825/1/3825 3824/1/3824
+f 3193/1/3193 3190/1/3190 3825/1/3825
+f 3825/1/3825 3190/1/3190 3836/1/3836
+f 3188/1/3188 3190/1/3190 3193/1/3193
+f 3189/1/3189 3188/1/3188 3193/1/3193
+f 3189/1/3189 3193/1/3193 3828/1/3828
+f 3831/1/3831 3189/1/3189 3828/1/3828
+f 3832/1/3832 3189/1/3189 3831/1/3831
+f 4639/1/4639 3832/1/3832 3831/1/3831
+f 4639/1/4639 3831/1/3831 4641/1/4641
+f 4640/1/4640 4639/1/4639 4641/1/4641
+f 4640/1/4640 4641/1/4641 4052/1/4052
+f 4053/1/4053 4640/1/4640 4052/1/4052
+f 4053/1/4053 4052/1/4052 4051/1/4051
+f 4040/1/4040 4053/1/4053 4051/1/4051
+f 4040/1/4040 4051/1/4051 4035/1/4035
+f 4034/1/4034 4040/1/4040 4035/1/4035
+f 4034/1/4034 4035/1/4035 4031/1/4031
+f 4033/1/4033 4034/1/4034 4031/1/4031
+f 4033/1/4033 4031/1/4031 4028/1/4028
+f 4031/1/4031 4032/1/4032 4028/1/4028
+f 4038/1/4038 4034/1/4034 4033/1/4033
+f 4038/1/4038 4039/1/4039 4034/1/4034
+f 4038/1/4038 4043/1/4043 4039/1/4039
+f 4043/1/4043 4044/1/4044 4039/1/4039
+f 4039/1/4039 4044/1/4044 4040/1/4040
+f 4044/1/4044 4644/1/4644 4040/1/4040
+f 4560/1/4560 4644/1/4644 4044/1/4044
+f 4560/1/4560 4643/1/4643 4644/1/4644
+f 4643/1/4643 4642/1/4642 4644/1/4644
+f 4644/1/4644 4642/1/4642 4640/1/4640
+f 4643/1/4643 4638/1/4638 4642/1/4642
+f 4638/1/4638 4639/1/4639 4642/1/4642
+f 4638/1/4638 4633/1/4633 4639/1/4639
+f 4635/1/4635 4633/1/4633 4638/1/4638
+f 4637/1/4637 4635/1/4635 4638/1/4638
+f 4636/1/4636 4635/1/4635 4637/1/4637
+f 4557/1/4557 4636/1/4636 4637/1/4637
+f 4557/1/4557 4637/1/4637 4558/1/4558
+f 4555/1/4555 4557/1/4557 4558/1/4558
+f 4555/1/4555 4558/1/4558 4559/1/4559
+f 4042/1/4042 4555/1/4555 4559/1/4559
+f 4042/1/4042 4559/1/4559 4043/1/4043
+f 4559/1/4559 4560/1/4560 4043/1/4043
+f 4552/1/4552 4555/1/4555 4042/1/4042
+f 4041/1/4041 4552/1/4552 4042/1/4042
+f 4041/1/4041 4042/1/4042 4038/1/4038
+f 4041/1/4041 4038/1/4038 4036/1/4036
+f 3374/1/3374 4041/1/4041 4036/1/4036
+f 3376/1/3376 4041/1/4041 3374/1/3374
+f 3376/1/3376 4045/1/4045 4041/1/4041
+f 3365/1/3365 4045/1/4045 3376/1/3376
+f 3364/1/3364 3365/1/3365 3376/1/3376
+f 3364/1/3364 3376/1/3376 3370/1/3370
+f 3368/1/3368 3364/1/3364 3370/1/3370
+f 3368/1/3368 3370/1/3370 3369/1/3369
+f 3369/1/3369 3195/1/3195 3368/1/3368
+f 3368/1/3368 3195/1/3195 3367/1/3367
+f 3367/1/3367 3195/1/3195 3183/1/3183
+f 3367/1/3367 3183/1/3183 3366/1/3366
+f 3366/1/3366 3364/1/3364 3367/1/3367
+f 3333/1/3333 3364/1/3364 3366/1/3366
+f 3333/1/3333 3336/1/3336 3364/1/3364
+f 3334/1/3334 3336/1/3336 3333/1/3333
+f 3333/1/3333 3182/1/3182 3334/1/3334
+f 3334/1/3334 3182/1/3182 3175/1/3175
+f 3334/1/3334 3175/1/3175 3176/1/3176
+f 3176/1/3176 3335/1/3335 3334/1/3334
+f 3173/1/3173 3335/1/3335 3176/1/3176
+f 3176/1/3176 3172/1/3172 3173/1/3173
+f 3173/1/3173 3172/1/3172 3167/1/3167
+f 3173/1/3173 3167/1/3167 3174/1/3174
+f 3174/1/3174 3167/1/3167 3164/1/3164
+f 3174/1/3174 3164/1/3164 3340/1/3340
+f 3340/1/3340 3339/1/3339 3174/1/3174
+f 3174/1/3174 3339/1/3339 3335/1/3335
+f 3339/1/3339 3337/1/3337 3335/1/3335
+f 3335/1/3335 3337/1/3337 3338/1/3338
+f 3335/1/3335 3338/1/3338 3336/1/3336
+f 3336/1/3336 3338/1/3338 3365/1/3365
+f 3338/1/3338 4046/1/4046 3365/1/3365
+f 3338/1/3338 4543/1/4543 4046/1/4046
+f 4543/1/4543 4546/1/4546 4046/1/4046
+f 4046/1/4046 4546/1/4546 4550/1/4550
+f 4046/1/4046 4550/1/4550 4045/1/4045
+f 4045/1/4045 4550/1/4550 4552/1/4552
+f 4550/1/4550 4551/1/4551 4552/1/4552
+f 4552/1/4552 4551/1/4551 4554/1/4554
+f 4551/1/4551 4556/1/4556 4554/1/4554
+f 4554/1/4554 4556/1/4556 4557/1/4557
+f 4556/1/4556 4562/1/4562 4557/1/4557
+f 4561/1/4561 4562/1/4562 4556/1/4556
+f 4561/1/4561 4564/1/4564 4562/1/4562
+f 4564/1/4564 4567/1/4567 4562/1/4562
+f 4562/1/4562 4567/1/4567 4634/1/4634
+f 4562/1/4562 4634/1/4634 4636/1/4636
+f 4567/1/4567 4632/1/4632 4634/1/4634
+f 4634/1/4634 4632/1/4632 4635/1/4635
+f 4567/1/4567 4631/1/4631 4632/1/4632
+f 4631/1/4631 3833/1/3833 4632/1/4632
+f 4632/1/4632 3833/1/3833 3832/1/3832
+f 4632/1/4632 3832/1/3832 4633/1/4633
+f 3833/1/3833 3186/1/3186 3832/1/3832
+f 3833/1/3833 3185/1/3185 3186/1/3186
+f 3185/1/3185 3180/1/3180 3186/1/3186
+f 3186/1/3186 3180/1/3180 3184/1/3184
+f 3186/1/3186 3184/1/3184 3189/1/3189
+f 3180/1/3180 3179/1/3179 3184/1/3184
+f 3184/1/3184 3179/1/3179 3181/1/3181
+f 3184/1/3184 3181/1/3181 3187/1/3187
+f 3184/1/3184 3187/1/3187 3188/1/3188
+f 3181/1/3181 3191/1/3191 3187/1/3187
+f 3187/1/3187 3191/1/3191 3192/1/3192
+f 3187/1/3187 3192/1/3192 3190/1/3190
+f 3192/1/3192 3194/1/3194 3190/1/3190
+f 3192/1/3192 3195/1/3195 3194/1/3194
+f 3191/1/3191 3195/1/3195 3192/1/3192
+f 3181/1/3181 3183/1/3183 3191/1/3191
+f 3178/1/3178 3183/1/3183 3181/1/3181
+f 3178/1/3178 3182/1/3182 3183/1/3183
+f 3179/1/3179 3178/1/3178 3181/1/3181
+f 3177/1/3177 3178/1/3178 3179/1/3179
+f 3177/1/3177 3171/1/3171 3178/1/3178
+f 3171/1/3171 3175/1/3175 3178/1/3178
+f 3171/1/3171 3172/1/3172 3175/1/3175
+f 3166/1/3166 3172/1/3172 3171/1/3171
+f 3170/1/3170 3166/1/3166 3171/1/3171
+f 3169/1/3169 3166/1/3166 3170/1/3170
+f 3169/1/3169 3170/1/3170 3177/1/3177
+f 3169/1/3169 3177/1/3177 3180/1/3180
+f 3165/1/3165 3166/1/3166 3169/1/3169
+f 3168/1/3168 3165/1/3165 3169/1/3169
+f 3168/1/3168 3169/1/3169 3185/1/3185
+f 3196/1/3196 3168/1/3168 3185/1/3185
+f 3197/1/3197 3168/1/3168 3196/1/3196
+f 4575/1/4575 3197/1/3197 3196/1/3196
+f 4575/1/4575 3196/1/3196 4576/1/4576
+f 4570/1/4570 4575/1/4575 4576/1/4576
+f 4570/1/4570 4576/1/4576 4568/1/4568
+f 4565/1/4565 4570/1/4570 4568/1/4568
+f 4565/1/4565 4568/1/4568 4564/1/4564
+f 4563/1/4563 4565/1/4565 4564/1/4564
+f 4566/1/4566 4565/1/4565 4563/1/4563
+f 4549/1/4549 4566/1/4566 4563/1/4563
+f 4549/1/4549 4563/1/4563 4553/1/4553
+f 4550/1/4550 4549/1/4549 4553/1/4553
+f 4553/1/4553 4563/1/4563 4561/1/4561
+f 4553/1/4553 4561/1/4561 4551/1/4551
+f 4549/1/4549 4571/1/4571 4566/1/4566
+f 4571/1/4571 4569/1/4569 4566/1/4566
+f 4572/1/4572 4569/1/4569 4571/1/4571
+f 4548/1/4548 4572/1/4572 4571/1/4571
+f 4580/1/4580 4572/1/4572 4548/1/4548
+f 4547/1/4547 4580/1/4580 4548/1/4548
+f 4547/1/4547 4548/1/4548 4546/1/4546
+f 4546/1/4546 4548/1/4548 4549/1/4549
+f 4545/1/4545 4580/1/4580 4547/1/4547
+f 4543/1/4543 4545/1/4545 4547/1/4547
+f 4541/1/4541 4545/1/4545 4543/1/4543
+f 3337/1/3337 4541/1/4541 4543/1/4543
+f 3363/1/3363 4541/1/4541 3337/1/3337
+f 3363/1/3363 4540/1/4540 4541/1/4541
+f 4540/1/4540 4542/1/4542 4541/1/4541
+f 4541/1/4541 4542/1/4542 4544/1/4544
+f 4542/1/4542 4598/1/4598 4544/1/4544
+f 4544/1/4544 4598/1/4598 4589/1/4589
+f 4544/1/4544 4589/1/4589 4588/1/4588
+f 4544/1/4544 4588/1/4588 4545/1/4545
+f 4545/1/4545 4588/1/4588 4581/1/4581
+f 4588/1/4588 4582/1/4582 4581/1/4581
+f 4581/1/4581 4582/1/4582 4578/1/4578
+f 4581/1/4581 4578/1/4578 4580/1/4580
+f 4582/1/4582 4583/1/4583 4578/1/4578
+f 4583/1/4583 4579/1/4579 4578/1/4578
+f 4578/1/4578 4579/1/4579 4573/1/4573
+f 4578/1/4578 4573/1/4573 4572/1/4572
+f 4579/1/4579 4577/1/4577 4573/1/4573
+f 4573/1/4573 4577/1/4577 4574/1/4574
+f 4573/1/4573 4574/1/4574 4569/1/4569
+f 4569/1/4569 4574/1/4574 4570/1/4570
+f 4577/1/4577 4575/1/4575 4574/1/4574
+f 4577/1/4577 4630/1/4630 4575/1/4575
+f 4584/1/4584 4630/1/4630 4577/1/4577
+f 4584/1/4584 4593/1/4593 4630/1/4630
+f 4593/1/4593 3197/1/3197 4630/1/4630
+f 4593/1/4593 3198/1/3198 3197/1/3197
+f 3198/1/3198 3143/1/3143 3197/1/3197
+f 3198/1/3198 3140/1/3140 3143/1/3143
+f 3140/1/3140 3142/1/3142 3143/1/3143
+f 3143/1/3143 3142/1/3142 3160/1/3160
+f 3143/1/3143 3160/1/3160 3165/1/3165
+f 3160/1/3160 3161/1/3161 3165/1/3165
+f 3160/1/3160 3158/1/3158 3161/1/3161
+f 3158/1/3158 3162/1/3162 3161/1/3161
+f 3162/1/3162 3164/1/3164 3161/1/3161
+f 3162/1/3162 3163/1/3163 3164/1/3164
+f 3342/1/3342 3164/1/3164 3163/1/3163
+f 3342/1/3342 3163/1/3163 3341/1/3341
+f 3341/1/3341 3339/1/3339 3342/1/3342
+f 3341/1/3341 3343/1/3343 3339/1/3339
+f 3343/1/3343 3363/1/3363 3339/1/3339
+f 3343/1/3343 3362/1/3362 3363/1/3363
+f 3348/1/3348 3362/1/3362 3343/1/3343
+f 3346/1/3346 3348/1/3348 3343/1/3343
+f 3346/1/3346 3343/1/3343 3345/1/3345
+f 3345/1/3345 3157/1/3157 3346/1/3346
+f 3346/1/3346 3157/1/3157 3156/1/3156
+f 3346/1/3346 3156/1/3156 3347/1/3347
+f 3347/1/3347 3156/1/3156 3155/1/3155
+f 3347/1/3347 3155/1/3155 3349/1/3349
+f 3349/1/3349 3351/1/3351 3347/1/3347
+f 3347/1/3347 3351/1/3351 3348/1/3348
+f 3351/1/3351 3354/1/3354 3348/1/3348
+f 3351/1/3351 4533/1/4533 3354/1/3354
+f 4533/1/4533 4538/1/4538 3354/1/3354
+f 3354/1/3354 4538/1/4538 4539/1/4539
+f 3354/1/3354 4539/1/4539 3362/1/3362
+f 3362/1/3362 4539/1/4539 4540/1/4540
+f 4539/1/4539 4608/1/4608 4540/1/4540
+f 4539/1/4539 4611/1/4611 4608/1/4608
+f 4611/1/4611 4610/1/4610 4608/1/4608
+f 4608/1/4608 4610/1/4610 4607/1/4607
+f 4608/1/4608 4607/1/4607 4606/1/4606
+f 4608/1/4608 4606/1/4606 4542/1/4542
+f 4542/1/4542 4606/1/4606 4599/1/4599
+f 4606/1/4606 4601/1/4601 4599/1/4599
+f 4599/1/4599 4601/1/4601 4596/1/4596
+f 4599/1/4599 4596/1/4596 4598/1/4598
+f 4598/1/4598 4596/1/4596 4590/1/4590
+f 4596/1/4596 4591/1/4591 4590/1/4590
+f 4590/1/4590 4591/1/4591 4586/1/4586
+f 4590/1/4590 4586/1/4586 4585/1/4585
+f 4589/1/4589 4590/1/4590 4585/1/4585
+f 4585/1/4585 4586/1/4586 4583/1/4583
+f 4586/1/4586 4587/1/4587 4583/1/4583
+f 4583/1/4583 4587/1/4587 4584/1/4584
+f 4586/1/4586 4592/1/4592 4587/1/4587
+f 4592/1/4592 4593/1/4593 4587/1/4587
+f 4592/1/4592 4594/1/4594 4593/1/4593
+f 4595/1/4595 4594/1/4594 4592/1/4592
+f 4591/1/4591 4595/1/4595 4592/1/4592
+f 4597/1/4597 4595/1/4595 4591/1/4591
+f 4597/1/4597 4602/1/4602 4595/1/4595
+f 4602/1/4602 4629/1/4629 4595/1/4595
+f 4604/1/4604 4629/1/4629 4602/1/4602
+f 4600/1/4600 4604/1/4604 4602/1/4602
+f 4603/1/4603 4604/1/4604 4600/1/4600
+f 4605/1/4605 4603/1/4603 4600/1/4600
+f 4605/1/4605 4600/1/4600 4601/1/4601
+f 4609/1/4609 4603/1/4603 4605/1/4605
+f 4607/1/4607 4609/1/4609 4605/1/4605
+f 4609/1/4609 4622/1/4622 4603/1/4603
+f 4622/1/4622 4625/1/4625 4603/1/4603
+f 4622/1/4622 4624/1/4624 4625/1/4625
+f 4624/1/4624 4626/1/4626 4625/1/4625
+f 4625/1/4625 4626/1/4626 4627/1/4627
+f 4625/1/4625 4627/1/4627 4604/1/4604
+f 4626/1/4626 3200/1/3200 4627/1/4627
+f 4627/1/4627 3200/1/3200 3199/1/3199
+f 4627/1/4627 3199/1/3199 4629/1/4629
+f 4629/1/4629 3199/1/3199 3198/1/3198
+f 4629/1/4629 3198/1/3198 4594/1/4594
+f 3200/1/3200 3144/1/3144 3199/1/3199
+f 3199/1/3199 3144/1/3144 3140/1/3140
+f 3144/1/3144 3141/1/3141 3140/1/3140
+f 3144/1/3144 3145/1/3145 3141/1/3141
+f 3145/1/3145 3146/1/3146 3141/1/3141
+f 3141/1/3141 3146/1/3146 3147/1/3147
+f 3141/1/3141 3147/1/3147 3142/1/3142
+f 3142/1/3142 3147/1/3147 3154/1/3154
+f 3142/1/3142 3154/1/3154 3158/1/3158
+f 3154/1/3154 3159/1/3159 3158/1/3158
+f 3154/1/3154 3157/1/3157 3159/1/3159
+f 3159/1/3159 3157/1/3157 3163/1/3163
+f 3344/1/3344 3163/1/3163 3157/1/3157
+f 3153/1/3153 3157/1/3157 3154/1/3154
+f 3147/1/3147 3153/1/3153 3154/1/3154
+f 3146/1/3146 3153/1/3153 3147/1/3147
+f 3146/1/3146 3152/1/3152 3153/1/3153
+f 3152/1/3152 3155/1/3155 3153/1/3153
+f 3152/1/3152 3350/1/3350 3155/1/3155
+f 3150/1/3150 3350/1/3350 3152/1/3152
+f 3151/1/3151 3150/1/3150 3152/1/3152
+f 3145/1/3145 3150/1/3150 3151/1/3151
+f 3149/1/3149 3150/1/3150 3145/1/3145
+f 3148/1/3148 3149/1/3149 3145/1/3145
+f 3202/1/3202 3149/1/3149 3148/1/3148
+f 3201/1/3201 3202/1/3202 3148/1/3148
+f 3201/1/3201 3148/1/3148 3200/1/3200
+f 3329/1/3329 3201/1/3201 3200/1/3200
+f 3327/1/3327 3201/1/3201 3329/1/3329
+f 3328/1/3328 3327/1/3327 3329/1/3329
+f 3328/1/3328 3329/1/3329 4628/1/4628
+f 4619/1/4619 3328/1/3328 4628/1/4628
+f 4619/1/4619 4628/1/4628 4621/1/4621
+f 4617/1/4617 4619/1/4619 4621/1/4621
+f 4617/1/4617 4621/1/4621 4618/1/4618
+f 4613/1/4613 4617/1/4617 4618/1/4618
+f 4613/1/4613 4618/1/4618 4610/1/4610
+f 4610/1/4610 4618/1/4618 4620/1/4620
+f 4610/1/4610 4620/1/4620 4609/1/4609
+f 4612/1/4612 4617/1/4617 4613/1/4613
+f 4611/1/4611 4612/1/4612 4613/1/4613
+f 4614/1/4614 4612/1/4612 4611/1/4611
+f 4538/1/4538 4614/1/4614 4611/1/4611
+f 4532/1/4532 4614/1/4614 4538/1/4538
+f 4532/1/4532 3311/1/3311 4614/1/4614
+f 3311/1/3311 3316/1/3316 4614/1/4614
+f 4614/1/4614 3316/1/3316 4615/1/4615
+f 3316/1/3316 3317/1/3317 4615/1/4615
+f 4615/1/4615 3317/1/3317 4616/1/4616
+f 4615/1/4615 4616/1/4616 4612/1/4612
+f 3317/1/3317 3325/1/3325 4616/1/4616
+f 3325/1/3325 4623/1/4623 4616/1/4616
+f 4616/1/4616 4623/1/4623 4619/1/4619
+f 3325/1/3325 3326/1/3326 4623/1/4623
+f 4623/1/4623 3326/1/3326 3328/1/3328
+f 3325/1/3325 3324/1/3324 3326/1/3326
+f 3324/1/3324 3208/1/3208 3326/1/3326
+f 3326/1/3326 3208/1/3208 3327/1/3327
+f 3322/1/3322 3208/1/3208 3324/1/3324
+f 3323/1/3323 3322/1/3322 3324/1/3324
+f 3319/1/3319 3322/1/3322 3323/1/3323
+f 3313/1/3313 3319/1/3319 3323/1/3323
+f 3313/1/3313 3323/1/3323 3315/1/3315
+f 3314/1/3314 3313/1/3313 3315/1/3315
+f 3314/1/3314 3315/1/3315 3316/1/3316
+f 3310/1/3310 3313/1/3313 3314/1/3314
+f 3311/1/3311 3310/1/3310 3314/1/3314
+f 3307/1/3307 3310/1/3310 3311/1/3311
+f 3307/1/3307 3308/1/3308 3310/1/3310
+f 3308/1/3308 3309/1/3309 3310/1/3310
+f 3308/1/3308 3306/1/3306 3309/1/3309
+f 3306/1/3306 3298/1/3298 3309/1/3309
+f 3298/1/3298 3318/1/3318 3309/1/3309
+f 3309/1/3309 3318/1/3318 3319/1/3319
+f 3318/1/3318 3321/1/3321 3319/1/3319
+f 3318/1/3318 3320/1/3320 3321/1/3321
+f 3320/1/3320 3205/1/3205 3321/1/3321
+f 3321/1/3321 3205/1/3205 3207/1/3207
+f 3321/1/3321 3207/1/3207 3322/1/3322
+f 3205/1/3205 3203/1/3203 3207/1/3207
+f 3207/1/3207 3203/1/3203 3208/1/3208
+f 3208/1/3208 3203/1/3203 3201/1/3201
+f 3205/1/3205 3206/1/3206 3203/1/3203
+f 3206/1/3206 3204/1/3204 3203/1/3203
+f 3203/1/3203 3204/1/3204 3202/1/3202
+f 3204/1/3204 3361/1/3361 3202/1/3202
+f 3202/1/3202 3361/1/3361 3359/1/3359
+f 3361/1/3361 3360/1/3360 3359/1/3359
+f 3359/1/3359 3360/1/3360 3358/1/3358
+f 3359/1/3359 3358/1/3358 3149/1/3149
+f 3360/1/3360 4649/1/4649 3358/1/3358
+f 4649/1/4649 3356/1/3356 3358/1/3358
+f 3358/1/3358 3356/1/3356 3355/1/3355
+f 3150/1/3150 3358/1/3358 3355/1/3355
+f 3353/1/3353 3355/1/3355 3356/1/3356
+f 3353/1/3353 3356/1/3356 3357/1/3357
+f 3357/1/3357 4531/1/4531 3353/1/3353
+f 3353/1/3353 4531/1/4531 3351/1/3351
+f 3353/1/3353 3351/1/3351 3352/1/3352
+f 4536/1/4536 4531/1/4531 3357/1/3357
+f 4534/1/4534 4531/1/4531 4536/1/4536
+f 4536/1/4536 4537/1/4537 4534/1/4534
+f 4534/1/4534 4537/1/4537 4535/1/4535
+f 4535/1/4535 4526/1/4526 4534/1/4534
+f 4525/1/4525 4526/1/4526 4535/1/4535
+f 4535/1/4535 4524/1/4524 4525/1/4525
+f 4525/1/4525 4524/1/4524 4522/1/4522
+f 4522/1/4522 4524/1/4524 4521/1/4521
+f 4522/1/4522 4521/1/4521 4520/1/4520
+f 4520/1/4520 4523/1/4523 4522/1/4522
+f 4522/1/4522 4523/1/4523 4526/1/4526
+f 4523/1/4523 4528/1/4528 4526/1/4526
+f 4526/1/4526 4528/1/4528 4530/1/4530
+f 4526/1/4526 4530/1/4530 4531/1/4531
+f 4531/1/4531 4530/1/4530 4533/1/4533
+f 4530/1/4530 4532/1/4532 4533/1/4533
+f 4530/1/4530 3312/1/3312 4532/1/4532
+f 3312/1/3312 3307/1/3307 4532/1/4532
+f 3312/1/3312 3302/1/3302 3307/1/3307
+f 3302/1/3302 3305/1/3305 3307/1/3307
+f 3302/1/3302 3301/1/3301 3305/1/3305
+f 3301/1/3301 3299/1/3299 3305/1/3305
+f 3305/1/3305 3299/1/3299 3306/1/3306
+f 3301/1/3301 3296/1/3296 3299/1/3299
+f 3296/1/3296 3295/1/3295 3299/1/3299
+f 3299/1/3299 3295/1/3295 3298/1/3298
+f 3295/1/3295 3297/1/3297 3298/1/3298
+f 3298/1/3298 3297/1/3297 3320/1/3320
+f 3295/1/3295 3292/1/3292 3297/1/3297
+f 3292/1/3292 3215/1/3215 3297/1/3297
+f 3297/1/3297 3215/1/3215 3205/1/3205
+f 3292/1/3292 3214/1/3214 3215/1/3215
+f 3214/1/3214 3210/1/3210 3215/1/3215
+f 3215/1/3215 3210/1/3210 3206/1/3206
+f 3210/1/3210 3209/1/3209 3206/1/3206
+f 3210/1/3210 3211/1/3211 3209/1/3209
+f 3211/1/3211 4471/1/4471 3209/1/3209
+f 3209/1/3209 4471/1/4471 4647/1/4647
+f 3209/1/3209 4647/1/4647 3204/1/3204
+f 4471/1/4471 4518/1/4518 4647/1/4647
+f 4647/1/4647 4518/1/4518 4645/1/4645
+f 4647/1/4647 4645/1/4645 3361/1/3361
+f 3361/1/3361 4645/1/4645 4646/1/4646
+f 4645/1/4645 4519/1/4519 4646/1/4646
+f 4519/1/4519 4524/1/4524 4646/1/4646
+f 4646/1/4646 4524/1/4524 4648/1/4648
+f 4646/1/4646 4648/1/4648 3360/1/3360
+f 4648/1/4648 4524/1/4524 4537/1/4537
+f 4648/1/4648 4537/1/4537 4649/1/4649
+f 4518/1/4518 4519/1/4519 4645/1/4645
+f 4518/1/4518 4516/1/4516 4519/1/4519
+f 4516/1/4516 4515/1/4515 4519/1/4519
+f 4519/1/4519 4515/1/4515 4521/1/4521
+f 4516/1/4516 4513/1/4513 4515/1/4515
+f 4515/1/4515 4513/1/4513 4514/1/4514
+f 4520/1/4520 4515/1/4515 4514/1/4514
+f 4514/1/4514 4511/1/4511 4520/1/4520
+f 4512/1/4512 4511/1/4511 4514/1/4514
+f 4507/1/4507 4511/1/4511 4512/1/4512
+f 4512/1/4512 4508/1/4508 4507/1/4507
+f 4507/1/4507 4508/1/4508 4505/1/4505
+f 4507/1/4507 4505/1/4505 4509/1/4509
+f 4509/1/4509 4510/1/4510 4507/1/4507
+f 4504/1/4504 4510/1/4510 4509/1/4509
+f 4503/1/4503 4510/1/4510 4504/1/4504
+f 4504/1/4504 4501/1/4501 4503/1/4503
+f 4503/1/4503 4501/1/4501 4500/1/4500
+f 4500/1/4500 4497/1/4497 4503/1/4503
+f 4498/1/4498 4497/1/4497 4500/1/4500
+f 4500/1/4500 4499/1/4499 4498/1/4498
+f 4498/1/4498 4499/1/4499 4495/1/4495
+f 4495/1/4495 4499/1/4499 4496/1/4496
+f 4495/1/4495 4496/1/4496 4492/1/4492
+f 4492/1/4492 4493/1/4493 4495/1/4495
+f 4495/1/4495 4493/1/4493 4497/1/4497
+f 4493/1/4493 3265/1/3265 4497/1/4497
+f 4497/1/4497 3265/1/3265 3266/1/3266
+f 4497/1/4497 3266/1/3266 4510/1/4510
+f 4510/1/4510 3266/1/3266 4529/1/4529
+f 4510/1/4510 4529/1/4529 4511/1/4511
+f 4511/1/4511 4529/1/4529 4527/1/4527
+f 4511/1/4511 4527/1/4527 4523/1/4523
+f 4529/1/4529 3270/1/3270 4527/1/4527
+f 4527/1/4527 3270/1/3270 3330/1/3330
+f 4527/1/4527 3330/1/3330 4528/1/4528
+f 4528/1/4528 3330/1/3330 3312/1/3312
+f 3270/1/3270 3303/1/3303 3330/1/3330
+f 3330/1/3330 3303/1/3303 3302/1/3302
+f 3303/1/3303 3300/1/3300 3302/1/3302
+f 3303/1/3303 3304/1/3304 3300/1/3300
+f 3304/1/3304 3293/1/3293 3300/1/3300
+f 3300/1/3300 3293/1/3293 3294/1/3294
+f 3300/1/3300 3294/1/3294 3296/1/3296
+f 3294/1/3294 3291/1/3291 3296/1/3296
+f 3288/1/3288 3291/1/3291 3294/1/3294
+f 3288/1/3288 3290/1/3290 3291/1/3291
+f 3291/1/3291 3290/1/3290 3292/1/3292
+f 3288/1/3288 3286/1/3286 3290/1/3290
+f 3286/1/3286 3213/1/3213 3290/1/3290
+f 3290/1/3290 3213/1/3213 3214/1/3214
+f 3284/1/3284 3213/1/3213 3286/1/3286
+f 3285/1/3285 3284/1/3284 3286/1/3286
+f 3283/1/3283 3284/1/3284 3285/1/3285
+f 3287/1/3287 3283/1/3283 3285/1/3285
+f 3287/1/3287 3285/1/3285 3289/1/3289
+f 3332/1/3332 3287/1/3287 3289/1/3289
+f 3332/1/3332 3289/1/3289 3304/1/3304
+f 3331/1/3331 3332/1/3332 3304/1/3304
+f 3269/1/3269 3332/1/3332 3331/1/3331
+f 3270/1/3270 3269/1/3269 3331/1/3331
+f 3267/1/3267 3269/1/3269 3270/1/3270
+f 3267/1/3267 3268/1/3268 3269/1/3269
+f 3268/1/3268 3273/1/3273 3269/1/3269
+f 3269/1/3269 3273/1/3273 3277/1/3277
+f 3273/1/3273 3276/1/3276 3277/1/3277
+f 3277/1/3277 3276/1/3276 3287/1/3287
+f 3276/1/3276 3279/1/3279 3287/1/3287
+f 3275/1/3275 3279/1/3279 3276/1/3276
+f 3275/1/3275 3278/1/3278 3279/1/3279
+f 3278/1/3278 3281/1/3281 3279/1/3279
+f 3279/1/3279 3281/1/3281 3282/1/3282
+f 3279/1/3279 3282/1/3282 3283/1/3283
+f 3281/1/3281 3216/1/3216 3282/1/3282
+f 3282/1/3282 3216/1/3216 3218/1/3218
+f 3282/1/3282 3218/1/3218 3284/1/3284
+f 3216/1/3216 3212/1/3212 3218/1/3218
+f 3218/1/3218 3212/1/3212 3213/1/3213
+f 3213/1/3213 3212/1/3212 3210/1/3210
+f 3216/1/3216 3217/1/3217 3212/1/3212
+f 3217/1/3217 4469/1/4469 3212/1/3212
+f 3212/1/3212 4469/1/4469 3211/1/3211
+f 4469/1/4469 4466/1/4466 3211/1/3211
+f 4469/1/4469 4470/1/4470 4466/1/4466
+f 4470/1/4470 4467/1/4467 4466/1/4466
+f 4466/1/4466 4467/1/4467 4468/1/4468
+f 4466/1/4466 4468/1/4468 4471/1/4471
+f 4471/1/4471 4468/1/4468 4517/1/4517
+f 4517/1/4517 4468/1/4468 4516/1/4516
+f 4468/1/4468 4467/1/4467 4508/1/4508
+f 4468/1/4468 4508/1/4508 4513/1/4513
+f 4470/1/4470 4474/1/4474 4467/1/4467
+f 4474/1/4474 4506/1/4506 4467/1/4467
+f 4506/1/4506 4505/1/4505 4467/1/4467
+f 4506/1/4506 4501/1/4501 4505/1/4505
+f 4502/1/4502 4501/1/4501 4506/1/4506
+f 4502/1/4502 4499/1/4499 4501/1/4501
+f 4476/1/4476 4499/1/4499 4502/1/4502
+f 4476/1/4476 4502/1/4502 4474/1/4474
+f 4473/1/4473 4476/1/4476 4474/1/4474
+f 4473/1/4473 4477/1/4477 4476/1/4476
+f 4477/1/4477 4481/1/4481 4476/1/4476
+f 4479/1/4479 4481/1/4481 4477/1/4477
+f 4475/1/4475 4479/1/4479 4477/1/4477
+f 4480/1/4480 4479/1/4479 4475/1/4475
+f 4478/1/4478 4480/1/4480 4475/1/4475
+f 4478/1/4478 4475/1/4475 4472/1/4472
+f 3221/1/3221 4478/1/4478 4472/1/4472
+f 3221/1/3221 4472/1/4472 3217/1/3217
+f 3220/1/3220 3221/1/3221 3217/1/3217
+f 3220/1/3220 3217/1/3217 3219/1/3219
+f 3222/1/3222 3220/1/3220 3219/1/3219
+f 3222/1/3222 3219/1/3219 3223/1/3223
+f 3280/1/3280 3222/1/3222 3223/1/3223
+f 3280/1/3280 3223/1/3223 3278/1/3278
+f 3274/1/3274 3280/1/3280 3278/1/3278
+f 3239/1/3239 3280/1/3280 3274/1/3274
+f 3271/1/3271 3239/1/3239 3274/1/3274
+f 3271/1/3271 3274/1/3274 3272/1/3272
+f 3268/1/3268 3271/1/3271 3272/1/3272
+f 3241/1/3241 3271/1/3271 3268/1/3268
+f 3241/1/3241 3238/1/3238 3271/1/3271
+f 3241/1/3241 3237/1/3237 3238/1/3238
+f 3237/1/3237 3233/1/3233 3238/1/3238
+f 3238/1/3238 3233/1/3233 3239/1/3239
+f 3233/1/3233 3231/1/3231 3239/1/3239
+f 3233/1/3233 3230/1/3230 3231/1/3231
+f 3230/1/3230 3225/1/3225 3231/1/3231
+f 3231/1/3231 3225/1/3225 3222/1/3222
+f 3230/1/3230 3224/1/3224 3225/1/3225
+f 3224/1/3224 3220/1/3220 3225/1/3225
+f 3224/1/3224 3226/1/3226 3220/1/3220
+f 3227/1/3227 3226/1/3226 3224/1/3224
+f 3229/1/3229 3227/1/3227 3224/1/3224
+f 3235/1/3235 3227/1/3227 3229/1/3229
+f 3234/1/3234 3235/1/3235 3229/1/3229
+f 3234/1/3234 3229/1/3229 3232/1/3232
+f 3236/1/3236 3234/1/3234 3232/1/3232
+f 3236/1/3236 3232/1/3232 3237/1/3237
+f 3240/1/3240 3236/1/3236 3237/1/3237
+f 3240/1/3240 3242/1/3242 3236/1/3236
+f 3245/1/3245 3242/1/3242 3240/1/3240
+f 3243/1/3243 3245/1/3245 3240/1/3240
+f 3243/1/3243 3240/1/3240 3244/1/3244
+f 3265/1/3265 3243/1/3243 3244/1/3244
+f 3262/1/3262 3243/1/3243 3265/1/3265
+f 3262/1/3262 3260/1/3260 3243/1/3243
+f 3261/1/3261 3260/1/3260 3262/1/3262
+f 4463/1/4463 3261/1/3261 3262/1/3262
+f 4463/1/4463 3262/1/3262 4493/1/4493
+f 4462/1/4462 3261/1/3261 4463/1/4463
+f 4490/1/4490 4462/1/4462 4463/1/4463
+f 4490/1/4490 4463/1/4463 4489/1/4489
+f 4489/1/4489 4487/1/4487 4490/1/4490
+f 4490/1/4490 4487/1/4487 4405/1/4405
+f 4490/1/4490 4405/1/4405 4465/1/4465
+f 4465/1/4465 4405/1/4405 4464/1/4464
+f 4464/1/4464 4462/1/4462 4465/1/4465
+f 4461/1/4461 4462/1/4462 4464/1/4464
+f 4464/1/4464 4403/1/4403 4461/1/4461
+f 4461/1/4461 4403/1/4403 4460/1/4460
+f 4460/1/4460 4410/1/4410 4461/1/4461
+f 4411/1/4411 4410/1/4410 4460/1/4460
+f 4460/1/4460 4399/1/4399 4411/1/4411
+f 4411/1/4411 4399/1/4399 4407/1/4407
+f 4407/1/4407 4399/1/4399 4401/1/4401
+f 4407/1/4407 4401/1/4401 4408/1/4408
+f 4408/1/4408 4409/1/4409 4407/1/4407
+f 4407/1/4407 4409/1/4409 4410/1/4410
+f 4409/1/4409 3264/1/3264 4410/1/4410
+f 4410/1/4410 3264/1/3264 3263/1/3263
+f 4410/1/4410 3263/1/3263 4462/1/4462
+f 3264/1/3264 3075/1/3075 3263/1/3263
+f 3263/1/3263 3075/1/3075 3077/1/3077
+f 3263/1/3263 3077/1/3077 3261/1/3261
+f 3075/1/3075 3072/1/3072 3077/1/3077
+f 3077/1/3077 3072/1/3072 3076/1/3076
+f 3077/1/3077 3076/1/3076 3258/1/3258
+f 3077/1/3077 3258/1/3258 3260/1/3260
+f 3260/1/3260 3258/1/3258 3245/1/3245
+f 3258/1/3258 3257/1/3257 3245/1/3245
+f 3245/1/3245 3257/1/3257 3248/1/3248
+f 3257/1/3257 3250/1/3250 3248/1/3248
+f 3248/1/3248 3250/1/3250 3246/1/3246
+f 3248/1/3248 3246/1/3246 3242/1/3242
+f 3242/1/3242 3246/1/3246 3247/1/3247
+f 3242/1/3242 3247/1/3247 3234/1/3234
+f 3246/1/3246 3249/1/3249 3247/1/3247
+f 3249/1/3249 3235/1/3235 3247/1/3247
+f 3249/1/3249 3251/1/3251 3235/1/3235
+f 3249/1/3249 3252/1/3252 3251/1/3251
+f 3252/1/3252 3104/1/3104 3251/1/3251
+f 3251/1/3251 3104/1/3104 3228/1/3228
+f 3251/1/3251 3228/1/3228 3227/1/3227
+f 3104/1/3104 3105/1/3105 3228/1/3228
+f 3228/1/3228 3105/1/3105 3226/1/3226
+f 3226/1/3226 3105/1/3105 3221/1/3221
+f 3104/1/3104 3102/1/3102 3105/1/3105
+f 3102/1/3102 4486/1/4486 3105/1/3105
+f 3105/1/3105 4486/1/4486 4478/1/4478
+f 3102/1/3102 4393/1/4393 4486/1/4486
+f 4393/1/4393 4485/1/4485 4486/1/4486
+f 4486/1/4486 4485/1/4485 4480/1/4480
+f 4485/1/4485 4484/1/4484 4480/1/4480
+f 4480/1/4480 4484/1/4484 4482/1/4482
+f 4482/1/4482 4484/1/4484 4483/1/4483
+f 4482/1/4482 4483/1/4483 4479/1/4479
+f 4484/1/4484 4488/1/4488 4483/1/4483
+f 4483/1/4483 4488/1/4488 4494/1/4494
+f 4483/1/4483 4494/1/4494 4481/1/4481
+f 4481/1/4481 4494/1/4494 4496/1/4496
+f 4494/1/4494 4488/1/4488 4491/1/4491
+f 4492/1/4492 4494/1/4494 4491/1/4491
+f 4491/1/4491 4463/1/4463 4492/1/4492
+f 4491/1/4491 4488/1/4488 4489/1/4489
+f 4484/1/4484 4487/1/4487 4488/1/4488
+f 4484/1/4484 4406/1/4406 4487/1/4487
+f 4485/1/4485 4406/1/4406 4484/1/4484
+f 4396/1/4396 4406/1/4406 4485/1/4485
+f 4396/1/4396 4395/1/4395 4406/1/4406
+f 4395/1/4395 4404/1/4404 4406/1/4406
+f 4404/1/4404 4405/1/4405 4406/1/4406
+f 4404/1/4404 4403/1/4403 4405/1/4405
+f 4398/1/4398 4403/1/4403 4404/1/4404
+f 4398/1/4398 4399/1/4399 4403/1/4403
+f 4394/1/4394 4399/1/4399 4398/1/4398
+f 4394/1/4394 4398/1/4398 4395/1/4395
+f 4390/1/4390 4394/1/4394 4395/1/4395
+f 4390/1/4390 4392/1/4392 4394/1/4394
+f 4392/1/4392 4397/1/4397 4394/1/4394
+f 4391/1/4391 4397/1/4397 4392/1/4392
+f 4388/1/4388 4391/1/4391 4392/1/4392
+f 4387/1/4387 4391/1/4391 4388/1/4388
+f 4386/1/4386 4387/1/4387 4388/1/4388
+f 4386/1/4386 4388/1/4388 4389/1/4389
+f 3056/1/3056 4386/1/4386 4389/1/4389
+f 3056/1/3056 4389/1/4389 3101/1/3101
+f 3057/1/3057 3056/1/3056 3101/1/3101
+f 3057/1/3057 3101/1/3101 3103/1/3103
+f 3093/1/3093 3057/1/3057 3103/1/3103
+f 3093/1/3093 3103/1/3103 3094/1/3094
+f 3092/1/3092 3093/1/3093 3094/1/3094
+f 3092/1/3092 3094/1/3094 3095/1/3095
+f 3079/1/3079 3092/1/3092 3095/1/3095
+f 3079/1/3079 3095/1/3095 3080/1/3080
+f 3078/1/3078 3079/1/3079 3080/1/3080
+f 3078/1/3078 3080/1/3080 3081/1/3081
+f 3076/1/3076 3078/1/3078 3081/1/3081
+f 3076/1/3076 3074/1/3074 3078/1/3078
+f 3081/1/3081 3080/1/3080 3082/1/3082
+f 3081/1/3081 3082/1/3082 3259/1/3259
+f 3258/1/3258 3081/1/3081 3259/1/3259
+f 3259/1/3259 3082/1/3082 3256/1/3256
+f 3259/1/3259 3256/1/3256 3257/1/3257
+f 3082/1/3082 3096/1/3096 3256/1/3256
+f 3096/1/3096 3255/1/3255 3256/1/3256
+f 3256/1/3256 3255/1/3255 3254/1/3254
+f 3256/1/3256 3254/1/3254 3250/1/3250
+f 3250/1/3250 3254/1/3254 3249/1/3249
+f 3255/1/3255 3253/1/3253 3254/1/3254
+f 3254/1/3254 3253/1/3253 3252/1/3252
+f 3255/1/3255 3098/1/3098 3253/1/3253
+f 3098/1/3098 3100/1/3100 3253/1/3253
+f 3253/1/3253 3100/1/3100 3104/1/3104
+f 3098/1/3098 3099/1/3099 3100/1/3100
+f 3099/1/3099 3102/1/3102 3100/1/3100
+f 3099/1/3099 3101/1/3101 3102/1/3102
+f 3097/1/3097 3099/1/3099 3098/1/3098
+f 3096/1/3096 3097/1/3097 3098/1/3098
+f 3095/1/3095 3097/1/3097 3096/1/3096
+f 3094/1/3094 3099/1/3099 3097/1/3097
+f 3096/1/3096 3098/1/3098 3255/1/3255
+f 3080/1/3080 3096/1/3096 3082/1/3082
+f 3074/1/3074 3079/1/3079 3078/1/3078
+f 3074/1/3074 3066/1/3066 3079/1/3079
+f 3073/1/3073 3066/1/3066 3074/1/3074
+f 3072/1/3072 3073/1/3073 3074/1/3074
+f 3072/1/3072 3069/1/3069 3073/1/3073
+f 3069/1/3069 3067/1/3067 3073/1/3073
+f 3069/1/3069 3063/1/3063 3067/1/3067
+f 3063/1/3063 3062/1/3062 3067/1/3067
+f 3067/1/3067 3062/1/3062 3066/1/3066
+f 3062/1/3062 3065/1/3065 3066/1/3066
+f 3066/1/3066 3065/1/3065 3092/1/3092
+f 3062/1/3062 3064/1/3064 3065/1/3065
+f 3065/1/3065 3064/1/3064 3093/1/3093
+f 3062/1/3062 3058/1/3058 3064/1/3064
+f 3058/1/3058 3057/1/3057 3064/1/3064
+f 3058/1/3058 3055/1/3055 3057/1/3057
+f 3053/1/3053 3055/1/3055 3058/1/3058
+f 3059/1/3059 3053/1/3053 3058/1/3058
+f 3054/1/3054 3053/1/3053 3059/1/3059
+f 3060/1/3060 3054/1/3054 3059/1/3059
+f 3060/1/3060 3059/1/3059 3063/1/3063
+f 3068/1/3068 3060/1/3060 3063/1/3063
+f 3070/1/3070 3060/1/3060 3068/1/3068
+f 3071/1/3071 3070/1/3070 3068/1/3068
+f 3071/1/3071 3068/1/3068 3069/1/3069
+f 3084/1/3084 3070/1/3070 3071/1/3071
+f 3083/1/3083 3084/1/3084 3071/1/3071
+f 3083/1/3083 3071/1/3071 3075/1/3075
+f 3085/1/3085 3084/1/3084 3083/1/3083
+f 3086/1/3086 3085/1/3085 3083/1/3083
+f 3086/1/3086 3083/1/3083 3264/1/3264
+f 3089/1/3089 3085/1/3085 3086/1/3086
+f 4412/1/4412 3089/1/3089 3086/1/3086
+f 4412/1/4412 3086/1/3086 4409/1/4409
+f 4414/1/4414 3089/1/3089 4412/1/4412
+f 4455/1/4455 4414/1/4414 4412/1/4412
+f 4455/1/4455 4412/1/4412 4454/1/4454
+f 4454/1/4454 4452/1/4452 4455/1/4455
+f 4455/1/4455 4452/1/4452 4449/1/4449
+f 4455/1/4455 4449/1/4449 4456/1/4456
+f 4456/1/4456 4449/1/4449 4457/1/4457
+f 4457/1/4457 4414/1/4414 4456/1/4456
+f 4458/1/4458 4414/1/4414 4457/1/4457
+f 4457/1/4457 4444/1/4444 4458/1/4458
+f 4458/1/4458 4444/1/4444 4445/1/4445
+f 4445/1/4445 4415/1/4415 4458/1/4458
+f 4446/1/4446 4415/1/4415 4445/1/4445
+f 4445/1/4445 4443/1/4443 4446/1/4446
+f 4446/1/4446 4443/1/4443 4418/1/4418
+f 4418/1/4418 4443/1/4443 4420/1/4420
+f 4418/1/4418 4420/1/4420 4417/1/4417
+f 4417/1/4417 4416/1/4416 4418/1/4418
+f 4418/1/4418 4416/1/4416 4415/1/4415
+f 4416/1/4416 2983/1/2983 4415/1/4415
+f 4415/1/4415 2983/1/2983 3091/1/3091
+f 4415/1/4415 3091/1/3091 4414/1/4414
+f 2983/1/2983 2985/1/2985 3091/1/3091
+f 3091/1/3091 2985/1/2985 3020/1/3020
+f 3091/1/3091 3020/1/3020 3089/1/3089
+f 2985/1/2985 3014/1/3014 3020/1/3020
+f 3020/1/3020 3014/1/3014 3021/1/3021
+f 3020/1/3020 3021/1/3021 3029/1/3029
+f 3020/1/3020 3029/1/3029 3085/1/3085
+f 3085/1/3085 3029/1/3029 3088/1/3088
+f 3029/1/3029 3038/1/3038 3088/1/3088
+f 3088/1/3088 3038/1/3038 3087/1/3087
+f 3088/1/3088 3087/1/3087 3084/1/3084
+f 3038/1/3038 3040/1/3040 3087/1/3087
+f 3087/1/3087 3040/1/3040 3090/1/3090
+f 3087/1/3087 3090/1/3090 3070/1/3070
+f 3070/1/3070 3090/1/3090 3061/1/3061
+f 3090/1/3090 3052/1/3052 3061/1/3061
+f 3052/1/3052 3054/1/3054 3061/1/3061
+f 3052/1/3052 3051/1/3051 3054/1/3054
+f 3052/1/3052 3048/1/3048 3051/1/3051
+f 3048/1/3048 3047/1/3047 3051/1/3051
+f 3051/1/3051 3047/1/3047 3050/1/3050
+f 3051/1/3051 3050/1/3050 3053/1/3053
+f 3047/1/3047 3049/1/3049 3050/1/3050
+f 3050/1/3050 3049/1/3049 3055/1/3055
+f 3055/1/3055 3049/1/3049 3056/1/3056
+f 3047/1/3047 3044/1/3044 3049/1/3049
+f 3044/1/3044 4385/1/4385 3049/1/3049
+f 3049/1/3049 4385/1/4385 4386/1/4386
+f 3044/1/3044 4384/1/4384 4385/1/4385
+f 4384/1/4384 4450/1/4450 4385/1/4385
+f 4385/1/4385 4450/1/4450 4387/1/4387
+f 4450/1/4450 4451/1/4451 4387/1/4387
+f 4387/1/4387 4451/1/4451 4459/1/4459
+f 4459/1/4459 4451/1/4451 4400/1/4400
+f 4459/1/4459 4400/1/4400 4391/1/4391
+f 4451/1/4451 4453/1/4453 4400/1/4400
+f 4400/1/4400 4453/1/4453 4402/1/4402
+f 4400/1/4400 4402/1/4402 4397/1/4397
+f 4397/1/4397 4402/1/4402 4401/1/4401
+f 4402/1/4402 4453/1/4453 4413/1/4413
+f 4408/1/4408 4402/1/4402 4413/1/4413
+f 4413/1/4413 4412/1/4412 4408/1/4408
+f 4413/1/4413 4453/1/4453 4454/1/4454
+f 4451/1/4451 4452/1/4452 4453/1/4453
+f 4451/1/4451 4448/1/4448 4452/1/4452
+f 4450/1/4450 4448/1/4448 4451/1/4451
+f 4441/1/4441 4448/1/4448 4450/1/4450
+f 4441/1/4441 4440/1/4440 4448/1/4448
+f 4440/1/4440 4447/1/4447 4448/1/4448
+f 4447/1/4447 4449/1/4449 4448/1/4448
+f 4447/1/4447 4444/1/4444 4449/1/4449
+f 4442/1/4442 4444/1/4444 4447/1/4447
+f 4442/1/4442 4443/1/4443 4444/1/4444
+f 4439/1/4439 4443/1/4443 4442/1/4442
+f 4439/1/4439 4442/1/4442 4440/1/4440
+f 4438/1/4438 4439/1/4439 4440/1/4440
+f 4438/1/4438 4437/1/4437 4439/1/4439
+f 4437/1/4437 4426/1/4426 4439/1/4439
+f 4430/1/4430 4426/1/4426 4437/1/4437
+f 4436/1/4436 4430/1/4430 4437/1/4437
+f 4432/1/4432 4430/1/4430 4436/1/4436
+f 4382/1/4382 4432/1/4432 4436/1/4436
+f 4382/1/4382 4436/1/4436 4383/1/4383
+f 3107/1/3107 4382/1/4382 4383/1/4383
+f 3107/1/3107 4383/1/4383 3046/1/3046
+f 3106/1/3106 3107/1/3107 3046/1/3046
+f 3106/1/3106 3046/1/3046 3045/1/3045
+f 3116/1/3116 3106/1/3106 3045/1/3045
+f 3116/1/3116 3045/1/3045 3033/1/3033
+f 3025/1/3025 3116/1/3116 3033/1/3033
+f 3025/1/3025 3033/1/3033 3027/1/3027
+f 3022/1/3022 3025/1/3025 3027/1/3027
+f 3022/1/3022 3027/1/3027 3026/1/3026
+f 3023/1/3023 3022/1/3022 3026/1/3026
+f 3023/1/3023 3026/1/3026 3028/1/3028
+f 3021/1/3021 3023/1/3023 3028/1/3028
+f 3021/1/3021 3019/1/3019 3023/1/3023
+f 3028/1/3028 3026/1/3026 3031/1/3031
+f 3028/1/3028 3031/1/3031 3030/1/3030
+f 3029/1/3029 3028/1/3028 3030/1/3030
+f 3030/1/3030 3031/1/3031 3036/1/3036
+f 3030/1/3030 3036/1/3036 3038/1/3038
+f 3031/1/3031 3032/1/3032 3036/1/3036
+f 3032/1/3032 3035/1/3035 3036/1/3036
+f 3036/1/3036 3035/1/3035 3039/1/3039
+f 3036/1/3036 3039/1/3039 3040/1/3040
+f 3040/1/3040 3039/1/3039 3052/1/3052
+f 3035/1/3035 3041/1/3041 3039/1/3039
+f 3039/1/3039 3041/1/3041 3048/1/3048
+f 3035/1/3035 3037/1/3037 3041/1/3041
+f 3037/1/3037 3042/1/3042 3041/1/3041
+f 3041/1/3041 3042/1/3042 3047/1/3047
+f 3037/1/3037 3043/1/3043 3042/1/3042
+f 3043/1/3043 3044/1/3044 3042/1/3042
+f 3043/1/3043 3046/1/3046 3044/1/3044
+f 3034/1/3034 3043/1/3043 3037/1/3037
+f 3032/1/3032 3034/1/3034 3037/1/3037
+f 3027/1/3027 3034/1/3034 3032/1/3032
+f 3033/1/3033 3043/1/3043 3034/1/3034
+f 3032/1/3032 3037/1/3037 3035/1/3035
+f 3026/1/3026 3032/1/3032 3031/1/3031
+f 3019/1/3019 3022/1/3022 3023/1/3023
+f 3019/1/3019 3018/1/3018 3022/1/3022
+f 3016/1/3016 3018/1/3018 3019/1/3019
+f 3014/1/3014 3016/1/3016 3019/1/3019
+f 3014/1/3014 3013/1/3013 3016/1/3016
+f 3013/1/3013 3015/1/3015 3016/1/3016
+f 3013/1/3013 3012/1/3012 3015/1/3015
+f 3012/1/3012 3017/1/3017 3015/1/3015
+f 3015/1/3015 3017/1/3017 3018/1/3018
+f 3017/1/3017 3024/1/3024 3018/1/3018
+f 3018/1/3018 3024/1/3024 3025/1/3025
+f 3017/1/3017 3115/1/3115 3024/1/3024
+f 3024/1/3024 3115/1/3115 3116/1/3116
+f 3017/1/3017 3111/1/3111 3115/1/3115
+f 3111/1/3111 3106/1/3106 3115/1/3115
+f 3111/1/3111 3108/1/3108 3106/1/3106
+f 3110/1/3110 3108/1/3108 3111/1/3111
+f 3011/1/3011 3110/1/3110 3111/1/3111
+f 3010/1/3010 3110/1/3110 3011/1/3011
+f 3008/1/3008 3010/1/3010 3011/1/3011
+f 3008/1/3008 3011/1/3011 3012/1/3012
+f 3009/1/3009 3008/1/3008 3012/1/3012
+f 2990/1/2990 3008/1/3008 3009/1/3009
+f 2984/1/2984 2990/1/2990 3009/1/3009
+f 2984/1/2984 3009/1/3009 3013/1/3013
+f 2986/1/2986 2990/1/2990 2984/1/2984
+f 2982/1/2982 2986/1/2986 2984/1/2984
+f 2982/1/2982 2984/1/2984 2985/1/2985
+f 2981/1/2981 2986/1/2986 2982/1/2982
+f 2980/1/2980 2981/1/2981 2982/1/2982
+f 2980/1/2980 2982/1/2982 2983/1/2983
+f 2977/1/2977 2981/1/2981 2980/1/2980
+f 2978/1/2978 2977/1/2977 2980/1/2980
+f 2978/1/2978 2980/1/2980 4416/1/4416
+f 2973/1/2973 2977/1/2977 2978/1/2978
+f 4422/1/4422 2973/1/2973 2978/1/2978
+f 4422/1/4422 2978/1/2978 4423/1/4423
+f 4423/1/4423 4428/1/4428 4422/1/4422
+f 4422/1/4422 4428/1/4428 2976/1/2976
+f 4422/1/4422 2976/1/2976 2975/1/2975
+f 2975/1/2975 2976/1/2976 2974/1/2974
+f 2974/1/2974 2973/1/2973 2975/1/2975
+f 2972/1/2972 2973/1/2973 2974/1/2974
+f 2974/1/2974 2969/1/2969 2972/1/2972
+f 2972/1/2972 2969/1/2969 2971/1/2971
+f 2971/1/2971 2927/1/2927 2972/1/2972
+f 2970/1/2970 2927/1/2927 2971/1/2971
+f 2971/1/2971 2966/1/2966 2970/1/2970
+f 2970/1/2970 2966/1/2966 2929/1/2929
+f 2929/1/2929 2966/1/2966 2931/1/2931
+f 2929/1/2929 2931/1/2931 2928/1/2928
+f 2928/1/2928 2924/1/2924 2929/1/2929
+f 2929/1/2929 2924/1/2924 2927/1/2927
+f 2924/1/2924 2923/1/2923 2927/1/2927
+f 2927/1/2927 2923/1/2923 2926/1/2926
+f 2927/1/2927 2926/1/2926 2973/1/2973
+f 2923/1/2923 2925/1/2925 2926/1/2926
+f 2926/1/2926 2925/1/2925 2979/1/2979
+f 2926/1/2926 2979/1/2979 2977/1/2977
+f 2925/1/2925 2994/1/2994 2979/1/2979
+f 2979/1/2979 2994/1/2994 2991/1/2991
+f 2979/1/2979 2991/1/2991 2987/1/2987
+f 2979/1/2979 2987/1/2987 2981/1/2981
+f 2991/1/2991 2992/1/2992 2987/1/2987
+f 2987/1/2987 2992/1/2992 2993/1/2993
+f 2987/1/2987 2993/1/2993 2988/1/2988
+f 2987/1/2987 2988/1/2988 2986/1/2986
+f 2986/1/2986 2988/1/2988 2989/1/2989
+f 2988/1/2988 3004/1/3004 2989/1/2989
+f 2989/1/2989 3004/1/3004 3006/1/3006
+f 2989/1/2989 3006/1/3006 2990/1/2990
+f 2990/1/2990 3006/1/3006 3007/1/3007
+f 3006/1/3006 3005/1/3005 3007/1/3007
+f 3005/1/3005 3010/1/3010 3007/1/3007
+f 3005/1/3005 3114/1/3114 3010/1/3010
+f 3005/1/3005 3117/1/3117 3114/1/3114
+f 3117/1/3117 3113/1/3113 3114/1/3114
+f 3114/1/3114 3113/1/3113 3112/1/3112
+f 3114/1/3114 3112/1/3112 3110/1/3110
+f 3113/1/3113 3109/1/3109 3112/1/3112
+f 3112/1/3112 3109/1/3109 3108/1/3108
+f 3108/1/3108 3109/1/3109 3107/1/3107
+f 3113/1/3113 4380/1/4380 3109/1/3109
+f 4380/1/4380 4381/1/4381 3109/1/3109
+f 3109/1/3109 4381/1/4381 4382/1/4382
+f 4380/1/4380 3121/1/3121 4381/1/4381
+f 3121/1/3121 4431/1/4431 4381/1/4381
+f 4381/1/4381 4431/1/4431 4432/1/4432
+f 4431/1/4431 4427/1/4427 4432/1/4432
+f 4432/1/4432 4427/1/4427 4429/1/4429
+f 4429/1/4429 4427/1/4427 4425/1/4425
+f 4429/1/4429 4425/1/4425 4430/1/4430
+f 4427/1/4427 4424/1/4424 4425/1/4425
+f 4425/1/4425 4424/1/4424 4421/1/4421
+f 4425/1/4425 4421/1/4421 4426/1/4426
+f 4426/1/4426 4421/1/4421 4420/1/4420
+f 4421/1/4421 4424/1/4424 4419/1/4419
+f 4417/1/4417 4421/1/4421 4419/1/4419
+f 4419/1/4419 2978/1/2978 4417/1/4417
+f 4419/1/4419 4424/1/4424 4423/1/4423
+f 4427/1/4427 4428/1/4428 4424/1/4424
+f 4427/1/4427 4433/1/4433 4428/1/4428
+f 4431/1/4431 4433/1/4433 4427/1/4427
+f 4435/1/4435 4433/1/4433 4431/1/4431
+f 4435/1/4435 2968/1/2968 4433/1/4433
+f 2968/1/2968 4434/1/4434 4433/1/4433
+f 4434/1/4434 2976/1/2976 4433/1/4433
+f 4434/1/4434 2969/1/2969 2976/1/2976
+f 2967/1/2967 2969/1/2969 4434/1/4434
+f 2967/1/2967 2966/1/2966 2969/1/2969
+f 2965/1/2965 2966/1/2966 2967/1/2967
+f 2965/1/2965 2967/1/2967 2968/1/2968
+f 2964/1/2964 2965/1/2965 2968/1/2968
+f 2964/1/2964 2962/1/2962 2965/1/2965
+f 2962/1/2962 2961/1/2961 2965/1/2965
+f 2960/1/2960 2961/1/2961 2962/1/2962
+f 2959/1/2959 2960/1/2960 2962/1/2962
+f 2955/1/2955 2960/1/2960 2959/1/2959
+f 2958/1/2958 2955/1/2955 2959/1/2959
+f 2958/1/2958 2959/1/2959 2963/1/2963
+f 4348/1/4348 2958/1/2958 2963/1/2963
+f 4348/1/4348 2963/1/2963 4349/1/4349
+f 4350/1/4350 4348/1/4348 4349/1/4349
+f 4350/1/4350 4349/1/4349 4377/1/4377
+f 4375/1/4375 4350/1/4350 4377/1/4377
+f 4375/1/4375 4377/1/4377 4376/1/4376
+f 4373/1/4373 4375/1/4375 4376/1/4376
+f 4373/1/4373 4376/1/4376 3001/1/3001
+f 4372/1/4372 4373/1/4373 3001/1/3001
+f 4372/1/4372 3001/1/3001 2998/1/2998
+f 2995/1/2995 4372/1/4372 2998/1/2998
+f 2995/1/2995 2998/1/2998 2992/1/2992
+f 2992/1/2992 2998/1/2998 2997/1/2997
+f 2998/1/2998 3000/1/3000 2997/1/2997
+f 2997/1/2997 3000/1/3000 2999/1/2999
+f 2993/1/2993 2997/1/2997 2999/1/2999
+f 3000/1/3000 3002/1/3002 2999/1/2999
+f 2999/1/2999 3002/1/3002 3003/1/3003
+f 2999/1/2999 3003/1/3003 3004/1/3004
+f 3004/1/3004 3003/1/3003 3005/1/3005
+f 3002/1/3002 3118/1/3118 3003/1/3003
+f 3003/1/3003 3118/1/3118 3117/1/3117
+f 3002/1/3002 3120/1/3120 3118/1/3118
+f 3120/1/3120 3119/1/3119 3118/1/3118
+f 3118/1/3118 3119/1/3119 3113/1/3113
+f 3120/1/3120 4378/1/4378 3119/1/3119
+f 4378/1/4378 4380/1/4380 3119/1/3119
+f 4378/1/4378 4349/1/4349 4380/1/4380
+f 4379/1/4379 4378/1/4378 3120/1/3120
+f 3000/1/3000 4379/1/4379 3120/1/3120
+f 3001/1/3001 4379/1/4379 3000/1/3000
+f 4376/1/4376 4378/1/4378 4379/1/4379
+f 3000/1/3000 3120/1/3120 3002/1/3002
+f 2996/1/2996 4372/1/4372 2995/1/2995
+f 2991/1/2991 2996/1/2996 2995/1/2995
+f 2996/1/2996 4371/1/4371 4372/1/4372
+f 4370/1/4370 4371/1/4371 2996/1/2996
+f 2994/1/2994 4370/1/4370 2996/1/2996
+f 2994/1/2994 4364/1/4364 4370/1/4370
+f 4364/1/4364 4365/1/4365 4370/1/4370
+f 4364/1/4364 4359/1/4359 4365/1/4365
+f 4359/1/4359 4357/1/4357 4365/1/4365
+f 4365/1/4365 4357/1/4357 4371/1/4371
+f 4357/1/4357 4374/1/4374 4371/1/4371
+f 4371/1/4371 4374/1/4374 4373/1/4373
+f 4357/1/4357 4356/1/4356 4374/1/4374
+f 4374/1/4374 4356/1/4356 4375/1/4375
+f 4357/1/4357 4352/1/4352 4356/1/4356
+f 4352/1/4352 4350/1/4350 4356/1/4356
+f 4352/1/4352 4347/1/4347 4350/1/4350
+f 4351/1/4351 4347/1/4347 4352/1/4352
+f 4355/1/4355 4351/1/4351 4352/1/4352
+f 4354/1/4354 4351/1/4351 4355/1/4355
+f 4358/1/4358 4354/1/4354 4355/1/4355
+f 4358/1/4358 4355/1/4355 4359/1/4359
+f 4363/1/4363 4358/1/4358 4359/1/4359
+f 4362/1/4362 4358/1/4358 4363/1/4363
+f 4366/1/4366 4362/1/4362 4363/1/4363
+f 4366/1/4366 4363/1/4363 4364/1/4364
+f 4367/1/4367 4362/1/4362 4366/1/4366
+f 2922/1/2922 4367/1/4367 4366/1/4366
+f 2922/1/2922 4366/1/4366 2925/1/2925
+f 2921/1/2921 4367/1/4367 2922/1/2922
+f 2920/1/2920 2921/1/2921 2922/1/2922
+f 2920/1/2920 2922/1/2922 2923/1/2923
+f 2918/1/2918 2921/1/2921 2920/1/2920
+f 2919/1/2919 2918/1/2918 2920/1/2920
+f 2919/1/2919 2920/1/2920 2924/1/2924
+f 2916/1/2916 2918/1/2918 2919/1/2919
+f 2935/1/2935 2916/1/2916 2919/1/2919
+f 2935/1/2935 2919/1/2919 2933/1/2933
+f 2933/1/2933 2936/1/2936 2935/1/2935
+f 2935/1/2935 2936/1/2936 2940/1/2940
+f 2935/1/2935 2940/1/2940 2941/1/2941
+f 2941/1/2941 2940/1/2940 2944/1/2944
+f 2944/1/2944 2916/1/2916 2941/1/2941
+f 2945/1/2945 2916/1/2916 2944/1/2944
+f 2944/1/2944 2943/1/2943 2945/1/2945
+f 2945/1/2945 2943/1/2943 2947/1/2947
+f 2947/1/2947 2910/1/2910 2945/1/2945
+f 2911/1/2911 2910/1/2910 2947/1/2947
+f 2947/1/2947 2905/1/2905 2911/1/2911
+f 2911/1/2911 2905/1/2905 2908/1/2908
+f 2908/1/2908 2905/1/2905 2902/1/2902
+f 2908/1/2908 2902/1/2902 2900/1/2900
+f 2900/1/2900 2909/1/2909 2908/1/2908
+f 2908/1/2908 2909/1/2909 2910/1/2910
+f 2909/1/2909 2913/1/2913 2910/1/2910
+f 2910/1/2910 2913/1/2913 2915/1/2915
+f 2910/1/2910 2915/1/2915 2916/1/2916
+f 2913/1/2913 4284/1/4284 2915/1/2915
+f 2915/1/2915 4284/1/4284 2917/1/2917
+f 2915/1/2915 2917/1/2917 2918/1/2918
+f 4284/1/4284 4289/1/4289 2917/1/2917
+f 2917/1/2917 4289/1/4289 4322/1/4322
+f 2917/1/2917 4322/1/4322 4323/1/4323
+f 2917/1/2917 4323/1/4323 2921/1/2921
+f 2921/1/2921 4323/1/4323 4369/1/4369
+f 4323/1/4323 4331/1/4331 4369/1/4369
+f 4369/1/4369 4331/1/4331 4368/1/4368
+f 4369/1/4369 4368/1/4368 4367/1/4367
+f 4331/1/4331 4332/1/4332 4368/1/4368
+f 4368/1/4368 4332/1/4332 4361/1/4361
+f 4368/1/4368 4361/1/4361 4362/1/4362
+f 4362/1/4362 4361/1/4361 4360/1/4360
+f 4361/1/4361 4338/1/4338 4360/1/4360
+f 4338/1/4338 4354/1/4354 4360/1/4360
+f 4338/1/4338 4353/1/4353 4354/1/4354
+f 4338/1/4338 4339/1/4339 4353/1/4353
+f 4339/1/4339 4340/1/4340 4353/1/4353
+f 4353/1/4353 4340/1/4340 4346/1/4346
+f 4353/1/4353 4346/1/4346 4351/1/4351
+f 4340/1/4340 4345/1/4345 4346/1/4346
+f 4346/1/4346 4345/1/4345 4347/1/4347
+f 4347/1/4347 4345/1/4345 4348/1/4348
+f 4340/1/4340 4344/1/4344 4345/1/4345
+f 4344/1/4344 2956/1/2956 4345/1/4345
+f 4345/1/4345 2956/1/2956 2958/1/2958
+f 4344/1/4344 2953/1/2953 2956/1/2956
+f 2953/1/2953 2954/1/2954 2956/1/2956
+f 2956/1/2956 2954/1/2954 2955/1/2955
+f 2954/1/2954 2937/1/2937 2955/1/2955
+f 2955/1/2955 2937/1/2937 2957/1/2957
+f 2957/1/2957 2937/1/2937 2938/1/2938
+f 2957/1/2957 2938/1/2938 2960/1/2960
+f 2937/1/2937 2934/1/2934 2938/1/2938
+f 2938/1/2938 2934/1/2934 2932/1/2932
+f 2938/1/2938 2932/1/2932 2961/1/2961
+f 2961/1/2961 2932/1/2932 2931/1/2931
+f 2932/1/2932 2934/1/2934 2930/1/2930
+f 2928/1/2928 2932/1/2932 2930/1/2930
+f 2930/1/2930 2919/1/2919 2928/1/2928
+f 2930/1/2930 2934/1/2934 2933/1/2933
+f 2937/1/2937 2936/1/2936 2934/1/2934
+f 2937/1/2937 2939/1/2939 2936/1/2936
+f 2954/1/2954 2939/1/2939 2937/1/2937
+f 2950/1/2950 2939/1/2939 2954/1/2954
+f 2950/1/2950 2948/1/2948 2939/1/2939
+f 2948/1/2948 2942/1/2942 2939/1/2939
+f 2942/1/2942 2940/1/2940 2939/1/2939
+f 2942/1/2942 2943/1/2943 2940/1/2940
+f 2946/1/2946 2943/1/2943 2942/1/2942
+f 2946/1/2946 2905/1/2905 2943/1/2943
+f 2906/1/2906 2905/1/2905 2946/1/2946
+f 2906/1/2906 2946/1/2946 2948/1/2948
+f 2949/1/2949 2906/1/2906 2948/1/2948
+f 2949/1/2949 2907/1/2907 2906/1/2906
+f 2907/1/2907 2901/1/2901 2906/1/2906
+f 2904/1/2904 2901/1/2901 2907/1/2907
+f 2951/1/2951 2904/1/2904 2907/1/2907
+f 3123/1/3123 2904/1/2904 2951/1/2951
+f 3122/1/3122 3123/1/3123 2951/1/2951
+f 3122/1/3122 2951/1/2951 2952/1/2952
+f 3134/1/3134 3122/1/3122 2952/1/2952
+f 3134/1/3134 2952/1/2952 3138/1/3138
+f 4309/1/4309 3134/1/3134 3138/1/3138
+f 4309/1/4309 3138/1/3138 4312/1/4312
+f 4311/1/4311 4309/1/4309 4312/1/4312
+f 4311/1/4311 4312/1/4312 4343/1/4343
+f 4317/1/4317 4311/1/4311 4343/1/4343
+f 4317/1/4317 4343/1/4343 4328/1/4328
+f 4319/1/4319 4317/1/4317 4328/1/4328
+f 4319/1/4319 4328/1/4328 4325/1/4325
+f 4321/1/4321 4319/1/4319 4325/1/4325
+f 4321/1/4321 4325/1/4325 4324/1/4324
+f 4322/1/4322 4321/1/4321 4324/1/4324
+f 4322/1/4322 4318/1/4318 4321/1/4321
+f 4324/1/4324 4325/1/4325 4327/1/4327
+f 4324/1/4324 4327/1/4327 4326/1/4326
+f 4323/1/4323 4324/1/4324 4326/1/4326
+f 4326/1/4326 4327/1/4327 4330/1/4330
+f 4326/1/4326 4330/1/4330 4331/1/4331
+f 4327/1/4327 4329/1/4329 4330/1/4330
+f 4329/1/4329 4334/1/4334 4330/1/4330
+f 4330/1/4330 4334/1/4334 4333/1/4333
+f 4330/1/4330 4333/1/4333 4332/1/4332
+f 4332/1/4332 4333/1/4333 4338/1/4338
+f 4334/1/4334 4337/1/4337 4333/1/4333
+f 4333/1/4333 4337/1/4337 4339/1/4339
+f 4334/1/4334 4336/1/4336 4337/1/4337
+f 4336/1/4336 4341/1/4341 4337/1/4337
+f 4337/1/4337 4341/1/4341 4340/1/4340
+f 4336/1/4336 4342/1/4342 4341/1/4341
+f 4342/1/4342 4344/1/4344 4341/1/4341
+f 4342/1/4342 3138/1/3138 4344/1/4344
+f 4335/1/4335 4342/1/4342 4336/1/4336
+f 4329/1/4329 4335/1/4335 4336/1/4336
+f 4328/1/4328 4335/1/4335 4329/1/4329
+f 4343/1/4343 4342/1/4342 4335/1/4335
+f 4329/1/4329 4336/1/4336 4334/1/4334
+f 4325/1/4325 4329/1/4329 4327/1/4327
+f 4318/1/4318 4319/1/4319 4321/1/4321
+f 4318/1/4318 4316/1/4316 4319/1/4319
+f 4320/1/4320 4316/1/4316 4318/1/4318
+f 4289/1/4289 4320/1/4320 4318/1/4318
+f 4289/1/4289 4288/1/4288 4320/1/4320
+f 4288/1/4288 4315/1/4315 4320/1/4320
+f 4288/1/4288 4296/1/4296 4315/1/4315
+f 4296/1/4296 4313/1/4313 4315/1/4315
+f 4315/1/4315 4313/1/4313 4316/1/4316
+f 4313/1/4313 4314/1/4314 4316/1/4316
+f 4316/1/4316 4314/1/4314 4317/1/4317
+f 4313/1/4313 4310/1/4310 4314/1/4314
+f 4314/1/4314 4310/1/4310 4311/1/4311
+f 4313/1/4313 4308/1/4308 4310/1/4310
+f 4308/1/4308 4309/1/4309 4310/1/4310
+f 4308/1/4308 4306/1/4306 4309/1/4309
+f 4298/1/4298 4306/1/4306 4308/1/4308
+f 4295/1/4295 4298/1/4298 4308/1/4308
+f 4294/1/4294 4298/1/4298 4295/1/4295
+f 4292/1/4292 4294/1/4294 4295/1/4295
+f 4292/1/4292 4295/1/4295 4296/1/4296
+f 4287/1/4287 4292/1/4292 4296/1/4296
+f 4286/1/4286 4292/1/4292 4287/1/4287
+f 4285/1/4285 4286/1/4286 4287/1/4287
+f 4285/1/4285 4287/1/4287 4288/1/4288
+f 4282/1/4282 4286/1/4286 4285/1/4285
+f 4283/1/4283 4282/1/4282 4285/1/4285
+f 4283/1/4283 4285/1/4285 4284/1/4284
+f 4281/1/4281 4282/1/4282 4283/1/4283
+f 2912/1/2912 4281/1/4281 4283/1/4283
+f 2912/1/2912 4283/1/4283 2913/1/2913
+f 2914/1/2914 4281/1/4281 2912/1/2912
+f 2888/1/2888 2914/1/2914 2912/1/2912
+f 2888/1/2888 2912/1/2912 2909/1/2909
+f 2891/1/2891 2914/1/2914 2888/1/2888
+f 2887/1/2887 2891/1/2891 2888/1/2888
+f 2887/1/2887 2888/1/2888 2889/1/2889
+f 2889/1/2889 2892/1/2892 2887/1/2887
+f 2887/1/2887 2892/1/2892 2893/1/2893
+f 2887/1/2887 2893/1/2893 2890/1/2890
+f 2890/1/2890 2893/1/2893 3139/1/3139
+f 3139/1/3139 2891/1/2891 2890/1/2890
+f 4155/1/4155 2891/1/2891 3139/1/3139
+f 3139/1/3139 3132/1/3132 4155/1/4155
+f 4155/1/4155 3132/1/3132 4156/1/4156
+f 4156/1/4156 4152/1/4152 4155/1/4155
+f 4157/1/4157 4152/1/4152 4156/1/4156
+f 4156/1/4156 4158/1/4158 4157/1/4157
+f 4157/1/4157 4158/1/4158 4151/1/4151
+f 4151/1/4151 4158/1/4158 4148/1/4148
+f 4151/1/4151 4148/1/4148 4149/1/4149
+f 4149/1/4149 4150/1/4150 4151/1/4151
+f 4151/1/4151 4150/1/4150 4152/1/4152
+f 4150/1/4150 4153/1/4153 4152/1/4152
+f 4152/1/4152 4153/1/4153 4154/1/4154
+f 4152/1/4152 4154/1/4154 2891/1/2891
+f 4153/1/4153 2693/1/2693 4154/1/4154
+f 4154/1/4154 2693/1/2693 4280/1/4280
+f 4154/1/4154 4280/1/4280 2914/1/2914
+f 2693/1/2693 2694/1/2694 4280/1/4280
+f 4280/1/4280 2694/1/2694 2698/1/2698
+f 4280/1/4280 2698/1/2698 4277/1/4277
+f 4280/1/4280 4277/1/4277 4281/1/4281
+f 4281/1/4281 4277/1/4277 4274/1/4274
+f 4277/1/4277 4271/1/4271 4274/1/4274
+f 4274/1/4274 4271/1/4271 4275/1/4275
+f 4274/1/4274 4275/1/4275 4282/1/4282
+f 4271/1/4271 4273/1/4273 4275/1/4275
+f 4275/1/4275 4273/1/4273 4290/1/4290
+f 4275/1/4275 4290/1/4290 4286/1/4286
+f 4286/1/4286 4290/1/4290 4291/1/4291
+f 4290/1/4290 4293/1/4293 4291/1/4291
+f 4293/1/4293 4294/1/4294 4291/1/4291
+f 4293/1/4293 4297/1/4297 4294/1/4294
+f 4293/1/4293 4299/1/4299 4297/1/4297
+f 4299/1/4299 4303/1/4303 4297/1/4297
+f 4297/1/4297 4303/1/4303 4307/1/4307
+f 4297/1/4297 4307/1/4307 4298/1/4298
+f 4303/1/4303 3133/1/3133 4307/1/4307
+f 4307/1/4307 3133/1/3133 4306/1/4306
+f 4306/1/4306 3133/1/3133 3134/1/3134
+f 4303/1/4303 2721/1/2721 3133/1/3133
+f 2721/1/2721 3124/1/3124 3133/1/3133
+f 3133/1/3133 3124/1/3124 3122/1/3122
+f 2721/1/2721 3126/1/3126 3124/1/3124
+f 3126/1/3126 3125/1/3125 3124/1/3124
+f 3124/1/3124 3125/1/3125 3123/1/3123
+f 3125/1/3125 2897/1/2897 3123/1/3123
+f 3123/1/3123 2897/1/2897 2903/1/2903
+f 2903/1/2903 2897/1/2897 2898/1/2898
+f 2903/1/2903 2898/1/2898 2904/1/2904
+f 2897/1/2897 2895/1/2895 2898/1/2898
+f 2898/1/2898 2895/1/2895 2899/1/2899
+f 2898/1/2898 2899/1/2899 2901/1/2901
+f 2901/1/2901 2899/1/2899 2902/1/2902
+f 2899/1/2899 2895/1/2895 2894/1/2894
+f 2900/1/2900 2899/1/2899 2894/1/2894
+f 2894/1/2894 2888/1/2888 2900/1/2900
+f 2894/1/2894 2895/1/2895 2889/1/2889
+f 2897/1/2897 2892/1/2892 2895/1/2895
+f 2897/1/2897 2896/1/2896 2892/1/2892
+f 3125/1/3125 2896/1/2896 2897/1/2897
+f 3127/1/3127 2896/1/2896 3125/1/3125
+f 3127/1/3127 3129/1/3129 2896/1/2896
+f 3129/1/3129 3128/1/3128 2896/1/2896
+f 3128/1/3128 2893/1/2893 2896/1/2896
+f 3128/1/3128 3132/1/3132 2893/1/2893
+f 3131/1/3131 3132/1/3132 3128/1/3128
+f 3131/1/3131 4158/1/4158 3132/1/3132
+f 4159/1/4159 4158/1/4158 3131/1/3131
+f 4159/1/4159 3131/1/3131 3129/1/3129
+f 3130/1/3130 4159/1/4159 3129/1/3129
+f 3130/1/3130 4160/1/4160 4159/1/4159
+f 4160/1/4160 4147/1/4147 4159/1/4159
+f 4146/1/4146 4147/1/4147 4160/1/4160
+f 4161/1/4161 4146/1/4146 4160/1/4160
+f 4145/1/4145 4146/1/4146 4161/1/4161
+f 3136/1/3136 4145/1/4145 4161/1/4161
+f 3136/1/3136 4161/1/4161 3135/1/3135
+f 2723/1/2723 3136/1/3136 3135/1/3135
+f 2723/1/2723 3135/1/3135 2720/1/2720
+f 2711/1/2711 2723/1/2723 2720/1/2720
+f 2711/1/2711 2720/1/2720 2717/1/2717
+f 2713/1/2713 2711/1/2711 2717/1/2717
+f 2713/1/2713 2717/1/2717 2715/1/2715
+f 2714/1/2714 2713/1/2713 2715/1/2715
+f 2714/1/2714 2715/1/2715 2716/1/2716
+f 2702/1/2702 2714/1/2714 2716/1/2716
+f 2702/1/2702 2716/1/2716 2704/1/2704
+f 2703/1/2703 2702/1/2702 2704/1/2704
+f 2703/1/2703 2704/1/2704 4279/1/4279
+f 2698/1/2698 2703/1/2703 4279/1/4279
+f 2698/1/2698 2697/1/2697 2703/1/2703
+f 4279/1/4279 2704/1/2704 4278/1/4278
+f 4279/1/4279 4278/1/4278 4276/1/4276
+f 4277/1/4277 4279/1/4279 4276/1/4276
+f 4276/1/4276 4278/1/4278 4272/1/4272
+f 4276/1/4276 4272/1/4272 4271/1/4271
+f 4278/1/4278 4305/1/4305 4272/1/4272
+f 4305/1/4305 4301/1/4301 4272/1/4272
+f 4272/1/4272 4301/1/4301 4300/1/4300
+f 4272/1/4272 4300/1/4300 4273/1/4273
+f 4273/1/4273 4300/1/4300 4293/1/4293
+f 4301/1/4301 4302/1/4302 4300/1/4300
+f 4300/1/4300 4302/1/4302 4299/1/4299
+f 4301/1/4301 4304/1/4304 4302/1/4302
+f 4304/1/4304 2722/1/2722 4302/1/4302
+f 4302/1/4302 2722/1/2722 4303/1/4303
+f 4304/1/4304 2718/1/2718 2722/1/2722
+f 2718/1/2718 2721/1/2721 2722/1/2722
+f 2718/1/2718 2720/1/2720 2721/1/2721
+f 2719/1/2719 2718/1/2718 4304/1/4304
+f 4305/1/4305 2719/1/2719 4304/1/4304
+f 2716/1/2716 2719/1/2719 4305/1/4305
+f 2715/1/2715 2718/1/2718 2719/1/2719
+f 4305/1/4305 4304/1/4304 4301/1/4301
+f 2704/1/2704 4305/1/4305 4278/1/4278
+f 2697/1/2697 2702/1/2702 2703/1/2703
+f 2697/1/2697 2701/1/2701 2702/1/2702
+f 2696/1/2696 2701/1/2701 2697/1/2697
+f 2694/1/2694 2696/1/2696 2697/1/2697
+f 2694/1/2694 2695/1/2695 2696/1/2696
+f 2695/1/2695 2700/1/2700 2696/1/2696
+f 2695/1/2695 2699/1/2699 2700/1/2700
+f 2699/1/2699 2708/1/2708 2700/1/2700
+f 2700/1/2700 2708/1/2708 2701/1/2701
+f 2708/1/2708 2709/1/2709 2701/1/2701
+f 2701/1/2701 2709/1/2709 2714/1/2714
+f 2708/1/2708 2710/1/2710 2709/1/2709
+f 2709/1/2709 2710/1/2710 2713/1/2713
+f 2708/1/2708 2707/1/2707 2710/1/2710
+f 2707/1/2707 2711/1/2711 2710/1/2710
+f 2707/1/2707 2712/1/2712 2711/1/2711
+f 2706/1/2706 2712/1/2712 2707/1/2707
+f 2705/1/2705 2706/1/2706 2707/1/2707
+f 2681/1/2681 2706/1/2706 2705/1/2705
+f 2686/1/2686 2681/1/2681 2705/1/2705
+f 2686/1/2686 2705/1/2705 2699/1/2699
+f 2687/1/2687 2686/1/2686 2699/1/2699
+f 2685/1/2685 2686/1/2686 2687/1/2687
+f 2688/1/2688 2685/1/2685 2687/1/2687
+f 2688/1/2688 2687/1/2687 2695/1/2695
+f 2684/1/2684 2685/1/2685 2688/1/2688
+f 2690/1/2690 2684/1/2684 2688/1/2688
+f 2690/1/2690 2688/1/2688 2693/1/2693
+f 2689/1/2689 2684/1/2684 2690/1/2690
+f 2692/1/2692 2689/1/2689 2690/1/2690
+f 2692/1/2692 2690/1/2690 4153/1/4153
+f 2691/1/2691 2689/1/2689 2692/1/2692
+f 4132/1/4132 2691/1/2691 2692/1/2692
+f 4132/1/4132 2692/1/2692 4150/1/4150
+f 4125/1/4125 2691/1/2691 4132/1/4132
+f 4131/1/4131 4125/1/4125 4132/1/4132
+f 4131/1/4131 4132/1/4132 4140/1/4140
+f 4140/1/4140 4134/1/4134 4131/1/4131
+f 4131/1/4131 4134/1/4134 4129/1/4129
+f 4131/1/4131 4129/1/4129 4130/1/4130
+f 4130/1/4130 4129/1/4129 4126/1/4126
+f 4126/1/4126 4125/1/4125 4130/1/4130
+f 4123/1/4123 4125/1/4125 4126/1/4126
+f 4126/1/4126 4124/1/4124 4123/1/4123
+f 4123/1/4123 4124/1/4124 4122/1/4122
+f 4122/1/4122 4119/1/4119 4123/1/4123
+f 4120/1/4120 4119/1/4119 4122/1/4122
+f 4122/1/4122 4121/1/4121 4120/1/4120
+f 4120/1/4120 4121/1/4121 4118/1/4118
+f 4118/1/4118 4121/1/4121 4115/1/4115
+f 4118/1/4118 4115/1/4115 4116/1/4116
+f 4116/1/4116 4117/1/4117 4118/1/4118
+f 4118/1/4118 4117/1/4117 4119/1/4119
+f 4117/1/4117 2725/1/2725 4119/1/4119
+f 4119/1/4119 2725/1/2725 2724/1/2724
+f 4119/1/4119 2724/1/2724 4125/1/4125
+f 2725/1/2725 2650/1/2650 2724/1/2724
+f 2724/1/2724 2650/1/2650 2651/1/2651
+f 2724/1/2724 2651/1/2651 2691/1/2691
+f 2650/1/2650 2645/1/2645 2651/1/2651
+f 2651/1/2651 2645/1/2645 2649/1/2649
+f 2651/1/2651 2649/1/2649 2655/1/2655
+f 2651/1/2651 2655/1/2655 2689/1/2689
+f 2649/1/2649 2654/1/2654 2655/1/2655
+f 2655/1/2655 2654/1/2654 2661/1/2661
+f 2655/1/2655 2661/1/2661 2682/1/2682
+f 2655/1/2655 2682/1/2682 2684/1/2684
+f 2684/1/2684 2682/1/2682 2683/1/2683
+f 2682/1/2682 2678/1/2678 2683/1/2683
+f 2683/1/2683 2678/1/2678 2679/1/2679
+f 2683/1/2683 2679/1/2679 2685/1/2685
+f 2685/1/2685 2679/1/2679 2680/1/2680
+f 2679/1/2679 2677/1/2677 2680/1/2680
+f 2677/1/2677 2681/1/2681 2680/1/2680
+f 2677/1/2677 2674/1/2674 2681/1/2681
+f 2677/1/2677 2672/1/2672 2674/1/2674
+f 2672/1/2672 2671/1/2671 2674/1/2674
+f 2674/1/2674 2671/1/2671 2675/1/2675
+f 2674/1/2674 2675/1/2675 2706/1/2706
+f 2671/1/2671 2676/1/2676 2675/1/2675
+f 2675/1/2675 2676/1/2676 2712/1/2712
+f 2712/1/2712 2676/1/2676 2723/1/2723
+f 2671/1/2671 2673/1/2673 2676/1/2676
+f 2673/1/2673 3137/1/3137 2676/1/2676
+f 2676/1/2676 3137/1/3137 3136/1/3136
+f 2673/1/2673 4092/1/4092 3137/1/3137
+f 4092/1/4092 4137/1/4137 3137/1/3137
+f 3137/1/3137 4137/1/4137 4145/1/4145
+f 4137/1/4137 4138/1/4138 4145/1/4145
+f 4145/1/4145 4138/1/4138 4144/1/4144
+f 4144/1/4144 4138/1/4138 4142/1/4142
+f 4144/1/4144 4142/1/4142 4146/1/4146
+f 4138/1/4138 4139/1/4139 4142/1/4142
+f 4142/1/4142 4139/1/4139 4143/1/4143
+f 4142/1/4142 4143/1/4143 4147/1/4147
+f 4147/1/4147 4143/1/4143 4148/1/4148
+f 4143/1/4143 4139/1/4139 4141/1/4141
+f 4149/1/4149 4143/1/4143 4141/1/4141
+f 4141/1/4141 4132/1/4132 4149/1/4149
+f 4141/1/4141 4139/1/4139 4140/1/4140
+f 4138/1/4138 4134/1/4134 4139/1/4139
+f 4138/1/4138 4133/1/4133 4134/1/4134
+f 4137/1/4137 4133/1/4133 4138/1/4138
+f 4136/1/4136 4133/1/4133 4137/1/4137
+f 4136/1/4136 4135/1/4135 4133/1/4133
+f 4135/1/4135 4128/1/4128 4133/1/4133
+f 4128/1/4128 4129/1/4129 4133/1/4133
+f 4128/1/4128 4124/1/4124 4129/1/4129
+f 4127/1/4127 4124/1/4124 4128/1/4128
+f 4127/1/4127 4121/1/4121 4124/1/4124
+f 4162/1/4162 4121/1/4121 4127/1/4127
+f 4162/1/4162 4127/1/4127 4135/1/4135
+f 4094/1/4094 4162/1/4162 4135/1/4135
+f 4094/1/4094 4096/1/4096 4162/1/4162
+f 4096/1/4096 4114/1/4114 4162/1/4162
+f 4095/1/4095 4114/1/4114 4096/1/4096
+f 4093/1/4093 4095/1/4095 4096/1/4096
+f 4097/1/4097 4095/1/4095 4093/1/4093
+f 4090/1/4090 4097/1/4097 4093/1/4093
+f 4090/1/4090 4093/1/4093 4091/1/4091
+f 2871/1/2871 4090/1/4090 4091/1/4091
+f 2871/1/2871 4091/1/4091 2876/1/2876
+f 2872/1/2872 2871/1/2871 2876/1/2876
+f 2872/1/2872 2876/1/2876 2875/1/2875
+f 2874/1/2874 2872/1/2872 2875/1/2875
+f 2874/1/2874 2875/1/2875 2666/1/2666
+f 2657/1/2657 2874/1/2874 2666/1/2666
+f 2657/1/2657 2666/1/2666 2658/1/2658
+f 2652/1/2652 2657/1/2657 2658/1/2658
+f 2652/1/2652 2658/1/2658 2656/1/2656
+f 2653/1/2653 2652/1/2652 2656/1/2656
+f 2653/1/2653 2656/1/2656 2654/1/2654
+f 2654/1/2654 2656/1/2656 2659/1/2659
+f 2656/1/2656 2660/1/2660 2659/1/2659
+f 2659/1/2659 2660/1/2660 2662/1/2662
+f 2661/1/2661 2659/1/2659 2662/1/2662
+f 2660/1/2660 2664/1/2664 2662/1/2662
+f 2662/1/2662 2664/1/2664 2670/1/2670
+f 2662/1/2662 2670/1/2670 2678/1/2678
+f 2678/1/2678 2670/1/2670 2677/1/2677
+f 2664/1/2664 2669/1/2669 2670/1/2670
+f 2670/1/2670 2669/1/2669 2672/1/2672
+f 2664/1/2664 2665/1/2665 2669/1/2669
+f 2665/1/2665 2668/1/2668 2669/1/2669
+f 2669/1/2669 2668/1/2668 2671/1/2671
+f 2665/1/2665 2667/1/2667 2668/1/2668
+f 2667/1/2667 2673/1/2673 2668/1/2668
+f 2667/1/2667 2876/1/2876 2673/1/2673
+f 2663/1/2663 2667/1/2667 2665/1/2665
+f 2660/1/2660 2663/1/2663 2665/1/2665
+f 2658/1/2658 2663/1/2663 2660/1/2660
+f 2666/1/2666 2667/1/2667 2663/1/2663
+f 2660/1/2660 2665/1/2665 2664/1/2664
+f 2648/1/2648 2652/1/2652 2653/1/2653
+f 2649/1/2649 2648/1/2648 2653/1/2653
+f 2648/1/2648 2647/1/2647 2652/1/2652
+f 2646/1/2646 2647/1/2647 2648/1/2648
+f 2645/1/2645 2646/1/2646 2648/1/2648
+f 2645/1/2645 2643/1/2643 2646/1/2646
+f 2643/1/2643 2642/1/2642 2646/1/2646
+f 2643/1/2643 2637/1/2637 2642/1/2642
+f 2637/1/2637 2635/1/2635 2642/1/2642
+f 2642/1/2642 2635/1/2635 2647/1/2647
+f 2635/1/2635 2877/1/2877 2647/1/2647
+f 2647/1/2647 2877/1/2877 2657/1/2657
+f 2635/1/2635 2873/1/2873 2877/1/2877
+f 2877/1/2877 2873/1/2873 2874/1/2874
+f 2635/1/2635 2634/1/2634 2873/1/2873
+f 2634/1/2634 2872/1/2872 2873/1/2873
+f 2634/1/2634 2870/1/2870 2872/1/2872
+f 2633/1/2633 2870/1/2870 2634/1/2634
+f 2632/1/2632 2633/1/2633 2634/1/2634
+f 2638/1/2638 2633/1/2633 2632/1/2632
+f 2636/1/2636 2638/1/2638 2632/1/2632
+f 2636/1/2636 2632/1/2632 2637/1/2637
+f 2641/1/2641 2636/1/2636 2637/1/2637
+f 2640/1/2640 2636/1/2636 2641/1/2641
+f 2644/1/2644 2640/1/2640 2641/1/2641
+f 2644/1/2644 2641/1/2641 2643/1/2643
+f 2844/1/2844 2640/1/2640 2644/1/2644
+f 2726/1/2726 2844/1/2844 2644/1/2644
+f 2726/1/2726 2644/1/2644 2650/1/2650
+f 2730/1/2730 2844/1/2844 2726/1/2726
+f 2727/1/2727 2730/1/2730 2726/1/2726
+f 2727/1/2727 2726/1/2726 2725/1/2725
+f 2729/1/2729 2730/1/2730 2727/1/2727
+f 2728/1/2728 2729/1/2729 2727/1/2727
+f 2728/1/2728 2727/1/2727 4117/1/4117
+f 2731/1/2731 2729/1/2729 2728/1/2728
+f 4110/1/4110 2731/1/2731 2728/1/2728
+f 4110/1/4110 2728/1/2728 4109/1/4109
+f 4109/1/4109 4106/1/4106 4110/1/4110
+f 4110/1/4110 4106/1/4106 4105/1/4105
+f 4110/1/4110 4105/1/4105 4163/1/4163
+f 4163/1/4163 4105/1/4105 2843/1/2843
+f 2843/1/2843 2731/1/2731 4163/1/4163
+f 2840/1/2840 2731/1/2731 2843/1/2843
+f 2843/1/2843 2842/1/2842 2840/1/2840
+f 2840/1/2840 2842/1/2842 2841/1/2841
+f 2841/1/2841 2733/1/2733 2840/1/2840
+f 2839/1/2839 2733/1/2733 2841/1/2841
+f 2841/1/2841 2826/1/2826 2839/1/2839
+f 2839/1/2839 2826/1/2826 2742/1/2742
+f 2742/1/2742 2826/1/2826 2824/1/2824
+f 2742/1/2742 2824/1/2824 2741/1/2741
+f 2741/1/2741 2737/1/2737 2742/1/2742
+f 2742/1/2742 2737/1/2737 2733/1/2733
+f 2737/1/2737 2734/1/2734 2733/1/2733
+f 2733/1/2733 2734/1/2734 2732/1/2732
+f 2733/1/2733 2732/1/2732 2731/1/2731
+f 2734/1/2734 2735/1/2735 2732/1/2732
+f 2732/1/2732 2735/1/2735 2736/1/2736
+f 2732/1/2732 2736/1/2736 2729/1/2729
+f 2735/1/2735 2885/1/2885 2736/1/2736
+f 2736/1/2736 2885/1/2885 2884/1/2884
+f 2736/1/2736 2884/1/2884 2847/1/2847
+f 2736/1/2736 2847/1/2847 2730/1/2730
+f 2730/1/2730 2847/1/2847 2846/1/2846
+f 2847/1/2847 2848/1/2848 2846/1/2846
+f 2846/1/2846 2848/1/2848 2845/1/2845
+f 2846/1/2846 2845/1/2845 2844/1/2844
+f 2848/1/2848 2849/1/2849 2845/1/2845
+f 2845/1/2845 2849/1/2849 2850/1/2850
+f 2845/1/2845 2850/1/2850 2640/1/2640
+f 2640/1/2640 2850/1/2850 2639/1/2639
+f 2850/1/2850 2851/1/2851 2639/1/2639
+f 2851/1/2851 2638/1/2638 2639/1/2639
+f 2851/1/2851 2861/1/2861 2638/1/2638
+f 2851/1/2851 2858/1/2858 2861/1/2861
+f 2858/1/2858 2860/1/2860 2861/1/2861
+f 2861/1/2861 2860/1/2860 2867/1/2867
+f 2861/1/2861 2867/1/2867 2633/1/2633
+f 2860/1/2860 2869/1/2869 2867/1/2867
+f 2867/1/2867 2869/1/2869 2870/1/2870
+f 2870/1/2870 2869/1/2869 2871/1/2871
+f 2860/1/2860 2868/1/2868 2869/1/2869
+f 2868/1/2868 4089/1/4089 2869/1/2869
+f 2869/1/2869 4089/1/4089 4090/1/4090
+f 2868/1/2868 4086/1/4086 4089/1/4089
+f 4086/1/4086 4100/1/4100 4089/1/4089
+f 4089/1/4089 4100/1/4100 4097/1/4097
+f 4100/1/4100 4098/1/4098 4097/1/4097
+f 4097/1/4097 4098/1/4098 4099/1/4099
+f 4099/1/4099 4098/1/4098 4111/1/4111
+f 4099/1/4099 4111/1/4111 4095/1/4095
+f 4098/1/4098 4108/1/4108 4111/1/4111
+f 4111/1/4111 4108/1/4108 4112/1/4112
+f 4111/1/4111 4112/1/4112 4114/1/4114
+f 4114/1/4114 4112/1/4112 4115/1/4115
+f 4112/1/4112 4108/1/4108 4113/1/4113
+f 4116/1/4116 4112/1/4112 4113/1/4113
+f 4113/1/4113 2728/1/2728 4116/1/4116
+f 4113/1/4113 4108/1/4108 4109/1/4109
+f 4098/1/4098 4106/1/4106 4108/1/4108
+f 4098/1/4098 4102/1/4102 4106/1/4106
+f 4100/1/4100 4102/1/4102 4098/1/4098
+f 4101/1/4101 4102/1/4102 4100/1/4100
+f 4101/1/4101 4103/1/4103 4102/1/4102
+f 4103/1/4103 4104/1/4104 4102/1/4102
+f 4104/1/4104 4105/1/4105 4102/1/4102
+f 4104/1/4104 2842/1/2842 4105/1/4105
+f 4107/1/4107 2842/1/2842 4104/1/4104
+f 4107/1/4107 2826/1/2826 2842/1/2842
+f 2829/1/2829 2826/1/2826 4107/1/4107
+f 2829/1/2829 4107/1/4107 4103/1/4103
+f 2833/1/2833 2829/1/2829 4103/1/4103
+f 2833/1/2833 2828/1/2828 2829/1/2829
+f 2828/1/2828 2825/1/2825 2829/1/2829
+f 2827/1/2827 2825/1/2825 2828/1/2828
+f 2830/1/2830 2827/1/2827 2828/1/2828
+f 2832/1/2832 2827/1/2827 2830/1/2830
+f 2834/1/2834 2832/1/2832 2830/1/2830
+f 2834/1/2834 2830/1/2830 2835/1/2835
+f 4082/1/4082 2834/1/2834 2835/1/2835
+f 4082/1/4082 2835/1/2835 4085/1/4085
+f 4083/1/4083 4082/1/4082 4085/1/4085
+f 4083/1/4083 4085/1/4085 4087/1/4087
+f 4164/1/4164 4083/1/4083 4087/1/4087
+f 4164/1/4164 4087/1/4087 4088/1/4088
+f 2880/1/2880 4164/1/4164 4088/1/4088
+f 2880/1/2880 4088/1/4088 2866/1/2866
+f 2879/1/2879 2880/1/2880 2866/1/2866
+f 2879/1/2879 2866/1/2866 2878/1/2878
+f 2881/1/2881 2879/1/2879 2878/1/2878
+f 2881/1/2881 2878/1/2878 2883/1/2883
+f 2884/1/2884 2881/1/2881 2883/1/2883
+f 2884/1/2884 2882/1/2882 2881/1/2881
+f 2883/1/2883 2878/1/2878 2855/1/2855
+f 2883/1/2883 2855/1/2855 2854/1/2854
+f 2847/1/2847 2883/1/2883 2854/1/2854
+f 2854/1/2854 2855/1/2855 2852/1/2852
+f 2854/1/2854 2852/1/2852 2848/1/2848
+f 2855/1/2855 2856/1/2856 2852/1/2852
+f 2856/1/2856 2857/1/2857 2852/1/2852
+f 2852/1/2852 2857/1/2857 2853/1/2853
+f 2852/1/2852 2853/1/2853 2849/1/2849
+f 2849/1/2849 2853/1/2853 2851/1/2851
+f 2857/1/2857 2859/1/2859 2853/1/2853
+f 2853/1/2853 2859/1/2859 2858/1/2858
+f 2857/1/2857 2862/1/2862 2859/1/2859
+f 2862/1/2862 2863/1/2863 2859/1/2859
+f 2859/1/2859 2863/1/2863 2860/1/2860
+f 2862/1/2862 2865/1/2865 2863/1/2863
+f 2865/1/2865 2868/1/2868 2863/1/2863
+f 2865/1/2865 4085/1/4085 2868/1/2868
+f 2864/1/2864 2865/1/2865 2862/1/2862
+f 2856/1/2856 2864/1/2864 2862/1/2862
+f 2866/1/2866 2864/1/2864 2856/1/2856
+f 4088/1/4088 2865/1/2865 2864/1/2864
+f 2856/1/2856 2862/1/2862 2857/1/2857
+f 2878/1/2878 2856/1/2856 2855/1/2855
+f 2882/1/2882 2879/1/2879 2881/1/2881
+f 2882/1/2882 4242/1/4242 2879/1/2879
+f 2886/1/2886 4242/1/4242 2882/1/2882
+f 2885/1/2885 2886/1/2886 2882/1/2882
+f 2885/1/2885 4064/1/4064 2886/1/2886
+f 4064/1/4064 4067/1/4067 2886/1/2886
+f 4064/1/4064 4066/1/4066 4067/1/4067
+f 4066/1/4066 4069/1/4069 4067/1/4067
+f 4067/1/4067 4069/1/4069 4242/1/4242
+f 4069/1/4069 4166/1/4166 4242/1/4242
+f 4242/1/4242 4166/1/4166 2880/1/2880
+f 4069/1/4069 4165/1/4165 4166/1/4166
+f 4166/1/4166 4165/1/4165 4164/1/4164
+f 4069/1/4069 4076/1/4076 4165/1/4165
+f 4076/1/4076 4083/1/4083 4165/1/4165
+f 4076/1/4076 4077/1/4077 4083/1/4083
+f 4075/1/4075 4077/1/4077 4076/1/4076
+f 4068/1/4068 4075/1/4075 4076/1/4076
+f 4071/1/4071 4075/1/4075 4068/1/4068
+f 4065/1/4065 4071/1/4071 4068/1/4068
+f 4065/1/4065 4068/1/4068 4066/1/4066
+f 4063/1/4063 4065/1/4065 4066/1/4066
+f 4061/1/4061 4065/1/4065 4063/1/4063
+f 4062/1/4062 4061/1/4061 4063/1/4063
+f 4062/1/4062 4063/1/4063 4064/1/4064
+f 4058/1/4058 4061/1/4061 4062/1/4062
+f 2739/1/2739 4058/1/4058 4062/1/4062
+f 2739/1/2739 4062/1/4062 2735/1/2735
+f 2744/1/2744 4058/1/4058 2739/1/2739
+f 2738/1/2738 2744/1/2744 2739/1/2739
+f 2738/1/2738 2739/1/2739 2734/1/2734
+f 2743/1/2743 2744/1/2744 2738/1/2738
+f 2740/1/2740 2743/1/2743 2738/1/2738
+f 2740/1/2740 2738/1/2738 2737/1/2737
+f 2747/1/2747 2743/1/2743 2740/1/2740
+f 2814/1/2814 2747/1/2747 2740/1/2740
+f 2814/1/2814 2740/1/2740 2816/1/2816
+f 2816/1/2816 2817/1/2817 2814/1/2814
+f 2814/1/2814 2817/1/2817 2815/1/2815
+f 2814/1/2814 2815/1/2815 2813/1/2813
+f 2813/1/2813 2815/1/2815 2812/1/2812
+f 2812/1/2812 2747/1/2747 2813/1/2813
+f 2811/1/2811 2747/1/2747 2812/1/2812
+f 2812/1/2812 2809/1/2809 2811/1/2811
+f 2811/1/2811 2809/1/2809 2808/1/2808
+f 2808/1/2808 2748/1/2748 2811/1/2811
+f 2810/1/2810 2748/1/2748 2808/1/2808
+f 2808/1/2808 2806/1/2806 2810/1/2810
+f 2810/1/2810 2806/1/2806 2753/1/2753
+f 2753/1/2753 2806/1/2806 2805/1/2805
+f 2753/1/2753 2805/1/2805 2752/1/2752
+f 2752/1/2752 2750/1/2750 2753/1/2753
+f 2753/1/2753 2750/1/2750 2748/1/2748
+f 2750/1/2750 2749/1/2749 2748/1/2748
+f 2748/1/2748 2749/1/2749 2745/1/2745
+f 2748/1/2748 2745/1/2745 2747/1/2747
+f 2749/1/2749 4056/1/4056 2745/1/2745
+f 2745/1/2745 4056/1/4056 2746/1/2746
+f 2745/1/2745 2746/1/2746 2743/1/2743
+f 4056/1/4056 4057/1/4057 2746/1/2746
+f 2746/1/2746 4057/1/4057 4054/1/4054
+f 2746/1/2746 4054/1/4054 4055/1/4055
+f 2746/1/2746 4055/1/4055 2744/1/2744
+f 4054/1/4054 4217/1/4217 4055/1/4055
+f 4055/1/4055 4217/1/4217 4230/1/4230
+f 4055/1/4055 4230/1/4230 4059/1/4059
+f 4055/1/4055 4059/1/4059 4058/1/4058
+f 4058/1/4058 4059/1/4059 4060/1/4060
+f 4059/1/4059 4229/1/4229 4060/1/4060
+f 4060/1/4060 4229/1/4229 4072/1/4072
+f 4060/1/4060 4072/1/4072 4061/1/4061
+f 4061/1/4061 4072/1/4072 4070/1/4070
+f 4072/1/4072 4073/1/4073 4070/1/4070
+f 4073/1/4073 4071/1/4071 4070/1/4070
+f 4073/1/4073 4074/1/4074 4071/1/4071
+f 4073/1/4073 4079/1/4079 4074/1/4074
+f 4079/1/4079 4080/1/4080 4074/1/4074
+f 4074/1/4074 4080/1/4080 4078/1/4078
+f 4074/1/4074 4078/1/4078 4075/1/4075
+f 4080/1/4080 4081/1/4081 4078/1/4078
+f 4078/1/4078 4081/1/4081 4077/1/4077
+f 4077/1/4077 4081/1/4081 4082/1/4082
+f 4080/1/4080 4084/1/4084 4081/1/4081
+f 4084/1/4084 2836/1/2836 4081/1/4081
+f 4081/1/4081 2836/1/2836 2834/1/2834
+f 4084/1/4084 2800/1/2800 2836/1/2836
+f 2800/1/2800 2837/1/2837 2836/1/2836
+f 2836/1/2836 2837/1/2837 2832/1/2832
+f 2837/1/2837 2820/1/2820 2832/1/2832
+f 2832/1/2832 2820/1/2820 2831/1/2831
+f 2831/1/2831 2820/1/2820 2822/1/2822
+f 2831/1/2831 2822/1/2822 2827/1/2827
+f 2820/1/2820 2819/1/2819 2822/1/2822
+f 2822/1/2822 2819/1/2819 2823/1/2823
+f 2822/1/2822 2823/1/2823 2825/1/2825
+f 2825/1/2825 2823/1/2823 2824/1/2824
+f 2823/1/2823 2819/1/2819 2818/1/2818
+f 2741/1/2741 2823/1/2823 2818/1/2818
+f 2818/1/2818 2740/1/2740 2741/1/2741
+f 2818/1/2818 2819/1/2819 2816/1/2816
+f 2820/1/2820 2817/1/2817 2819/1/2819
+f 2820/1/2820 2821/1/2821 2817/1/2817
+f 2837/1/2837 2821/1/2821 2820/1/2820
+f 2801/1/2801 2821/1/2821 2837/1/2837
+f 2801/1/2801 2803/1/2803 2821/1/2821
+f 2803/1/2803 2838/1/2838 2821/1/2821
+f 2838/1/2838 2815/1/2815 2821/1/2821
+f 2838/1/2838 2809/1/2809 2815/1/2815
+f 2807/1/2807 2809/1/2809 2838/1/2838
+f 2807/1/2807 2806/1/2806 2809/1/2809
+f 2802/1/2802 2806/1/2806 2807/1/2807
+f 2802/1/2802 2807/1/2807 2803/1/2803
+f 2798/1/2798 2802/1/2802 2803/1/2803
+f 2798/1/2798 2799/1/2799 2802/1/2802
+f 2799/1/2799 2804/1/2804 2802/1/2802
+f 2797/1/2797 2804/1/2804 2799/1/2799
+f 2795/1/2795 2797/1/2797 2799/1/2799
+f 2773/1/2773 2797/1/2797 2795/1/2795
+f 2793/1/2793 2773/1/2773 2795/1/2795
+f 2793/1/2793 2795/1/2795 2796/1/2796
+f 2794/1/2794 2793/1/2793 2796/1/2796
+f 2794/1/2794 2796/1/2796 4168/1/4168
+f 4171/1/4171 2794/1/2794 4168/1/4168
+f 4171/1/4171 4168/1/4168 4170/1/4170
+f 4172/1/4172 4171/1/4171 4170/1/4170
+f 4172/1/4172 4170/1/4170 4173/1/4173
+f 4219/1/4219 4172/1/4172 4173/1/4173
+f 4219/1/4219 4173/1/4173 4220/1/4220
+f 4215/1/4215 4219/1/4219 4220/1/4220
+f 4215/1/4215 4220/1/4220 4218/1/4218
+f 4216/1/4216 4215/1/4215 4218/1/4218
+f 4216/1/4216 4218/1/4218 4217/1/4217
+f 4217/1/4217 4218/1/4218 4223/1/4223
+f 4218/1/4218 4222/1/4222 4223/1/4223
+f 4223/1/4223 4222/1/4222 4226/1/4226
+f 4230/1/4230 4223/1/4223 4226/1/4226
+f 4222/1/4222 4225/1/4225 4226/1/4226
+f 4226/1/4226 4225/1/4225 4228/1/4228
+f 4226/1/4226 4228/1/4228 4229/1/4229
+f 4229/1/4229 4228/1/4228 4073/1/4073
+f 4225/1/4225 4227/1/4227 4228/1/4228
+f 4228/1/4228 4227/1/4227 4079/1/4079
+f 4225/1/4225 4224/1/4224 4227/1/4227
+f 4224/1/4224 4169/1/4169 4227/1/4227
+f 4227/1/4227 4169/1/4169 4080/1/4080
+f 4224/1/4224 4167/1/4167 4169/1/4169
+f 4167/1/4167 4084/1/4084 4169/1/4169
+f 4167/1/4167 4168/1/4168 4084/1/4084
+f 4221/1/4221 4167/1/4167 4224/1/4224
+f 4222/1/4222 4221/1/4221 4224/1/4224
+f 4220/1/4220 4221/1/4221 4222/1/4222
+f 4173/1/4173 4167/1/4167 4221/1/4221
+f 4222/1/4222 4224/1/4224 4225/1/4225
+f 4214/1/4214 4215/1/4215 4216/1/4216
+f 4054/1/4054 4214/1/4214 4216/1/4216
+f 4214/1/4214 4182/1/4182 4215/1/4215
+f 4189/1/4189 4182/1/4182 4214/1/4214
+f 4057/1/4057 4189/1/4189 4214/1/4214
+f 4057/1/4057 4187/1/4187 4189/1/4189
+f 4187/1/4187 4184/1/4184 4189/1/4189
+f 4187/1/4187 4183/1/4183 4184/1/4184
+f 4183/1/4183 4179/1/4179 4184/1/4184
+f 4184/1/4184 4179/1/4179 4182/1/4182
+f 4179/1/4179 4181/1/4181 4182/1/4182
+f 4182/1/4182 4181/1/4181 4219/1/4219
+f 4179/1/4179 4175/1/4175 4181/1/4181
+f 4181/1/4181 4175/1/4175 4172/1/4172
+f 4179/1/4179 4174/1/4174 4175/1/4175
+f 4174/1/4174 4171/1/4171 4175/1/4175
+f 4174/1/4174 4176/1/4176 4171/1/4171
+f 4177/1/4177 4176/1/4176 4174/1/4174
+f 4180/1/4180 4177/1/4177 4174/1/4174
+f 4186/1/4186 4177/1/4177 4180/1/4180
+f 4185/1/4185 4186/1/4186 4180/1/4180
+f 4185/1/4185 4180/1/4180 4183/1/4183
+f 4188/1/4188 4185/1/4185 4183/1/4183
+f 4191/1/4191 4185/1/4185 4188/1/4188
+f 4190/1/4190 4191/1/4191 4188/1/4188
+f 4190/1/4190 4188/1/4188 4187/1/4187
+f 4195/1/4195 4191/1/4191 4190/1/4190
+f 4201/1/4201 4195/1/4195 4190/1/4190
+f 4201/1/4201 4190/1/4190 4056/1/4056
+f 4200/1/4200 4195/1/4195 4201/1/4201
+f 2751/1/2751 4200/1/4200 4201/1/4201
+f 2751/1/2751 4201/1/4201 2749/1/2749
+f 2755/1/2755 4200/1/4200 2751/1/2751
+f 2754/1/2754 2755/1/2755 2751/1/2751
+f 2754/1/2754 2751/1/2751 2750/1/2750
+f 2757/1/2757 2755/1/2755 2754/1/2754
+f 2758/1/2758 2757/1/2757 2754/1/2754
+f 2758/1/2758 2754/1/2754 2759/1/2759
+f 2759/1/2759 2762/1/2762 2758/1/2758
+f 2758/1/2758 2762/1/2762 2764/1/2764
+f 2758/1/2758 2764/1/2764 2763/1/2763
+f 2763/1/2763 2764/1/2764 2766/1/2766
+f 2766/1/2766 2757/1/2757 2763/1/2763
+f 2765/1/2765 2757/1/2757 2766/1/2766
+f 2766/1/2766 2767/1/2767 2765/1/2765
+f 2765/1/2765 2767/1/2767 2769/1/2769
+f 2769/1/2769 4698/1/4698 2765/1/2765
+f 4709/1/4709 4698/1/4698 2769/1/2769
+f 2769/1/2769 2770/1/2770 4709/1/4709
+f 4709/1/4709 2770/1/2770 4697/1/4697
+f 4697/1/4697 2770/1/2770 4699/1/4699
+f 4697/1/4697 4699/1/4699 4695/1/4695
+f 4695/1/4695 4696/1/4696 4697/1/4697
+f 4697/1/4697 4696/1/4696 4698/1/4698
+f 4696/1/4696 4211/1/4211 4698/1/4698
+f 4698/1/4698 4211/1/4211 4212/1/4212
+f 4698/1/4698 4212/1/4212 2757/1/2757
+f 4211/1/4211 3385/1/3385 4212/1/4212
+f 4212/1/4212 3385/1/3385 4205/1/4205
+f 4212/1/4212 4205/1/4205 2755/1/2755
+f 3385/1/3385 3380/1/3380 4205/1/4205
+f 4205/1/4205 3380/1/3380 4206/1/4206
+f 4205/1/4205 4206/1/4206 4202/1/4202
+f 4205/1/4205 4202/1/4202 4200/1/4200
+f 4200/1/4200 4202/1/4202 4198/1/4198
+f 4202/1/4202 4199/1/4199 4198/1/4198
+f 4198/1/4198 4199/1/4199 4193/1/4193
+f 4198/1/4198 4193/1/4193 4195/1/4195
+f 4199/1/4199 4197/1/4197 4193/1/4193
+f 4193/1/4193 4197/1/4197 4194/1/4194
+f 4193/1/4193 4194/1/4194 4191/1/4191
+f 4191/1/4191 4194/1/4194 4192/1/4192
+f 4194/1/4194 4196/1/4196 4192/1/4192
+f 4196/1/4196 4186/1/4186 4192/1/4192
+f 4196/1/4196 4236/1/4236 4186/1/4186
+f 4196/1/4196 4235/1/4235 4236/1/4236
+f 4235/1/4235 4237/1/4237 4236/1/4236
+f 4236/1/4236 4237/1/4237 4178/1/4178
+f 4236/1/4236 4178/1/4178 4177/1/4177
+f 4237/1/4237 2792/1/2792 4178/1/4178
+f 4178/1/4178 2792/1/2792 4176/1/4176
+f 4176/1/4176 2792/1/2792 2794/1/2794
+f 4237/1/4237 2791/1/2791 2792/1/2792
+f 2791/1/2791 2777/1/2777 2792/1/2792
+f 2792/1/2792 2777/1/2777 2793/1/2793
+f 2791/1/2791 2776/1/2776 2777/1/2777
+f 2776/1/2776 2772/1/2772 2777/1/2777
+f 2777/1/2777 2772/1/2772 2773/1/2773
+f 2772/1/2772 2771/1/2771 2773/1/2773
+f 2773/1/2773 2771/1/2771 2774/1/2774
+f 2774/1/2774 2771/1/2771 2775/1/2775
+f 2774/1/2774 2775/1/2775 2797/1/2797
+f 2771/1/2771 2761/1/2761 2775/1/2775
+f 2775/1/2775 2761/1/2761 2760/1/2760
+f 2775/1/2775 2760/1/2760 2804/1/2804
+f 2804/1/2804 2760/1/2760 2805/1/2805
+f 2760/1/2760 2761/1/2761 2756/1/2756
+f 2752/1/2752 2760/1/2760 2756/1/2756
+f 2756/1/2756 2754/1/2754 2752/1/2752
+f 2756/1/2756 2761/1/2761 2759/1/2759
+f 2771/1/2771 2762/1/2762 2761/1/2761
+f 2771/1/2771 2768/1/2768 2762/1/2762
+f 2772/1/2772 2768/1/2768 2771/1/2771
+f 2778/1/2778 2768/1/2768 2772/1/2772
+f 2778/1/2778 2781/1/2781 2768/1/2768
+f 2781/1/2781 2784/1/2784 2768/1/2768
+f 2784/1/2784 2764/1/2764 2768/1/2768
+f 2784/1/2784 2767/1/2767 2764/1/2764
+f 2783/1/2783 2767/1/2767 2784/1/2784
+f 2783/1/2783 2770/1/2770 2767/1/2767
+f 2782/1/2782 2770/1/2770 2783/1/2783
+f 2782/1/2782 2783/1/2783 2781/1/2781
+f 2780/1/2780 2782/1/2782 2781/1/2781
+f 2780/1/2780 4706/1/4706 2782/1/2782
+f 4706/1/4706 4702/1/4702 2782/1/2782
+f 4703/1/4703 4702/1/4702 4706/1/4706
+f 4707/1/4707 4703/1/4703 4706/1/4706
+f 4704/1/4704 4703/1/4703 4707/1/4707
+f 2786/1/2786 4704/1/4704 4707/1/4707
+f 2786/1/2786 4707/1/4707 2779/1/2779
+f 2785/1/2785 2786/1/2786 2779/1/2779
+f 2785/1/2785 2779/1/2779 2787/1/2787
+f 3612/1/3612 2785/1/2785 2787/1/2787
+f 3612/1/3612 2787/1/2787 3613/1/3613
+f 3614/1/3614 3612/1/3612 3613/1/3613
+f 3614/1/3614 3613/1/3613 3619/1/3619
+f 3618/1/3618 3614/1/3614 3619/1/3619
+f 3618/1/3618 3619/1/3619 4241/1/4241
+f 3379/1/3379 3618/1/3618 4241/1/4241
+f 3379/1/3379 4241/1/4241 4210/1/4210
+f 4209/1/4209 3379/1/3379 4210/1/4210
+f 4209/1/4209 4210/1/4210 4207/1/4207
+f 4206/1/4206 4209/1/4209 4207/1/4207
+f 4206/1/4206 3377/1/3377 4209/1/4209
+f 4207/1/4207 4210/1/4210 4208/1/4208
+f 4207/1/4207 4208/1/4208 4204/1/4204
+f 4202/1/4202 4207/1/4207 4204/1/4204
+f 4204/1/4204 4208/1/4208 4203/1/4203
+f 4204/1/4204 4203/1/4203 4199/1/4199
+f 4208/1/4208 4233/1/4233 4203/1/4203
+f 4233/1/4233 4232/1/4232 4203/1/4203
+f 4203/1/4203 4232/1/4232 4231/1/4231
+f 4203/1/4203 4231/1/4231 4197/1/4197
+f 4197/1/4197 4231/1/4231 4196/1/4196
+f 4232/1/4232 4234/1/4234 4231/1/4231
+f 4231/1/4231 4234/1/4234 4235/1/4235
+f 4232/1/4232 4238/1/4238 4234/1/4234
+f 4238/1/4238 4239/1/4239 4234/1/4234
+f 4234/1/4234 4239/1/4239 4237/1/4237
+f 4238/1/4238 3620/1/3620 4239/1/4239
+f 3620/1/3620 2791/1/2791 4239/1/4239
+f 3620/1/3620 2787/1/2787 2791/1/2791
+f 4240/1/4240 3620/1/3620 4238/1/4238
+f 4233/1/4233 4240/1/4240 4238/1/4238
+f 4241/1/4241 4240/1/4240 4233/1/4233
+f 3619/1/3619 3620/1/3620 4240/1/4240
+f 4233/1/4233 4238/1/4238 4232/1/4232
+f 4210/1/4210 4233/1/4233 4208/1/4208
+f 3377/1/3377 3379/1/3379 4209/1/4209
+f 3377/1/3377 3378/1/3378 3379/1/3379
+f 3381/1/3381 3378/1/3378 3377/1/3377
+f 3380/1/3380 3381/1/3381 3377/1/3377
+f 3380/1/3380 3383/1/3383 3381/1/3381
+f 3383/1/3383 3382/1/3382 3381/1/3381
+f 3383/1/3383 3386/1/3386 3382/1/3382
+f 3386/1/3386 3616/1/3616 3382/1/3382
+f 3382/1/3382 3616/1/3616 3378/1/3378
+f 3616/1/3616 3617/1/3617 3378/1/3378
+f 3378/1/3378 3617/1/3617 3618/1/3618
+f 3616/1/3616 3615/1/3615 3617/1/3617
+f 3617/1/3617 3615/1/3615 3614/1/3614
+f 3616/1/3616 3611/1/3611 3615/1/3615
+f 3611/1/3611 3612/1/3612 3615/1/3615
+f 3611/1/3611 3608/1/3608 3612/1/3612
+f 3609/1/3609 3608/1/3608 3611/1/3611
+f 3610/1/3610 3609/1/3609 3611/1/3611
+f 3400/1/3400 3609/1/3609 3610/1/3610
+f 3391/1/3391 3400/1/3400 3610/1/3610
+f 3391/1/3391 3610/1/3610 3386/1/3386
+f 3387/1/3387 3391/1/3391 3386/1/3386
+f 3388/1/3388 3391/1/3391 3387/1/3387
+f 3384/1/3384 3388/1/3388 3387/1/3387
+f 3384/1/3384 3387/1/3387 3383/1/3383
+f 3390/1/3390 3388/1/3388 3384/1/3384
+f 3389/1/3389 3390/1/3390 3384/1/3384
+f 3389/1/3389 3384/1/3384 3385/1/3385
+f 3395/1/3395 3390/1/3390 3389/1/3389
+f 4213/1/4213 3395/1/3395 3389/1/3389
+f 4213/1/4213 3389/1/3389 4211/1/4211
+f 3458/1/3458 3395/1/3395 4213/1/4213
+f 4651/1/4651 3458/1/3458 4213/1/4213
+f 4651/1/4651 4213/1/4213 4696/1/4696
+f 4654/1/4654 3458/1/3458 4651/1/4651
+f 4650/1/4650 4654/1/4654 4651/1/4651
+f 4650/1/4650 4651/1/4651 4652/1/4652
+f 4652/1/4652 4655/1/4655 4650/1/4650
+f 4650/1/4650 4655/1/4655 4653/1/4653
+f 4653/1/4653 4655/1/4655 4658/1/4658
+f 4653/1/4653 4658/1/4658 4694/1/4694
+f 4694/1/4694 4654/1/4654 4653/1/4653
+f 4694/1/4694 4689/1/4689 4654/1/4654
+f 4689/1/4689 3459/1/3459 4654/1/4654
+f 4689/1/4689 3460/1/3460 3459/1/3459
+f 3460/1/3460 3450/1/3450 3459/1/3459
+f 3459/1/3459 3450/1/3450 3451/1/3451
+f 3459/1/3459 3451/1/3451 3454/1/3454
+f 3459/1/3459 3454/1/3454 3458/1/3458
+f 3451/1/3451 3449/1/3449 3454/1/3454
+f 3454/1/3454 3449/1/3449 3453/1/3453
+f 3454/1/3454 3453/1/3453 3395/1/3395
+f 3395/1/3395 3453/1/3453 3396/1/3396
+f 3453/1/3453 3405/1/3405 3396/1/3396
+f 3396/1/3396 3405/1/3405 3398/1/3398
+f 3396/1/3396 3398/1/3398 3393/1/3393
+f 3396/1/3396 3393/1/3393 3390/1/3390
+f 3398/1/3398 3397/1/3397 3393/1/3393
+f 3393/1/3393 3397/1/3397 3394/1/3394
+f 3393/1/3393 3394/1/3394 3388/1/3388
+f 3388/1/3388 3394/1/3394 3392/1/3392
+f 3394/1/3394 3399/1/3399 3392/1/3392
+f 3399/1/3399 3400/1/3400 3392/1/3392
+f 3399/1/3399 3403/1/3403 3400/1/3400
+f 3399/1/3399 3402/1/3402 3403/1/3403
+f 3402/1/3402 3410/1/3410 3403/1/3403
+f 3403/1/3403 3410/1/3410 3607/1/3607
+f 3403/1/3403 3607/1/3607 3609/1/3609
+f 3410/1/3410 2788/1/2788 3607/1/3607
+f 3607/1/3607 2788/1/2788 3608/1/3608
+f 3608/1/3608 2788/1/2788 2785/1/2785
+f 3410/1/3410 2790/1/2790 2788/1/2788
+f 2790/1/2790 2789/1/2789 2788/1/2788
+f 2788/1/2788 2789/1/2789 2786/1/2786
+f 2790/1/2790 4708/1/4708 2789/1/2789
+f 4708/1/4708 4666/1/4666 2789/1/2789
+f 2789/1/2789 4666/1/4666 4705/1/4705
+f 2789/1/2789 4705/1/4705 4704/1/4704
+f 4705/1/4705 4660/1/4660 4704/1/4704
+f 4705/1/4705 4663/1/4663 4660/1/4660
+f 4663/1/4663 4659/1/4659 4660/1/4660
+f 4659/1/4659 4655/1/4655 4660/1/4660
+f 4660/1/4660 4655/1/4655 4657/1/4657
+f 4660/1/4660 4657/1/4657 4701/1/4701
+f 4660/1/4660 4701/1/4701 4703/1/4703
+f 4701/1/4701 4657/1/4657 4700/1/4700
+f 4701/1/4701 4700/1/4700 4702/1/4702
+f 4702/1/4702 4700/1/4700 4699/1/4699
+f 4700/1/4700 4657/1/4657 4656/1/4656
+f 4695/1/4695 4700/1/4700 4656/1/4656
+f 4656/1/4656 4651/1/4651 4695/1/4695
+f 4656/1/4656 4657/1/4657 4652/1/4652
+f 4661/1/4661 4659/1/4659 4663/1/4663
+f 4666/1/4666 4661/1/4661 4663/1/4663
+f 4664/1/4664 4661/1/4661 4666/1/4666
+f 4664/1/4664 4665/1/4665 4661/1/4661
+f 4665/1/4665 4662/1/4662 4661/1/4661
+f 4665/1/4665 4667/1/4667 4662/1/4662
+f 4667/1/4667 4668/1/4668 4662/1/4662
+f 4662/1/4662 4668/1/4668 4658/1/4658
+f 4662/1/4662 4658/1/4658 4659/1/4659
+f 4710/1/4710 4658/1/4658 4668/1/4668
+f 4710/1/4710 4668/1/4668 4690/1/4690
+f 4690/1/4690 4689/1/4689 4710/1/4710
+f 4686/1/4686 4689/1/4689 4690/1/4690
+f 4686/1/4686 4688/1/4688 4689/1/4689
+f 4687/1/4687 4688/1/4688 4686/1/4686
+f 4686/1/4686 4672/1/4672 4687/1/4687
+f 4687/1/4687 4672/1/4672 4683/1/4683
+f 4687/1/4687 4683/1/4683 4691/1/4691
+f 4691/1/4691 4692/1/4692 4687/1/4687
+f 4684/1/4684 4692/1/4692 4691/1/4691
+f 4684/1/4684 4693/1/4693 4692/1/4692
+f 4693/1/4693 3461/1/3461 4692/1/4692
+f 4692/1/4692 3461/1/3461 3460/1/3460
+f 4692/1/4692 3460/1/3460 4688/1/4688
+f 3461/1/3461 3462/1/3462 3460/1/3460
+f 3461/1/3461 3463/1/3463 3462/1/3462
+f 3463/1/3463 3577/1/3577 3462/1/3462
+f 3462/1/3462 3577/1/3577 3444/1/3444
+f 3462/1/3462 3444/1/3444 3450/1/3450
+f 3450/1/3450 3444/1/3444 3445/1/3445
+f 3444/1/3444 3439/1/3439 3445/1/3445
+f 3445/1/3445 3439/1/3439 3442/1/3442
+f 3445/1/3445 3442/1/3442 3446/1/3446
+f 3445/1/3445 3446/1/3446 3449/1/3449
+f 3449/1/3449 3446/1/3446 3448/1/3448
+f 3449/1/3449 3448/1/3448 3452/1/3452
+f 3448/1/3448 3455/1/3455 3452/1/3452
+f 3452/1/3452 3455/1/3455 3456/1/3456
+f 3452/1/3452 3456/1/3456 3457/1/3457
+f 3453/1/3453 3452/1/3452 3457/1/3457
+f 3457/1/3457 3456/1/3456 3408/1/3408
+f 3457/1/3457 3408/1/3408 3405/1/3405
+f 3405/1/3405 3408/1/3408 3404/1/3404
+f 3408/1/3408 3406/1/3406 3404/1/3404
+f 3406/1/3406 3407/1/3407 3404/1/3404
+f 3404/1/3404 3407/1/3407 3401/1/3401
+f 3404/1/3404 3401/1/3401 3397/1/3397
+f 3397/1/3397 3401/1/3401 3399/1/3399
+f 3407/1/3407 3409/1/3409 3401/1/3401
+f 3401/1/3401 3409/1/3409 3402/1/3402
+f 3407/1/3407 3411/1/3411 3409/1/3409
+f 3411/1/3411 3412/1/3412 3409/1/3409
+f 3409/1/3409 3412/1/3412 3410/1/3410
+f 3413/1/3413 3412/1/3412 3411/1/3411
+f 3406/1/3406 3413/1/3413 3411/1/3411
+f 3416/1/3416 3413/1/3413 3406/1/3406
+f 3456/1/3456 3416/1/3416 3406/1/3406
+f 3416/1/3416 3417/1/3417 3413/1/3413
+f 3417/1/3417 3415/1/3415 3413/1/3413
+f 3417/1/3417 3418/1/3418 3415/1/3415
+f 3418/1/3418 3414/1/3414 3415/1/3415
+f 3415/1/3415 3414/1/3414 3412/1/3412
+f 3412/1/3412 3414/1/3414 2790/1/2790
+f 3418/1/3418 3419/1/3419 3414/1/3414
+f 3419/1/3419 4674/1/4674 3414/1/3414
+f 3414/1/3414 4674/1/4674 4675/1/4675
+f 3414/1/3414 4675/1/4675 4708/1/4708
+f 4675/1/4675 4664/1/4664 4708/1/4708
+f 4675/1/4675 4669/1/4669 4664/1/4664
+f 4674/1/4674 4669/1/4669 4675/1/4675
+f 4674/1/4674 4673/1/4673 4669/1/4669
+f 4673/1/4673 4671/1/4671 4669/1/4669
+f 4669/1/4669 4671/1/4671 4670/1/4670
+f 4669/1/4669 4670/1/4670 4665/1/4665
+f 4671/1/4671 4672/1/4672 4670/1/4670
+f 4670/1/4670 4672/1/4672 4668/1/4668
+f 4671/1/4671 4682/1/4682 4672/1/4672
+f 4681/1/4681 4682/1/4682 4671/1/4671
+f 4676/1/4676 4681/1/4681 4671/1/4671
+f 4676/1/4676 4680/1/4680 4681/1/4681
+f 4676/1/4676 4679/1/4679 4680/1/4680
+f 4679/1/4679 4685/1/4685 4680/1/4680
+f 4684/1/4684 4680/1/4680 4685/1/4685
+f 4684/1/4684 4685/1/4685 4711/1/4711
+f 4711/1/4711 4685/1/4685 4712/1/4712
+f 4712/1/4712 4693/1/4693 4711/1/4711
+f 4712/1/4712 3467/1/3467 4693/1/4693
+f 3467/1/3467 3464/1/3464 4693/1/4693
+f 3467/1/3467 3466/1/3466 3464/1/3464
+f 3466/1/3466 3465/1/3465 3464/1/3464
+f 3465/1/3465 3463/1/3463 3464/1/3464
+f 3465/1/3465 3581/1/3581 3463/1/3463
+f 3581/1/3581 3578/1/3578 3463/1/3463
+f 3581/1/3581 3582/1/3582 3578/1/3578
+f 3582/1/3582 3580/1/3580 3578/1/3578
+f 3578/1/3578 3580/1/3580 3577/1/3577
+f 3577/1/3577 3580/1/3580 3579/1/3579
+f 3577/1/3577 3579/1/3579 3438/1/3438
+f 3579/1/3579 3440/1/3440 3438/1/3438
+f 3438/1/3438 3440/1/3440 3436/1/3436
+f 3438/1/3438 3436/1/3436 3439/1/3439
+f 3439/1/3439 3436/1/3436 3441/1/3441
+f 3436/1/3436 3437/1/3437 3441/1/3441
+f 3441/1/3441 3437/1/3437 3426/1/3426
+f 3441/1/3441 3426/1/3426 3443/1/3443
+f 3442/1/3442 3441/1/3441 3443/1/3443
+f 3443/1/3443 3426/1/3426 3424/1/3424
+f 3443/1/3443 3424/1/3424 3447/1/3447
+f 3446/1/3446 3443/1/3443 3447/1/3447
+f 3447/1/3447 3424/1/3424 3455/1/3455
+f 3424/1/3424 3423/1/3423 3455/1/3455
+f 3455/1/3455 3423/1/3423 3416/1/3416
+f 3424/1/3424 3422/1/3422 3423/1/3423
+f 3423/1/3423 3422/1/3422 3417/1/3417
+f 3424/1/3424 3420/1/3420 3422/1/3422
+f 3420/1/3420 3418/1/3418 3422/1/3422
+f 3420/1/3420 3421/1/3421 3418/1/3418
+f 3425/1/3425 3421/1/3421 3420/1/3420
+f 3426/1/3426 3425/1/3425 3420/1/3420
+f 3432/1/3432 3425/1/3425 3426/1/3426
+f 3432/1/3432 3430/1/3430 3425/1/3425
+f 3430/1/3430 3427/1/3427 3425/1/3425
+f 3431/1/3431 3427/1/3427 3430/1/3430
+f 3433/1/3433 3431/1/3431 3430/1/3430
+f 3434/1/3434 3431/1/3431 3433/1/3433
+f 3434/1/3434 3433/1/3433 3436/1/3436
+f 3436/1/3436 3433/1/3433 3432/1/3432
+f 3434/1/3434 3435/1/3435 3431/1/3431
+f 3435/1/3435 3429/1/3429 3431/1/3431
+f 3588/1/3588 3429/1/3429 3435/1/3435
+f 3585/1/3585 3588/1/3588 3435/1/3435
+f 3586/1/3586 3588/1/3588 3585/1/3585
+f 3583/1/3583 3586/1/3586 3585/1/3585
+f 3583/1/3583 3585/1/3585 3584/1/3584
+f 3580/1/3580 3583/1/3583 3584/1/3584
+f 3584/1/3584 3585/1/3585 3434/1/3434
+f 3584/1/3584 3434/1/3434 3440/1/3440
+f 3583/1/3583 3587/1/3587 3586/1/3586
+f 3587/1/3587 3589/1/3589 3586/1/3586
+f 3590/1/3590 3589/1/3589 3587/1/3587
+f 3590/1/3590 3587/1/3587 3591/1/3591
+f 3593/1/3593 3590/1/3590 3591/1/3591
+f 3593/1/3593 3591/1/3591 3594/1/3594
+f 3594/1/3594 3596/1/3596 3593/1/3593
+f 3593/1/3593 3596/1/3596 3597/1/3597
+f 3593/1/3593 3597/1/3597 3592/1/3592
+f 3592/1/3592 3597/1/3597 3598/1/3598
+f 3592/1/3592 3598/1/3598 4845/1/4845
+f 4845/1/4845 3605/1/3605 3592/1/3592
+f 3592/1/3592 3605/1/3605 3590/1/3590
+f 3605/1/3605 3603/1/3603 3590/1/3590
+f 3605/1/3605 3604/1/3604 3603/1/3603
+f 3603/1/3603 3604/1/3604 3588/1/3588
+f 3589/1/3589 3603/1/3603 3588/1/3588
+f 4725/1/4725 3604/1/3604 3605/1/3605
+f 4725/1/4725 4721/1/4721 3604/1/3604
+f 3604/1/3604 4721/1/4721 3606/1/3606
+f 3604/1/3604 3606/1/3606 3429/1/3429
+f 3429/1/3429 3606/1/3606 3428/1/3428
+f 3429/1/3429 3428/1/3428 3427/1/3427
+f 3427/1/3427 3428/1/3428 3419/1/3419
+f 3427/1/3427 3419/1/3419 3421/1/3421
+f 3606/1/3606 4677/1/4677 3428/1/3428
+f 3428/1/3428 4677/1/4677 4673/1/4673
+f 4677/1/4677 4676/1/4676 4673/1/4673
+f 3606/1/3606 4678/1/4678 4677/1/4677
+f 4678/1/4678 4679/1/4679 4677/1/4677
+f 4678/1/4678 4719/1/4719 4679/1/4679
+f 4719/1/4719 4716/1/4716 4679/1/4679
+f 4717/1/4717 4716/1/4716 4719/1/4719
+f 4717/1/4717 4718/1/4718 4716/1/4716
+f 4718/1/4718 4714/1/4714 4716/1/4716
+f 4716/1/4716 4714/1/4714 4685/1/4685
+f 4718/1/4718 4715/1/4715 4714/1/4714
+f 4713/1/4713 4714/1/4714 4715/1/4715
+f 4713/1/4713 4715/1/4715 3497/1/3497
+f 3497/1/3497 3470/1/3470 4713/1/4713
+f 4713/1/4713 3470/1/3470 3467/1/3467
+f 3496/1/3496 3470/1/3470 3497/1/3497
+f 3497/1/3497 3499/1/3499 3496/1/3496
+f 3496/1/3496 3499/1/3499 3498/1/3498
+f 3498/1/3498 3473/1/3473 3496/1/3496
+f 3500/1/3500 3473/1/3473 3498/1/3498
+f 3498/1/3498 3502/1/3502 3500/1/3500
+f 3500/1/3500 3502/1/3502 3503/1/3503
+f 3503/1/3503 3501/1/3501 3500/1/3500
+f 3504/1/3504 3501/1/3501 3503/1/3503
+f 3504/1/3504 3503/1/3503 3506/1/3506
+f 3508/1/3508 3504/1/3504 3506/1/3506
+f 3508/1/3508 3506/1/3506 3509/1/3509
+f 3508/1/3508 3509/1/3509 3511/1/3511
+f 3508/1/3508 3511/1/3511 3507/1/3507
+f 3511/1/3511 3524/1/3524 3507/1/3507
+f 3507/1/3507 3524/1/3524 3574/1/3574
+f 3574/1/3574 3573/1/3573 3507/1/3507
+f 3507/1/3507 3573/1/3573 3505/1/3505
+f 3507/1/3507 3505/1/3505 3504/1/3504
+f 3573/1/3573 3474/1/3474 3505/1/3505
+f 3505/1/3505 3474/1/3474 3471/1/3471
+f 3505/1/3505 3471/1/3471 3501/1/3501
+f 3501/1/3501 3471/1/3471 3473/1/3473
+f 3473/1/3473 3471/1/3471 3469/1/3469
+f 3473/1/3473 3469/1/3469 3470/1/3470
+f 3470/1/3470 3469/1/3469 3466/1/3466
+f 3469/1/3469 3468/1/3468 3466/1/3466
+f 3469/1/3469 3600/1/3600 3468/1/3468
+f 3468/1/3468 3600/1/3600 3595/1/3595
+f 3468/1/3468 3595/1/3595 3465/1/3465
+f 3595/1/3595 3600/1/3600 3599/1/3599
+f 3596/1/3596 3595/1/3595 3599/1/3599
+f 3599/1/3599 3600/1/3600 3601/1/3601
+f 3599/1/3599 3601/1/3601 4842/1/4842
+f 3597/1/3597 3599/1/3599 4842/1/4842
+f 4842/1/4842 3601/1/3601 4839/1/4839
+f 4842/1/4842 4839/1/4839 4840/1/4840
+f 4842/1/4842 4840/1/4840 4843/1/4843
+f 3598/1/3598 4842/1/4842 4843/1/4843
+f 3598/1/3598 4843/1/4843 4728/1/4728
+f 4728/1/4728 4843/1/4843 4729/1/4729
+f 4728/1/4728 4729/1/4729 4726/1/4726
+f 4725/1/4725 4728/1/4728 4726/1/4726
+f 4725/1/4725 4726/1/4726 4724/1/4724
+f 4724/1/4724 4726/1/4726 4727/1/4727
+f 4724/1/4724 4727/1/4727 3518/1/3518
+f 3518/1/3518 3519/1/3519 4724/1/4724
+f 4724/1/4724 3519/1/3519 4721/1/4721
+f 3519/1/3519 4722/1/4722 4721/1/4721
+f 4721/1/4721 4722/1/4722 4720/1/4720
+f 4721/1/4721 4720/1/4720 4678/1/4678
+f 4720/1/4720 4717/1/4717 4678/1/4678
+f 4722/1/4722 4717/1/4717 4720/1/4720
+f 4722/1/4722 4723/1/4723 4717/1/4717
+f 4722/1/4722 3515/1/3515 4723/1/4723
+f 3515/1/3515 3516/1/3516 4723/1/4723
+f 4723/1/4723 3516/1/3516 4718/1/4718
+f 3516/1/3516 3499/1/3499 4718/1/4718
+f 3516/1/3516 3502/1/3502 3499/1/3499
+f 3513/1/3513 3502/1/3502 3516/1/3516
+f 3510/1/3510 3502/1/3502 3513/1/3513
+f 3509/1/3509 3510/1/3510 3513/1/3513
+f 3509/1/3509 3513/1/3513 3514/1/3514
+f 3514/1/3514 3518/1/3518 3509/1/3509
+f 3509/1/3509 3518/1/3518 3512/1/3512
+f 3518/1/3518 3525/1/3525 3512/1/3512
+f 3512/1/3512 3525/1/3525 3521/1/3521
+f 3512/1/3512 3521/1/3521 3520/1/3520
+f 3511/1/3511 3512/1/3512 3520/1/3520
+f 3520/1/3520 3521/1/3521 3522/1/3522
+f 3520/1/3520 3522/1/3522 3523/1/3523
+f 3524/1/3524 3520/1/3520 3523/1/3523
+f 3524/1/3524 3523/1/3523 3572/1/3572
+f 3572/1/3572 3523/1/3523 3571/1/3571
+f 3572/1/3572 3571/1/3571 3573/1/3573
+f 3523/1/3523 3570/1/3570 3571/1/3571
+f 3570/1/3570 3477/1/3477 3571/1/3571
+f 3477/1/3477 3474/1/3474 3571/1/3571
+f 3476/1/3476 3474/1/3474 3477/1/3477
+f 3476/1/3476 3477/1/3477 3478/1/3478
+f 4759/1/4759 3476/1/3476 3478/1/3478
+f 4759/1/4759 3478/1/3478 4761/1/4761
+f 4760/1/4760 4759/1/4759 4761/1/4761
+f 4760/1/4760 4761/1/4761 4762/1/4762
+f 4760/1/4760 4762/1/4762 4763/1/4763
+f 4763/1/4763 4764/1/4764 4760/1/4760
+f 4760/1/4760 4764/1/4764 4754/1/4754
+f 4760/1/4760 4754/1/4754 4758/1/4758
+f 4758/1/4758 4754/1/4754 4753/1/4753
+f 4758/1/4758 4753/1/4753 3475/1/3475
+f 3476/1/3476 4758/1/4758 3475/1/3475
+f 3475/1/3475 4753/1/4753 4756/1/4756
+f 3475/1/3475 4756/1/4756 4755/1/4755
+f 3475/1/3475 4755/1/4755 3472/1/3472
+f 3474/1/3474 3475/1/3475 3472/1/3472
+f 3472/1/3472 4755/1/4755 4757/1/4757
+f 3472/1/3472 4757/1/4757 3469/1/3469
+f 3469/1/3469 4757/1/4757 3602/1/3602
+f 3602/1/3602 4757/1/4757 4834/1/4834
+f 4835/1/4835 3602/1/3602 4834/1/4834
+f 4835/1/4835 4834/1/4834 4837/1/4837
+f 4838/1/4838 4835/1/4835 4837/1/4837
+f 4838/1/4838 4837/1/4837 4841/1/4841
+f 4840/1/4840 4838/1/4838 4841/1/4841
+f 4840/1/4840 4841/1/4841 4733/1/4733
+f 4729/1/4729 4840/1/4840 4733/1/4733
+f 4729/1/4729 4733/1/4733 4730/1/4730
+f 4733/1/4733 4734/1/4734 4730/1/4730
+f 4730/1/4730 4734/1/4734 4732/1/4732
+f 4730/1/4730 4732/1/4732 4731/1/4731
+f 4727/1/4727 4730/1/4730 4731/1/4731
+f 4731/1/4731 4732/1/4732 3526/1/3526
+f 3518/1/3518 4731/1/4731 3526/1/3526
+f 4732/1/4732 4737/1/4737 3526/1/3526
+f 3526/1/3526 4737/1/4737 3527/1/3527
+f 3526/1/3526 3527/1/3527 3525/1/3525
+f 3525/1/3525 3527/1/3527 3528/1/3528
+f 3527/1/3527 3529/1/3529 3528/1/3528
+f 3528/1/3528 3529/1/3529 3530/1/3530
+f 3528/1/3528 3530/1/3530 3531/1/3531
+f 3521/1/3521 3528/1/3528 3531/1/3531
+f 3531/1/3531 3530/1/3530 3532/1/3532
+f 3531/1/3531 3532/1/3532 3533/1/3533
+f 3522/1/3522 3531/1/3531 3533/1/3533
+f 3522/1/3522 3533/1/3533 3568/1/3568
+f 3568/1/3568 3533/1/3533 3564/1/3564
+f 3568/1/3568 3564/1/3564 3569/1/3569
+f 3570/1/3570 3568/1/3568 3569/1/3569
+f 3569/1/3569 3564/1/3564 3479/1/3479
+f 3479/1/3479 3477/1/3477 3569/1/3569
+f 3479/1/3479 3564/1/3564 3481/1/3481
+f 3481/1/3481 3480/1/3480 3479/1/3479
+f 3479/1/3479 3480/1/3480 3478/1/3478
+f 4766/1/4766 3478/1/3478 3480/1/3480
+f 3480/1/3480 4768/1/4768 4766/1/4766
+f 4766/1/4766 4768/1/4768 4769/1/4769
+f 4767/1/4767 4766/1/4766 4769/1/4769
+f 4767/1/4767 4769/1/4769 4770/1/4770
+f 4771/1/4771 4767/1/4767 4770/1/4770
+f 4771/1/4771 4770/1/4770 4778/1/4778
+f 4807/1/4807 4771/1/4771 4778/1/4778
+f 4807/1/4807 4778/1/4778 3536/1/3536
+f 4740/1/4740 4807/1/4807 3536/1/3536
+f 3527/1/3527 4740/1/4740 3536/1/3536
+f 4740/1/4740 4809/1/4809 4807/1/4807
+f 4808/1/4808 4807/1/4807 4809/1/4809
+f 4808/1/4808 4809/1/4809 4763/1/4763
+f 4745/1/4745 4809/1/4809 4740/1/4740
+f 4739/1/4739 4745/1/4745 4740/1/4740
+f 4737/1/4737 4739/1/4739 4740/1/4740
+f 4738/1/4738 4739/1/4739 4737/1/4737
+f 4736/1/4736 4738/1/4738 4737/1/4737
+f 4736/1/4736 4742/1/4742 4738/1/4738
+f 4742/1/4742 4743/1/4743 4738/1/4738
+f 4748/1/4748 4743/1/4743 4742/1/4742
+f 4741/1/4741 4748/1/4748 4742/1/4742
+f 4751/1/4751 4748/1/4748 4741/1/4741
+f 4844/1/4844 4751/1/4751 4741/1/4741
+f 4844/1/4844 4741/1/4741 4735/1/4735
+f 4734/1/4734 4844/1/4844 4735/1/4735
+f 4841/1/4841 4844/1/4844 4734/1/4734
+f 4735/1/4735 4741/1/4741 4736/1/4736
+f 4735/1/4735 4736/1/4736 4732/1/4732
+f 4837/1/4837 4751/1/4751 4844/1/4844
+f 4751/1/4751 4749/1/4749 4748/1/4748
+f 4749/1/4749 4750/1/4750 4748/1/4748
+f 4748/1/4748 4750/1/4750 4746/1/4746
+f 4750/1/4750 4752/1/4752 4746/1/4746
+f 4746/1/4746 4752/1/4752 4747/1/4747
+f 4746/1/4746 4747/1/4747 4743/1/4743
+f 4743/1/4743 4747/1/4747 4744/1/4744
+f 4743/1/4743 4744/1/4744 4739/1/4739
+f 4747/1/4747 4754/1/4754 4744/1/4744
+f 4752/1/4752 4753/1/4753 4747/1/4747
+f 4750/1/4750 4755/1/4755 4752/1/4752
+f 4749/1/4749 4755/1/4755 4750/1/4750
+f 4834/1/4834 4749/1/4749 4751/1/4751
+f 4748/1/4748 4746/1/4746 4743/1/4743
+f 4741/1/4741 4742/1/4742 4736/1/4736
+f 4738/1/4738 4743/1/4743 4739/1/4739
+f 4739/1/4739 4744/1/4744 4745/1/4745
+f 4744/1/4744 4764/1/4764 4745/1/4745
+f 4745/1/4745 4764/1/4764 4809/1/4809
+f 3536/1/3536 4778/1/4778 4781/1/4781
+f 3536/1/3536 4781/1/4781 3537/1/3537
+f 3537/1/3537 3534/1/3534 3536/1/3536
+f 3529/1/3529 3536/1/3536 3534/1/3534
+f 3537/1/3537 3535/1/3535 3534/1/3534
+f 3530/1/3530 3534/1/3534 3535/1/3535
+f 3535/1/3535 3537/1/3537 3538/1/3538
+f 3535/1/3535 3538/1/3538 3539/1/3539
+f 3539/1/3539 3540/1/3540 3535/1/3535
+f 3532/1/3532 3535/1/3535 3540/1/3540
+f 3567/1/3567 3532/1/3532 3540/1/3540
+f 3567/1/3567 3540/1/3540 3564/1/3564
+f 3564/1/3564 3540/1/3540 3563/1/3563
+f 3540/1/3540 3561/1/3561 3563/1/3563
+f 3563/1/3563 3561/1/3561 3560/1/3560
+f 3563/1/3563 3560/1/3560 3481/1/3481
+f 3562/1/3562 3481/1/3481 3560/1/3560
+f 3562/1/3562 3560/1/3560 3558/1/3558
+f 3562/1/3562 3558/1/3558 3483/1/3483
+f 3558/1/3558 3556/1/3556 3483/1/3483
+f 3483/1/3483 3556/1/3556 3484/1/3484
+f 3482/1/3482 3483/1/3483 3484/1/3484
+f 3482/1/3482 3484/1/3484 3485/1/3485
+f 4802/1/4802 3482/1/3482 3485/1/3485
+f 4802/1/4802 3485/1/3485 4801/1/4801
+f 4801/1/4801 4793/1/4793 4802/1/4802
+f 4802/1/4802 4793/1/4793 4787/1/4787
+f 4802/1/4802 4787/1/4787 4803/1/4803
+f 4803/1/4803 4787/1/4787 4785/1/4785
+f 4803/1/4803 4785/1/4785 4804/1/4804
+f 3482/1/3482 4803/1/4803 4804/1/4804
+f 4804/1/4804 3480/1/3480 3482/1/3482
+f 4774/1/4774 3480/1/3480 4804/1/4804
+f 4804/1/4804 4775/1/4775 4774/1/4774
+f 4774/1/4774 4775/1/4775 4772/1/4772
+f 4774/1/4774 4772/1/4772 4768/1/4768
+f 4775/1/4775 4776/1/4776 4772/1/4772
+f 4773/1/4773 4772/1/4772 4776/1/4776
+f 4773/1/4773 4776/1/4776 4777/1/4777
+f 4770/1/4770 4773/1/4773 4777/1/4777
+f 4777/1/4777 4776/1/4776 4779/1/4779
+f 4777/1/4777 4779/1/4779 4780/1/4780
+f 4781/1/4781 4777/1/4777 4780/1/4780
+f 4779/1/4779 3543/1/3543 4780/1/4780
+f 3543/1/3543 3541/1/3541 4780/1/4780
+f 3537/1/3537 4780/1/4780 3541/1/3541
+f 3543/1/3543 3544/1/3544 3541/1/3541
+f 3544/1/3544 3542/1/3542 3541/1/3541
+f 3538/1/3538 3541/1/3541 3542/1/3542
+f 3538/1/3538 3542/1/3542 3555/1/3555
+f 3555/1/3555 3542/1/3542 3554/1/3554
+f 3557/1/3557 3555/1/3555 3554/1/3554
+f 3557/1/3557 3554/1/3554 3556/1/3556
+f 3554/1/3554 3553/1/3553 3556/1/3556
+f 3556/1/3556 3553/1/3553 3552/1/3552
+f 3549/1/3549 3552/1/3552 3553/1/3553
+f 3549/1/3549 3551/1/3551 3552/1/3552
+f 3551/1/3551 3565/1/3565 3552/1/3552
+f 3565/1/3565 3484/1/3484 3552/1/3552
+f 3565/1/3565 3566/1/3566 3484/1/3484
+f 3484/1/3484 3566/1/3566 3486/1/3486
+f 3576/1/3576 3486/1/3486 3566/1/3566
+f 3550/1/3550 3576/1/3576 3566/1/3566
+f 3550/1/3550 3566/1/3566 3551/1/3551
+f 3548/1/3548 3550/1/3550 3551/1/3551
+f 3575/1/3575 3550/1/3550 3548/1/3548
+f 3547/1/3547 3575/1/3575 3548/1/3548
+f 3547/1/3547 3548/1/3548 3545/1/3545
+f 3546/1/3546 3547/1/3547 3545/1/3545
+f 3546/1/3546 3545/1/3545 3544/1/3544
+f 4789/1/4789 3546/1/3546 3544/1/3544
+f 4790/1/4790 3546/1/3546 4789/1/4789
+f 4790/1/4790 4789/1/4789 4788/1/4788
+f 4791/1/4791 4790/1/4790 4788/1/4788
+f 4791/1/4791 4788/1/4788 4792/1/4792
+f 4794/1/4794 4791/1/4791 4792/1/4792
+f 4794/1/4794 4792/1/4792 4793/1/4793
+f 4793/1/4793 4792/1/4792 4786/1/4786
+f 4796/1/4796 4791/1/4791 4794/1/4794
+f 4800/1/4800 4796/1/4796 4794/1/4794
+f 4800/1/4800 4794/1/4794 4801/1/4801
+f 4799/1/4799 4796/1/4796 4800/1/4800
+f 3485/1/3485 4799/1/4799 4800/1/4800
+f 4799/1/4799 3485/1/3485 4806/1/4806
+f 4806/1/4806 4798/1/4798 4799/1/4799
+f 4806/1/4806 4805/1/4805 4798/1/4798
+f 4805/1/4805 4797/1/4797 4798/1/4798
+f 4798/1/4798 4797/1/4797 4795/1/4795
+f 4798/1/4798 4795/1/4795 4796/1/4796
+f 4797/1/4797 4790/1/4790 4795/1/4795
+f 4797/1/4797 4967/1/4967 4790/1/4790
+f 4966/1/4966 4967/1/4967 4797/1/4797
+f 4964/1/4964 4967/1/4967 4966/1/4966
+f 4965/1/4965 4964/1/4964 4966/1/4966
+f 4965/1/4965 4966/1/4966 4805/1/4805
+f 4962/1/4962 4964/1/4964 4965/1/4965
+f 3487/1/3487 4962/1/4962 4965/1/4965
+f 4806/1/4806 3487/1/3487 4965/1/4965
+f 4960/1/4960 4962/1/4962 3487/1/3487
+f 3489/1/3489 4960/1/4960 3487/1/3487
+f 3487/1/3487 3488/1/3488 3489/1/3489
+f 3489/1/3489 3488/1/3488 3490/1/3490
+f 3489/1/3489 3490/1/3490 3491/1/3491
+f 4956/1/4956 3489/1/3489 3491/1/3491
+f 3491/1/3491 4954/1/4954 4956/1/4956
+f 4954/1/4954 4955/1/4955 4956/1/4956
+f 4956/1/4956 4955/1/4955 4957/1/4957
+f 4957/1/4957 4955/1/4955 4959/1/4959
+f 4957/1/4957 4959/1/4959 4960/1/4960
+f 4960/1/4960 4959/1/4959 4961/1/4961
+f 4959/1/4959 4963/1/4963 4961/1/4961
+f 4961/1/4961 4963/1/4963 4964/1/4964
+f 4959/1/4959 4958/1/4958 4963/1/4963
+f 4958/1/4958 4811/1/4811 4963/1/4963
+f 4963/1/4963 4811/1/4811 4810/1/4810
+f 4963/1/4963 4810/1/4810 4967/1/4967
+f 4967/1/4967 4810/1/4810 3546/1/3546
+f 4811/1/4811 4812/1/4812 4810/1/4810
+f 4812/1/4812 4813/1/4813 4810/1/4810
+f 4810/1/4810 4813/1/4813 3547/1/3547
+f 4812/1/4812 4814/1/4814 4813/1/4813
+f 4814/1/4814 4815/1/4815 4813/1/4813
+f 4813/1/4813 4815/1/4815 3575/1/3575
+f 4815/1/4815 4827/1/4827 3575/1/3575
+f 3575/1/3575 4827/1/4827 3576/1/3576
+f 4827/1/4827 4828/1/4828 3576/1/3576
+f 4827/1/4827 3488/1/3488 4828/1/4828
+f 3486/1/3486 4828/1/4828 3488/1/3488
+f 4824/1/4824 3488/1/3488 4827/1/4827
+f 4815/1/4815 4824/1/4824 4827/1/4827
+f 4820/1/4820 4824/1/4824 4815/1/4815
+f 4820/1/4820 4823/1/4823 4824/1/4824
+f 4823/1/4823 3490/1/3490 4824/1/4824
+f 4822/1/4822 3490/1/3490 4823/1/4823
+f 4819/1/4819 4822/1/4822 4823/1/4823
+f 4821/1/4821 4822/1/4822 4819/1/4819
+f 4818/1/4818 4821/1/4821 4819/1/4819
+f 4818/1/4818 4819/1/4819 4816/1/4816
+f 4817/1/4817 4818/1/4818 4816/1/4816
+f 4817/1/4817 4816/1/4816 4811/1/4811
+f 4833/1/4833 4818/1/4818 4817/1/4817
+f 4951/1/4951 4833/1/4833 4817/1/4817
+f 4951/1/4951 4817/1/4817 4958/1/4958
+f 4955/1/4955 4951/1/4951 4958/1/4958
+f 4952/1/4952 4951/1/4951 4955/1/4955
+f 4948/1/4948 4951/1/4951 4952/1/4952
+f 4953/1/4953 4948/1/4948 4952/1/4952
+f 4953/1/4953 4952/1/4952 4954/1/4954
+f 4949/1/4949 4948/1/4948 4953/1/4953
+f 3491/1/3491 4949/1/4949 4953/1/4953
+f 4949/1/4949 3491/1/3491 3493/1/3493
+f 3492/1/3492 3493/1/3493 3491/1/3491
+f 3494/1/3494 3493/1/3493 3492/1/3492
+f 4829/1/4829 3494/1/3494 3492/1/3492
+f 4829/1/4829 3492/1/3492 4826/1/4826
+f 4825/1/4825 4829/1/4829 4826/1/4826
+f 4825/1/4825 4826/1/4826 4822/1/4822
+f 4825/1/4825 4830/1/4830 4829/1/4829
+f 4831/1/4831 4830/1/4830 4825/1/4825
+f 4831/1/4831 4825/1/4825 4821/1/4821
+f 4832/1/4832 4831/1/4831 4821/1/4821
+f 4831/1/4831 4832/1/4832 4945/1/4945
+f 4945/1/4945 4832/1/4832 4833/1/4833
+f 4945/1/4945 4833/1/4833 4947/1/4947
+f 4945/1/4945 4947/1/4947 4946/1/4946
+f 4946/1/4946 3495/1/3495 4945/1/4945
+f 3494/1/3494 4945/1/4945 3495/1/3495
+f 4830/1/4830 4945/1/4945 3494/1/3494
+f 3493/1/3493 3495/1/3495 4946/1/4946
+f 4946/1/4946 4947/1/4947 3493/1/3493
+f 3493/1/3493 4947/1/4947 4948/1/4948
+f 4947/1/4947 4950/1/4950 4948/1/4948
+f 4947/1/4947 4833/1/4833 4950/1/4950
+f 4830/1/4830 4831/1/4831 4945/1/4945
+f 4826/1/4826 3492/1/3492 3490/1/3490
+f 4830/1/4830 3494/1/3494 4829/1/4829
+f 3494/1/3494 3495/1/3495 3493/1/3493
+f 3493/1/3493 4948/1/4948 4949/1/4949
+f 4948/1/4948 4950/1/4950 4951/1/4951
+f 4950/1/4950 4833/1/4833 4951/1/4951
+f 4833/1/4833 4832/1/4832 4818/1/4818
+f 4816/1/4816 4819/1/4819 4814/1/4814
+f 4819/1/4819 4820/1/4820 4814/1/4814
+f 4832/1/4832 4821/1/4821 4818/1/4818
+f 4821/1/4821 4825/1/4825 4822/1/4822
+f 4826/1/4826 3490/1/3490 4822/1/4822
+f 4819/1/4819 4823/1/4823 4820/1/4820
+f 4814/1/4814 4820/1/4820 4815/1/4815
+f 4816/1/4816 4814/1/4814 4812/1/4812
+f 4811/1/4811 4816/1/4816 4812/1/4812
+f 4958/1/4958 4817/1/4817 4811/1/4811
+f 4955/1/4955 4958/1/4958 4959/1/4959
+f 4954/1/4954 4952/1/4952 4955/1/4955
+f 4954/1/4954 3491/1/3491 4953/1/4953
+f 4956/1/4956 4957/1/4957 3489/1/3489
+f 3491/1/3491 3490/1/3490 3492/1/3492
+f 4824/1/4824 3490/1/3490 3488/1/3488
+f 3487/1/3487 3486/1/3486 3488/1/3488
+f 3486/1/3486 3487/1/3487 3485/1/3485
+f 3489/1/3489 4957/1/4957 4960/1/4960
+f 4960/1/4960 4961/1/4961 4962/1/4962
+f 4962/1/4962 4961/1/4961 4964/1/4964
+f 4964/1/4964 4963/1/4963 4967/1/4967
+f 4805/1/4805 4966/1/4966 4797/1/4797
+f 4965/1/4965 4805/1/4805 4806/1/4806
+f 3485/1/3485 3487/1/3487 4806/1/4806
+f 4799/1/4799 4798/1/4798 4796/1/4796
+f 4796/1/4796 4795/1/4795 4791/1/4791
+f 4792/1/4792 4788/1/4788 4786/1/4786
+f 4786/1/4786 4788/1/4788 4783/1/4783
+f 4786/1/4786 4783/1/4783 4784/1/4784
+f 4787/1/4787 4786/1/4786 4784/1/4784
+f 4784/1/4784 4783/1/4783 4779/1/4779
+f 4784/1/4784 4779/1/4779 4782/1/4782
+f 4785/1/4785 4784/1/4784 4782/1/4782
+f 4785/1/4785 4782/1/4782 4775/1/4775
+f 4788/1/4788 3543/1/3543 4783/1/4783
+f 4795/1/4795 4790/1/4790 4791/1/4791
+f 4788/1/4788 4789/1/4789 3543/1/3543
+f 4967/1/4967 3546/1/3546 4790/1/4790
+f 4810/1/4810 3547/1/3547 3546/1/3546
+f 3545/1/3545 3548/1/3548 3549/1/3549
+f 3545/1/3545 3549/1/3549 3542/1/3542
+f 4813/1/4813 3575/1/3575 3547/1/3547
+f 3575/1/3575 3576/1/3576 3550/1/3550
+f 3486/1/3486 3576/1/3576 4828/1/4828
+f 3551/1/3551 3566/1/3566 3565/1/3565
+f 3548/1/3548 3551/1/3551 3549/1/3549
+f 3549/1/3549 3553/1/3553 3554/1/3554
+f 3559/1/3559 3555/1/3555 3557/1/3557
+f 3559/1/3559 3557/1/3557 3558/1/3558
+f 3539/1/3539 3555/1/3555 3559/1/3559
+f 3559/1/3559 3561/1/3561 3539/1/3539
+f 3542/1/3542 3549/1/3549 3554/1/3554
+f 3544/1/3544 3545/1/3545 3542/1/3542
+f 4789/1/4789 3544/1/3544 3543/1/3543
+f 4783/1/4783 3543/1/3543 4779/1/4779
+f 4782/1/4782 4779/1/4779 4776/1/4776
+f 4769/1/4769 4772/1/4772 4773/1/4773
+f 4775/1/4775 4782/1/4782 4776/1/4776
+f 4804/1/4804 4785/1/4785 4775/1/4775
+f 4787/1/4787 4784/1/4784 4785/1/4785
+f 4793/1/4793 4786/1/4786 4787/1/4787
+f 4801/1/4801 4794/1/4794 4793/1/4793
+f 4801/1/4801 3485/1/3485 4800/1/4800
+f 4803/1/4803 3482/1/3482 4802/1/4802
+f 3485/1/3485 3484/1/3484 3486/1/3486
+f 3482/1/3482 3480/1/3480 3483/1/3483
+f 3556/1/3556 3552/1/3552 3484/1/3484
+f 3558/1/3558 3557/1/3557 3556/1/3556
+f 3558/1/3558 3560/1/3560 3559/1/3559
+f 3483/1/3483 3481/1/3481 3562/1/3562
+f 3559/1/3559 3560/1/3560 3561/1/3561
+f 3539/1/3539 3561/1/3561 3540/1/3540
+f 3539/1/3539 3538/1/3538 3555/1/3555
+f 3537/1/3537 3541/1/3541 3538/1/3538
+f 4781/1/4781 4780/1/4780 3537/1/3537
+f 4778/1/4778 4777/1/4777 4781/1/4781
+f 4808/1/4808 4771/1/4771 4807/1/4807
+f 4808/1/4808 4762/1/4762 4771/1/4771
+f 4778/1/4778 4770/1/4770 4777/1/4777
+f 4762/1/4762 4767/1/4767 4771/1/4771
+f 4762/1/4762 4765/1/4765 4767/1/4767
+f 4770/1/4770 4769/1/4769 4773/1/4773
+f 4765/1/4765 4766/1/4766 4767/1/4767
+f 4769/1/4769 4768/1/4768 4772/1/4772
+f 3480/1/3480 4774/1/4774 4768/1/4768
+f 4765/1/4765 3478/1/3478 4766/1/4766
+f 3483/1/3483 3480/1/3480 3481/1/3481
+f 3564/1/3564 3563/1/3563 3481/1/3481
+f 3533/1/3533 3567/1/3567 3564/1/3564
+f 3533/1/3533 3532/1/3532 3567/1/3567
+f 3530/1/3530 3535/1/3535 3532/1/3532
+f 3529/1/3529 3534/1/3534 3530/1/3530
+f 3527/1/3527 3536/1/3536 3529/1/3529
+f 4737/1/4737 4740/1/4740 3527/1/3527
+f 4732/1/4732 4736/1/4736 4737/1/4737
+f 4734/1/4734 4735/1/4735 4732/1/4732
+f 4733/1/4733 4841/1/4841 4734/1/4734
+f 4841/1/4841 4837/1/4837 4844/1/4844
+f 4836/1/4836 4835/1/4835 4838/1/4838
+f 4839/1/4839 4836/1/4836 4838/1/4838
+f 4837/1/4837 4834/1/4834 4751/1/4751
+f 4836/1/4836 3602/1/3602 4835/1/4835
+f 3600/1/3600 3602/1/3602 4836/1/4836
+f 4834/1/4834 4757/1/4757 4749/1/4749
+f 4757/1/4757 4755/1/4755 4749/1/4749
+f 4755/1/4755 4756/1/4756 4752/1/4752
+f 4752/1/4752 4756/1/4756 4753/1/4753
+f 4747/1/4747 4753/1/4753 4754/1/4754
+f 4744/1/4744 4754/1/4754 4764/1/4764
+f 4763/1/4763 4809/1/4809 4764/1/4764
+f 4763/1/4763 4762/1/4762 4808/1/4808
+f 4761/1/4761 4765/1/4765 4762/1/4762
+f 4758/1/4758 4759/1/4759 4760/1/4760
+f 4761/1/4761 3478/1/3478 4765/1/4765
+f 3476/1/3476 4759/1/4759 4758/1/4758
+f 3479/1/3479 3478/1/3478 3477/1/3477
+f 3475/1/3475 3474/1/3474 3476/1/3476
+f 3570/1/3570 3569/1/3569 3477/1/3477
+f 3523/1/3523 3568/1/3568 3570/1/3570
+f 3523/1/3523 3522/1/3522 3568/1/3568
+f 3521/1/3521 3531/1/3531 3522/1/3522
+f 3525/1/3525 3528/1/3528 3521/1/3521
+f 3518/1/3518 3526/1/3526 3525/1/3525
+f 3514/1/3514 3517/1/3517 3518/1/3518
+f 3514/1/3514 3513/1/3513 3517/1/3517
+f 3513/1/3513 3515/1/3515 3517/1/3517
+f 3506/1/3506 3502/1/3502 3510/1/3510
+f 3515/1/3515 3513/1/3513 3516/1/3516
+f 3517/1/3517 3515/1/3515 4722/1/4722
+f 3519/1/3519 3517/1/3517 4722/1/4722
+f 3518/1/3518 3517/1/3517 3519/1/3519
+f 4727/1/4727 4731/1/4731 3518/1/3518
+f 4726/1/4726 4730/1/4730 4727/1/4727
+f 4845/1/4845 4728/1/4728 4725/1/4725
+f 4726/1/4726 4729/1/4729 4730/1/4730
+f 4843/1/4843 4840/1/4840 4729/1/4729
+f 4839/1/4839 4838/1/4838 4840/1/4840
+f 3601/1/3601 4836/1/4836 4839/1/4839
+f 3601/1/3601 3600/1/3600 4836/1/4836
+f 3469/1/3469 3602/1/3602 3600/1/3600
+f 3471/1/3471 3472/1/3472 3469/1/3469
+f 3474/1/3474 3472/1/3472 3471/1/3471
+f 3571/1/3571 3474/1/3474 3573/1/3573
+f 3572/1/3572 3573/1/3573 3574/1/3574
+f 3574/1/3574 3524/1/3524 3572/1/3572
+f 3511/1/3511 3520/1/3520 3524/1/3524
+f 3509/1/3509 3512/1/3512 3511/1/3511
+f 3509/1/3509 3506/1/3506 3510/1/3510
+f 3508/1/3508 3507/1/3507 3504/1/3504
+f 3504/1/3504 3505/1/3505 3501/1/3501
+f 3506/1/3506 3503/1/3503 3502/1/3502
+f 3500/1/3500 3501/1/3501 3473/1/3473
+f 3498/1/3498 3499/1/3499 3502/1/3502
+f 3496/1/3496 3473/1/3473 3470/1/3470
+f 3497/1/3497 4715/1/4715 3499/1/3499
+f 4712/1/4712 4714/1/4714 4713/1/4713
+f 4718/1/4718 3499/1/3499 4715/1/4715
+f 4723/1/4723 4718/1/4718 4717/1/4717
+f 4678/1/4678 4717/1/4717 4719/1/4719
+f 4721/1/4721 4678/1/4678 3606/1/3606
+f 4724/1/4724 4721/1/4721 4725/1/4725
+f 4845/1/4845 4725/1/4725 3605/1/3605
+f 4845/1/4845 3598/1/3598 4728/1/4728
+f 3597/1/3597 4842/1/4842 3598/1/3598
+f 3596/1/3596 3599/1/3599 3597/1/3597
+f 3594/1/3594 3595/1/3595 3596/1/3596
+f 3581/1/3581 3595/1/3595 3594/1/3594
+f 3594/1/3594 3591/1/3591 3582/1/3582
+f 3592/1/3592 3590/1/3590 3593/1/3593
+f 3591/1/3591 3587/1/3587 3582/1/3582
+f 3590/1/3590 3603/1/3603 3589/1/3589
+f 3582/1/3582 3587/1/3587 3583/1/3583
+f 3586/1/3586 3589/1/3589 3588/1/3588
+f 3588/1/3588 3604/1/3604 3429/1/3429
+f 3585/1/3585 3435/1/3435 3434/1/3434
+f 3431/1/3431 3429/1/3429 3427/1/3427
+f 3433/1/3433 3430/1/3430 3432/1/3432
+f 3425/1/3425 3427/1/3427 3421/1/3421
+f 3426/1/3426 3420/1/3420 3424/1/3424
+f 3437/1/3437 3432/1/3432 3426/1/3426
+f 3436/1/3436 3432/1/3432 3437/1/3437
+f 3440/1/3440 3434/1/3434 3436/1/3436
+f 3579/1/3579 3584/1/3584 3440/1/3440
+f 3580/1/3580 3584/1/3584 3579/1/3579
+f 3582/1/3582 3583/1/3583 3580/1/3580
+f 3594/1/3594 3582/1/3582 3581/1/3581
+f 3465/1/3465 3595/1/3595 3581/1/3581
+f 3466/1/3466 3468/1/3468 3465/1/3465
+f 3470/1/3470 3466/1/3466 3467/1/3467
+f 4713/1/4713 3467/1/3467 4712/1/4712
+f 4712/1/4712 4685/1/4685 4714/1/4714
+f 4683/1/4683 4680/1/4680 4684/1/4684
+f 4683/1/4683 4682/1/4682 4680/1/4680
+f 4716/1/4716 4685/1/4685 4679/1/4679
+f 4677/1/4677 4679/1/4679 4676/1/4676
+f 4681/1/4681 4680/1/4680 4682/1/4682
+f 4673/1/4673 4676/1/4676 4671/1/4671
+f 3428/1/3428 4673/1/4673 4674/1/4674
+f 3419/1/3419 3428/1/3428 4674/1/4674
+f 3421/1/3421 3419/1/3419 3418/1/3418
+f 3422/1/3422 3418/1/3418 3417/1/3417
+f 3423/1/3423 3417/1/3417 3416/1/3416
+f 3413/1/3413 3415/1/3415 3412/1/3412
+f 3406/1/3406 3411/1/3411 3407/1/3407
+f 3456/1/3456 3406/1/3406 3408/1/3408
+f 3455/1/3455 3416/1/3416 3456/1/3456
+f 3448/1/3448 3447/1/3447 3455/1/3455
+f 3446/1/3446 3447/1/3447 3448/1/3448
+f 3442/1/3442 3443/1/3443 3446/1/3446
+f 3439/1/3439 3441/1/3441 3442/1/3442
+f 3444/1/3444 3438/1/3438 3439/1/3439
+f 3577/1/3577 3438/1/3438 3444/1/3444
+f 3463/1/3463 3578/1/3578 3577/1/3577
+f 3464/1/3464 3463/1/3463 3461/1/3461
+f 4693/1/4693 3464/1/3464 3461/1/3461
+f 4711/1/4711 4693/1/4693 4684/1/4684
+f 4691/1/4691 4683/1/4683 4684/1/4684
+f 4672/1/4672 4682/1/4682 4683/1/4683
+f 4686/1/4686 4668/1/4668 4672/1/4672
+f 4687/1/4687 4692/1/4692 4688/1/4688
+f 4690/1/4690 4668/1/4668 4686/1/4686
+f 4670/1/4670 4668/1/4668 4667/1/4667
+f 4665/1/4665 4670/1/4670 4667/1/4667
+f 4669/1/4669 4665/1/4665 4664/1/4664
+f 4661/1/4661 4662/1/4662 4659/1/4659
+f 4666/1/4666 4663/1/4663 4705/1/4705
+f 4708/1/4708 4664/1/4664 4666/1/4666
+f 3414/1/3414 4708/1/4708 2790/1/2790
+f 3412/1/3412 2790/1/2790 3410/1/3410
+f 3409/1/3409 3410/1/3410 3402/1/3402
+f 3401/1/3401 3402/1/3402 3399/1/3399
+f 3397/1/3397 3399/1/3399 3394/1/3394
+f 3398/1/3398 3404/1/3404 3397/1/3397
+f 3405/1/3405 3404/1/3404 3398/1/3398
+f 3453/1/3453 3457/1/3457 3405/1/3405
+f 3449/1/3449 3452/1/3452 3453/1/3453
+f 3451/1/3451 3445/1/3445 3449/1/3449
+f 3450/1/3450 3445/1/3445 3451/1/3451
+f 3460/1/3460 3462/1/3462 3450/1/3450
+f 4688/1/4688 3460/1/3460 4689/1/4689
+f 4710/1/4710 4689/1/4689 4694/1/4694
+f 4694/1/4694 4658/1/4658 4710/1/4710
+f 4659/1/4659 4658/1/4658 4655/1/4655
+f 4652/1/4652 4657/1/4657 4655/1/4655
+f 4652/1/4652 4651/1/4651 4656/1/4656
+f 4653/1/4653 4654/1/4654 4650/1/4650
+f 4654/1/4654 3459/1/3459 3458/1/3458
+f 3458/1/3458 3454/1/3454 3395/1/3395
+f 3395/1/3395 3396/1/3396 3390/1/3390
+f 3390/1/3390 3393/1/3393 3388/1/3388
+f 3388/1/3388 3392/1/3392 3391/1/3391
+f 3392/1/3392 3400/1/3400 3391/1/3391
+f 3400/1/3400 3403/1/3403 3609/1/3609
+f 3609/1/3609 3607/1/3607 3608/1/3608
+f 3610/1/3610 3611/1/3611 3616/1/3616
+f 3386/1/3386 3610/1/3610 3616/1/3616
+f 3387/1/3387 3386/1/3386 3383/1/3383
+f 3384/1/3384 3383/1/3383 3380/1/3380
+f 3381/1/3381 3382/1/3382 3378/1/3378
+f 4210/1/4210 4241/1/4241 4233/1/4233
+f 3378/1/3378 3618/1/3618 3379/1/3379
+f 4241/1/4241 3619/1/3619 4240/1/4240
+f 3617/1/3617 3614/1/3614 3618/1/3618
+f 3619/1/3619 3613/1/3613 3620/1/3620
+f 3615/1/3615 3612/1/3612 3614/1/3614
+f 3613/1/3613 2787/1/2787 3620/1/3620
+f 3608/1/3608 2785/1/2785 3612/1/3612
+f 2787/1/2787 2779/1/2779 2776/1/2776
+f 2779/1/2779 2780/1/2780 2776/1/2776
+f 2776/1/2776 2780/1/2780 2778/1/2778
+f 2788/1/2788 2786/1/2786 2785/1/2785
+f 2779/1/2779 4707/1/4707 2780/1/2780
+f 2789/1/2789 4704/1/4704 2786/1/2786
+f 4704/1/4704 4660/1/4660 4703/1/4703
+f 4703/1/4703 4701/1/4701 4702/1/4702
+f 4707/1/4707 4706/1/4706 2780/1/2780
+f 4702/1/4702 2770/1/2770 2782/1/2782
+f 2781/1/2781 2783/1/2783 2784/1/2784
+f 2780/1/2780 2781/1/2781 2778/1/2778
+f 2776/1/2776 2778/1/2778 2772/1/2772
+f 2787/1/2787 2776/1/2776 2791/1/2791
+f 4239/1/4239 2791/1/2791 4237/1/4237
+f 4234/1/4234 4237/1/4237 4235/1/4235
+f 4231/1/4231 4235/1/4235 4196/1/4196
+f 4197/1/4197 4196/1/4196 4194/1/4194
+f 4199/1/4199 4203/1/4203 4197/1/4197
+f 4202/1/4202 4204/1/4204 4199/1/4199
+f 4206/1/4206 4207/1/4207 4202/1/4202
+f 3380/1/3380 3377/1/3377 4206/1/4206
+f 3385/1/3385 3384/1/3384 3380/1/3380
+f 4211/1/4211 3389/1/3389 3385/1/3385
+f 4696/1/4696 4213/1/4213 4211/1/4211
+f 4695/1/4695 4651/1/4651 4696/1/4696
+f 4695/1/4695 4699/1/4699 4700/1/4700
+f 4702/1/4702 4699/1/4699 2770/1/2770
+f 4697/1/4697 4698/1/4698 4709/1/4709
+f 2769/1/2769 2767/1/2767 2770/1/2770
+f 2765/1/2765 4698/1/4698 2757/1/2757
+f 2766/1/2766 2764/1/2764 2767/1/2767
+f 2768/1/2768 2764/1/2764 2762/1/2762
+f 2759/1/2759 2761/1/2761 2762/1/2762
+f 2759/1/2759 2754/1/2754 2756/1/2756
+f 2763/1/2763 2757/1/2757 2758/1/2758
+f 2757/1/2757 4212/1/4212 2755/1/2755
+f 2755/1/2755 4205/1/4205 4200/1/4200
+f 4200/1/4200 4198/1/4198 4195/1/4195
+f 4195/1/4195 4193/1/4193 4191/1/4191
+f 4191/1/4191 4192/1/4192 4185/1/4185
+f 4192/1/4192 4186/1/4186 4185/1/4185
+f 4186/1/4186 4236/1/4236 4177/1/4177
+f 4177/1/4177 4178/1/4178 4176/1/4176
+f 4180/1/4180 4174/1/4174 4179/1/4179
+f 4183/1/4183 4180/1/4180 4179/1/4179
+f 4188/1/4188 4183/1/4183 4187/1/4187
+f 4190/1/4190 4187/1/4187 4057/1/4057
+f 4189/1/4189 4184/1/4184 4182/1/4182
+f 4218/1/4218 4220/1/4220 4222/1/4222
+f 4182/1/4182 4219/1/4219 4215/1/4215
+f 4220/1/4220 4173/1/4173 4221/1/4221
+f 4181/1/4181 4172/1/4172 4219/1/4219
+f 4173/1/4173 4170/1/4170 4167/1/4167
+f 4175/1/4175 4171/1/4171 4172/1/4172
+f 4170/1/4170 4168/1/4168 4167/1/4167
+f 4176/1/4176 2794/1/2794 4171/1/4171
+f 4168/1/4168 2796/1/2796 2800/1/2800
+f 2796/1/2796 2798/1/2798 2800/1/2800
+f 2800/1/2800 2798/1/2798 2801/1/2801
+f 2792/1/2792 2793/1/2793 2794/1/2794
+f 2796/1/2796 2795/1/2795 2798/1/2798
+f 2777/1/2777 2773/1/2773 2793/1/2793
+f 2773/1/2773 2774/1/2774 2797/1/2797
+f 2797/1/2797 2775/1/2775 2804/1/2804
+f 2795/1/2795 2799/1/2799 2798/1/2798
+f 2804/1/2804 2806/1/2806 2802/1/2802
+f 2803/1/2803 2807/1/2807 2838/1/2838
+f 2798/1/2798 2803/1/2803 2801/1/2801
+f 2800/1/2800 2801/1/2801 2837/1/2837
+f 4168/1/4168 2800/1/2800 4084/1/4084
+f 4169/1/4169 4084/1/4084 4080/1/4080
+f 4227/1/4227 4080/1/4080 4079/1/4079
+f 4228/1/4228 4079/1/4079 4073/1/4073
+f 4229/1/4229 4073/1/4073 4072/1/4072
+f 4059/1/4059 4226/1/4226 4229/1/4229
+f 4230/1/4230 4226/1/4226 4059/1/4059
+f 4217/1/4217 4223/1/4223 4230/1/4230
+f 4054/1/4054 4216/1/4216 4217/1/4217
+f 4057/1/4057 4214/1/4214 4054/1/4054
+f 4056/1/4056 4190/1/4190 4057/1/4057
+f 2749/1/2749 4201/1/4201 4056/1/4056
+f 2750/1/2750 2751/1/2751 2749/1/2749
+f 2752/1/2752 2754/1/2754 2750/1/2750
+f 2752/1/2752 2805/1/2805 2760/1/2760
+f 2804/1/2804 2805/1/2805 2806/1/2806
+f 2753/1/2753 2748/1/2748 2810/1/2810
+f 2808/1/2808 2809/1/2809 2806/1/2806
+f 2811/1/2811 2748/1/2748 2747/1/2747
+f 2812/1/2812 2815/1/2815 2809/1/2809
+f 2821/1/2821 2815/1/2815 2817/1/2817
+f 2816/1/2816 2819/1/2819 2817/1/2817
+f 2816/1/2816 2740/1/2740 2818/1/2818
+f 2813/1/2813 2747/1/2747 2814/1/2814
+f 2747/1/2747 2745/1/2745 2743/1/2743
+f 2743/1/2743 2746/1/2746 2744/1/2744
+f 2744/1/2744 4055/1/4055 4058/1/4058
+f 4058/1/4058 4060/1/4060 4061/1/4061
+f 4061/1/4061 4070/1/4070 4065/1/4065
+f 4070/1/4070 4071/1/4071 4065/1/4065
+f 4071/1/4071 4074/1/4074 4075/1/4075
+f 4075/1/4075 4078/1/4078 4077/1/4077
+f 4068/1/4068 4076/1/4076 4069/1/4069
+f 4066/1/4066 4068/1/4068 4069/1/4069
+f 4063/1/4063 4066/1/4066 4064/1/4064
+f 4062/1/4062 4064/1/4064 2885/1/2885
+f 2886/1/2886 4067/1/4067 4242/1/4242
+f 2878/1/2878 2866/1/2866 2856/1/2856
+f 4242/1/4242 2880/1/2880 2879/1/2879
+f 2866/1/2866 4088/1/4088 2864/1/2864
+f 4166/1/4166 4164/1/4164 2880/1/2880
+f 4088/1/4088 4087/1/4087 2865/1/2865
+f 4165/1/4165 4083/1/4083 4164/1/4164
+f 4087/1/4087 4085/1/4085 2865/1/2865
+f 4077/1/4077 4082/1/4082 4083/1/4083
+f 4085/1/4085 2835/1/2835 4086/1/4086
+f 2835/1/2835 2833/1/2833 4086/1/4086
+f 4086/1/4086 2833/1/2833 4101/1/4101
+f 4081/1/4081 2834/1/2834 4082/1/4082
+f 2835/1/2835 2830/1/2830 2833/1/2833
+f 2836/1/2836 2832/1/2832 2834/1/2834
+f 2832/1/2832 2831/1/2831 2827/1/2827
+f 2827/1/2827 2822/1/2822 2825/1/2825
+f 2830/1/2830 2828/1/2828 2833/1/2833
+f 2825/1/2825 2826/1/2826 2829/1/2829
+f 4103/1/4103 4107/1/4107 4104/1/4104
+f 2833/1/2833 4103/1/4103 4101/1/4101
+f 4086/1/4086 4101/1/4101 4100/1/4100
+f 4085/1/4085 4086/1/4086 2868/1/2868
+f 2863/1/2863 2868/1/2868 2860/1/2860
+f 2859/1/2859 2860/1/2860 2858/1/2858
+f 2853/1/2853 2858/1/2858 2851/1/2851
+f 2849/1/2849 2851/1/2851 2850/1/2850
+f 2848/1/2848 2852/1/2852 2849/1/2849
+f 2847/1/2847 2854/1/2854 2848/1/2848
+f 2884/1/2884 2883/1/2883 2847/1/2847
+f 2885/1/2885 2882/1/2882 2884/1/2884
+f 2735/1/2735 4062/1/4062 2885/1/2885
+f 2734/1/2734 2739/1/2739 2735/1/2735
+f 2737/1/2737 2738/1/2738 2734/1/2734
+f 2741/1/2741 2740/1/2740 2737/1/2737
+f 2741/1/2741 2824/1/2824 2823/1/2823
+f 2825/1/2825 2824/1/2824 2826/1/2826
+f 2742/1/2742 2733/1/2733 2839/1/2839
+f 2841/1/2841 2842/1/2842 2826/1/2826
+f 2840/1/2840 2733/1/2733 2731/1/2731
+f 2843/1/2843 4105/1/4105 2842/1/2842
+f 4102/1/4102 4105/1/4105 4106/1/4106
+f 4109/1/4109 4108/1/4108 4106/1/4106
+f 4109/1/4109 2728/1/2728 4113/1/4113
+f 4163/1/4163 2731/1/2731 4110/1/4110
+f 2731/1/2731 2732/1/2732 2729/1/2729
+f 2729/1/2729 2736/1/2736 2730/1/2730
+f 2730/1/2730 2846/1/2846 2844/1/2844
+f 2844/1/2844 2845/1/2845 2640/1/2640
+f 2640/1/2640 2639/1/2639 2636/1/2636
+f 2639/1/2639 2638/1/2638 2636/1/2636
+f 2638/1/2638 2861/1/2861 2633/1/2633
+f 2633/1/2633 2867/1/2867 2870/1/2870
+f 2632/1/2632 2634/1/2634 2635/1/2635
+f 2637/1/2637 2632/1/2632 2635/1/2635
+f 2641/1/2641 2637/1/2637 2643/1/2643
+f 2644/1/2644 2643/1/2643 2645/1/2645
+f 2646/1/2646 2642/1/2642 2647/1/2647
+f 2656/1/2656 2658/1/2658 2660/1/2660
+f 2647/1/2647 2657/1/2657 2652/1/2652
+f 2658/1/2658 2666/1/2666 2663/1/2663
+f 2877/1/2877 2874/1/2874 2657/1/2657
+f 2666/1/2666 2875/1/2875 2667/1/2667
+f 2873/1/2873 2872/1/2872 2874/1/2874
+f 2875/1/2875 2876/1/2876 2667/1/2667
+f 2870/1/2870 2871/1/2871 2872/1/2872
+f 2876/1/2876 4091/1/4091 4092/1/4092
+f 4091/1/4091 4094/1/4094 4092/1/4092
+f 4092/1/4092 4094/1/4094 4136/1/4136
+f 2869/1/2869 4090/1/4090 2871/1/2871
+f 4091/1/4091 4093/1/4093 4094/1/4094
+f 4089/1/4089 4097/1/4097 4090/1/4090
+f 4097/1/4097 4099/1/4099 4095/1/4095
+f 4095/1/4095 4111/1/4111 4114/1/4114
+f 4093/1/4093 4096/1/4096 4094/1/4094
+f 4114/1/4114 4121/1/4121 4162/1/4162
+f 4135/1/4135 4127/1/4127 4128/1/4128
+f 4094/1/4094 4135/1/4135 4136/1/4136
+f 4092/1/4092 4136/1/4136 4137/1/4137
+f 2876/1/2876 4092/1/4092 2673/1/2673
+f 2668/1/2668 2673/1/2673 2671/1/2671
+f 2669/1/2669 2671/1/2671 2672/1/2672
+f 2670/1/2670 2672/1/2672 2677/1/2677
+f 2678/1/2678 2677/1/2677 2679/1/2679
+f 2682/1/2682 2662/1/2662 2678/1/2678
+f 2661/1/2661 2662/1/2662 2682/1/2682
+f 2654/1/2654 2659/1/2659 2661/1/2661
+f 2649/1/2649 2653/1/2653 2654/1/2654
+f 2645/1/2645 2648/1/2648 2649/1/2649
+f 2650/1/2650 2644/1/2644 2645/1/2645
+f 2725/1/2725 2726/1/2726 2650/1/2650
+f 4117/1/4117 2727/1/2727 2725/1/2725
+f 4116/1/4116 2728/1/2728 4117/1/4117
+f 4116/1/4116 4115/1/4115 4112/1/4112
+f 4114/1/4114 4115/1/4115 4121/1/4121
+f 4118/1/4118 4119/1/4119 4120/1/4120
+f 4122/1/4122 4124/1/4124 4121/1/4121
+f 4123/1/4123 4119/1/4119 4125/1/4125
+f 4126/1/4126 4129/1/4129 4124/1/4124
+f 4133/1/4133 4129/1/4129 4134/1/4134
+f 4140/1/4140 4139/1/4139 4134/1/4134
+f 4140/1/4140 4132/1/4132 4141/1/4141
+f 4130/1/4130 4125/1/4125 4131/1/4131
+f 4125/1/4125 2724/1/2724 2691/1/2691
+f 2691/1/2691 2651/1/2651 2689/1/2689
+f 2689/1/2689 2655/1/2655 2684/1/2684
+f 2684/1/2684 2683/1/2683 2685/1/2685
+f 2685/1/2685 2680/1/2680 2686/1/2686
+f 2680/1/2680 2681/1/2681 2686/1/2686
+f 2681/1/2681 2674/1/2674 2706/1/2706
+f 2706/1/2706 2675/1/2675 2712/1/2712
+f 2705/1/2705 2707/1/2707 2708/1/2708
+f 2699/1/2699 2705/1/2705 2708/1/2708
+f 2687/1/2687 2699/1/2699 2695/1/2695
+f 2688/1/2688 2695/1/2695 2694/1/2694
+f 2696/1/2696 2700/1/2700 2701/1/2701
+f 2704/1/2704 2716/1/2716 4305/1/4305
+f 2701/1/2701 2714/1/2714 2702/1/2702
+f 2716/1/2716 2715/1/2715 2719/1/2719
+f 2709/1/2709 2713/1/2713 2714/1/2714
+f 2715/1/2715 2717/1/2717 2718/1/2718
+f 2710/1/2710 2711/1/2711 2713/1/2713
+f 2717/1/2717 2720/1/2720 2718/1/2718
+f 2712/1/2712 2723/1/2723 2711/1/2711
+f 2720/1/2720 3135/1/3135 3126/1/3126
+f 3135/1/3135 3130/1/3130 3126/1/3126
+f 3126/1/3126 3130/1/3130 3127/1/3127
+f 2676/1/2676 3136/1/3136 2723/1/2723
+f 3135/1/3135 4161/1/4161 3130/1/3130
+f 3137/1/3137 4145/1/4145 3136/1/3136
+f 4145/1/4145 4144/1/4144 4146/1/4146
+f 4146/1/4146 4142/1/4142 4147/1/4147
+f 4161/1/4161 4160/1/4160 3130/1/3130
+f 4147/1/4147 4158/1/4158 4159/1/4159
+f 3129/1/3129 3131/1/3131 3128/1/3128
+f 3130/1/3130 3129/1/3129 3127/1/3127
+f 3126/1/3126 3127/1/3127 3125/1/3125
+f 2720/1/2720 3126/1/3126 2721/1/2721
+f 2722/1/2722 2721/1/2721 4303/1/4303
+f 4302/1/4302 4303/1/4303 4299/1/4299
+f 4300/1/4300 4299/1/4299 4293/1/4293
+f 4273/1/4273 4293/1/4293 4290/1/4290
+f 4271/1/4271 4272/1/4272 4273/1/4273
+f 4277/1/4277 4276/1/4276 4271/1/4271
+f 2698/1/2698 4279/1/4279 4277/1/4277
+f 2694/1/2694 2697/1/2697 2698/1/2698
+f 2693/1/2693 2688/1/2688 2694/1/2694
+f 4153/1/4153 2690/1/2690 2693/1/2693
+f 4150/1/4150 2692/1/2692 4153/1/4153
+f 4149/1/4149 4132/1/4132 4150/1/4150
+f 4149/1/4149 4148/1/4148 4143/1/4143
+f 4147/1/4147 4148/1/4148 4158/1/4158
+f 4151/1/4151 4152/1/4152 4157/1/4157
+f 4156/1/4156 3132/1/3132 4158/1/4158
+f 4155/1/4155 4152/1/4152 2891/1/2891
+f 3139/1/3139 2893/1/2893 3132/1/3132
+f 2896/1/2896 2893/1/2893 2892/1/2892
+f 2889/1/2889 2895/1/2895 2892/1/2892
+f 2889/1/2889 2888/1/2888 2894/1/2894
+f 2890/1/2890 2891/1/2891 2887/1/2887
+f 2891/1/2891 4154/1/4154 2914/1/2914
+f 2914/1/2914 4280/1/4280 4281/1/4281
+f 4281/1/4281 4274/1/4274 4282/1/4282
+f 4282/1/4282 4275/1/4275 4286/1/4286
+f 4286/1/4286 4291/1/4291 4292/1/4292
+f 4291/1/4291 4294/1/4294 4292/1/4292
+f 4294/1/4294 4297/1/4297 4298/1/4298
+f 4298/1/4298 4307/1/4307 4306/1/4306
+f 4295/1/4295 4308/1/4308 4313/1/4313
+f 4296/1/4296 4295/1/4295 4313/1/4313
+f 4287/1/4287 4296/1/4296 4288/1/4288
+f 4285/1/4285 4288/1/4288 4289/1/4289
+f 4320/1/4320 4315/1/4315 4316/1/4316
+f 4325/1/4325 4328/1/4328 4329/1/4329
+f 4316/1/4316 4317/1/4317 4319/1/4319
+f 4328/1/4328 4343/1/4343 4335/1/4335
+f 4314/1/4314 4311/1/4311 4317/1/4317
+f 4343/1/4343 4312/1/4312 4342/1/4342
+f 4310/1/4310 4309/1/4309 4311/1/4311
+f 4312/1/4312 3138/1/3138 4342/1/4342
+f 4306/1/4306 3134/1/3134 4309/1/4309
+f 3138/1/3138 2952/1/2952 2953/1/2953
+f 2952/1/2952 2949/1/2949 2953/1/2953
+f 2953/1/2953 2949/1/2949 2950/1/2950
+f 3133/1/3133 3122/1/3122 3134/1/3134
+f 2952/1/2952 2951/1/2951 2949/1/2949
+f 3124/1/3124 3123/1/3123 3122/1/3122
+f 3123/1/3123 2903/1/2903 2904/1/2904
+f 2904/1/2904 2898/1/2898 2901/1/2901
+f 2951/1/2951 2907/1/2907 2949/1/2949
+f 2901/1/2901 2905/1/2905 2906/1/2906
+f 2948/1/2948 2946/1/2946 2942/1/2942
+f 2949/1/2949 2948/1/2948 2950/1/2950
+f 2953/1/2953 2950/1/2950 2954/1/2954
+f 3138/1/3138 2953/1/2953 4344/1/4344
+f 4341/1/4341 4344/1/4344 4340/1/4340
+f 4337/1/4337 4340/1/4340 4339/1/4339
+f 4333/1/4333 4339/1/4339 4338/1/4338
+f 4332/1/4332 4338/1/4338 4361/1/4361
+f 4331/1/4331 4330/1/4330 4332/1/4332
+f 4323/1/4323 4326/1/4326 4331/1/4331
+f 4322/1/4322 4324/1/4324 4323/1/4323
+f 4289/1/4289 4318/1/4318 4322/1/4322
+f 4284/1/4284 4285/1/4285 4289/1/4289
+f 2913/1/2913 4283/1/4283 4284/1/4284
+f 2909/1/2909 2912/1/2912 2913/1/2913
+f 2900/1/2900 2888/1/2888 2909/1/2909
+f 2900/1/2900 2902/1/2902 2899/1/2899
+f 2901/1/2901 2902/1/2902 2905/1/2905
+f 2908/1/2908 2910/1/2910 2911/1/2911
+f 2947/1/2947 2943/1/2943 2905/1/2905
+f 2945/1/2945 2910/1/2910 2916/1/2916
+f 2944/1/2944 2940/1/2940 2943/1/2943
+f 2939/1/2939 2940/1/2940 2936/1/2936
+f 2933/1/2933 2934/1/2934 2936/1/2936
+f 2933/1/2933 2919/1/2919 2930/1/2930
+f 2941/1/2941 2916/1/2916 2935/1/2935
+f 2916/1/2916 2915/1/2915 2918/1/2918
+f 2918/1/2918 2917/1/2917 2921/1/2921
+f 2921/1/2921 4369/1/4369 4367/1/4367
+f 4367/1/4367 4368/1/4368 4362/1/4362
+f 4362/1/4362 4360/1/4360 4358/1/4358
+f 4360/1/4360 4354/1/4354 4358/1/4358
+f 4354/1/4354 4353/1/4353 4351/1/4351
+f 4351/1/4351 4346/1/4346 4347/1/4347
+f 4355/1/4355 4352/1/4352 4357/1/4357
+f 4359/1/4359 4355/1/4355 4357/1/4357
+f 4363/1/4363 4359/1/4359 4364/1/4364
+f 4366/1/4366 4364/1/4364 2994/1/2994
+f 4370/1/4370 4365/1/4365 4371/1/4371
+f 2998/1/2998 3001/1/3001 3000/1/3000
+f 4371/1/4371 4373/1/4373 4372/1/4372
+f 3001/1/3001 4376/1/4376 4379/1/4379
+f 4374/1/4374 4375/1/4375 4373/1/4373
+f 4376/1/4376 4377/1/4377 4378/1/4378
+f 4356/1/4356 4350/1/4350 4375/1/4375
+f 4377/1/4377 4349/1/4349 4378/1/4378
+f 4347/1/4347 4348/1/4348 4350/1/4350
+f 4349/1/4349 2963/1/2963 3121/1/3121
+f 2963/1/2963 2964/1/2964 3121/1/3121
+f 3121/1/3121 2964/1/2964 4435/1/4435
+f 4345/1/4345 2958/1/2958 4348/1/4348
+f 2963/1/2963 2959/1/2959 2964/1/2964
+f 2956/1/2956 2955/1/2955 2958/1/2958
+f 2955/1/2955 2957/1/2957 2960/1/2960
+f 2960/1/2960 2938/1/2938 2961/1/2961
+f 2959/1/2959 2962/1/2962 2964/1/2964
+f 2961/1/2961 2966/1/2966 2965/1/2965
+f 2968/1/2968 2967/1/2967 4434/1/4434
+f 2964/1/2964 2968/1/2968 4435/1/4435
+f 3121/1/3121 4435/1/4435 4431/1/4431
+f 4349/1/4349 3121/1/3121 4380/1/4380
+f 3119/1/3119 4380/1/4380 3113/1/3113
+f 3118/1/3118 3113/1/3113 3117/1/3117
+f 3003/1/3003 3117/1/3117 3005/1/3005
+f 3004/1/3004 3005/1/3005 3006/1/3006
+f 2988/1/2988 2999/1/2999 3004/1/3004
+f 2993/1/2993 2999/1/2999 2988/1/2988
+f 2992/1/2992 2997/1/2997 2993/1/2993
+f 2991/1/2991 2995/1/2995 2992/1/2992
+f 2994/1/2994 2996/1/2996 2991/1/2991
+f 2925/1/2925 4366/1/4366 2994/1/2994
+f 2923/1/2923 2922/1/2922 2925/1/2925
+f 2924/1/2924 2920/1/2920 2923/1/2923
+f 2928/1/2928 2919/1/2919 2924/1/2924
+f 2928/1/2928 2931/1/2931 2932/1/2932
+f 2961/1/2961 2931/1/2931 2966/1/2966
+f 2929/1/2929 2927/1/2927 2970/1/2970
+f 2971/1/2971 2969/1/2969 2966/1/2966
+f 2972/1/2972 2927/1/2927 2973/1/2973
+f 2974/1/2974 2976/1/2976 2969/1/2969
+f 4433/1/4433 2976/1/2976 4428/1/4428
+f 4423/1/4423 4424/1/4424 4428/1/4428
+f 4423/1/4423 2978/1/2978 4419/1/4419
+f 2975/1/2975 2973/1/2973 4422/1/4422
+f 2973/1/2973 2926/1/2926 2977/1/2977
+f 2977/1/2977 2979/1/2979 2981/1/2981
+f 2981/1/2981 2987/1/2987 2986/1/2986
+f 2986/1/2986 2989/1/2989 2990/1/2990
+f 2990/1/2990 3007/1/3007 3008/1/3008
+f 3007/1/3007 3010/1/3010 3008/1/3008
+f 3010/1/3010 3114/1/3114 3110/1/3110
+f 3110/1/3110 3112/1/3112 3108/1/3108
+f 3011/1/3011 3111/1/3111 3017/1/3017
+f 3012/1/3012 3011/1/3011 3017/1/3017
+f 3009/1/3009 3012/1/3012 3013/1/3013
+f 2984/1/2984 3013/1/3013 3014/1/3014
+f 3016/1/3016 3015/1/3015 3018/1/3018
+f 3026/1/3026 3027/1/3027 3032/1/3032
+f 3018/1/3018 3025/1/3025 3022/1/3022
+f 3027/1/3027 3033/1/3033 3034/1/3034
+f 3024/1/3024 3116/1/3116 3025/1/3025
+f 3033/1/3033 3045/1/3045 3043/1/3043
+f 3115/1/3115 3106/1/3106 3116/1/3116
+f 3045/1/3045 3046/1/3046 3043/1/3043
+f 3108/1/3108 3107/1/3107 3106/1/3106
+f 3046/1/3046 4383/1/4383 4384/1/4384
+f 4383/1/4383 4438/1/4438 4384/1/4384
+f 4384/1/4384 4438/1/4438 4441/1/4441
+f 3109/1/3109 4382/1/4382 3107/1/3107
+f 4383/1/4383 4436/1/4436 4438/1/4438
+f 4381/1/4381 4432/1/4432 4382/1/4382
+f 4432/1/4432 4429/1/4429 4430/1/4430
+f 4430/1/4430 4425/1/4425 4426/1/4426
+f 4436/1/4436 4437/1/4437 4438/1/4438
+f 4426/1/4426 4443/1/4443 4439/1/4439
+f 4440/1/4440 4442/1/4442 4447/1/4447
+f 4438/1/4438 4440/1/4440 4441/1/4441
+f 4384/1/4384 4441/1/4441 4450/1/4450
+f 3046/1/3046 4384/1/4384 3044/1/3044
+f 3042/1/3042 3044/1/3044 3047/1/3047
+f 3041/1/3041 3047/1/3047 3048/1/3048
+f 3039/1/3039 3048/1/3048 3052/1/3052
+f 3040/1/3040 3052/1/3052 3090/1/3090
+f 3038/1/3038 3036/1/3036 3040/1/3040
+f 3029/1/3029 3030/1/3030 3038/1/3038
+f 3021/1/3021 3028/1/3028 3029/1/3029
+f 3014/1/3014 3019/1/3019 3021/1/3021
+f 2985/1/2985 2984/1/2984 3014/1/3014
+f 2983/1/2983 2982/1/2982 2985/1/2985
+f 4416/1/4416 2980/1/2980 2983/1/2983
+f 4417/1/4417 2978/1/2978 4416/1/4416
+f 4417/1/4417 4420/1/4420 4421/1/4421
+f 4426/1/4426 4420/1/4420 4443/1/4443
+f 4418/1/4418 4415/1/4415 4446/1/4446
+f 4445/1/4445 4444/1/4444 4443/1/4443
+f 4458/1/4458 4415/1/4415 4414/1/4414
+f 4457/1/4457 4449/1/4449 4444/1/4444
+f 4448/1/4448 4449/1/4449 4452/1/4452
+f 4454/1/4454 4453/1/4453 4452/1/4452
+f 4454/1/4454 4412/1/4412 4413/1/4413
+f 4456/1/4456 4414/1/4414 4455/1/4455
+f 4414/1/4414 3091/1/3091 3089/1/3089
+f 3089/1/3089 3020/1/3020 3085/1/3085
+f 3085/1/3085 3088/1/3088 3084/1/3084
+f 3084/1/3084 3087/1/3087 3070/1/3070
+f 3070/1/3070 3061/1/3061 3060/1/3060
+f 3061/1/3061 3054/1/3054 3060/1/3060
+f 3054/1/3054 3051/1/3051 3053/1/3053
+f 3053/1/3053 3050/1/3050 3055/1/3055
+f 3059/1/3059 3058/1/3058 3062/1/3062
+f 3063/1/3063 3059/1/3059 3062/1/3062
+f 3068/1/3068 3063/1/3063 3069/1/3069
+f 3071/1/3071 3069/1/3069 3072/1/3072
+f 3073/1/3073 3067/1/3067 3066/1/3066
+f 3080/1/3080 3095/1/3095 3096/1/3096
+f 3066/1/3066 3092/1/3092 3079/1/3079
+f 3095/1/3095 3094/1/3094 3097/1/3097
+f 3065/1/3065 3093/1/3093 3092/1/3092
+f 3094/1/3094 3103/1/3103 3099/1/3099
+f 3064/1/3064 3057/1/3057 3093/1/3093
+f 3103/1/3103 3101/1/3101 3099/1/3099
+f 3055/1/3055 3056/1/3056 3057/1/3057
+f 3101/1/3101 4389/1/4389 4393/1/4393
+f 4389/1/4389 4390/1/4390 4393/1/4393
+f 4393/1/4393 4390/1/4390 4396/1/4396
+f 3049/1/3049 4386/1/4386 3056/1/3056
+f 4389/1/4389 4388/1/4388 4390/1/4390
+f 4385/1/4385 4387/1/4387 4386/1/4386
+f 4387/1/4387 4459/1/4459 4391/1/4391
+f 4391/1/4391 4400/1/4400 4397/1/4397
+f 4388/1/4388 4392/1/4392 4390/1/4390
+f 4397/1/4397 4399/1/4399 4394/1/4394
+f 4395/1/4395 4398/1/4398 4404/1/4404
+f 4390/1/4390 4395/1/4395 4396/1/4396
+f 4393/1/4393 4396/1/4396 4485/1/4485
+f 3101/1/3101 4393/1/4393 3102/1/3102
+f 3100/1/3100 3102/1/3102 3104/1/3104
+f 3253/1/3253 3104/1/3104 3252/1/3252
+f 3254/1/3254 3252/1/3252 3249/1/3249
+f 3250/1/3250 3249/1/3249 3246/1/3246
+f 3257/1/3257 3256/1/3256 3250/1/3250
+f 3258/1/3258 3259/1/3259 3257/1/3257
+f 3076/1/3076 3081/1/3081 3258/1/3258
+f 3072/1/3072 3074/1/3074 3076/1/3076
+f 3075/1/3075 3071/1/3071 3072/1/3072
+f 3264/1/3264 3083/1/3083 3075/1/3075
+f 4409/1/4409 3086/1/3086 3264/1/3264
+f 4408/1/4408 4412/1/4412 4409/1/4409
+f 4408/1/4408 4401/1/4401 4402/1/4402
+f 4397/1/4397 4401/1/4401 4399/1/4399
+f 4407/1/4407 4410/1/4410 4411/1/4411
+f 4460/1/4460 4403/1/4403 4399/1/4399
+f 4461/1/4461 4410/1/4410 4462/1/4462
+f 4464/1/4464 4405/1/4405 4403/1/4403
+f 4406/1/4406 4405/1/4405 4487/1/4487
+f 4489/1/4489 4488/1/4488 4487/1/4487
+f 4489/1/4489 4463/1/4463 4491/1/4491
+f 4465/1/4465 4462/1/4462 4490/1/4490
+f 4462/1/4462 3263/1/3263 3261/1/3261
+f 3261/1/3261 3077/1/3077 3260/1/3260
+f 3244/1/3244 3240/1/3240 3241/1/3241
+f 3244/1/3244 3241/1/3241 3267/1/3267
+f 3266/1/3266 3244/1/3244 3267/1/3267
+f 3260/1/3260 3245/1/3245 3243/1/3243
+f 3245/1/3245 3248/1/3248 3242/1/3242
+f 3242/1/3242 3234/1/3234 3236/1/3236
+f 3232/1/3232 3229/1/3229 3230/1/3230
+f 3247/1/3247 3235/1/3235 3234/1/3234
+f 3235/1/3235 3251/1/3251 3227/1/3227
+f 3227/1/3227 3228/1/3228 3226/1/3226
+f 3229/1/3229 3224/1/3224 3230/1/3230
+f 3232/1/3232 3230/1/3230 3233/1/3233
+f 3237/1/3237 3232/1/3232 3233/1/3233
+f 3240/1/3240 3237/1/3237 3241/1/3241
+f 3272/1/3272 3274/1/3274 3275/1/3275
+f 3272/1/3272 3275/1/3275 3273/1/3273
+f 3238/1/3238 3239/1/3239 3271/1/3271
+f 3239/1/3239 3231/1/3231 3280/1/3280
+f 3231/1/3231 3222/1/3222 3280/1/3280
+f 3223/1/3223 3219/1/3219 3216/1/3216
+f 3225/1/3225 3220/1/3220 3222/1/3222
+f 3226/1/3226 3221/1/3221 3220/1/3220
+f 3105/1/3105 4478/1/4478 3221/1/3221
+f 4472/1/4472 4475/1/4475 4473/1/4473
+f 4472/1/4472 4473/1/4473 4469/1/4469
+f 4486/1/4486 4480/1/4480 4478/1/4478
+f 4480/1/4480 4482/1/4482 4479/1/4479
+f 4479/1/4479 4483/1/4483 4481/1/4481
+f 4475/1/4475 4477/1/4477 4473/1/4473
+f 4481/1/4481 4499/1/4499 4476/1/4476
+f 4474/1/4474 4502/1/4502 4506/1/4506
+f 4473/1/4473 4474/1/4474 4470/1/4470
+f 4469/1/4469 4473/1/4473 4470/1/4470
+f 3217/1/3217 4472/1/4472 4469/1/4469
+f 3219/1/3219 3217/1/3217 3216/1/3216
+f 3223/1/3223 3216/1/3216 3281/1/3281
+f 3278/1/3278 3223/1/3223 3281/1/3281
+f 3274/1/3274 3278/1/3278 3275/1/3275
+f 3273/1/3273 3275/1/3275 3276/1/3276
+f 3268/1/3268 3272/1/3272 3273/1/3273
+f 3267/1/3267 3241/1/3241 3268/1/3268
+f 3269/1/3269 3277/1/3277 3332/1/3332
+f 3277/1/3277 3287/1/3287 3332/1/3332
+f 3289/1/3289 3285/1/3285 3288/1/3288
+f 3289/1/3289 3288/1/3288 3293/1/3293
+f 3279/1/3279 3283/1/3283 3287/1/3287
+f 3283/1/3283 3282/1/3282 3284/1/3284
+f 3284/1/3284 3218/1/3218 3213/1/3213
+f 3285/1/3285 3286/1/3286 3288/1/3288
+f 3293/1/3293 3288/1/3288 3294/1/3294
+f 3304/1/3304 3289/1/3289 3293/1/3293
+f 3331/1/3331 3304/1/3304 3303/1/3303
+f 3270/1/3270 3331/1/3331 3303/1/3303
+f 4529/1/4529 3267/1/3267 3270/1/3270
+f 3266/1/3266 3267/1/3267 4529/1/4529
+f 3265/1/3265 3244/1/3244 3266/1/3266
+f 4493/1/4493 3262/1/3262 3265/1/3265
+f 4492/1/4492 4463/1/4463 4493/1/4493
+f 4492/1/4492 4496/1/4496 4494/1/4494
+f 4481/1/4481 4496/1/4496 4499/1/4499
+f 4495/1/4495 4497/1/4497 4498/1/4498
+f 4500/1/4500 4501/1/4501 4499/1/4499
+f 4504/1/4504 4505/1/4505 4501/1/4501
+f 4503/1/4503 4497/1/4497 4510/1/4510
+f 4509/1/4509 4505/1/4505 4504/1/4504
+f 4467/1/4467 4505/1/4505 4508/1/4508
+f 4512/1/4512 4513/1/4513 4508/1/4508
+f 4507/1/4507 4510/1/4510 4511/1/4511
+f 4514/1/4514 4513/1/4513 4512/1/4512
+f 4468/1/4468 4513/1/4513 4516/1/4516
+f 4517/1/4517 4516/1/4516 4518/1/4518
+f 4471/1/4471 4517/1/4517 4518/1/4518
+f 3211/1/3211 4466/1/4466 4471/1/4471
+f 3212/1/3212 3211/1/3211 3210/1/3210
+f 3213/1/3213 3210/1/3210 3214/1/3214
+f 3290/1/3290 3214/1/3214 3292/1/3292
+f 3291/1/3291 3292/1/3292 3295/1/3295
+f 3296/1/3296 3291/1/3291 3295/1/3295
+f 3300/1/3300 3296/1/3296 3301/1/3301
+f 3302/1/3302 3300/1/3300 3301/1/3301
+f 3330/1/3330 3302/1/3302 3312/1/3312
+f 4528/1/4528 3312/1/3312 4530/1/4530
+f 4523/1/4523 4527/1/4527 4528/1/4528
+f 4520/1/4520 4511/1/4511 4523/1/4523
+f 4520/1/4520 4521/1/4521 4515/1/4515
+f 4519/1/4519 4521/1/4521 4524/1/4524
+f 4522/1/4522 4526/1/4526 4525/1/4525
+f 4535/1/4535 4537/1/4537 4524/1/4524
+f 4536/1/4536 3356/1/3356 4537/1/4537
+f 4534/1/4534 4526/1/4526 4531/1/4531
+f 3357/1/3357 3356/1/3356 4536/1/4536
+f 3352/1/3352 3355/1/3355 3353/1/3353
+f 3352/1/3352 3350/1/3350 3355/1/3355
+f 3349/1/3349 3350/1/3350 3352/1/3352
+f 4649/1/4649 4537/1/4537 3356/1/3356
+f 3360/1/3360 4648/1/4648 4649/1/4649
+f 3361/1/3361 4646/1/4646 3360/1/3360
+f 3204/1/3204 4647/1/4647 3361/1/3361
+f 3206/1/3206 3209/1/3209 3204/1/3204
+f 3215/1/3215 3206/1/3206 3205/1/3205
+f 3297/1/3297 3205/1/3205 3320/1/3320
+f 3298/1/3298 3320/1/3320 3318/1/3318
+f 3299/1/3299 3298/1/3298 3306/1/3306
+f 3305/1/3305 3306/1/3306 3308/1/3308
+f 3307/1/3307 3305/1/3305 3308/1/3308
+f 3310/1/3310 3309/1/3309 3313/1/3313
+f 3315/1/3315 3323/1/3323 3325/1/3325
+f 3309/1/3309 3319/1/3319 3313/1/3313
+f 3319/1/3319 3321/1/3321 3322/1/3322
+f 3322/1/3322 3207/1/3207 3208/1/3208
+f 3323/1/3323 3324/1/3324 3325/1/3325
+f 3315/1/3315 3325/1/3325 3317/1/3317
+f 3316/1/3316 3315/1/3315 3317/1/3317
+f 3311/1/3311 3314/1/3314 3316/1/3316
+f 4532/1/4532 3307/1/3307 3311/1/3311
+f 4614/1/4614 4615/1/4615 4612/1/4612
+f 4612/1/4612 4616/1/4616 4617/1/4617
+f 4618/1/4618 4621/1/4621 4620/1/4620
+f 4621/1/4621 4622/1/4622 4620/1/4620
+f 4616/1/4616 4619/1/4619 4617/1/4617
+f 4621/1/4621 4628/1/4628 4624/1/4624
+f 4623/1/4623 3328/1/3328 4619/1/4619
+f 4628/1/4628 3329/1/3329 4624/1/4624
+f 3326/1/3326 3327/1/3327 3328/1/3328
+f 3208/1/3208 3201/1/3201 3327/1/3327
+f 3203/1/3203 3202/1/3202 3201/1/3201
+f 3202/1/3202 3359/1/3359 3149/1/3149
+f 3149/1/3149 3358/1/3358 3150/1/3150
+f 3150/1/3150 3355/1/3355 3350/1/3350
+f 3151/1/3151 3152/1/3152 3146/1/3146
+f 3145/1/3145 3151/1/3151 3146/1/3146
+f 3148/1/3148 3145/1/3145 3144/1/3144
+f 3200/1/3200 3148/1/3148 3144/1/3144
+f 3329/1/3329 3200/1/3200 4626/1/4626
+f 4624/1/4624 3329/1/3329 4626/1/4626
+f 4621/1/4621 4624/1/4624 4622/1/4622
+f 4620/1/4620 4622/1/4622 4609/1/4609
+f 4603/1/4603 4625/1/4625 4604/1/4604
+f 4604/1/4604 4627/1/4627 4629/1/4629
+f 4600/1/4600 4602/1/4602 4597/1/4597
+f 4600/1/4600 4597/1/4597 4596/1/4596
+f 4595/1/4595 4629/1/4629 4594/1/4594
+f 4591/1/4591 4592/1/4592 4586/1/4586
+f 4596/1/4596 4597/1/4597 4591/1/4591
+f 4601/1/4601 4600/1/4600 4596/1/4596
+f 4606/1/4606 4605/1/4605 4601/1/4601
+f 4607/1/4607 4605/1/4605 4606/1/4606
+f 4610/1/4610 4609/1/4609 4607/1/4607
+f 4611/1/4611 4613/1/4613 4610/1/4610
+f 4538/1/4538 4611/1/4611 4539/1/4539
+f 4533/1/4533 4532/1/4532 4538/1/4538
+f 4531/1/4531 4533/1/4533 3351/1/3351
+f 3352/1/3352 3351/1/3351 3349/1/3349
+f 3155/1/3155 3350/1/3350 3349/1/3349
+f 3153/1/3153 3155/1/3155 3156/1/3156
+f 3153/1/3153 3156/1/3156 3157/1/3157
+f 3344/1/3344 3157/1/3157 3345/1/3345
+f 3345/1/3345 3343/1/3343 3344/1/3344
+f 3347/1/3347 3348/1/3348 3346/1/3346
+f 3348/1/3348 3354/1/3354 3362/1/3362
+f 3344/1/3344 3343/1/3343 3341/1/3341
+f 3341/1/3341 3163/1/3163 3344/1/3344
+f 3159/1/3159 3163/1/3163 3162/1/3162
+f 3158/1/3158 3159/1/3159 3162/1/3162
+f 3142/1/3142 3158/1/3158 3160/1/3160
+f 3140/1/3140 3141/1/3141 3142/1/3142
+f 3199/1/3199 3140/1/3140 3198/1/3198
+f 4594/1/4594 3198/1/3198 4593/1/4593
+f 4587/1/4587 4593/1/4593 4584/1/4584
+f 4579/1/4579 4584/1/4584 4577/1/4577
+f 4583/1/4583 4584/1/4584 4579/1/4579
+f 4585/1/4585 4583/1/4583 4582/1/4582
+f 4588/1/4588 4585/1/4585 4582/1/4582
+f 4589/1/4589 4585/1/4585 4588/1/4588
+f 4598/1/4598 4590/1/4590 4589/1/4589
+f 4542/1/4542 4599/1/4599 4598/1/4598
+f 4540/1/4540 4608/1/4608 4542/1/4542
+f 3362/1/3362 4540/1/4540 3363/1/3363
+f 4541/1/4541 4544/1/4544 4545/1/4545
+f 4545/1/4545 4581/1/4581 4580/1/4580
+f 4580/1/4580 4578/1/4578 4572/1/4572
+f 4572/1/4572 4573/1/4573 4569/1/4569
+f 4548/1/4548 4571/1/4571 4549/1/4549
+f 4569/1/4569 4565/1/4565 4566/1/4566
+f 4569/1/4569 4570/1/4570 4565/1/4565
+f 4568/1/4568 4576/1/4576 4631/1/4631
+f 4574/1/4574 4575/1/4575 4570/1/4570
+f 4576/1/4576 3196/1/3196 4631/1/4631
+f 4630/1/4630 3197/1/3197 4575/1/4575
+f 3197/1/3197 3143/1/3143 3168/1/3168
+f 3143/1/3143 3165/1/3165 3168/1/3168
+f 3165/1/3165 3161/1/3161 3166/1/3166
+f 3166/1/3166 3161/1/3161 3167/1/3167
+f 3170/1/3170 3171/1/3171 3177/1/3177
+f 3180/1/3180 3177/1/3177 3179/1/3179
+f 3185/1/3185 3169/1/3169 3180/1/3180
+f 3196/1/3196 3185/1/3185 3833/1/3833
+f 4631/1/4631 3196/1/3196 3833/1/3833
+f 4568/1/4568 4631/1/4631 4567/1/4567
+f 4564/1/4564 4568/1/4568 4567/1/4567
+f 4563/1/4563 4564/1/4564 4561/1/4561
+f 4551/1/4551 4561/1/4561 4556/1/4556
+f 4550/1/4550 4553/1/4553 4551/1/4551
+f 4546/1/4546 4549/1/4549 4550/1/4550
+f 4543/1/4543 4547/1/4547 4546/1/4546
+f 3337/1/3337 4543/1/4543 3338/1/3338
+f 3339/1/3339 3363/1/3363 3337/1/3337
+f 3342/1/3342 3339/1/3339 3340/1/3340
+f 3340/1/3340 3164/1/3164 3342/1/3342
+f 3161/1/3161 3164/1/3164 3167/1/3167
+f 3166/1/3166 3167/1/3167 3172/1/3172
+f 3174/1/3174 3335/1/3335 3173/1/3173
+f 3175/1/3175 3172/1/3172 3176/1/3176
+f 3178/1/3178 3175/1/3175 3182/1/3182
+f 3333/1/3333 3183/1/3183 3182/1/3182
+f 3334/1/3334 3335/1/3335 3336/1/3336
+f 3366/1/3366 3183/1/3183 3333/1/3333
+f 3191/1/3191 3183/1/3183 3195/1/3195
+f 3369/1/3369 3194/1/3194 3195/1/3195
+f 3367/1/3367 3364/1/3364 3368/1/3368
+f 3336/1/3336 3365/1/3365 3364/1/3364
+f 3365/1/3365 4046/1/4046 4045/1/4045
+f 4045/1/4045 4552/1/4552 4041/1/4041
+f 4552/1/4552 4554/1/4554 4555/1/4555
+f 4559/1/4559 4558/1/4558 4560/1/4560
+f 4554/1/4554 4557/1/4557 4555/1/4555
+f 4558/1/4558 4637/1/4637 4643/1/4643
+f 4562/1/4562 4636/1/4636 4557/1/4557
+f 4636/1/4636 4634/1/4634 4635/1/4635
+f 4635/1/4635 4632/1/4632 4633/1/4633
+f 4637/1/4637 4638/1/4638 4643/1/4643
+f 4558/1/4558 4643/1/4643 4560/1/4560
+f 4043/1/4043 4560/1/4560 4044/1/4044
+f 4042/1/4042 4043/1/4043 4038/1/4038
+f 4031/1/4031 4035/1/4035 4032/1/4032
+f 4035/1/4035 4047/1/4047 4032/1/4032
+f 4032/1/4032 4047/1/4047 4030/1/4030
+f 4039/1/4039 4040/1/4040 4034/1/4034
+f 4035/1/4035 4051/1/4051 4047/1/4047
+f 4051/1/4051 4050/1/4050 4047/1/4047
+f 4047/1/4047 4050/1/4050 4048/1/4048
+f 4050/1/4050 4049/1/4049 4048/1/4048
+f 4052/1/4052 4049/1/4049 4050/1/4050
+f 4644/1/4644 4053/1/4053 4040/1/4040
+f 4051/1/4051 4052/1/4052 4050/1/4050
+f 4644/1/4644 4640/1/4640 4053/1/4053
+f 4052/1/4052 4641/1/4641 4049/1/4049
+f 4642/1/4642 4639/1/4639 4640/1/4640
+f 4641/1/4641 3831/1/3831 4049/1/4049
+f 4049/1/4049 3831/1/3831 3829/1/3829
+f 4633/1/4633 3832/1/3832 4639/1/4639
+f 3832/1/3832 3186/1/3186 3189/1/3189
+f 3189/1/3189 3184/1/3184 3188/1/3188
+f 3188/1/3188 3187/1/3187 3190/1/3190
+f 3828/1/3828 3193/1/3193 3824/1/3824
+f 3831/1/3831 3828/1/3828 3829/1/3829
+f 4049/1/4049 3829/1/3829 3852/1/3852
+f 4048/1/4048 4049/1/4049 3852/1/3852
+f 4047/1/4047 4048/1/4048 4029/1/4029
+f 4047/1/4047 4029/1/4029 4030/1/4030
+f 4028/1/4028 4032/1/4032 4030/1/4030
+f 4023/1/4023 4020/1/4020 4016/1/4016
+f 4026/1/4026 4021/1/4021 4022/1/4022
+f 4021/1/4021 3853/1/3853 3854/1/3854
+f 3854/1/3854 3850/1/3850 3851/1/3851
+f 4020/1/4020 4019/1/4019 4018/1/4018
+f 4020/1/4020 4018/1/4018 4016/1/4016
+f 4015/1/4015 4023/1/4023 4016/1/4016
+f 4024/1/4024 4023/1/4023 4015/1/4015
+f 4027/1/4027 4025/1/4025 4024/1/4024
+f 4033/1/4033 4028/1/4028 4027/1/4027
+f 4036/1/4036 4038/1/4038 4033/1/4033
+f 3374/1/3374 4036/1/4036 3375/1/3375
+f 3370/1/3370 3376/1/3376 3374/1/3374
+f 3369/1/3369 3370/1/3370 3371/1/3371
+f 3371/1/3371 3194/1/3194 3369/1/3369
+f 3190/1/3190 3194/1/3194 3836/1/3836
+f 3825/1/3825 3836/1/3836 3826/1/3826
+f 3372/1/3372 3373/1/3373 3848/1/3848
+f 3821/1/3821 3826/1/3826 3838/1/3838
+f 3818/1/3818 3821/1/3821 3822/1/3822
+f 3818/1/3818 3822/1/3822 3817/1/3817
+f 3839/1/3839 3817/1/3817 3822/1/3822
+f 3837/1/3837 3373/1/3373 3840/1/3840
+f 3842/1/3842 3817/1/3817 3839/1/3839
+f 3818/1/3818 3817/1/3817 3811/1/3811
+f 3813/1/3813 3818/1/3818 3811/1/3811
+f 3812/1/3812 3819/1/3819 3813/1/3813
+f 3827/1/3827 3812/1/3812 3807/1/3807
+f 3830/1/3830 3807/1/3807 3834/1/3834
+f 3851/1/3851 3834/1/3834 3855/1/3855
+f 3858/1/3858 3855/1/3855 3857/1/3857
+f 3867/1/3867 3857/1/3857 3860/1/3860
+f 4014/1/4014 4017/1/4017 3867/1/3867
+f 4013/1/4013 4014/1/4014 4012/1/4012
+f 4008/1/4008 4013/1/4013 4012/1/4012
+f 4009/1/4009 3869/1/3869 3870/1/3870
+f 3869/1/3869 3866/1/3866 3870/1/3870
+f 3866/1/3866 3861/1/3861 3865/1/3865
+f 3861/1/3861 3856/1/3856 3859/1/3859
+f 3871/1/3871 3864/1/3864 3872/1/3872
+f 3868/1/3868 3871/1/3871 3874/1/3874
+f 3880/1/3880 3868/1/3868 3874/1/3874
+f 4006/1/4006 4007/1/4007 3880/1/3880
+f 4005/1/4005 4008/1/4008 4006/1/4006
+f 4010/1/4010 4011/1/4011 4005/1/4005
+f 3846/1/3846 4037/1/4037 4010/1/4010
+f 3840/1/3840 3846/1/3846 3841/1/3841
+f 3843/1/3843 3841/1/3841 3844/1/3844
+f 3844/1/3844 3816/1/3816 3843/1/3843
+f 3814/1/3814 3816/1/3816 3815/1/3815
+f 3810/1/3810 3814/1/3814 3815/1/3815
+f 3808/1/3808 3810/1/3810 3809/1/3809
+f 3806/1/3806 3808/1/3808 3809/1/3809
+f 3779/1/3779 3776/1/3776 3775/1/3775
+f 3775/1/3775 3776/1/3776 3772/1/3772
+f 3778/1/3778 3777/1/3777 3781/1/3781
+f 3780/1/3780 3778/1/3778 3781/1/3781
+f 3783/1/3783 3780/1/3780 3784/1/3784
+f 3835/1/3835 3806/1/3806 3783/1/3783
+f 3859/1/3859 3835/1/3835 3862/1/3862
+f 3875/1/3875 3862/1/3862 3918/1/3918
+f 3873/1/3873 3875/1/3875 3878/1/3878
+f 3877/1/3877 3878/1/3878 3882/1/3882
+f 3881/1/3881 3877/1/3877 3882/1/3882
+f 3887/1/3887 3879/1/3879 3881/1/3881
+f 3849/1/3849 4004/1/4004 3887/1/3887
+f 3765/1/3765 3849/1/3849 3761/1/3761
+f 3766/1/3766 3847/1/3847 3765/1/3765
+f 3845/1/3845 3766/1/3766 3774/1/3774
+f 3774/1/3774 3773/1/3773 3845/1/3845
+f 3776/1/3776 3773/1/3773 3772/1/3772
+f 3775/1/3775 3772/1/3772 3771/1/3771
+f 3768/1/3768 3764/1/3764 3769/1/3769
+f 3770/1/3770 3771/1/3771 3767/1/3767
+f 3782/1/3782 3770/1/3770 3796/1/3796
+f 3763/1/3763 3793/1/3793 3796/1/3796
+f 3762/1/3762 3764/1/3764 3760/1/3760
+f 3797/1/3797 3793/1/3793 3763/1/3763
+f 3792/1/3792 3793/1/3793 3794/1/3794
+f 3792/1/3792 3794/1/3794 3795/1/3795
+f 3801/1/3801 3795/1/3795 3800/1/3800
+f 3798/1/3798 3756/1/3756 3799/1/3799
+f 3760/1/3760 3757/1/3757 3756/1/3756
+f 3757/1/3757 3759/1/3759 3758/1/3758
+f 3679/1/3679 3897/1/3897 3680/1/3680
+f 3759/1/3759 3888/1/3888 3758/1/3758
+f 3888/1/3888 3885/1/3885 3889/1/3889
+f 3889/1/3889 3886/1/3886 3890/1/3890
+f 3886/1/3886 3891/1/3891 3890/1/3890
+f 3894/1/3894 3893/1/3893 3901/1/3901
+f 3894/1/3894 3901/1/3901 3899/1/3899
+f 3884/1/3884 3892/1/3892 3891/1/3891
+f 3883/1/3883 3917/1/3917 3892/1/3892
+f 3917/1/3917 3863/1/3863 3916/1/3916
+f 3893/1/3893 3915/1/3915 3901/1/3901
+f 3899/1/3899 3901/1/3901 3902/1/3902
+f 3895/1/3895 3894/1/3894 3899/1/3899
+f 3896/1/3896 3895/1/3895 3898/1/3898
+f 3897/1/3897 3898/1/3898 3680/1/3680
+f 4003/1/4003 3900/1/3900 3904/1/3904
+f 3904/1/3904 3903/1/3903 3905/1/3905
+f 3681/1/3681 3906/1/3906 3678/1/3678
+f 3676/1/3676 3688/1/3688 3685/1/3685
+f 3688/1/3688 3686/1/3686 3685/1/3685
+f 3685/1/3685 3686/1/3686 3684/1/3684
+f 3686/1/3686 3687/1/3687 3684/1/3684
+f 3689/1/3689 3687/1/3687 3686/1/3686
+f 3905/1/3905 3690/1/3690 3682/1/3682
+f 3688/1/3688 3689/1/3689 3686/1/3686
+f 3905/1/3905 3909/1/3909 3690/1/3690
+f 3689/1/3689 3910/1/3910 3687/1/3687
+f 3907/1/3907 3908/1/3908 3909/1/3909
+f 3914/1/3914 3912/1/3912 3908/1/3908
+f 3916/1/3916 3787/1/3787 3912/1/3912
+f 3787/1/3787 3785/1/3785 3788/1/3788
+f 3788/1/3788 3789/1/3789 3790/1/3790
+f 3792/1/3792 3795/1/3795 3790/1/3790
+f 3803/1/3803 3804/1/3804 4002/1/4002
+f 3791/1/3791 4002/1/4002 3927/1/3927
+f 3913/1/3913 3927/1/3927 3921/1/3921
+f 3911/1/3911 3805/1/3805 3913/1/3913
+f 3910/1/3910 3911/1/3911 3687/1/3687
+f 3684/1/3684 3687/1/3687 3627/1/3627
+f 3685/1/3685 3684/1/3684 3683/1/3683
+f 3668/1/3668 3683/1/3683 3669/1/3669
+f 3665/1/3665 3668/1/3668 3669/1/3669
+f 3666/1/3666 3667/1/3667 3665/1/3665
+f 3671/1/3671 3667/1/3667 3666/1/3666
+f 3674/1/3674 3675/1/3675 3671/1/3671
+f 3677/1/3677 3678/1/3678 3674/1/3674
+f 3679/1/3679 3680/1/3680 3677/1/3677
+f 3755/1/3755 3679/1/3679 3751/1/3751
+f 3753/1/3753 3755/1/3755 3751/1/3751
+f 3800/1/3800 3753/1/3753 3801/1/3801
+f 3801/1/3801 3802/1/3802 3795/1/3795
+f 3928/1/3928 3802/1/3802 4000/1/4000
+f 3752/1/3752 3750/1/3750 3754/1/3754
+f 3998/1/3998 4000/1/4000 3999/1/3999
+f 3996/1/3996 3931/1/3931 3998/1/3998
+f 3993/1/3993 3992/1/3992 3996/1/3996
+f 3997/1/3997 3995/1/3995 3994/1/3994
+f 3750/1/3750 3749/1/3749 3995/1/3995
+f 3749/1/3749 3673/1/3673 3672/1/3672
+f 3672/1/3672 3670/1/3670 3657/1/3657
+f 3657/1/3657 3661/1/3661 3658/1/3658
+f 3658/1/3658 3660/1/3660 3659/1/3659
+f 3660/1/3660 3662/1/3662 3659/1/3659
+f 3643/1/3643 3644/1/3644 3640/1/3640
+f 3644/1/3644 3664/1/3664 3631/1/3631
+f 3663/1/3663 3626/1/3626 3662/1/3662
+f 3664/1/3664 3624/1/3624 3631/1/3631
+f 3625/1/3625 3621/1/3621 3626/1/3626
+f 3621/1/3621 3622/1/3622 3623/1/3623
+f 3623/1/3623 3919/1/3919 3920/1/3920
+f 3624/1/3624 3628/1/3628 3629/1/3629
+f 3629/1/3629 3634/1/3634 3632/1/3632
+f 3637/1/3637 3636/1/3636 3633/1/3633
+f 3634/1/3634 3638/1/3638 3639/1/3639
+f 3744/1/3744 3745/1/3745 3638/1/3638
+f 3723/1/3723 3745/1/3745 3744/1/3744
+f 3721/1/3721 3745/1/3745 3723/1/3723
+f 3720/1/3720 3721/1/3721 3714/1/3714
+f 3746/1/3746 3745/1/3745 3721/1/3721
+f 3648/1/3648 3745/1/3745 3746/1/3746
+f 3647/1/3647 3642/1/3642 3648/1/3648
+f 3646/1/3646 3642/1/3642 3647/1/3647
+f 3651/1/3651 3645/1/3645 3646/1/3646
+f 3653/1/3653 3652/1/3652 3651/1/3651
+f 3656/1/3656 3653/1/3653 3654/1/3654
+f 3747/1/3747 3656/1/3656 3654/1/3654
+f 3991/1/3991 3748/1/3748 3747/1/3747
+f 3993/1/3993 3991/1/3991 3990/1/3990
+f 3989/1/3989 3938/1/3938 3990/1/3990
+f 3938/1/3938 3934/1/3934 3932/1/3932
+f 3941/1/3941 3936/1/3936 3937/1/3937
+f 3930/1/3930 3932/1/3932 3934/1/3934
+f 3930/1/3930 3924/1/3924 3920/1/3920
+f 3935/1/3935 3923/1/3923 3933/1/3933
+f 3942/1/3942 3923/1/3923 3935/1/3935
+f 3942/1/3942 3925/1/3925 3923/1/3923
+f 3924/1/3924 3630/1/3630 3922/1/3922
+f 3635/1/3635 3633/1/3633 3630/1/3630
+f 3923/1/3923 3925/1/3925 3727/1/3727
+f 3727/1/3727 3925/1/3925 3968/1/3968
+f 3727/1/3727 3968/1/3968 3969/1/3969
+f 3635/1/3635 3637/1/3637 3633/1/3633
+f 3637/1/3637 3722/1/3722 3636/1/3636
+f 3718/1/3718 3719/1/3719 3722/1/3722
+f 3717/1/3717 3715/1/3715 3718/1/3718
+f 3725/1/3725 3716/1/3716 3717/1/3717
+f 3724/1/3724 3727/1/3727 3726/1/3726
+f 3726/1/3726 3727/1/3727 3969/1/3969
+f 3725/1/3725 3728/1/3728 3729/1/3729
+f 3729/1/3729 3732/1/3732 3733/1/3733
+f 3736/1/3736 3735/1/3735 3732/1/3732
+f 3741/1/3741 3739/1/3739 3734/1/3734
+f 3741/1/3741 2630/1/2630 3739/1/3739
+f 2623/1/2623 2630/1/2630 3741/1/3741
+f 3736/1/3736 3738/1/3738 3735/1/3735
+f 2630/1/2630 2629/1/2629 3739/1/3739
+f 2630/1/2630 2622/1/2622 2629/1/2629
+f 2622/1/2622 2628/1/2628 2629/1/2629
+f 2622/1/2622 2627/1/2627 2628/1/2628
+f 3737/1/3737 3735/1/3735 3738/1/3738
+f 3706/1/3706 3735/1/3735 3737/1/3737
+f 3701/1/3701 3705/1/3705 3706/1/3706
+f 3702/1/3702 3705/1/3705 3701/1/3701
+f 3700/1/3700 3707/1/3707 3702/1/3702
+f 3697/1/3697 3710/1/3710 3700/1/3700
+f 3694/1/3694 3713/1/3713 3697/1/3697
+f 3650/1/3650 3695/1/3695 3694/1/3694
+f 3649/1/3649 3650/1/3650 3655/1/3655
+f 3693/1/3693 3655/1/3655 3692/1/3692
+f 3986/1/3986 3693/1/3693 3692/1/3692
+f 3987/1/3987 3988/1/3988 3986/1/3986
+f 3987/1/3987 3941/1/3941 3937/1/3937
+f 3947/1/3947 3948/1/3948 3985/1/3985
+f 3939/1/3939 3936/1/3936 3941/1/3941
+f 3947/1/3947 3943/1/3943 3948/1/3948
+f 3946/1/3946 3943/1/3943 3947/1/3947
+f 3939/1/3939 3940/1/3940 3936/1/3936
+f 3935/1/3935 3940/1/3940 3942/1/3942
+f 3946/1/3946 3945/1/3945 3943/1/3943
+f 3944/1/3944 3925/1/3925 3942/1/3942
+f 3944/1/3944 3968/1/3968 3925/1/3925
+f 3969/1/3969 3968/1/3968 3731/1/3731
+f 3965/1/3965 3970/1/3970 3731/1/3731
+f 3966/1/3966 3970/1/3970 3965/1/3965
+f 3967/1/3967 3945/1/3945 3949/1/3949
+f 3965/1/3965 3963/1/3963 3962/1/3962
+f 3965/1/3965 3962/1/3962 3966/1/3966
+f 3966/1/3966 3972/1/3972 3970/1/3970
+f 3971/1/3971 3972/1/3972 3973/1/3973
+f 4917/1/4917 4919/1/4919 3975/1/3975
+f 3971/1/3971 3973/1/3973 3742/1/3742
+f 3741/1/3741 3742/1/3742 2623/1/2623
+f 2623/1/2623 2622/1/2622 2630/1/2630
+f 2621/1/2621 2625/1/2625 2622/1/2622
+f 2566/1/2566 2624/1/2624 2621/1/2621
+f 2620/1/2620 3743/1/3743 2569/1/2569
+f 2565/1/2565 2560/1/2560 2566/1/2566
+f 2560/1/2560 2554/1/2554 2566/1/2566
+f 2564/1/2564 2561/1/2561 2559/1/2559
+f 2561/1/2561 2558/1/2558 2559/1/2559
+f 2563/1/2563 2558/1/2558 2561/1/2561
+f 2563/1/2563 2562/1/2562 2558/1/2558
+f 2562/1/2562 2557/1/2557 2558/1/2558
+f 2557/1/2557 2562/1/2562 2594/1/2594
+f 2560/1/2560 2555/1/2555 2554/1/2554
+f 2566/1/2566 2554/1/2554 2624/1/2624
+f 2621/1/2621 2624/1/2624 2625/1/2625
+f 2625/1/2625 2627/1/2627 2622/1/2622
+f 2631/1/2631 2628/1/2628 2627/1/2627
+f 2544/1/2544 3740/1/3740 2631/1/2631
+f 3703/1/3703 3740/1/3740 2544/1/2544
+f 3699/1/3699 3704/1/3704 3703/1/3703
+f 2534/1/2534 3698/1/3698 3699/1/3699
+f 2538/1/2538 3698/1/3698 2534/1/2534
+f 2540/1/2540 2541/1/2541 2538/1/2538
+f 2542/1/2542 2541/1/2541 2540/1/2540
+f 3696/1/3696 3691/1/3691 2542/1/2542
+f 3985/1/3985 3696/1/3696 3947/1/3947
+f 3951/1/3951 3946/1/3946 3947/1/3947
+f 3946/1/3946 3949/1/3949 3945/1/3945
+f 3950/1/3950 3952/1/3952 3953/1/3953
+f 3954/1/3954 3957/1/3957 3949/1/3949
+f 3956/1/3956 3953/1/3953 3955/1/3955
+f 3958/1/3958 3961/1/3961 3957/1/3957
+f 3960/1/3960 3955/1/3955 3959/1/3959
+f 3982/1/3982 3980/1/3980 3979/1/3979
+f 3978/1/3978 3964/1/3964 3961/1/3961
+f 3982/1/3982 3977/1/3977 3980/1/3980
+f 3974/1/3974 3964/1/3964 3976/1/3976
+f 3974/1/3974 3976/1/3976 3975/1/3975
+f 4917/1/4917 3975/1/3975 4915/1/4915
+f 4917/1/4917 4918/1/4918 4919/1/4919
+f 4920/1/4920 4918/1/4918 4922/1/4922
+f 2569/1/2569 4922/1/4922 2567/1/2567
+f 4923/1/4923 2573/1/2573 2571/1/2571
+f 4899/1/4899 2573/1/2573 4923/1/4923
+f 2568/1/2568 2567/1/2567 2570/1/2570
+f 2568/1/2568 2563/1/2563 2561/1/2561
+f 2572/1/2572 2571/1/2571 2573/1/2573
+f 2563/1/2563 2574/1/2574 2562/1/2562
+f 2573/1/2573 2575/1/2575 2572/1/2572
+f 2573/1/2573 2577/1/2577 2575/1/2575
+f 2577/1/2577 2578/1/2578 2575/1/2575
+f 2576/1/2576 2577/1/2577 2573/1/2573
+f 2576/1/2576 2580/1/2580 2577/1/2577
+f 2581/1/2581 2577/1/2577 2580/1/2580
+f 2594/1/2594 2562/1/2562 2574/1/2574
+f 2595/1/2595 2557/1/2557 2594/1/2594
+f 2558/1/2558 2557/1/2557 2556/1/2556
+f 2552/1/2552 2553/1/2553 2556/1/2556
+f 2550/1/2550 2553/1/2553 2552/1/2552
+f 2546/1/2546 2549/1/2549 2550/1/2550
+f 2547/1/2547 2548/1/2548 2546/1/2546
+f 2543/1/2543 2626/1/2626 2547/1/2547
+f 2532/1/2532 2545/1/2545 2543/1/2543
+f 2531/1/2531 2535/1/2535 2532/1/2532
+f 2536/1/2536 2531/1/2531 2533/1/2533
+f 3959/1/3959 2537/1/2537 2536/1/2536
+f 3979/1/3979 3959/1/3959 3982/1/3982
+f 3983/1/3983 3977/1/3977 3982/1/3982
+f 3983/1/3983 4914/1/4914 3977/1/3977
+f 3981/1/3981 3984/1/3984 4847/1/4847
+f 4848/1/4848 4911/1/4911 4914/1/4914
+f 4909/1/4909 4910/1/4910 4849/1/4849
+f 4911/1/4911 4913/1/4913 4914/1/4914
+f 4916/1/4916 4913/1/4913 4912/1/4912
+f 4906/1/4906 4907/1/4907 4910/1/4910
+f 4926/1/4926 4921/1/4921 4912/1/4912
+f 4926/1/4926 4924/1/4924 4921/1/4921
+f 4899/1/4899 4923/1/4923 4924/1/4924
+f 4925/1/4925 4907/1/4907 4900/1/4900
+f 4899/1/4899 4901/1/4901 4898/1/4898
+f 4899/1/4899 2576/1/2576 2573/1/2573
+f 4888/1/4888 2583/1/2583 4893/1/4893
+f 2576/1/2576 2582/1/2582 2580/1/2580
+f 2582/1/2582 2585/1/2585 2580/1/2580
+f 2584/1/2584 2580/1/2580 2585/1/2585
+f 2588/1/2588 2585/1/2585 2589/1/2589
+f 2597/1/2597 2589/1/2589 2601/1/2601
+f 2597/1/2597 2601/1/2601 2602/1/2602
+f 2597/1/2597 2602/1/2602 2600/1/2600
+f 2600/1/2600 2602/1/2602 2608/1/2608
+f 2600/1/2600 2608/1/2608 2603/1/2603
+f 2598/1/2598 2600/1/2600 2603/1/2603
+f 2603/1/2603 2608/1/2608 2609/1/2609
+f 2603/1/2603 2609/1/2609 2606/1/2606
+f 2604/1/2604 2603/1/2603 2606/1/2606
+f 2604/1/2604 2606/1/2606 2607/1/2607
+f 2604/1/2604 2607/1/2607 4243/1/4243
+f 4243/1/4243 2607/1/2607 4244/1/4244
+f 4243/1/4243 4244/1/4244 4245/1/4245
+f 4246/1/4246 4243/1/4243 4245/1/4245
+f 4246/1/4246 4245/1/4245 4250/1/4250
+f 4868/1/4868 4246/1/4246 4250/1/4250
+f 4868/1/4868 4250/1/4250 4869/1/4869
+f 4929/1/4929 4868/1/4868 4869/1/4869
+f 4929/1/4929 4869/1/4869 4939/1/4939
+f 4940/1/4940 4929/1/4929 4939/1/4939
+f 4940/1/4940 4939/1/4939 4942/1/4942
+f 4942/1/4942 4941/1/4941 4940/1/4940
+f 4940/1/4940 4941/1/4941 4938/1/4938
+f 4941/1/4941 4937/1/4937 4938/1/4938
+f 4938/1/4938 4937/1/4937 4936/1/4936
+f 4936/1/4936 4929/1/4929 4938/1/4938
+f 4930/1/4930 4929/1/4929 4936/1/4936
+f 4936/1/4936 4935/1/4935 4930/1/4930
+f 4930/1/4930 4935/1/4935 4931/1/4931
+f 4930/1/4930 4931/1/4931 4928/1/4928
+f 4928/1/4928 4927/1/4927 4930/1/4930
+f 4931/1/4931 4935/1/4935 4934/1/4934
+f 4931/1/4931 4934/1/4934 4932/1/4932
+f 4935/1/4935 4256/1/4256 4934/1/4934
+f 4934/1/4934 4256/1/4256 4933/1/4933
+f 4933/1/4933 4256/1/4256 4254/1/4254
+f 4255/1/4255 4254/1/4254 4256/1/4256
+f 4255/1/4255 4256/1/4256 4257/1/4257
+f 4248/1/4248 4255/1/4255 4257/1/4257
+f 4248/1/4248 4257/1/4257 4261/1/4261
+f 4249/1/4249 4248/1/4248 4261/1/4261
+f 4249/1/4249 4261/1/4261 4262/1/4262
+f 4249/1/4249 4262/1/4262 4265/1/4265
+f 4249/1/4249 4265/1/4265 4266/1/4266
+f 4250/1/4250 4249/1/4249 4266/1/4266
+f 4265/1/4265 4268/1/4268 4266/1/4266
+f 4870/1/4870 4266/1/4266 4268/1/4268
+f 4870/1/4870 4268/1/4268 4943/1/4943
+f 4939/1/4939 4870/1/4870 4943/1/4943
+f 4943/1/4943 4268/1/4268 4270/1/4270
+f 4270/1/4270 4942/1/4942 4943/1/4943
+f 4942/1/4942 4270/1/4270 4944/1/4944
+f 4270/1/4270 4937/1/4937 4944/1/4944
+f 4270/1/4270 4258/1/4258 4937/1/4937
+f 4937/1/4937 4258/1/4258 4935/1/4935
+f 4270/1/4270 4263/1/4263 4258/1/4258
+f 4259/1/4259 4258/1/4258 4263/1/4263
+f 4259/1/4259 4263/1/4263 4262/1/4262
+f 4260/1/4260 4259/1/4259 4262/1/4262
+f 4260/1/4260 4256/1/4256 4259/1/4259
+f 4262/1/4262 4263/1/4263 4264/1/4264
+f 4263/1/4263 4269/1/4269 4264/1/4264
+f 4269/1/4269 4267/1/4267 4264/1/4264
+f 4265/1/4265 4264/1/4264 4267/1/4267
+f 4269/1/4269 4270/1/4270 4267/1/4267
+f 4256/1/4256 4258/1/4258 4259/1/4259
+f 4263/1/4263 4270/1/4270 4269/1/4269
+f 4270/1/4270 4268/1/4268 4267/1/4267
+f 4869/1/4869 4266/1/4266 4870/1/4870
+f 4267/1/4267 4268/1/4268 4265/1/4265
+f 4262/1/4262 4264/1/4264 4265/1/4265
+f 4261/1/4261 4260/1/4260 4262/1/4262
+f 4245/1/4245 4248/1/4248 4249/1/4249
+f 4245/1/4245 4247/1/4247 4248/1/4248
+f 4247/1/4247 4252/1/4252 4248/1/4248
+f 4247/1/4247 4251/1/4251 4252/1/4252
+f 4251/1/4251 4254/1/4254 4252/1/4252
+f 4251/1/4251 2614/1/2614 4254/1/4254
+f 4253/1/4253 2614/1/2614 4251/1/4251
+f 4244/1/4244 4253/1/4253 4251/1/4251
+f 4244/1/4244 2615/1/2615 4253/1/4253
+f 2615/1/2615 2614/1/2614 4253/1/4253
+f 2613/1/2613 2614/1/2614 2615/1/2615
+f 2607/1/2607 2613/1/2613 2615/1/2615
+f 2607/1/2607 2612/1/2612 2613/1/2613
+f 2613/1/2613 2612/1/2612 2616/1/2616
+f 2616/1/2616 2612/1/2612 2611/1/2611
+f 2611/1/2611 2617/1/2617 2616/1/2616
+f 2609/1/2609 2611/1/2611 2612/1/2612
+f 4244/1/4244 4251/1/4251 4247/1/4247
+f 4261/1/4261 4257/1/4257 4260/1/4260
+f 4248/1/4248 4252/1/4252 4255/1/4255
+f 4256/1/4256 4260/1/4260 4257/1/4257
+f 4252/1/4252 4254/1/4254 4255/1/4255
+f 4935/1/4935 4258/1/4258 4256/1/4256
+f 4930/1/4930 4927/1/4927 4929/1/4929
+f 4936/1/4936 4937/1/4937 4935/1/4935
+f 4941/1/4941 4944/1/4944 4937/1/4937
+f 4941/1/4941 4942/1/4942 4944/1/4944
+f 4939/1/4939 4943/1/4943 4942/1/4942
+f 4938/1/4938 4929/1/4929 4940/1/4940
+f 4939/1/4939 4869/1/4869 4870/1/4870
+f 4927/1/4927 4868/1/4868 4929/1/4929
+f 4927/1/4927 4867/1/4867 4868/1/4868
+f 4874/1/4874 4867/1/4867 4927/1/4927
+f 4869/1/4869 4250/1/4250 4266/1/4266
+f 4867/1/4867 4246/1/4246 4868/1/4868
+f 4867/1/4867 2605/1/2605 4246/1/4246
+f 4250/1/4250 4245/1/4245 4249/1/4249
+f 2605/1/2605 4243/1/4243 4246/1/4246
+f 4245/1/4245 4244/1/4244 4247/1/4247
+f 2607/1/2607 2615/1/2615 4244/1/4244
+f 2606/1/2606 2612/1/2612 2607/1/2607
+f 2606/1/2606 2609/1/2609 2612/1/2612
+f 2608/1/2608 2611/1/2611 2609/1/2609
+f 2608/1/2608 2610/1/2610 2611/1/2611
+f 2602/1/2602 2610/1/2610 2608/1/2608
+f 2601/1/2601 2619/1/2619 2602/1/2602
+f 2602/1/2602 2619/1/2619 2610/1/2610
+f 2617/1/2617 2611/1/2611 2610/1/2610
+f 4888/1/4888 2618/1/2618 2583/1/2583
+f 4888/1/4888 4889/1/4889 4887/1/4887
+f 4878/1/4878 4880/1/4880 4882/1/4882
+f 2617/1/2617 4886/1/4886 2616/1/2616
+f 2616/1/2616 2614/1/2614 2613/1/2613
+f 4879/1/4879 4254/1/4254 2614/1/2614
+f 4933/1/4933 4254/1/4254 4879/1/4879
+f 4934/1/4934 4933/1/4933 4932/1/4932
+f 4928/1/4928 4931/1/4931 4932/1/4932
+f 4928/1/4928 4874/1/4874 4927/1/4927
+f 4873/1/4873 4871/1/4871 4875/1/4875
+f 4874/1/4874 4866/1/4866 4867/1/4867
+f 4864/1/4864 4865/1/4865 4871/1/4871
+f 4866/1/4866 2605/1/2605 4867/1/4867
+f 4863/1/4863 2599/1/2599 4865/1/4865
+f 2605/1/2605 2604/1/2604 4243/1/4243
+f 2598/1/2598 2603/1/2603 2604/1/2604
+f 2598/1/2598 2597/1/2597 2600/1/2600
+f 2590/1/2590 2589/1/2589 2597/1/2597
+f 2590/1/2590 2588/1/2588 2589/1/2589
+f 2584/1/2584 2585/1/2585 2588/1/2588
+f 2581/1/2581 2580/1/2580 2584/1/2584
+f 2578/1/2578 2577/1/2577 2581/1/2581
+f 2575/1/2575 2578/1/2578 2579/1/2579
+f 2522/1/2522 2592/1/2592 2579/1/2579
+f 2520/1/2520 2593/1/2593 2522/1/2522
+f 2526/1/2526 2551/1/2551 2520/1/2520
+f 2525/1/2525 2529/1/2529 2526/1/2526
+f 2530/1/2530 2528/1/2528 2525/1/2525
+f 3984/1/3984 2530/1/2530 4846/1/4846
+f 4908/1/4908 4846/1/4846 4905/1/4905
+f 4904/1/4904 4903/1/4903 4905/1/4905
+f 4897/1/4897 4900/1/4900 4903/1/4903
+f 4895/1/4895 4894/1/4894 4897/1/4897
+f 4855/1/4855 4891/1/4891 4895/1/4895
+f 4890/1/4890 4891/1/4891 4855/1/4855
+f 4855/1/4855 4851/1/4851 4853/1/4853
+f 4902/1/4902 4850/1/4850 4854/1/4854
+f 4850/1/4850 2527/1/2527 2539/1/2539
+f 2539/1/2539 2524/1/2524 2519/1/2519
+f 4851/1/4851 4852/1/4852 4853/1/4853
+f 4855/1/4855 4853/1/4853 4896/1/4896
+f 4896/1/4896 4890/1/4890 4855/1/4855
+f 4890/1/4890 4889/1/4889 4891/1/4891
+f 4885/1/4885 4887/1/4887 4889/1/4889
+f 4884/1/4884 4887/1/4887 4885/1/4885
+f 4862/1/4862 4882/1/4882 4884/1/4884
+f 4860/1/4860 4857/1/4857 4861/1/4861
+f 4881/1/4881 4882/1/4882 4862/1/4862
+f 4881/1/4881 4878/1/4878 4882/1/4882
+f 4877/1/4877 4880/1/4880 4878/1/4878
+f 4876/1/4876 4877/1/4877 4873/1/4873
+f 4873/1/4873 4864/1/4864 4871/1/4871
+f 4883/1/4883 4859/1/4859 4872/1/4872
+f 4864/1/4864 4863/1/4863 4865/1/4865
+f 4857/1/4857 4858/1/4858 4859/1/4859
+f 4863/1/4863 2596/1/2596 2599/1/2599
+f 4856/1/4856 2521/1/2521 4858/1/4858
+f 2596/1/2596 2591/1/2591 2599/1/2599
+f 2518/1/2518 2587/1/2587 2591/1/2591
+f 2519/1/2519 2516/1/2516 2521/1/2521
+f 2518/1/2518 2517/1/2517 2586/1/2586
+f 2516/1/2516 2523/1/2523 2517/1/2517
+f 4968/1/4968 4969/1/4969 4970/1/4970
+f 4973/1/4973 4968/1/4968 4970/1/4970
+f 4973/1/4973 4970/1/4970 4980/1/4980
+f 4973/1/4973 4980/1/4980 4981/1/4981
+f 5050/1/5050 4973/1/4973 4981/1/4981
+f 5050/1/5050 4981/1/4981 5049/1/5049
+f 5146/1/5146 5050/1/5050 5049/1/5049
+f 5146/1/5146 5049/1/5049 5424/1/5424
+f 5427/1/5427 5146/1/5146 5424/1/5424
+f 5427/1/5427 5424/1/5424 5428/1/5428
+f 5428/1/5428 5445/1/5445 5427/1/5427
+f 5445/1/5445 5436/1/5436 5427/1/5427
+f 5427/1/5427 5436/1/5436 5430/1/5430
+f 5427/1/5427 5430/1/5430 5429/1/5429
+f 5430/1/5430 5431/1/5431 5429/1/5429
+f 5429/1/5429 5431/1/5431 5145/1/5145
+f 5145/1/5145 5051/1/5051 5429/1/5429
+f 5429/1/5429 5051/1/5051 5146/1/5146
+f 5145/1/5145 5144/1/5144 5051/1/5051
+f 5144/1/5144 4979/1/4979 5051/1/5051
+f 4979/1/4979 4973/1/4973 5051/1/5051
+f 4979/1/4979 4971/1/4971 4973/1/4973
+f 4976/1/4976 4971/1/4971 4979/1/4979
+f 5140/1/5140 4976/1/4976 4979/1/4979
+f 5134/1/5134 4976/1/4976 5140/1/5140
+f 5139/1/5139 5134/1/5134 5140/1/5140
+f 5139/1/5139 5140/1/5140 5142/1/5142
+f 5142/1/5142 5143/1/5143 5139/1/5139
+f 5143/1/5143 5141/1/5141 5139/1/5139
+f 5139/1/5139 5141/1/5141 5138/1/5138
+f 5138/1/5138 5141/1/5141 5137/1/5137
+f 5138/1/5138 5137/1/5137 5136/1/5136
+f 5136/1/5136 5134/1/5134 5138/1/5138
+f 5133/1/5133 5134/1/5134 5136/1/5136
+f 5133/1/5133 5127/1/5127 5134/1/5134
+f 5127/1/5127 4977/1/4977 5134/1/5134
+f 5127/1/5127 5056/1/5056 4977/1/4977
+f 5056/1/5056 4978/1/4978 4977/1/4977
+f 4977/1/4977 4978/1/4978 4975/1/4975
+f 4977/1/4977 4975/1/4975 4976/1/4976
+f 4978/1/4978 7004/1/7004 4975/1/4975
+f 4975/1/4975 7004/1/7004 4972/1/4972
+f 4975/1/4975 4972/1/4972 4971/1/4971
+f 4971/1/4971 4972/1/4972 4968/1/4968
+f 4972/1/4972 7006/1/7006 4968/1/4968
+f 4968/1/4968 7006/1/7006 4974/1/4974
+f 7006/1/7006 7010/1/7010 4974/1/4974
+f 4974/1/4974 7010/1/7010 4994/1/4994
+f 4974/1/4974 4994/1/4994 4969/1/4969
+f 4969/1/4969 4994/1/4994 4993/1/4993
+f 4969/1/4969 4993/1/4993 4987/1/4987
+f 4987/1/4987 4993/1/4993 4988/1/4988
+f 4987/1/4987 4988/1/4988 4983/1/4983
+f 4970/1/4970 4987/1/4987 4983/1/4983
+f 4983/1/4983 4988/1/4988 4989/1/4989
+f 4983/1/4983 4989/1/4989 4984/1/4984
+f 4980/1/4980 4983/1/4983 4984/1/4984
+f 4980/1/4980 4984/1/4984 4985/1/4985
+f 4980/1/4980 4985/1/4985 4986/1/4986
+f 4982/1/4982 4980/1/4980 4986/1/4986
+f 4982/1/4982 4986/1/4986 5012/1/5012
+f 4982/1/4982 5012/1/5012 5015/1/5015
+f 5048/1/5048 4982/1/4982 5015/1/5015
+f 5048/1/5048 5015/1/5015 5047/1/5047
+f 5416/1/5416 5048/1/5048 5047/1/5047
+f 5416/1/5416 5047/1/5047 5417/1/5417
+f 5411/1/5411 5416/1/5416 5417/1/5417
+f 5411/1/5411 5417/1/5417 5415/1/5415
+f 5415/1/5415 5412/1/5412 5411/1/5411
+f 5411/1/5411 5412/1/5412 5407/1/5407
+f 5411/1/5411 5407/1/5407 5409/1/5409
+f 5407/1/5407 5406/1/5406 5409/1/5409
+f 5409/1/5409 5406/1/5406 5410/1/5410
+f 5409/1/5409 5410/1/5410 5426/1/5426
+f 5426/1/5426 5416/1/5416 5409/1/5409
+f 5426/1/5426 5423/1/5423 5416/1/5416
+f 5425/1/5425 5423/1/5423 5426/1/5426
+f 5425/1/5425 5424/1/5424 5423/1/5423
+f 5426/1/5426 5410/1/5410 5425/1/5425
+f 5425/1/5425 5410/1/5410 5443/1/5443
+f 5425/1/5425 5443/1/5443 5445/1/5445
+f 5410/1/5410 5444/1/5444 5443/1/5443
+f 5443/1/5443 5444/1/5444 5438/1/5438
+f 5443/1/5443 5438/1/5438 5436/1/5436
+f 5436/1/5436 5438/1/5438 5434/1/5434
+f 5000/1/5000 5434/1/5434 5438/1/5438
+f 5000/1/5000 5438/1/5438 5004/1/5004
+f 5004/1/5004 5005/1/5005 5000/1/5000
+f 5000/1/5000 5005/1/5005 5003/1/5003
+f 5000/1/5000 5003/1/5003 4998/1/4998
+f 4998/1/4998 4995/1/4995 5000/1/5000
+f 4995/1/4995 5437/1/5437 5000/1/5000
+f 5437/1/5437 4995/1/4995 5442/1/5442
+f 5442/1/5442 5439/1/5439 5437/1/5437
+f 5437/1/5437 5439/1/5439 5435/1/5435
+f 5437/1/5437 5435/1/5435 5434/1/5434
+f 5431/1/5431 5434/1/5434 5435/1/5435
+f 5431/1/5431 5435/1/5435 5433/1/5433
+f 5433/1/5433 5435/1/5435 5439/1/5439
+f 5433/1/5433 5439/1/5439 5440/1/5440
+f 5433/1/5433 5440/1/5440 5142/1/5142
+f 5432/1/5432 5433/1/5433 5142/1/5142
+f 5142/1/5142 5144/1/5144 5432/1/5432
+f 5145/1/5145 5433/1/5433 5432/1/5432
+f 5440/1/5440 5439/1/5439 5441/1/5441
+f 5440/1/5440 5441/1/5441 5143/1/5143
+f 5442/1/5442 5441/1/5441 5439/1/5439
+f 5162/1/5162 5441/1/5441 5442/1/5442
+f 5158/1/5158 5162/1/5162 5442/1/5442
+f 5442/1/5442 4999/1/4999 5158/1/5158
+f 5158/1/5158 4999/1/4999 7020/1/7020
+f 5158/1/5158 7020/1/7020 7021/1/7021
+f 5158/1/5158 7021/1/7021 5155/1/5155
+f 5158/1/5158 5155/1/5155 5157/1/5157
+f 5159/1/5159 5158/1/5158 5157/1/5157
+f 5159/1/5159 5157/1/5157 5156/1/5156
+f 5156/1/5156 5149/1/5149 5159/1/5159
+f 5159/1/5159 5149/1/5149 5160/1/5160
+f 5159/1/5159 5160/1/5160 5161/1/5161
+f 5161/1/5161 5160/1/5160 5162/1/5162
+f 5141/1/5141 5162/1/5162 5160/1/5160
+f 5137/1/5137 5160/1/5160 5149/1/5149
+f 5137/1/5137 5149/1/5149 5135/1/5135
+f 5133/1/5133 5137/1/5137 5135/1/5135
+f 5133/1/5133 5135/1/5135 5132/1/5132
+f 5132/1/5132 5135/1/5135 5130/1/5130
+f 5130/1/5130 5127/1/5127 5132/1/5132
+f 5128/1/5128 5127/1/5127 5130/1/5130
+f 5130/1/5130 5131/1/5131 5128/1/5128
+f 5128/1/5128 5131/1/5131 5129/1/5129
+f 5128/1/5128 5129/1/5129 5126/1/5126
+f 5126/1/5126 5125/1/5125 5128/1/5128
+f 5124/1/5124 5125/1/5125 5126/1/5126
+f 5126/1/5126 5121/1/5121 5124/1/5124
+f 5124/1/5124 5121/1/5121 5120/1/5120
+f 5124/1/5124 5120/1/5120 5063/1/5063
+f 5063/1/5063 5120/1/5120 5122/1/5122
+f 5122/1/5122 5061/1/5061 5063/1/5063
+f 5061/1/5061 5060/1/5060 5063/1/5063
+f 5063/1/5063 5060/1/5060 5058/1/5058
+f 5063/1/5063 5058/1/5058 5125/1/5125
+f 5125/1/5125 5058/1/5058 5056/1/5056
+f 5058/1/5058 5057/1/5057 5056/1/5056
+f 5058/1/5058 5059/1/5059 5057/1/5057
+f 5059/1/5059 7000/1/7000 5057/1/5057
+f 5057/1/5057 7000/1/7000 7002/1/7002
+f 5057/1/5057 7002/1/7002 4978/1/4978
+f 7000/1/7000 7003/1/7003 7002/1/7002
+f 7002/1/7002 7003/1/7003 7047/1/7047
+f 7002/1/7002 7047/1/7047 7048/1/7048
+f 7002/1/7002 7048/1/7048 7004/1/7004
+f 7004/1/7004 7048/1/7048 7049/1/7049
+f 7004/1/7004 7049/1/7049 7050/1/7050
+f 7004/1/7004 7050/1/7050 7005/1/7005
+f 7050/1/7050 7014/1/7014 7005/1/7005
+f 7005/1/7005 7014/1/7014 7012/1/7012
+f 7005/1/7005 7012/1/7012 7007/1/7007
+f 4972/1/4972 7005/1/7005 7007/1/7007
+f 4972/1/4972 7007/1/7007 7008/1/7008
+f 7007/1/7007 7011/1/7011 7008/1/7008
+f 7008/1/7008 7011/1/7011 7009/1/7009
+f 7008/1/7008 7009/1/7009 7006/1/7006
+f 7011/1/7011 7016/1/7016 7009/1/7009
+f 7009/1/7009 7016/1/7016 7010/1/7010
+f 7018/1/7018 7010/1/7010 7016/1/7016
+f 7019/1/7019 7018/1/7018 7016/1/7016
+f 7019/1/7019 7016/1/7016 7017/1/7017
+f 7021/1/7021 7019/1/7019 7017/1/7017
+f 7021/1/7021 7017/1/7017 7022/1/7022
+f 7022/1/7022 7023/1/7023 7021/1/7021
+f 7022/1/7022 7026/1/7026 7023/1/7023
+f 7026/1/7026 5155/1/5155 7023/1/7023
+f 7026/1/7026 5153/1/5153 5155/1/5155
+f 5153/1/5153 5152/1/5152 5155/1/5155
+f 5153/1/5153 5151/1/5151 5152/1/5152
+f 5147/1/5147 5152/1/5152 5151/1/5151
+f 5147/1/5147 5151/1/5151 5150/1/5150
+f 5150/1/5150 5148/1/5148 5147/1/5147
+f 5131/1/5131 5147/1/5147 5148/1/5148
+f 5131/1/5131 5149/1/5149 5147/1/5147
+f 5150/1/5150 5117/1/5117 5148/1/5148
+f 5121/1/5121 5148/1/5148 5117/1/5117
+f 5121/1/5121 5117/1/5117 5118/1/5118
+f 5118/1/5118 5117/1/5117 5113/1/5113
+f 5118/1/5118 5113/1/5113 5112/1/5112
+f 5118/1/5118 5112/1/5112 5104/1/5104
+f 5119/1/5119 5118/1/5118 5104/1/5104
+f 5119/1/5119 5104/1/5104 5103/1/5103
+f 5123/1/5123 5119/1/5119 5103/1/5103
+f 5103/1/5103 5061/1/5061 5123/1/5123
+f 5069/1/5069 5061/1/5061 5103/1/5103
+f 5103/1/5103 5102/1/5102 5069/1/5069
+f 5069/1/5069 5102/1/5102 5068/1/5068
+f 5068/1/5068 5064/1/5064 5069/1/5069
+f 5067/1/5067 5064/1/5064 5068/1/5068
+f 5068/1/5068 5100/1/5100 5067/1/5067
+f 5067/1/5067 5100/1/5100 5099/1/5099
+f 5099/1/5099 5066/1/5066 5067/1/5067
+f 5077/1/5077 5066/1/5066 5099/1/5099
+f 5099/1/5099 5093/1/5093 5077/1/5077
+f 5077/1/5077 5093/1/5093 5078/1/5078
+f 5077/1/5077 5078/1/5078 5076/1/5076
+f 5076/1/5076 5073/1/5073 5077/1/5077
+f 5075/1/5075 5073/1/5073 5076/1/5076
+f 5075/1/5075 5071/1/5071 5073/1/5073
+f 5071/1/5071 5070/1/5070 5073/1/5073
+f 5073/1/5073 5070/1/5070 5066/1/5066
+f 5066/1/5066 5070/1/5070 5065/1/5065
+f 5066/1/5066 5065/1/5065 5064/1/5064
+f 5064/1/5064 5065/1/5065 5062/1/5062
+f 5064/1/5064 5062/1/5062 5061/1/5061
+f 5065/1/5065 6555/1/6555 5062/1/5062
+f 5062/1/5062 6555/1/6555 6556/1/6556
+f 5062/1/5062 6556/1/6556 5060/1/5060
+f 5060/1/5060 6556/1/6556 5059/1/5059
+f 6556/1/6556 6998/1/6998 5059/1/5059
+f 6556/1/6556 6996/1/6996 6998/1/6998
+f 6996/1/6996 6995/1/6995 6998/1/6998
+f 6998/1/6998 6995/1/6995 6997/1/6997
+f 6998/1/6998 6997/1/6997 7000/1/7000
+f 7000/1/7000 6997/1/6997 7001/1/7001
+f 6997/1/6997 6999/1/6999 7001/1/7001
+f 7001/1/7001 6999/1/6999 7045/1/7045
+f 7001/1/7001 7045/1/7045 7003/1/7003
+f 7003/1/7003 7045/1/7045 7044/1/7044
+f 7045/1/7045 7043/1/7043 7044/1/7044
+f 7044/1/7044 7043/1/7043 7037/1/7037
+f 7044/1/7044 7037/1/7037 7036/1/7036
+f 7047/1/7047 7044/1/7044 7036/1/7036
+f 7036/1/7036 7037/1/7037 7032/1/7032
+f 7036/1/7036 7032/1/7032 7035/1/7035
+f 7048/1/7048 7036/1/7036 7035/1/7035
+f 7035/1/7035 7032/1/7032 7028/1/7028
+f 7035/1/7035 7028/1/7028 7034/1/7034
+f 7049/1/7049 7035/1/7035 7034/1/7034
+f 7034/1/7034 7028/1/7028 7014/1/7014
+f 7015/1/7015 7014/1/7014 7028/1/7028
+f 7027/1/7027 7015/1/7015 7028/1/7028
+f 7027/1/7027 7028/1/7028 7029/1/7029
+f 7025/1/7025 7027/1/7027 7029/1/7029
+f 7025/1/7025 7029/1/7029 7030/1/7030
+f 7030/1/7030 7031/1/7031 7025/1/7025
+f 7025/1/7025 7031/1/7031 7026/1/7026
+f 7039/1/7039 7031/1/7031 7030/1/7030
+f 7030/1/7030 7033/1/7033 7039/1/7039
+f 7039/1/7039 7033/1/7033 7038/1/7038
+f 7039/1/7039 7038/1/7038 7042/1/7042
+f 7039/1/7039 7042/1/7042 7041/1/7041
+f 7041/1/7041 7040/1/7040 7039/1/7039
+f 7041/1/7041 5114/1/5114 7040/1/7040
+f 7040/1/7040 5114/1/5114 5154/1/5154
+f 7040/1/7040 5154/1/5154 7031/1/7031
+f 7031/1/7031 5154/1/5154 5153/1/5153
+f 5114/1/5114 5115/1/5115 5154/1/5154
+f 5154/1/5154 5115/1/5115 5151/1/5151
+f 5116/1/5116 5151/1/5151 5115/1/5115
+f 5116/1/5116 5115/1/5115 5113/1/5113
+f 5113/1/5113 5115/1/5115 5111/1/5111
+f 5113/1/5113 5111/1/5111 5108/1/5108
+f 5108/1/5108 5111/1/5111 5109/1/5109
+f 5108/1/5108 5109/1/5109 5106/1/5106
+f 5106/1/5106 5104/1/5104 5108/1/5108
+f 5106/1/5106 5105/1/5105 5104/1/5104
+f 5102/1/5102 5104/1/5104 5105/1/5105
+f 5102/1/5102 5105/1/5105 5100/1/5100
+f 5100/1/5100 5105/1/5105 5101/1/5101
+f 5100/1/5100 5101/1/5101 5093/1/5093
+f 5092/1/5092 5093/1/5093 5101/1/5101
+f 5092/1/5092 5101/1/5101 5098/1/5098
+f 5098/1/5098 5097/1/5097 5092/1/5092
+f 5092/1/5092 5097/1/5097 5094/1/5094
+f 5092/1/5092 5094/1/5094 5090/1/5090
+f 5090/1/5090 5085/1/5085 5092/1/5092
+f 5090/1/5090 5086/1/5086 5085/1/5085
+f 5080/1/5080 5085/1/5085 5086/1/5086
+f 5080/1/5080 5086/1/5086 5084/1/5084
+f 5080/1/5080 5084/1/5084 5082/1/5082
+f 5079/1/5079 5080/1/5080 5082/1/5082
+f 5079/1/5079 5082/1/5082 5081/1/5081
+f 5074/1/5074 5079/1/5079 5081/1/5081
+f 5074/1/5074 5081/1/5081 6552/1/6552
+f 6552/1/6552 6551/1/6551 5074/1/5074
+f 5074/1/5074 6551/1/6551 5071/1/5071
+f 6551/1/6551 6553/1/6553 5071/1/5071
+f 6553/1/6553 5072/1/5072 5071/1/5071
+f 6553/1/6553 5403/1/5403 5072/1/5072
+f 5403/1/5403 5402/1/5402 5072/1/5072
+f 5072/1/5072 5402/1/5402 6954/1/6954
+f 5072/1/5072 6954/1/6954 6554/1/6554
+f 5070/1/5070 5072/1/5072 6554/1/6554
+f 6554/1/6554 6954/1/6954 6956/1/6956
+f 6554/1/6554 6956/1/6956 6555/1/6555
+f 6555/1/6555 6956/1/6956 6959/1/6959
+f 6956/1/6956 6961/1/6961 6959/1/6959
+f 6959/1/6959 6961/1/6961 6986/1/6986
+f 6959/1/6959 6986/1/6986 6987/1/6987
+f 6959/1/6959 6987/1/6987 6996/1/6996
+f 6996/1/6996 6987/1/6987 6989/1/6989
+f 6987/1/6987 6984/1/6984 6989/1/6989
+f 6989/1/6989 6984/1/6984 6988/1/6988
+f 6989/1/6989 6988/1/6988 6995/1/6995
+f 6995/1/6995 6988/1/6988 6994/1/6994
+f 6988/1/6988 6990/1/6990 6994/1/6994
+f 6994/1/6994 6990/1/6990 6993/1/6993
+f 6994/1/6994 6993/1/6993 6999/1/6999
+f 6992/1/6992 6993/1/6993 6990/1/6990
+f 6991/1/6991 6992/1/6992 6990/1/6990
+f 6991/1/6991 6990/1/6990 6985/1/6985
+f 6980/1/6980 6991/1/6991 6985/1/6985
+f 6980/1/6980 6985/1/6985 6981/1/6981
+f 6980/1/6980 6981/1/6981 6978/1/6978
+f 6978/1/6978 5097/1/5097 6980/1/6980
+f 6980/1/6980 5097/1/5097 5114/1/5114
+f 6980/1/6980 5114/1/5114 7051/1/7051
+f 5097/1/5097 5110/1/5110 5114/1/5114
+f 5110/1/5110 5111/1/5111 5114/1/5114
+f 5097/1/5097 5107/1/5107 5110/1/5110
+f 5110/1/5110 5107/1/5107 5109/1/5109
+f 6978/1/6978 5163/1/5163 5097/1/5097
+f 5163/1/5163 5096/1/5096 5097/1/5097
+f 5164/1/5164 5096/1/5096 5163/1/5163
+f 6972/1/6972 5164/1/5164 5163/1/5163
+f 5169/1/5169 5164/1/5164 6972/1/6972
+f 6972/1/6972 6971/1/6971 5169/1/5169
+f 5169/1/5169 6971/1/6971 6974/1/6974
+f 5169/1/5169 6974/1/6974 6975/1/6975
+f 5169/1/5169 6975/1/6975 5165/1/5165
+f 5165/1/5165 5095/1/5095 5169/1/5169
+f 5095/1/5095 5165/1/5165 5166/1/5166
+f 5088/1/5088 5095/1/5095 5166/1/5166
+f 5088/1/5088 5166/1/5166 5170/1/5170
+f 5088/1/5088 5170/1/5170 6358/1/6358
+f 5091/1/5091 5088/1/5088 6358/1/6358
+f 5091/1/5091 6358/1/6358 6359/1/6359
+f 6359/1/6359 6360/1/6360 5091/1/5091
+f 5091/1/5091 6360/1/6360 5083/1/5083
+f 5091/1/5091 5083/1/5083 5087/1/5087
+f 5087/1/5087 5083/1/5083 5084/1/5084
+f 6364/1/6364 5083/1/5083 6360/1/6360
+f 6364/1/6364 6360/1/6360 6365/1/6365
+f 6364/1/6364 6365/1/6365 6372/1/6372
+f 6552/1/6552 6364/1/6364 6372/1/6372
+f 6372/1/6372 6374/1/6374 6552/1/6552
+f 6368/1/6368 6374/1/6374 6372/1/6372
+f 6368/1/6368 6373/1/6373 6374/1/6374
+f 6373/1/6373 6549/1/6549 6374/1/6374
+f 6374/1/6374 6549/1/6549 6550/1/6550
+f 6374/1/6374 6550/1/6550 6551/1/6551
+f 6549/1/6549 5400/1/5400 6550/1/6550
+f 6550/1/6550 5400/1/5400 5403/1/5403
+f 5400/1/5400 5399/1/5399 5403/1/5403
+f 5400/1/5400 5191/1/5191 5399/1/5399
+f 5191/1/5191 5184/1/5184 5399/1/5399
+f 5399/1/5399 5184/1/5184 5401/1/5401
+f 5399/1/5399 5401/1/5401 5402/1/5402
+f 5401/1/5401 5404/1/5404 5402/1/5402
+f 5402/1/5402 5404/1/5404 6955/1/6955
+f 5404/1/5404 5180/1/5180 6955/1/6955
+f 6955/1/6955 5180/1/5180 6977/1/6977
+f 6955/1/6955 6977/1/6977 6964/1/6964
+f 6955/1/6955 6964/1/6964 6957/1/6957
+f 6954/1/6954 6955/1/6955 6957/1/6957
+f 6954/1/6954 6957/1/6957 6958/1/6958
+f 6957/1/6957 6963/1/6963 6958/1/6958
+f 6958/1/6958 6963/1/6963 6962/1/6962
+f 6958/1/6958 6962/1/6962 6960/1/6960
+f 6956/1/6956 6958/1/6958 6960/1/6960
+f 6960/1/6960 6962/1/6962 6967/1/6967
+f 6960/1/6960 6967/1/6967 6961/1/6961
+f 6961/1/6961 6967/1/6967 6969/1/6969
+f 6967/1/6967 6968/1/6968 6969/1/6969
+f 6969/1/6969 6968/1/6968 6982/1/6982
+f 6986/1/6986 6969/1/6969 6982/1/6982
+f 6979/1/6979 6982/1/6982 6968/1/6968
+f 6973/1/6973 6979/1/6979 6968/1/6968
+f 6973/1/6973 6968/1/6968 6970/1/6970
+f 6972/1/6972 6973/1/6973 6970/1/6970
+f 6978/1/6978 6973/1/6973 6972/1/6972
+f 6970/1/6970 6968/1/6968 6966/1/6966
+f 6970/1/6970 6966/1/6966 6971/1/6971
+f 6966/1/6966 6962/1/6962 6971/1/6971
+f 6971/1/6971 6962/1/6962 6965/1/6965
+f 6978/1/6978 6979/1/6979 6973/1/6973
+f 6981/1/6981 6982/1/6982 6979/1/6979
+f 6981/1/6981 6984/1/6984 6982/1/6982
+f 6983/1/6983 6984/1/6984 6981/1/6981
+f 6967/1/6967 6966/1/6966 6968/1/6968
+f 6962/1/6962 6966/1/6966 6967/1/6967
+f 6963/1/6963 6965/1/6965 6962/1/6962
+f 6964/1/6964 6965/1/6965 6963/1/6963
+f 6964/1/6964 6976/1/6976 6965/1/6965
+f 6975/1/6975 6965/1/6965 6976/1/6976
+f 6975/1/6975 6976/1/6976 5174/1/5174
+f 6975/1/6975 5174/1/5174 5167/1/5167
+f 5167/1/5167 5174/1/5174 5173/1/5173
+f 5167/1/5167 5173/1/5173 5171/1/5171
+f 5168/1/5168 5167/1/5167 5171/1/5171
+f 5168/1/5168 5171/1/5171 5172/1/5172
+f 5170/1/5170 5168/1/5168 5172/1/5172
+f 5170/1/5170 5172/1/5172 5397/1/5397
+f 6429/1/6429 5170/1/5170 5397/1/5397
+f 6429/1/6429 5397/1/5397 6361/1/6361
+f 6358/1/6358 6429/1/6429 6361/1/6361
+f 5250/1/5250 6361/1/6361 5397/1/5397
+f 5251/1/5251 5250/1/5250 5397/1/5397
+f 5247/1/5247 5250/1/5250 5251/1/5251
+f 5245/1/5245 5247/1/5247 5251/1/5251
+f 5245/1/5245 5251/1/5251 5398/1/5398
+f 5186/1/5186 5245/1/5245 5398/1/5398
+f 5186/1/5186 5398/1/5398 5187/1/5187
+f 5186/1/5186 5187/1/5187 5183/1/5183
+f 5185/1/5185 5186/1/5186 5183/1/5183
+f 5188/1/5188 5185/1/5185 5183/1/5183
+f 5188/1/5188 5183/1/5183 5184/1/5184
+f 5184/1/5184 5183/1/5183 5182/1/5182
+f 5183/1/5183 5178/1/5178 5182/1/5182
+f 5178/1/5178 5181/1/5181 5182/1/5182
+f 5182/1/5182 5181/1/5181 5401/1/5401
+f 5401/1/5401 5181/1/5181 5179/1/5179
+f 5176/1/5176 5179/1/5179 5181/1/5181
+f 5173/1/5173 5179/1/5179 5176/1/5176
+f 5173/1/5173 5180/1/5180 5179/1/5179
+f 5178/1/5178 5176/1/5176 5181/1/5181
+f 5178/1/5178 5175/1/5175 5176/1/5176
+f 5171/1/5171 5176/1/5176 5175/1/5175
+f 5177/1/5177 5175/1/5175 5178/1/5178
+f 5187/1/5187 5177/1/5177 5178/1/5178
+f 5177/1/5177 5172/1/5172 5175/1/5175
+f 5251/1/5251 5172/1/5172 5177/1/5177
+f 5190/1/5190 5185/1/5185 5188/1/5188
+f 5191/1/5191 5190/1/5190 5188/1/5188
+f 5193/1/5193 5190/1/5190 5191/1/5191
+f 5199/1/5199 5193/1/5193 5191/1/5191
+f 5198/1/5198 5193/1/5193 5199/1/5199
+f 6380/1/6380 5198/1/5198 5199/1/5199
+f 6380/1/6380 5199/1/5199 6549/1/6549
+f 5204/1/5204 5198/1/5198 6380/1/6380
+f 6376/1/6376 5204/1/5204 6380/1/6380
+f 6376/1/6376 6380/1/6380 6373/1/6373
+f 6370/1/6370 6376/1/6376 6373/1/6373
+f 6370/1/6370 6373/1/6373 6369/1/6369
+f 6369/1/6369 6366/1/6366 6370/1/6370
+f 6370/1/6370 6366/1/6366 6371/1/6371
+f 6370/1/6370 6371/1/6371 6375/1/6375
+f 6375/1/6375 6371/1/6371 6377/1/6377
+f 6375/1/6375 6377/1/6377 6378/1/6378
+f 6378/1/6378 6379/1/6379 6375/1/6375
+f 6375/1/6375 6379/1/6379 6376/1/6376
+f 6383/1/6383 6379/1/6379 6378/1/6378
+f 6378/1/6378 6421/1/6421 6383/1/6383
+f 6383/1/6383 6421/1/6421 6418/1/6418
+f 6383/1/6383 6418/1/6418 6382/1/6382
+f 6382/1/6382 6418/1/6418 6423/1/6423
+f 6423/1/6423 6381/1/6381 6382/1/6382
+f 6382/1/6382 6381/1/6381 6379/1/6379
+f 6381/1/6381 5205/1/5205 6379/1/6379
+f 6379/1/6379 5205/1/5205 5204/1/5204
+f 5205/1/5205 5203/1/5203 5204/1/5204
+f 5205/1/5205 5206/1/5206 5203/1/5203
+f 5206/1/5206 5209/1/5209 5203/1/5203
+f 5203/1/5203 5209/1/5209 5202/1/5202
+f 5203/1/5203 5202/1/5202 5197/1/5197
+f 5203/1/5203 5197/1/5197 5198/1/5198
+f 5202/1/5202 5200/1/5200 5197/1/5197
+f 5197/1/5197 5200/1/5200 5196/1/5196
+f 5197/1/5197 5196/1/5196 5193/1/5193
+f 5193/1/5193 5196/1/5196 5192/1/5192
+f 5196/1/5196 5194/1/5194 5192/1/5192
+f 5192/1/5192 5194/1/5194 5189/1/5189
+f 5192/1/5192 5189/1/5189 5190/1/5190
+f 5194/1/5194 5195/1/5195 5189/1/5189
+f 5189/1/5189 5195/1/5195 5186/1/5186
+f 5194/1/5194 5242/1/5242 5195/1/5195
+f 5242/1/5242 5241/1/5241 5195/1/5195
+f 5241/1/5241 5244/1/5244 5195/1/5195
+f 5195/1/5195 5244/1/5244 5245/1/5245
+f 5241/1/5241 5243/1/5243 5244/1/5244
+f 5243/1/5243 5246/1/5246 5244/1/5244
+f 5244/1/5244 5246/1/5246 5247/1/5247
+f 5246/1/5246 5249/1/5249 5247/1/5247
+f 5248/1/5248 5249/1/5249 5246/1/5246
+f 5248/1/5248 5252/1/5252 5249/1/5249
+f 5252/1/5252 6409/1/6409 5249/1/5249
+f 5249/1/5249 6409/1/6409 6415/1/6415
+f 5249/1/5249 6415/1/6415 5250/1/5250
+f 6409/1/6409 6414/1/6414 6415/1/6415
+f 6415/1/6415 6414/1/6414 6361/1/6361
+f 6414/1/6414 6420/1/6420 6361/1/6361
+f 6420/1/6420 6362/1/6362 6361/1/6361
+f 6359/1/6359 6361/1/6361 6362/1/6362
+f 6362/1/6362 6363/1/6363 6359/1/6359
+f 6362/1/6362 6367/1/6367 6363/1/6363
+f 6366/1/6366 6363/1/6363 6367/1/6367
+f 6365/1/6365 6363/1/6363 6366/1/6366
+f 6368/1/6368 6365/1/6365 6366/1/6366
+f 6420/1/6420 6367/1/6367 6362/1/6362
+f 6422/1/6422 6367/1/6367 6420/1/6420
+f 6416/1/6416 6422/1/6422 6420/1/6420
+f 6416/1/6416 6421/1/6421 6422/1/6422
+f 6421/1/6421 6377/1/6377 6422/1/6422
+f 6422/1/6422 6377/1/6377 6367/1/6367
+f 6414/1/6414 6416/1/6416 6420/1/6420
+f 6413/1/6413 6416/1/6416 6414/1/6414
+f 6413/1/6413 6412/1/6412 6416/1/6416
+f 6412/1/6412 6417/1/6417 6416/1/6416
+f 6417/1/6417 6418/1/6418 6416/1/6416
+f 6417/1/6417 6419/1/6419 6418/1/6418
+f 6410/1/6410 6419/1/6419 6417/1/6417
+f 6411/1/6411 6410/1/6410 6417/1/6417
+f 6408/1/6408 6410/1/6410 6411/1/6411
+f 6408/1/6408 6411/1/6411 6412/1/6412
+f 6403/1/6403 6410/1/6410 6408/1/6408
+f 6407/1/6407 6403/1/6403 6408/1/6408
+f 6407/1/6407 6408/1/6408 6409/1/6409
+f 6409/1/6409 6408/1/6408 6413/1/6413
+f 6405/1/6405 6403/1/6403 6407/1/6407
+f 5255/1/5255 6405/1/6405 6407/1/6407
+f 5255/1/5255 6407/1/6407 5252/1/5252
+f 5254/1/5254 5255/1/5255 5252/1/5252
+f 5254/1/5254 5252/1/5252 5253/1/5253
+f 5232/1/5232 5254/1/5254 5253/1/5253
+f 5232/1/5232 5253/1/5253 5237/1/5237
+f 5233/1/5233 5232/1/5232 5237/1/5237
+f 5233/1/5233 5237/1/5237 5234/1/5234
+f 5231/1/5231 5233/1/5233 5234/1/5234
+f 5231/1/5231 5234/1/5234 5235/1/5235
+f 5236/1/5236 5231/1/5231 5235/1/5235
+f 5236/1/5236 5235/1/5235 5200/1/5200
+f 5200/1/5200 5235/1/5235 5201/1/5201
+f 5235/1/5235 5238/1/5238 5201/1/5201
+f 5201/1/5201 5238/1/5238 5240/1/5240
+f 5201/1/5201 5240/1/5240 5194/1/5194
+f 5238/1/5238 5241/1/5241 5240/1/5240
+f 5213/1/5213 5231/1/5231 5236/1/5236
+f 5202/1/5202 5213/1/5213 5236/1/5236
+f 5213/1/5213 5228/1/5228 5231/1/5231
+f 5228/1/5228 5227/1/5227 5231/1/5231
+f 5226/1/5226 5227/1/5227 5228/1/5228
+f 5212/1/5212 5226/1/5226 5228/1/5228
+f 5211/1/5211 5226/1/5226 5212/1/5212
+f 5209/1/5209 5211/1/5211 5212/1/5212
+f 5209/1/5209 5212/1/5212 5213/1/5213
+f 5210/1/5210 5211/1/5211 5209/1/5209
+f 5210/1/5210 5215/1/5215 5211/1/5211
+f 5215/1/5215 5220/1/5220 5211/1/5211
+f 5215/1/5215 5219/1/5219 5220/1/5220
+f 5219/1/5219 5223/1/5223 5220/1/5220
+f 5220/1/5220 5223/1/5223 5225/1/5225
+f 5220/1/5220 5225/1/5225 5226/1/5226
+f 5223/1/5223 5229/1/5229 5225/1/5225
+f 5225/1/5225 5229/1/5229 5230/1/5230
+f 5225/1/5225 5230/1/5230 5227/1/5227
+f 5227/1/5227 5230/1/5230 5232/1/5232
+f 5229/1/5229 5254/1/5254 5230/1/5230
+f 5229/1/5229 5256/1/5256 5254/1/5254
+f 5259/1/5259 5256/1/5256 5229/1/5229
+f 5259/1/5259 5257/1/5257 5256/1/5256
+f 5257/1/5257 5255/1/5255 5256/1/5256
+f 5257/1/5257 5258/1/5258 5255/1/5255
+f 5261/1/5261 5258/1/5258 5257/1/5257
+f 5262/1/5262 5261/1/5261 5257/1/5257
+f 5262/1/5262 5257/1/5257 5260/1/5260
+f 5222/1/5222 5262/1/5262 5260/1/5260
+f 5222/1/5222 5260/1/5260 5224/1/5224
+f 5222/1/5222 5224/1/5224 5219/1/5219
+f 5221/1/5221 5222/1/5222 5219/1/5219
+f 5218/1/5218 5221/1/5221 5219/1/5219
+f 5217/1/5217 5221/1/5221 5218/1/5218
+f 5214/1/5214 5217/1/5217 5218/1/5218
+f 5214/1/5214 5218/1/5218 5215/1/5215
+f 5216/1/5216 5217/1/5217 5214/1/5214
+f 5208/1/5208 5216/1/5216 5214/1/5214
+f 5208/1/5208 5214/1/5214 5206/1/5206
+f 5207/1/5207 5208/1/5208 5206/1/5206
+f 5394/1/5394 5208/1/5208 5207/1/5207
+f 6384/1/6384 5394/1/5394 5207/1/5207
+f 6384/1/6384 5207/1/5207 6381/1/6381
+f 6425/1/6425 6384/1/6384 6381/1/6381
+f 6425/1/6425 6381/1/6381 6424/1/6424
+f 6424/1/6424 6419/1/6419 6425/1/6425
+f 6425/1/6425 6419/1/6419 6426/1/6426
+f 6425/1/6425 6426/1/6426 6428/1/6428
+f 6428/1/6428 6426/1/6426 6392/1/6392
+f 6428/1/6428 6392/1/6392 6391/1/6391
+f 6391/1/6391 6384/1/6384 6428/1/6428
+f 6387/1/6387 6384/1/6384 6391/1/6391
+f 6387/1/6387 6385/1/6385 6384/1/6384
+f 6386/1/6386 6385/1/6385 6387/1/6387
+f 6387/1/6387 6389/1/6389 6386/1/6386
+f 6386/1/6386 6389/1/6389 6390/1/6390
+f 6386/1/6386 6390/1/6390 6388/1/6388
+f 6388/1/6388 5370/1/5370 6386/1/6386
+f 5372/1/5372 5370/1/5370 6388/1/6388
+f 6388/1/6388 6395/1/6395 5372/1/5372
+f 5372/1/5372 6395/1/6395 6396/1/6396
+f 5372/1/5372 6396/1/6396 5371/1/5371
+f 5371/1/5371 6396/1/6396 5375/1/5375
+f 5371/1/5371 5375/1/5375 5374/1/5374
+f 5374/1/5374 5366/1/5366 5371/1/5371
+f 5371/1/5371 5366/1/5366 5370/1/5370
+f 5366/1/5366 5293/1/5293 5370/1/5370
+f 5370/1/5370 5293/1/5293 5294/1/5294
+f 5370/1/5370 5294/1/5294 6385/1/6385
+f 6385/1/6385 5294/1/5294 5394/1/5394
+f 5294/1/5294 5292/1/5292 5394/1/5394
+f 5294/1/5294 5291/1/5291 5292/1/5292
+f 5291/1/5291 5281/1/5281 5292/1/5292
+f 5292/1/5292 5281/1/5281 5216/1/5216
+f 5281/1/5281 5278/1/5278 5216/1/5216
+f 5216/1/5216 5278/1/5278 5280/1/5280
+f 5278/1/5278 5269/1/5269 5280/1/5280
+f 5280/1/5280 5269/1/5269 5267/1/5267
+f 5280/1/5280 5267/1/5267 5217/1/5217
+f 5269/1/5269 5266/1/5266 5267/1/5267
+f 5267/1/5267 5266/1/5266 5222/1/5222
+f 5269/1/5269 5268/1/5268 5266/1/5266
+f 5268/1/5268 5264/1/5264 5266/1/5266
+f 5266/1/5266 5264/1/5264 5262/1/5262
+f 5268/1/5268 5270/1/5270 5264/1/5264
+f 5270/1/5270 5265/1/5265 5264/1/5264
+f 5264/1/5264 5265/1/5265 5261/1/5261
+f 5265/1/5265 5263/1/5263 5261/1/5261
+f 5271/1/5271 5263/1/5263 5265/1/5265
+f 5271/1/5271 6430/1/6430 5263/1/5263
+f 6430/1/6430 6406/1/6406 5263/1/5263
+f 5263/1/5263 6406/1/6406 6404/1/6404
+f 5263/1/5263 6404/1/6404 5258/1/5258
+f 5258/1/5258 6404/1/6404 6405/1/6405
+f 6404/1/6404 6401/1/6401 6405/1/6405
+f 6404/1/6404 6400/1/6400 6401/1/6401
+f 6400/1/6400 6397/1/6397 6401/1/6401
+f 6401/1/6401 6397/1/6397 6398/1/6398
+f 6401/1/6401 6398/1/6398 6403/1/6403
+f 6403/1/6403 6398/1/6398 6399/1/6399
+f 6398/1/6398 6393/1/6393 6399/1/6399
+f 6393/1/6393 6392/1/6392 6399/1/6399
+f 6399/1/6399 6392/1/6392 6427/1/6427
+f 6399/1/6399 6427/1/6427 6410/1/6410
+f 6393/1/6393 6389/1/6389 6392/1/6392
+f 6397/1/6397 6393/1/6393 6398/1/6398
+f 6397/1/6397 6394/1/6394 6393/1/6393
+f 6394/1/6394 6390/1/6390 6393/1/6393
+f 6394/1/6394 6395/1/6395 6390/1/6390
+f 6547/1/6547 6395/1/6395 6394/1/6394
+f 6402/1/6402 6547/1/6547 6394/1/6394
+f 6400/1/6400 6547/1/6547 6402/1/6402
+f 6548/1/6548 6547/1/6547 6400/1/6400
+f 6406/1/6406 6548/1/6548 6400/1/6400
+f 5387/1/5387 6548/1/6548 6406/1/6406
+f 5387/1/5387 5385/1/5385 6548/1/6548
+f 5385/1/5385 5389/1/5389 6548/1/6548
+f 5385/1/5385 5382/1/5382 5389/1/5389
+f 5382/1/5382 5388/1/5388 5389/1/5389
+f 5388/1/5388 5375/1/5375 5389/1/5389
+f 5388/1/5388 5376/1/5376 5375/1/5375
+f 5373/1/5373 5375/1/5375 5376/1/5376
+f 5373/1/5373 5376/1/5376 5369/1/5369
+f 5369/1/5369 5366/1/5366 5373/1/5373
+f 5369/1/5369 5365/1/5365 5366/1/5366
+f 5365/1/5365 5295/1/5295 5366/1/5366
+f 5365/1/5365 5297/1/5297 5295/1/5295
+f 5297/1/5297 5296/1/5296 5295/1/5295
+f 5295/1/5295 5296/1/5296 5290/1/5290
+f 5295/1/5295 5290/1/5290 5293/1/5293
+f 5293/1/5293 5290/1/5290 5291/1/5291
+f 5290/1/5290 5285/1/5285 5291/1/5291
+f 5291/1/5291 5285/1/5285 5286/1/5286
+f 5285/1/5285 5282/1/5282 5286/1/5286
+f 5286/1/5286 5282/1/5282 5279/1/5279
+f 5286/1/5286 5279/1/5279 5281/1/5281
+f 5282/1/5282 5275/1/5275 5279/1/5279
+f 5279/1/5279 5275/1/5275 5276/1/5276
+f 5279/1/5279 5276/1/5276 5278/1/5278
+f 5278/1/5278 5276/1/5276 5274/1/5274
+f 5276/1/5276 5273/1/5273 5274/1/5274
+f 5273/1/5273 5268/1/5268 5274/1/5274
+f 5275/1/5275 5273/1/5273 5276/1/5276
+f 5275/1/5275 5277/1/5277 5273/1/5273
+f 5277/1/5277 5272/1/5272 5273/1/5273
+f 5273/1/5273 5272/1/5272 5270/1/5270
+f 5272/1/5272 5271/1/5271 5270/1/5270
+f 5396/1/5396 5271/1/5271 5272/1/5272
+f 5396/1/5396 6533/1/6533 5271/1/5271
+f 6532/1/6532 6533/1/6533 5396/1/5396
+f 5395/1/5395 6532/1/6532 5396/1/5396
+f 5395/1/5395 5396/1/5396 5277/1/5277
+f 5283/1/5283 5395/1/5395 5277/1/5277
+f 6528/1/6528 5395/1/5395 5283/1/5283
+f 5287/1/5287 6528/1/6528 5283/1/5283
+f 5284/1/5284 5287/1/5287 5283/1/5283
+f 5284/1/5284 5283/1/5283 5282/1/5282
+f 5288/1/5288 5287/1/5287 5284/1/5284
+f 5285/1/5285 5288/1/5288 5284/1/5284
+f 5289/1/5289 5288/1/5288 5285/1/5285
+f 5289/1/5289 6517/1/6517 5288/1/5288
+f 6517/1/6517 6518/1/6518 5288/1/5288
+f 6517/1/6517 6516/1/6516 6518/1/6518
+f 6516/1/6516 6525/1/6525 6518/1/6518
+f 6518/1/6518 6525/1/6525 6528/1/6528
+f 6525/1/6525 6529/1/6529 6528/1/6528
+f 6528/1/6528 6529/1/6529 6532/1/6532
+f 6529/1/6529 6531/1/6531 6532/1/6532
+f 6527/1/6527 6531/1/6531 6529/1/6529
+f 6527/1/6527 6530/1/6530 6531/1/6531
+f 6530/1/6530 6431/1/6431 6531/1/6531
+f 6531/1/6531 6431/1/6431 6430/1/6430
+f 6531/1/6531 6430/1/6430 6533/1/6533
+f 6431/1/6431 5387/1/5387 6430/1/6430
+f 6431/1/6431 5386/1/5386 5387/1/5387
+f 5386/1/5386 5383/1/5383 5387/1/5387
+f 5386/1/5386 5384/1/5384 5383/1/5383
+f 5384/1/5384 5378/1/5378 5383/1/5383
+f 5383/1/5383 5378/1/5378 5379/1/5379
+f 5383/1/5383 5379/1/5379 5382/1/5382
+f 5379/1/5379 5381/1/5381 5382/1/5382
+f 5379/1/5379 5377/1/5377 5381/1/5381
+f 5381/1/5381 5377/1/5377 5376/1/5376
+f 5368/1/5368 5376/1/5376 5377/1/5377
+f 5368/1/5368 5377/1/5377 5367/1/5367
+f 5367/1/5367 5365/1/5365 5368/1/5368
+f 5363/1/5363 5365/1/5365 5367/1/5367
+f 5363/1/5363 5364/1/5364 5365/1/5365
+f 5360/1/5360 5364/1/5364 5363/1/5363
+f 5363/1/5363 5361/1/5361 5360/1/5360
+f 5360/1/5360 5361/1/5361 5358/1/5358
+f 5360/1/5360 5358/1/5358 5359/1/5359
+f 5359/1/5359 5302/1/5302 5360/1/5360
+f 5353/1/5353 5302/1/5302 5359/1/5359
+f 5359/1/5359 5354/1/5354 5353/1/5353
+f 5353/1/5353 5354/1/5354 5350/1/5350
+f 5353/1/5353 5350/1/5350 5349/1/5349
+f 5349/1/5349 5350/1/5350 5345/1/5345
+f 5349/1/5349 5345/1/5345 5347/1/5347
+f 5347/1/5347 5303/1/5303 5349/1/5349
+f 5349/1/5349 5303/1/5303 5302/1/5302
+f 5303/1/5303 5301/1/5301 5302/1/5302
+f 5302/1/5302 5301/1/5301 5299/1/5299
+f 5302/1/5302 5299/1/5299 5364/1/5364
+f 5364/1/5364 5299/1/5299 5297/1/5297
+f 5299/1/5299 5298/1/5298 5297/1/5297
+f 5299/1/5299 5300/1/5300 5298/1/5298
+f 5300/1/5300 6504/1/6504 5298/1/5298
+f 5298/1/5298 6504/1/6504 6505/1/6505
+f 5298/1/5298 6505/1/6505 5296/1/5296
+f 5296/1/5296 6505/1/6505 6514/1/6514
+f 6505/1/6505 6506/1/6506 6514/1/6514
+f 6514/1/6514 6506/1/6506 6513/1/6513
+f 6514/1/6514 6513/1/6513 6515/1/6515
+f 6514/1/6514 6515/1/6515 5289/1/5289
+f 5290/1/5290 6514/1/6514 5289/1/5289
+f 6513/1/6513 6510/1/6510 6515/1/6515
+f 6515/1/6515 6510/1/6510 6516/1/6516
+f 6510/1/6510 6524/1/6524 6516/1/6516
+f 6510/1/6510 6512/1/6512 6524/1/6524
+f 6512/1/6512 6526/1/6526 6524/1/6524
+f 6524/1/6524 6526/1/6526 6527/1/6527
+f 6524/1/6524 6527/1/6527 6525/1/6525
+f 6512/1/6512 6511/1/6511 6526/1/6526
+f 6511/1/6511 6534/1/6534 6526/1/6526
+f 6526/1/6526 6534/1/6534 6530/1/6530
+f 6509/1/6509 6534/1/6534 6511/1/6511
+f 6507/1/6507 6509/1/6509 6511/1/6511
+f 6501/1/6501 6509/1/6509 6507/1/6507
+f 6502/1/6502 6501/1/6501 6507/1/6507
+f 6502/1/6502 6507/1/6507 6508/1/6508
+f 6506/1/6506 6502/1/6502 6508/1/6508
+f 6503/1/6503 6502/1/6502 6506/1/6506
+f 6503/1/6503 6499/1/6499 6502/1/6502
+f 6498/1/6498 6499/1/6499 6503/1/6503
+f 6505/1/6505 6498/1/6498 6503/1/6503
+f 6498/1/6498 6494/1/6494 6499/1/6499
+f 6494/1/6494 6495/1/6495 6499/1/6499
+f 6499/1/6499 6495/1/6495 6501/1/6501
+f 6495/1/6495 6500/1/6500 6501/1/6501
+f 6495/1/6495 6492/1/6492 6500/1/6500
+f 6492/1/6492 6536/1/6536 6500/1/6500
+f 6500/1/6500 6536/1/6536 6535/1/6535
+f 6500/1/6500 6535/1/6535 6509/1/6509
+f 6536/1/6536 6433/1/6433 6535/1/6535
+f 6535/1/6535 6433/1/6433 6432/1/6432
+f 6535/1/6535 6432/1/6432 6534/1/6534
+f 6534/1/6534 6432/1/6432 6431/1/6431
+f 6433/1/6433 5390/1/5390 6432/1/6432
+f 6432/1/6432 5390/1/5390 5386/1/5386
+f 6433/1/6433 5391/1/5391 5390/1/5390
+f 5391/1/5391 5356/1/5356 5390/1/5390
+f 5390/1/5390 5356/1/5356 5384/1/5384
+f 5356/1/5356 5380/1/5380 5384/1/5384
+f 5356/1/5356 5357/1/5357 5380/1/5380
+f 5357/1/5357 5355/1/5355 5380/1/5380
+f 5380/1/5380 5355/1/5355 5362/1/5362
+f 5380/1/5380 5362/1/5362 5378/1/5378
+f 5355/1/5355 5358/1/5358 5362/1/5362
+f 5355/1/5355 5354/1/5354 5358/1/5358
+f 5352/1/5352 5354/1/5354 5355/1/5355
+f 5357/1/5357 5352/1/5352 5355/1/5355
+f 5356/1/5356 5352/1/5352 5357/1/5357
+f 5351/1/5351 5352/1/5352 5356/1/5356
+f 5351/1/5351 5348/1/5348 5352/1/5352
+f 5352/1/5352 5348/1/5348 5350/1/5350
+f 5336/1/5336 5348/1/5348 5351/1/5351
+f 5337/1/5337 5336/1/5336 5351/1/5351
+f 5337/1/5337 5351/1/5351 5391/1/5391
+f 6434/1/6434 5337/1/5337 5391/1/5391
+f 6436/1/6436 5337/1/5337 6434/1/6434
+f 6435/1/6435 6436/1/6436 6434/1/6434
+f 6435/1/6435 6434/1/6434 6484/1/6484
+f 6481/1/6481 6435/1/6435 6484/1/6484
+f 6481/1/6481 6484/1/6484 6485/1/6485
+f 6483/1/6483 6481/1/6481 6485/1/6485
+f 6483/1/6483 6485/1/6485 6488/1/6488
+f 6489/1/6489 6483/1/6483 6488/1/6488
+f 6489/1/6489 6488/1/6488 6490/1/6490
+f 6496/1/6496 6489/1/6489 6490/1/6490
+f 6496/1/6496 6490/1/6490 6497/1/6497
+f 6519/1/6519 6496/1/6496 6497/1/6497
+f 6519/1/6519 6497/1/6497 6504/1/6504
+f 6504/1/6504 6497/1/6497 6498/1/6498
+f 6497/1/6497 6493/1/6493 6498/1/6498
+f 6520/1/6520 6496/1/6496 6519/1/6519
+f 5300/1/5300 6520/1/6520 6519/1/6519
+f 6350/1/6350 6520/1/6520 5300/1/5300
+f 5301/1/5301 6350/1/6350 5300/1/5300
+f 5304/1/5304 6350/1/6350 5301/1/5301
+f 5304/1/5304 6349/1/6349 6350/1/6350
+f 6349/1/6349 6466/1/6466 6350/1/6350
+f 6350/1/6350 6466/1/6466 6521/1/6521
+f 6466/1/6466 6470/1/6470 6521/1/6521
+f 6521/1/6521 6470/1/6470 6478/1/6478
+f 6521/1/6521 6478/1/6478 6522/1/6522
+f 6521/1/6521 6522/1/6522 6520/1/6520
+f 6520/1/6520 6522/1/6522 6523/1/6523
+f 6522/1/6522 6482/1/6482 6523/1/6523
+f 6523/1/6523 6482/1/6482 6489/1/6489
+f 6522/1/6522 6477/1/6477 6482/1/6482
+f 6477/1/6477 6479/1/6479 6482/1/6482
+f 6482/1/6482 6479/1/6479 6483/1/6483
+f 6477/1/6477 6475/1/6475 6479/1/6479
+f 6475/1/6475 6480/1/6480 6479/1/6479
+f 6479/1/6479 6480/1/6480 6481/1/6481
+f 6475/1/6475 6476/1/6476 6480/1/6480
+f 6476/1/6476 6435/1/6435 6480/1/6480
+f 6476/1/6476 6439/1/6439 6435/1/6435
+f 6474/1/6474 6439/1/6439 6476/1/6476
+f 6471/1/6471 6474/1/6474 6476/1/6476
+f 6473/1/6473 6474/1/6474 6471/1/6471
+f 6469/1/6469 6473/1/6473 6471/1/6471
+f 6469/1/6469 6471/1/6471 6472/1/6472
+f 6470/1/6470 6469/1/6469 6472/1/6472
+f 6468/1/6468 6469/1/6469 6470/1/6470
+f 6468/1/6468 6467/1/6467 6469/1/6469
+f 6467/1/6467 6450/1/6450 6469/1/6469
+f 6452/1/6452 6450/1/6450 6467/1/6467
+f 6465/1/6465 6452/1/6452 6467/1/6467
+f 6460/1/6460 6452/1/6452 6465/1/6465
+f 6464/1/6464 6460/1/6460 6465/1/6465
+f 6464/1/6464 6465/1/6465 6466/1/6466
+f 6466/1/6466 6465/1/6465 6468/1/6468
+f 6464/1/6464 6459/1/6459 6460/1/6460
+f 6459/1/6459 6451/1/6451 6460/1/6460
+f 6459/1/6459 6458/1/6458 6451/1/6451
+f 6458/1/6458 6447/1/6447 6451/1/6451
+f 6451/1/6451 6447/1/6447 6448/1/6448
+f 6451/1/6451 6448/1/6448 6452/1/6452
+f 6447/1/6447 6443/1/6443 6448/1/6448
+f 6448/1/6448 6443/1/6443 6444/1/6444
+f 6448/1/6448 6444/1/6444 6450/1/6450
+f 6450/1/6450 6444/1/6444 6449/1/6449
+f 6450/1/6450 6449/1/6449 6473/1/6473
+f 6444/1/6444 6437/1/6437 6449/1/6449
+f 6449/1/6449 6437/1/6437 6474/1/6474
+f 6444/1/6444 6440/1/6440 6437/1/6437
+f 6440/1/6440 6438/1/6438 6437/1/6437
+f 6437/1/6437 6438/1/6438 6436/1/6436
+f 6437/1/6437 6436/1/6436 6439/1/6439
+f 6438/1/6438 5333/1/5333 6436/1/6436
+f 6438/1/6438 5330/1/5330 5333/1/5333
+f 5330/1/5330 5328/1/5328 5333/1/5333
+f 5333/1/5333 5328/1/5328 5332/1/5332
+f 5333/1/5333 5332/1/5332 5337/1/5337
+f 5328/1/5328 5327/1/5327 5332/1/5332
+f 5332/1/5332 5327/1/5327 5334/1/5334
+f 5332/1/5332 5334/1/5334 5335/1/5335
+f 5332/1/5332 5335/1/5335 5336/1/5336
+f 5334/1/5334 5339/1/5339 5335/1/5335
+f 5335/1/5335 5339/1/5339 5343/1/5343
+f 5335/1/5335 5343/1/5343 5348/1/5348
+f 5343/1/5343 5345/1/5345 5348/1/5348
+f 5343/1/5343 5342/1/5342 5345/1/5345
+f 5344/1/5344 5345/1/5345 5342/1/5342
+f 5344/1/5344 5342/1/5342 5346/1/5346
+f 5346/1/5346 5303/1/5303 5344/1/5344
+f 5346/1/5346 5305/1/5305 5303/1/5303
+f 5305/1/5305 5304/1/5304 5303/1/5303
+f 5305/1/5305 5306/1/5306 5304/1/5304
+f 5307/1/5307 5306/1/5306 5305/1/5305
+f 5311/1/5311 5307/1/5307 5305/1/5305
+f 5311/1/5311 5305/1/5305 5340/1/5340
+f 5340/1/5340 5338/1/5338 5311/1/5311
+f 5311/1/5311 5338/1/5338 5315/1/5315
+f 5311/1/5311 5315/1/5315 5310/1/5310
+f 5310/1/5310 5315/1/5315 5316/1/5316
+f 5310/1/5310 5316/1/5316 5314/1/5314
+f 5314/1/5314 5309/1/5309 5310/1/5310
+f 5310/1/5310 5309/1/5309 5307/1/5307
+f 5309/1/5309 5308/1/5308 5307/1/5307
+f 5309/1/5309 6345/1/6345 5308/1/5308
+f 6345/1/6345 6346/1/6346 5308/1/5308
+f 5308/1/5308 6346/1/6346 6348/1/6348
+f 5308/1/5308 6348/1/6348 5306/1/5306
+f 5306/1/5306 6348/1/6348 6349/1/6349
+f 6348/1/6348 6464/1/6464 6349/1/6349
+f 6348/1/6348 6463/1/6463 6464/1/6464
+f 6346/1/6346 6463/1/6463 6348/1/6348
+f 6346/1/6346 6538/1/6538 6463/1/6463
+f 6538/1/6538 6462/1/6462 6463/1/6463
+f 6463/1/6463 6462/1/6462 6459/1/6459
+f 6462/1/6462 6461/1/6461 6459/1/6459
+f 6462/1/6462 6544/1/6544 6461/1/6461
+f 6544/1/6544 6453/1/6453 6461/1/6461
+f 6461/1/6461 6453/1/6453 6458/1/6458
+f 6544/1/6544 6456/1/6456 6453/1/6453
+f 6456/1/6456 6454/1/6454 6453/1/6453
+f 6453/1/6453 6454/1/6454 6446/1/6446
+f 6453/1/6453 6446/1/6446 6447/1/6447
+f 6454/1/6454 6445/1/6445 6446/1/6446
+f 6446/1/6446 6445/1/6445 6442/1/6442
+f 6446/1/6446 6442/1/6442 6443/1/6443
+f 6443/1/6443 6442/1/6442 6440/1/6440
+f 6442/1/6442 6441/1/6441 6440/1/6440
+f 6445/1/6445 6441/1/6441 6442/1/6442
+f 6445/1/6445 6892/1/6892 6441/1/6441
+f 6892/1/6892 5329/1/5329 6441/1/6441
+f 6441/1/6441 5329/1/5329 5330/1/5330
+f 5329/1/5329 5326/1/5326 5330/1/5330
+f 5329/1/5329 5331/1/5331 5326/1/5326
+f 5331/1/5331 5320/1/5320 5326/1/5326
+f 5326/1/5326 5320/1/5320 5324/1/5324
+f 5326/1/5326 5324/1/5324 5325/1/5325
+f 5326/1/5326 5325/1/5325 5328/1/5328
+f 5324/1/5324 5322/1/5322 5325/1/5325
+f 5325/1/5325 5322/1/5322 5323/1/5323
+f 5325/1/5325 5323/1/5323 5327/1/5327
+f 5322/1/5322 5316/1/5316 5323/1/5323
+f 5322/1/5322 5317/1/5317 5316/1/5316
+f 5320/1/5320 5317/1/5317 5322/1/5322
+f 5320/1/5320 5318/1/5318 5317/1/5317
+f 5313/1/5313 5317/1/5317 5318/1/5318
+f 5313/1/5313 5318/1/5318 5312/1/5312
+f 5312/1/5312 5309/1/5309 5313/1/5313
+f 5312/1/5312 6347/1/6347 5309/1/5309
+f 6351/1/6351 6347/1/6347 5312/1/5312
+f 5312/1/5312 5319/1/5319 6351/1/6351
+f 6351/1/6351 5319/1/5319 6353/1/6353
+f 6353/1/6353 5319/1/5319 6276/1/6276
+f 6353/1/6353 6276/1/6276 6352/1/6352
+f 6352/1/6352 6347/1/6347 6353/1/6353
+f 6352/1/6352 6340/1/6340 6347/1/6347
+f 6340/1/6340 6342/1/6342 6347/1/6347
+f 6347/1/6347 6342/1/6342 6345/1/6345
+f 6342/1/6342 6344/1/6344 6345/1/6345
+f 6342/1/6342 6341/1/6341 6344/1/6344
+f 6341/1/6341 6868/1/6868 6344/1/6344
+f 6344/1/6344 6868/1/6868 6540/1/6540
+f 6344/1/6344 6540/1/6540 6537/1/6537
+f 6344/1/6344 6537/1/6537 6346/1/6346
+f 6540/1/6540 6541/1/6541 6537/1/6537
+f 6537/1/6537 6541/1/6541 6542/1/6542
+f 6537/1/6537 6542/1/6542 6539/1/6539
+f 6537/1/6537 6539/1/6539 6538/1/6538
+f 6542/1/6542 6543/1/6543 6539/1/6539
+f 6539/1/6539 6543/1/6543 6544/1/6544
+f 6542/1/6542 6545/1/6545 6543/1/6543
+f 6545/1/6545 6546/1/6546 6543/1/6543
+f 6546/1/6546 6457/1/6457 6543/1/6543
+f 6543/1/6543 6457/1/6457 6456/1/6456
+f 6457/1/6457 6455/1/6455 6456/1/6456
+f 6457/1/6457 6894/1/6894 6455/1/6455
+f 6894/1/6894 6893/1/6893 6455/1/6455
+f 6455/1/6455 6893/1/6893 6445/1/6445
+f 6894/1/6894 6889/1/6889 6893/1/6893
+f 6889/1/6889 6892/1/6892 6893/1/6893
+f 6889/1/6889 6891/1/6891 6892/1/6892
+f 6891/1/6891 5392/1/5392 6892/1/6892
+f 6891/1/6891 6265/1/6265 5392/1/5392
+f 6265/1/6265 6268/1/6268 5392/1/5392
+f 5392/1/5392 6268/1/6268 5393/1/5393
+f 5392/1/5392 5393/1/5393 5331/1/5331
+f 5393/1/5393 5321/1/5321 5331/1/5331
+f 5393/1/5393 6270/1/6270 5321/1/5321
+f 6270/1/6270 6275/1/6275 5321/1/5321
+f 6275/1/6275 5319/1/5319 5321/1/5321
+f 5321/1/5321 5319/1/5319 5318/1/5318
+f 6270/1/6270 6273/1/6273 6275/1/6275
+f 6273/1/6273 6276/1/6276 6275/1/6275
+f 6273/1/6273 6274/1/6274 6276/1/6276
+f 6354/1/6354 6276/1/6276 6274/1/6274
+f 6354/1/6354 6274/1/6274 6355/1/6355
+f 6355/1/6355 6340/1/6340 6354/1/6354
+f 6279/1/6279 6340/1/6340 6355/1/6355
+f 6279/1/6279 6285/1/6285 6340/1/6340
+f 6285/1/6285 6339/1/6339 6340/1/6340
+f 6285/1/6285 6338/1/6338 6339/1/6339
+f 6338/1/6338 6343/1/6343 6339/1/6339
+f 6339/1/6339 6343/1/6343 6341/1/6341
+f 6343/1/6343 6866/1/6866 6341/1/6341
+f 6343/1/6343 6864/1/6864 6866/1/6866
+f 6864/1/6864 6863/1/6863 6866/1/6866
+f 6866/1/6866 6863/1/6863 6872/1/6872
+f 6866/1/6866 6872/1/6872 6869/1/6869
+f 6866/1/6866 6869/1/6869 6868/1/6868
+f 6868/1/6868 6869/1/6869 6870/1/6870
+f 6868/1/6868 6870/1/6870 6871/1/6871
+f 6870/1/6870 6875/1/6875 6871/1/6871
+f 6871/1/6871 6875/1/6875 6883/1/6883
+f 6871/1/6871 6883/1/6883 6905/1/6905
+f 6540/1/6540 6871/1/6871 6905/1/6905
+f 6905/1/6905 6883/1/6883 6904/1/6904
+f 6905/1/6905 6904/1/6904 6541/1/6541
+f 6541/1/6541 6904/1/6904 6545/1/6545
+f 6883/1/6883 6888/1/6888 6904/1/6904
+f 6904/1/6904 6888/1/6888 6546/1/6546
+f 6888/1/6888 6890/1/6890 6546/1/6546
+f 6546/1/6546 6890/1/6890 6894/1/6894
+f 6888/1/6888 6887/1/6887 6890/1/6890
+f 6887/1/6887 6889/1/6889 6890/1/6890
+f 6887/1/6887 6886/1/6886 6889/1/6889
+f 6884/1/6884 6886/1/6886 6887/1/6887
+f 6882/1/6882 6884/1/6884 6887/1/6887
+f 6881/1/6881 6884/1/6884 6882/1/6882
+f 6875/1/6875 6881/1/6881 6882/1/6882
+f 6876/1/6876 6881/1/6881 6875/1/6875
+f 6874/1/6874 6876/1/6876 6875/1/6875
+f 6873/1/6873 6876/1/6876 6874/1/6874
+f 6869/1/6869 6873/1/6873 6874/1/6874
+f 6873/1/6873 6878/1/6878 6876/1/6876
+f 6878/1/6878 6879/1/6879 6876/1/6876
+f 6876/1/6876 6879/1/6879 6880/1/6880
+f 6879/1/6879 6885/1/6885 6880/1/6880
+f 6880/1/6880 6885/1/6885 6884/1/6884
+f 6879/1/6879 6902/1/6902 6885/1/6885
+f 6902/1/6902 6895/1/6895 6885/1/6885
+f 6885/1/6885 6895/1/6895 6891/1/6891
+f 6885/1/6885 6891/1/6891 6886/1/6886
+f 6902/1/6902 6262/1/6262 6895/1/6895
+f 6262/1/6262 6263/1/6263 6895/1/6895
+f 6895/1/6895 6263/1/6263 6265/1/6265
+f 6263/1/6263 6264/1/6264 6265/1/6265
+f 6263/1/6263 6266/1/6266 6264/1/6264
+f 6266/1/6266 6267/1/6267 6264/1/6264
+f 6264/1/6264 6267/1/6267 6269/1/6269
+f 6264/1/6264 6269/1/6269 6268/1/6268
+f 6268/1/6268 6269/1/6269 6271/1/6271
+f 6268/1/6268 6271/1/6271 6270/1/6270
+f 6269/1/6269 6272/1/6272 6271/1/6271
+f 6272/1/6272 6274/1/6274 6271/1/6271
+f 6272/1/6272 6277/1/6277 6274/1/6274
+f 6279/1/6279 6274/1/6274 6277/1/6277
+f 6279/1/6279 6277/1/6277 6280/1/6280
+f 6280/1/6280 6277/1/6277 6278/1/6278
+f 6280/1/6280 6278/1/6278 6281/1/6281
+f 6281/1/6281 6284/1/6284 6280/1/6280
+f 6280/1/6280 6284/1/6284 6285/1/6285
+f 6286/1/6286 6284/1/6284 6281/1/6281
+f 6281/1/6281 6282/1/6282 6286/1/6286
+f 6286/1/6286 6282/1/6282 6288/1/6288
+f 6286/1/6286 6288/1/6288 6289/1/6289
+f 6289/1/6289 6288/1/6288 6291/1/6291
+f 6289/1/6289 6291/1/6291 6292/1/6292
+f 6292/1/6292 6293/1/6293 6289/1/6289
+f 6289/1/6289 6293/1/6293 6284/1/6284
+f 6293/1/6293 6337/1/6337 6284/1/6284
+f 6284/1/6284 6337/1/6337 6338/1/6338
+f 6337/1/6337 6865/1/6865 6338/1/6338
+f 6337/1/6337 6867/1/6867 6865/1/6865
+f 6867/1/6867 6858/1/6858 6865/1/6865
+f 6865/1/6865 6858/1/6858 6860/1/6860
+f 6865/1/6865 6860/1/6860 6864/1/6864
+f 6860/1/6860 6859/1/6859 6864/1/6864
+f 6860/1/6860 6855/1/6855 6859/1/6859
+f 6855/1/6855 6856/1/6856 6859/1/6859
+f 6859/1/6859 6856/1/6856 6862/1/6862
+f 6859/1/6859 6862/1/6862 6863/1/6863
+f 6863/1/6863 6862/1/6862 6903/1/6903
+f 6863/1/6863 6903/1/6903 6877/1/6877
+f 6903/1/6903 6901/1/6901 6877/1/6877
+f 6877/1/6877 6901/1/6901 6878/1/6878
+f 6901/1/6901 6900/1/6900 6878/1/6878
+f 6901/1/6901 6899/1/6899 6900/1/6900
+f 6899/1/6899 6897/1/6897 6900/1/6900
+f 6900/1/6900 6897/1/6897 6902/1/6902
+f 6899/1/6899 6896/1/6896 6897/1/6897
+f 6896/1/6896 6262/1/6262 6897/1/6897
+f 6896/1/6896 6260/1/6260 6262/1/6262
+f 6260/1/6260 6261/1/6261 6262/1/6262
+f 6260/1/6260 6259/1/6259 6261/1/6261
+f 6259/1/6259 6305/1/6305 6261/1/6261
+f 6261/1/6261 6305/1/6305 6266/1/6266
+f 6305/1/6305 6287/1/6287 6266/1/6266
+f 6266/1/6266 6287/1/6287 6357/1/6357
+f 6357/1/6357 6287/1/6287 6283/1/6283
+f 6357/1/6357 6283/1/6283 6267/1/6267
+f 6267/1/6267 6283/1/6283 6272/1/6272
+f 6283/1/6283 6278/1/6278 6272/1/6272
+f 6283/1/6283 6282/1/6282 6278/1/6278
+f 6287/1/6287 6282/1/6282 6283/1/6283
+f 6305/1/6305 6290/1/6290 6287/1/6287
+f 6287/1/6287 6290/1/6290 6288/1/6288
+f 6304/1/6304 6290/1/6290 6305/1/6305
+f 6304/1/6304 6302/1/6302 6290/1/6290
+f 6302/1/6302 6294/1/6294 6290/1/6290
+f 6294/1/6294 6291/1/6291 6290/1/6290
+f 6294/1/6294 6295/1/6295 6291/1/6291
+f 6296/1/6296 6291/1/6291 6295/1/6295
+f 6296/1/6296 6295/1/6295 6297/1/6297
+f 6297/1/6297 6293/1/6293 6296/1/6296
+f 6297/1/6297 6298/1/6298 6293/1/6293
+f 6298/1/6298 6336/1/6336 6293/1/6293
+f 6298/1/6298 6335/1/6335 6336/1/6336
+f 6335/1/6335 6906/1/6906 6336/1/6336
+f 6336/1/6336 6906/1/6906 6867/1/6867
+f 6906/1/6906 6907/1/6907 6867/1/6867
+f 6867/1/6867 6907/1/6907 6908/1/6908
+f 6907/1/6907 6837/1/6837 6908/1/6908
+f 6908/1/6908 6837/1/6837 6909/1/6909
+f 6908/1/6908 6909/1/6909 6857/1/6857
+f 6908/1/6908 6857/1/6857 6858/1/6858
+f 6858/1/6858 6857/1/6857 6854/1/6854
+f 6858/1/6858 6854/1/6854 6855/1/6855
+f 6854/1/6854 6850/1/6850 6855/1/6855
+f 6854/1/6854 6849/1/6849 6850/1/6850
+f 6849/1/6849 6847/1/6847 6850/1/6850
+f 6847/1/6847 6851/1/6851 6850/1/6850
+f 6850/1/6850 6851/1/6851 6853/1/6853
+f 6850/1/6850 6853/1/6853 6856/1/6856
+f 6856/1/6856 6853/1/6853 6861/1/6861
+f 6853/1/6853 6898/1/6898 6861/1/6861
+f 6861/1/6861 6898/1/6898 6899/1/6899
+f 6853/1/6853 6852/1/6852 6898/1/6898
+f 6852/1/6852 6896/1/6896 6898/1/6898
+f 6852/1/6852 6845/1/6845 6896/1/6896
+f 6846/1/6846 6845/1/6845 6852/1/6852
+f 6851/1/6851 6846/1/6846 6852/1/6852
+f 6846/1/6846 6843/1/6843 6845/1/6845
+f 6843/1/6843 6260/1/6260 6845/1/6845
+f 6843/1/6843 6255/1/6255 6260/1/6260
+f 6840/1/6840 6255/1/6255 6843/1/6843
+f 6841/1/6841 6840/1/6840 6843/1/6843
+f 6841/1/6841 6843/1/6843 6844/1/6844
+f 6842/1/6842 6841/1/6841 6844/1/6844
+f 6842/1/6842 6844/1/6844 6847/1/6847
+f 6848/1/6848 6842/1/6842 6847/1/6847
+f 6836/1/6836 6842/1/6842 6848/1/6848
+f 6909/1/6909 6836/1/6836 6848/1/6848
+f 6836/1/6836 6835/1/6835 6842/1/6842
+f 6833/1/6833 6835/1/6835 6836/1/6836
+f 6837/1/6837 6833/1/6833 6836/1/6836
+f 6834/1/6834 6833/1/6833 6837/1/6837
+f 6834/1/6834 6827/1/6827 6833/1/6833
+f 6827/1/6827 6828/1/6828 6833/1/6833
+f 6828/1/6828 6832/1/6832 6833/1/6833
+f 6828/1/6828 6831/1/6831 6832/1/6832
+f 6832/1/6832 6831/1/6831 6838/1/6838
+f 6832/1/6832 6838/1/6838 6835/1/6835
+f 6835/1/6835 6838/1/6838 6841/1/6841
+f 6831/1/6831 6839/1/6839 6838/1/6838
+f 6838/1/6838 6839/1/6839 6840/1/6840
+f 6829/1/6829 6839/1/6839 6831/1/6831
+f 6829/1/6829 6910/1/6910 6839/1/6839
+f 6910/1/6910 5627/1/5627 6839/1/6839
+f 6839/1/6839 5627/1/5627 6255/1/6255
+f 5627/1/5627 6254/1/6254 6255/1/6255
+f 6255/1/6255 6254/1/6254 6259/1/6259
+f 6254/1/6254 6258/1/6258 6259/1/6259
+f 6259/1/6259 6258/1/6258 6304/1/6304
+f 6254/1/6254 6257/1/6257 6258/1/6258
+f 6257/1/6257 6306/1/6306 6258/1/6258
+f 6258/1/6258 6306/1/6306 6303/1/6303
+f 6258/1/6258 6303/1/6303 6302/1/6302
+f 6303/1/6303 6299/1/6299 6302/1/6302
+f 6303/1/6303 6300/1/6300 6299/1/6299
+f 6299/1/6299 6300/1/6300 6295/1/6295
+f 6301/1/6301 6295/1/6295 6300/1/6300
+f 6301/1/6301 6300/1/6300 6334/1/6334
+f 6334/1/6334 6298/1/6298 6301/1/6301
+f 6333/1/6333 6298/1/6298 6334/1/6334
+f 6333/1/6333 6331/1/6331 6298/1/6298
+f 6327/1/6327 6331/1/6331 6333/1/6333
+f 6333/1/6333 6312/1/6312 6327/1/6327
+f 6327/1/6327 6312/1/6312 6311/1/6311
+f 6327/1/6327 6311/1/6311 6325/1/6325
+f 6325/1/6325 6328/1/6328 6327/1/6327
+f 6326/1/6326 6328/1/6328 6325/1/6325
+f 6325/1/6325 6314/1/6314 6326/1/6326
+f 6326/1/6326 6314/1/6314 6317/1/6317
+f 6326/1/6326 6317/1/6317 6329/1/6329
+f 6329/1/6329 6317/1/6317 6321/1/6321
+f 6329/1/6329 6321/1/6321 6356/1/6356
+f 6356/1/6356 6332/1/6332 6329/1/6329
+f 6329/1/6329 6332/1/6332 6328/1/6328
+f 6332/1/6332 6731/1/6731 6328/1/6328
+f 6328/1/6328 6731/1/6731 6330/1/6330
+f 6328/1/6328 6330/1/6330 6331/1/6331
+f 6331/1/6331 6330/1/6330 6335/1/6335
+f 6330/1/6330 6815/1/6815 6335/1/6335
+f 6330/1/6330 6733/1/6733 6815/1/6815
+f 6733/1/6733 6814/1/6814 6815/1/6815
+f 6815/1/6815 6814/1/6814 6817/1/6817
+f 6815/1/6815 6817/1/6817 6906/1/6906
+f 6814/1/6814 6816/1/6816 6817/1/6817
+f 6817/1/6817 6816/1/6816 6821/1/6821
+f 6817/1/6817 6821/1/6821 6826/1/6826
+f 6817/1/6817 6826/1/6826 6907/1/6907
+f 6907/1/6907 6826/1/6826 6834/1/6834
+f 6821/1/6821 6825/1/6825 6826/1/6826
+f 6826/1/6826 6825/1/6825 6827/1/6827
+f 6821/1/6821 6820/1/6820 6825/1/6825
+f 6820/1/6820 6824/1/6824 6825/1/6825
+f 6825/1/6825 6824/1/6824 6828/1/6828
+f 6824/1/6824 6829/1/6829 6828/1/6828
+f 6824/1/6824 6830/1/6830 6829/1/6829
+f 6823/1/6823 6830/1/6830 6824/1/6824
+f 6823/1/6823 6912/1/6912 6830/1/6830
+f 6912/1/6912 6911/1/6911 6830/1/6830
+f 6830/1/6830 6911/1/6911 6910/1/6910
+f 6911/1/6911 5623/1/5623 6910/1/6910
+f 5734/1/5734 5623/1/5623 6911/1/6911
+f 5734/1/5734 5626/1/5626 5623/1/5623
+f 5626/1/5626 5624/1/5624 5623/1/5623
+f 5623/1/5623 5624/1/5624 5625/1/5625
+f 5623/1/5623 5625/1/5625 5627/1/5627
+f 5624/1/5624 6256/1/6256 5625/1/5625
+f 5625/1/5625 6256/1/6256 6257/1/6257
+f 6256/1/6256 6308/1/6308 6257/1/6257
+f 6256/1/6256 6309/1/6309 6308/1/6308
+f 6309/1/6309 6310/1/6310 6308/1/6308
+f 6308/1/6308 6310/1/6310 6307/1/6307
+f 6308/1/6308 6307/1/6307 6306/1/6306
+f 6310/1/6310 6311/1/6311 6307/1/6307
+f 6310/1/6310 6314/1/6314 6311/1/6311
+f 6313/1/6313 6314/1/6314 6310/1/6310
+f 6309/1/6309 6313/1/6313 6310/1/6310
+f 6256/1/6256 6313/1/6313 6309/1/6309
+f 6315/1/6315 6313/1/6313 6256/1/6256
+f 6315/1/6315 6316/1/6316 6313/1/6313
+f 6313/1/6313 6316/1/6316 6317/1/6317
+f 6318/1/6318 6316/1/6316 6315/1/6315
+f 5628/1/5628 6318/1/6318 6315/1/6315
+f 5628/1/5628 6315/1/6315 5624/1/5624
+f 5628/1/5628 6322/1/6322 6318/1/6318
+f 6322/1/6322 6319/1/6319 6318/1/6318
+f 6322/1/6322 6806/1/6806 6319/1/6319
+f 6806/1/6806 6323/1/6323 6319/1/6319
+f 6319/1/6319 6323/1/6323 6320/1/6320
+f 6319/1/6319 6320/1/6320 6316/1/6316
+f 6320/1/6320 6321/1/6321 6316/1/6316
+f 6320/1/6320 6324/1/6324 6321/1/6321
+f 6791/1/6791 6321/1/6321 6324/1/6324
+f 6791/1/6791 6324/1/6324 6789/1/6789
+f 6789/1/6789 6332/1/6332 6791/1/6791
+f 6789/1/6789 6785/1/6785 6332/1/6332
+f 6785/1/6785 6734/1/6734 6332/1/6332
+f 6785/1/6785 6736/1/6736 6734/1/6734
+f 6736/1/6736 5707/1/5707 6734/1/6734
+f 6734/1/6734 5707/1/5707 6732/1/6732
+f 6734/1/6734 6732/1/6732 6731/1/6731
+f 6731/1/6731 6732/1/6732 6733/1/6733
+f 6732/1/6732 6735/1/6735 6733/1/6733
+f 6733/1/6733 6735/1/6735 6810/1/6810
+f 6735/1/6735 6809/1/6809 6810/1/6810
+f 6810/1/6810 6809/1/6809 6813/1/6813
+f 6810/1/6810 6813/1/6813 6814/1/6814
+f 6809/1/6809 6812/1/6812 6813/1/6813
+f 6813/1/6813 6812/1/6812 6818/1/6818
+f 6813/1/6813 6818/1/6818 6816/1/6816
+f 6816/1/6816 6818/1/6818 6819/1/6819
+f 6816/1/6816 6819/1/6819 6820/1/6820
+f 6819/1/6819 6823/1/6823 6820/1/6820
+f 6822/1/6822 6823/1/6823 6819/1/6819
+f 6818/1/6818 6822/1/6822 6819/1/6819
+f 6812/1/6812 6822/1/6822 6818/1/6818
+f 6812/1/6812 6914/1/6914 6822/1/6822
+f 6914/1/6914 6913/1/6913 6822/1/6822
+f 6822/1/6822 6913/1/6913 6912/1/6912
+f 6913/1/6913 5734/1/5734 6912/1/6912
+f 5733/1/5733 5734/1/5734 6913/1/6913
+f 5733/1/5733 5732/1/5732 5734/1/5734
+f 5730/1/5730 5732/1/5732 5733/1/5733
+f 6915/1/6915 5730/1/5730 5733/1/5733
+f 6915/1/6915 5733/1/5733 6914/1/6914
+f 6811/1/6811 6915/1/6915 6914/1/6914
+f 5729/1/5729 6915/1/6915 6811/1/6811
+f 5731/1/5731 5729/1/5729 6811/1/6811
+f 6808/1/6808 5731/1/5731 6811/1/6811
+f 6808/1/6808 6811/1/6811 6809/1/6809
+f 6807/1/6807 5731/1/5731 6808/1/6808
+f 6735/1/6735 6807/1/6807 6808/1/6808
+f 5710/1/5710 6807/1/6807 6735/1/6735
+f 5710/1/5710 5714/1/5714 6807/1/6807
+f 5714/1/5714 5715/1/5715 6807/1/6807
+f 5714/1/5714 5713/1/5713 5715/1/5715
+f 5713/1/5713 5725/1/5725 5715/1/5715
+f 5715/1/5715 5725/1/5725 5729/1/5729
+f 5725/1/5725 5728/1/5728 5729/1/5729
+f 5729/1/5729 5728/1/5728 5730/1/5730
+f 5728/1/5728 5727/1/5727 5730/1/5730
+f 5724/1/5724 5727/1/5727 5728/1/5728
+f 5724/1/5724 5726/1/5726 5727/1/5727
+f 5726/1/5726 5629/1/5629 5727/1/5727
+f 5727/1/5727 5629/1/5629 5626/1/5626
+f 5727/1/5727 5626/1/5626 5732/1/5732
+f 5629/1/5629 5628/1/5628 5626/1/5626
+f 5629/1/5629 5630/1/5630 5628/1/5628
+f 5631/1/5631 5630/1/5630 5629/1/5629
+f 5721/1/5721 5631/1/5631 5629/1/5629
+f 5720/1/5720 5631/1/5631 5721/1/5721
+f 5717/1/5717 5720/1/5720 5721/1/5721
+f 5717/1/5717 5721/1/5721 5718/1/5718
+f 5716/1/5716 5717/1/5717 5718/1/5718
+f 5716/1/5716 5718/1/5718 5719/1/5719
+f 5716/1/5716 5719/1/5719 5712/1/5712
+f 5711/1/5711 5716/1/5716 5712/1/5712
+f 5708/1/5708 5711/1/5711 5712/1/5712
+f 5708/1/5708 5712/1/5712 5709/1/5709
+f 5705/1/5705 5708/1/5708 5709/1/5709
+f 5705/1/5705 5709/1/5709 5710/1/5710
+f 6732/1/6732 5705/1/5705 5710/1/5710
+f 5705/1/5705 5704/1/5704 5708/1/5708
+f 5702/1/5702 5704/1/5704 5705/1/5705
+f 5707/1/5707 5702/1/5702 5705/1/5705
+f 5706/1/5706 5702/1/5702 5707/1/5707
+f 5706/1/5706 5680/1/5680 5702/1/5702
+f 5680/1/5680 5700/1/5700 5702/1/5702
+f 5702/1/5702 5700/1/5700 5701/1/5701
+f 5700/1/5700 5699/1/5699 5701/1/5701
+f 5701/1/5701 5699/1/5699 5703/1/5703
+f 5701/1/5701 5703/1/5703 5704/1/5704
+f 5704/1/5704 5703/1/5703 5711/1/5711
+f 5699/1/5699 5698/1/5698 5703/1/5703
+f 5703/1/5703 5698/1/5698 5716/1/5716
+f 5699/1/5699 5693/1/5693 5698/1/5698
+f 5693/1/5693 5697/1/5697 5698/1/5698
+f 5698/1/5698 5697/1/5697 5717/1/5717
+f 5693/1/5693 5692/1/5692 5697/1/5697
+f 5692/1/5692 5696/1/5696 5697/1/5697
+f 5697/1/5697 5696/1/5696 5720/1/5720
+f 5696/1/5696 5633/1/5633 5720/1/5720
+f 5695/1/5695 5633/1/5633 5696/1/5696
+f 5695/1/5695 5635/1/5635 5633/1/5633
+f 5635/1/5635 5634/1/5634 5633/1/5633
+f 5633/1/5633 5634/1/5634 5632/1/5632
+f 5633/1/5633 5632/1/5632 5631/1/5631
+f 5634/1/5634 6802/1/6802 5632/1/5632
+f 5632/1/5632 6802/1/6802 6804/1/6804
+f 5632/1/5632 6804/1/6804 5630/1/5630
+f 5630/1/5630 6804/1/6804 6322/1/6322
+f 6804/1/6804 6805/1/6805 6322/1/6322
+f 6804/1/6804 6800/1/6800 6805/1/6805
+f 6800/1/6800 6793/1/6793 6805/1/6805
+f 6805/1/6805 6793/1/6793 6806/1/6806
+f 6793/1/6793 6790/1/6790 6806/1/6806
+f 6793/1/6793 6792/1/6792 6790/1/6790
+f 6786/1/6786 6790/1/6790 6792/1/6792
+f 6786/1/6786 6792/1/6792 6784/1/6784
+f 6784/1/6784 6783/1/6783 6786/1/6786
+f 6786/1/6786 6783/1/6783 6785/1/6785
+f 6786/1/6786 6785/1/6785 6787/1/6787
+f 6787/1/6787 6785/1/6785 6788/1/6788
+f 6788/1/6788 6790/1/6790 6787/1/6787
+f 6788/1/6788 6324/1/6324 6790/1/6790
+f 6323/1/6323 6790/1/6790 6324/1/6324
+f 6784/1/6784 6782/1/6782 6783/1/6783
+f 6782/1/6782 6737/1/6737 6783/1/6783
+f 6783/1/6783 6737/1/6737 6736/1/6736
+f 6737/1/6737 5706/1/5706 6736/1/6736
+f 6737/1/6737 5681/1/5681 5706/1/5706
+f 6738/1/6738 5681/1/5681 6737/1/6737
+f 6738/1/6738 5676/1/5676 5681/1/5681
+f 5676/1/5676 5677/1/5677 5681/1/5681
+f 5681/1/5681 5677/1/5677 5680/1/5680
+f 5677/1/5677 5679/1/5679 5680/1/5680
+f 5680/1/5680 5679/1/5679 5690/1/5690
+f 5679/1/5679 5685/1/5685 5690/1/5690
+f 5690/1/5690 5685/1/5685 5691/1/5691
+f 5690/1/5690 5691/1/5691 5700/1/5700
+f 5700/1/5700 5691/1/5691 5694/1/5694
+f 5691/1/5691 5689/1/5689 5694/1/5694
+f 5689/1/5689 5693/1/5693 5694/1/5694
+f 5685/1/5685 5689/1/5689 5691/1/5691
+f 5685/1/5685 5684/1/5684 5689/1/5689
+f 5684/1/5684 5688/1/5688 5689/1/5689
+f 5689/1/5689 5688/1/5688 5692/1/5692
+f 5688/1/5688 5695/1/5695 5692/1/5692
+f 5687/1/5687 5695/1/5695 5688/1/5688
+f 5687/1/5687 5735/1/5735 5695/1/5695
+f 5686/1/5686 5735/1/5735 5687/1/5687
+f 5683/1/5683 5686/1/5686 5687/1/5687
+f 5683/1/5683 5687/1/5687 5684/1/5684
+f 5682/1/5682 5683/1/5683 5684/1/5684
+f 5664/1/5664 5683/1/5683 5682/1/5682
+f 5669/1/5669 5664/1/5664 5682/1/5682
+f 5678/1/5678 5669/1/5669 5682/1/5682
+f 5678/1/5678 5682/1/5682 5679/1/5679
+f 5668/1/5668 5669/1/5669 5678/1/5678
+f 5677/1/5677 5668/1/5668 5678/1/5678
+f 5670/1/5670 5668/1/5668 5677/1/5677
+f 5670/1/5670 5667/1/5667 5668/1/5668
+f 5667/1/5667 5665/1/5665 5668/1/5668
+f 5667/1/5667 5662/1/5662 5665/1/5665
+f 5662/1/5662 5661/1/5661 5665/1/5665
+f 5665/1/5665 5661/1/5661 5664/1/5664
+f 5661/1/5661 5663/1/5663 5664/1/5664
+f 5664/1/5664 5663/1/5663 5686/1/5686
+f 5663/1/5663 5641/1/5641 5686/1/5686
+f 5659/1/5659 5641/1/5641 5663/1/5663
+f 5659/1/5659 5640/1/5640 5641/1/5641
+f 5640/1/5640 5637/1/5637 5641/1/5641
+f 5641/1/5641 5637/1/5637 5635/1/5635
+f 5641/1/5641 5635/1/5635 5735/1/5735
+f 5637/1/5637 5636/1/5636 5635/1/5635
+f 5637/1/5637 6766/1/6766 5636/1/5636
+f 6766/1/6766 6767/1/6767 5636/1/5636
+f 5636/1/5636 6767/1/6767 6771/1/6771
+f 5636/1/5636 6771/1/6771 6803/1/6803
+f 5636/1/5636 6803/1/6803 5634/1/5634
+f 6771/1/6771 6773/1/6773 6803/1/6803
+f 6803/1/6803 6773/1/6773 6799/1/6799
+f 6803/1/6803 6799/1/6799 6802/1/6802
+f 6802/1/6802 6799/1/6799 6801/1/6801
+f 6802/1/6802 6801/1/6801 6800/1/6800
+f 6801/1/6801 6797/1/6797 6800/1/6800
+f 6801/1/6801 6799/1/6799 6797/1/6797
+f 6799/1/6799 6796/1/6796 6797/1/6797
+f 6797/1/6797 6796/1/6796 6794/1/6794
+f 6797/1/6797 6794/1/6794 6793/1/6793
+f 6794/1/6794 6796/1/6796 6795/1/6795
+f 6784/1/6784 6794/1/6794 6795/1/6795
+f 6795/1/6795 6796/1/6796 6798/1/6798
+f 6798/1/6798 6782/1/6782 6795/1/6795
+f 6779/1/6779 6782/1/6782 6798/1/6798
+f 6798/1/6798 6780/1/6780 6779/1/6779
+f 6779/1/6779 6780/1/6780 6777/1/6777
+f 6779/1/6779 6777/1/6777 6781/1/6781
+f 6781/1/6781 6739/1/6739 6779/1/6779
+f 6776/1/6776 6739/1/6739 6781/1/6781
+f 6778/1/6778 6739/1/6739 6776/1/6776
+f 6776/1/6776 6774/1/6774 6778/1/6778
+f 6778/1/6778 6774/1/6774 6775/1/6775
+f 6775/1/6775 6740/1/6740 6778/1/6778
+f 6747/1/6747 6740/1/6740 6775/1/6775
+f 6775/1/6775 6748/1/6748 6747/1/6747
+f 6747/1/6747 6748/1/6748 6743/1/6743
+f 6743/1/6743 6748/1/6748 6745/1/6745
+f 6743/1/6743 6745/1/6745 6742/1/6742
+f 6742/1/6742 6741/1/6741 6743/1/6743
+f 6743/1/6743 6741/1/6741 6740/1/6740
+f 6741/1/6741 5737/1/5737 6740/1/6740
+f 6740/1/6740 5737/1/5737 5736/1/5736
+f 6740/1/6740 5736/1/5736 6739/1/6739
+f 6739/1/6739 5736/1/5736 6738/1/6738
+f 6739/1/6739 6738/1/6738 6782/1/6782
+f 5737/1/5737 5675/1/5675 5736/1/5736
+f 5736/1/5736 5675/1/5675 5676/1/5676
+f 5675/1/5675 5672/1/5672 5676/1/5676
+f 5676/1/5676 5672/1/5672 5670/1/5670
+f 5672/1/5672 5666/1/5666 5670/1/5670
+f 5672/1/5672 5671/1/5671 5666/1/5666
+f 5671/1/5671 5656/1/5656 5666/1/5666
+f 5666/1/5666 5656/1/5656 5662/1/5662
+f 5656/1/5656 5660/1/5660 5662/1/5662
+f 5656/1/5656 5655/1/5655 5660/1/5660
+f 5655/1/5655 5658/1/5658 5660/1/5660
+f 5660/1/5660 5658/1/5658 5659/1/5659
+f 5660/1/5660 5659/1/5659 5661/1/5661
+f 5655/1/5655 5651/1/5651 5658/1/5658
+f 5651/1/5651 5638/1/5638 5658/1/5658
+f 5658/1/5658 5638/1/5638 5640/1/5640
+f 5646/1/5646 5638/1/5638 5651/1/5651
+f 5652/1/5652 5646/1/5646 5651/1/5651
+f 5650/1/5650 5646/1/5646 5652/1/5652
+f 5654/1/5654 5650/1/5650 5652/1/5652
+f 5654/1/5654 5652/1/5652 5657/1/5657
+f 5673/1/5673 5654/1/5654 5657/1/5657
+f 5673/1/5673 5657/1/5657 5671/1/5671
+f 6231/1/6231 5654/1/5654 5673/1/5673
+f 5674/1/5674 6231/1/6231 5673/1/5673
+f 5674/1/5674 5673/1/5673 5672/1/5672
+f 5674/1/5674 6230/1/6230 6231/1/6231
+f 6230/1/6230 5653/1/5653 6231/1/6231
+f 6230/1/6230 6246/1/6246 5653/1/5653
+f 6246/1/6246 5649/1/5649 5653/1/5653
+f 5653/1/5653 5649/1/5649 5650/1/5650
+f 5649/1/5649 5645/1/5645 5650/1/5650
+f 5649/1/5649 5648/1/5648 5645/1/5645
+f 5648/1/5648 5644/1/5644 5645/1/5645
+f 5645/1/5645 5644/1/5644 5642/1/5642
+f 5645/1/5645 5642/1/5642 5646/1/5646
+f 5644/1/5644 5643/1/5643 5642/1/5642
+f 5642/1/5642 5643/1/5643 5639/1/5639
+f 5642/1/5642 5639/1/5639 5638/1/5638
+f 5638/1/5638 5639/1/5639 5637/1/5637
+f 5643/1/5643 6763/1/6763 5639/1/5639
+f 5639/1/5639 6763/1/6763 6766/1/6766
+f 6763/1/6763 6764/1/6764 6766/1/6766
+f 6763/1/6763 6756/1/6756 6764/1/6764
+f 6756/1/6756 6762/1/6762 6764/1/6764
+f 6764/1/6764 6762/1/6762 6765/1/6765
+f 6764/1/6764 6765/1/6765 6767/1/6767
+f 6767/1/6767 6765/1/6765 6768/1/6768
+f 6767/1/6767 6768/1/6768 6770/1/6770
+f 6768/1/6768 6769/1/6769 6770/1/6770
+f 6770/1/6770 6769/1/6769 6772/1/6772
+f 6770/1/6770 6772/1/6772 6773/1/6773
+f 6772/1/6772 6777/1/6777 6773/1/6773
+f 6772/1/6772 6774/1/6774 6777/1/6777
+f 6769/1/6769 6774/1/6774 6772/1/6772
+f 6769/1/6769 6748/1/6748 6774/1/6774
+f 6768/1/6768 6748/1/6748 6769/1/6769
+f 6749/1/6749 6748/1/6748 6768/1/6768
+f 6765/1/6765 6749/1/6749 6768/1/6768
+f 6762/1/6762 6749/1/6749 6765/1/6765
+f 6762/1/6762 6750/1/6750 6749/1/6749
+f 6750/1/6750 6746/1/6746 6749/1/6749
+f 6749/1/6749 6746/1/6746 6745/1/6745
+f 6750/1/6750 6751/1/6751 6746/1/6746
+f 6746/1/6746 6751/1/6751 6744/1/6744
+f 6742/1/6742 6746/1/6746 6744/1/6744
+f 6744/1/6744 5741/1/5741 6742/1/6742
+f 6752/1/6752 5741/1/5741 6744/1/6744
+f 6753/1/6753 5741/1/5741 6752/1/6752
+f 6752/1/6752 6754/1/6754 6753/1/6753
+f 6753/1/6753 6754/1/6754 5837/1/5837
+f 6753/1/6753 5837/1/5837 5836/1/5836
+f 5836/1/5836 5744/1/5744 6753/1/6753
+f 5835/1/5835 5744/1/5744 5836/1/5836
+f 5834/1/5834 5744/1/5744 5835/1/5835
+f 5835/1/5835 5819/1/5819 5834/1/5834
+f 5834/1/5834 5819/1/5819 5833/1/5833
+f 5833/1/5833 5747/1/5747 5834/1/5834
+f 5832/1/5832 5747/1/5747 5833/1/5833
+f 5833/1/5833 5815/1/5815 5832/1/5832
+f 5832/1/5832 5815/1/5815 5753/1/5753
+f 5753/1/5753 5815/1/5815 5816/1/5816
+f 5753/1/5753 5816/1/5816 5752/1/5752
+f 5752/1/5752 5750/1/5750 5753/1/5753
+f 5753/1/5753 5750/1/5750 5747/1/5747
+f 5750/1/5750 5748/1/5748 5747/1/5747
+f 5747/1/5747 5748/1/5748 5745/1/5745
+f 5747/1/5747 5745/1/5745 5744/1/5744
+f 5744/1/5744 5745/1/5745 5742/1/5742
+f 5744/1/5744 5742/1/5742 5741/1/5741
+f 5741/1/5741 5742/1/5742 5739/1/5739
+f 5741/1/5741 5739/1/5739 6741/1/6741
+f 5742/1/5742 5740/1/5740 5739/1/5739
+f 5739/1/5739 5740/1/5740 5738/1/5738
+f 5739/1/5739 5738/1/5738 5737/1/5737
+f 5740/1/5740 6229/1/6229 5738/1/5738
+f 5738/1/5738 6229/1/6229 5674/1/5674
+f 5738/1/5738 5674/1/5674 5675/1/5675
+f 5740/1/5740 6232/1/6232 6229/1/6229
+f 6232/1/6232 6233/1/6233 6229/1/6229
+f 6229/1/6229 6233/1/6233 6234/1/6234
+f 6229/1/6229 6234/1/6234 6230/1/6230
+f 6234/1/6234 6240/1/6240 6230/1/6230
+f 6234/1/6234 6239/1/6239 6240/1/6240
+f 6239/1/6239 6245/1/6245 6240/1/6240
+f 6240/1/6240 6245/1/6245 6246/1/6246
+f 6239/1/6239 6241/1/6241 6245/1/6245
+f 6241/1/6241 6247/1/6247 6245/1/6245
+f 6245/1/6245 6247/1/6247 5648/1/5648
+f 6247/1/6247 5647/1/5647 5648/1/5648
+f 6248/1/6248 5647/1/5647 6247/1/6247
+f 6248/1/6248 6250/1/6250 5647/1/5647
+f 6250/1/6250 7412/1/7412 5647/1/5647
+f 5647/1/5647 7412/1/7412 5643/1/5643
+f 7412/1/7412 6760/1/6760 5643/1/5643
+f 7412/1/7412 5821/1/5821 6760/1/6760
+f 5821/1/5821 6758/1/6758 6760/1/6760
+f 6760/1/6760 6758/1/6758 6756/1/6756
+f 6758/1/6758 6755/1/6755 6756/1/6756
+f 6756/1/6756 6755/1/6755 6757/1/6757
+f 6757/1/6757 6755/1/6755 6750/1/6750
+f 6758/1/6758 6759/1/6759 6755/1/6755
+f 6755/1/6755 6759/1/6759 6754/1/6754
+f 6755/1/6755 6754/1/6754 6751/1/6751
+f 5820/1/5820 6759/1/6759 6758/1/6758
+f 5820/1/5820 5818/1/5818 6759/1/6759
+f 5818/1/5818 6761/1/6761 6759/1/6759
+f 6761/1/6761 5837/1/5837 6759/1/6759
+f 6761/1/6761 5819/1/5819 5837/1/5837
+f 5817/1/5817 5819/1/5819 6761/1/6761
+f 5817/1/5817 5815/1/5815 5819/1/5819
+f 5814/1/5814 5815/1/5815 5817/1/5817
+f 5814/1/5814 5817/1/5817 5818/1/5818
+f 5809/1/5809 5814/1/5814 5818/1/5818
+f 5809/1/5809 5808/1/5808 5814/1/5814
+f 5808/1/5808 5811/1/5811 5814/1/5814
+f 5805/1/5805 5811/1/5811 5808/1/5808
+f 5806/1/5806 5805/1/5805 5808/1/5808
+f 5802/1/5802 5805/1/5805 5806/1/5806
+f 5803/1/5803 5802/1/5802 5806/1/5806
+f 5803/1/5803 5806/1/5806 5807/1/5807
+f 7413/1/7413 5803/1/5803 5807/1/5807
+f 7413/1/7413 5807/1/5807 7411/1/7411
+f 7406/1/7406 7413/1/7413 7411/1/7411
+f 7406/1/7406 7411/1/7411 7407/1/7407
+f 7405/1/7405 7406/1/7406 7407/1/7407
+f 7405/1/7405 7407/1/7407 7408/1/7408
+f 7402/1/7402 7405/1/7405 7408/1/7408
+f 7402/1/7402 7408/1/7408 6253/1/6253
+f 7403/1/7403 7402/1/7402 6253/1/6253
+f 7403/1/7403 6253/1/6253 6252/1/6252
+f 6251/1/6251 7403/1/7403 6252/1/6252
+f 6251/1/6251 6252/1/6252 6236/1/6236
+f 6235/1/6235 6251/1/6251 6236/1/6236
+f 6235/1/6235 6236/1/6236 6232/1/6232
+f 5743/1/5743 6235/1/6235 6232/1/6232
+f 5743/1/5743 7392/1/7392 6235/1/6235
+f 7392/1/7392 7404/1/7404 6235/1/6235
+f 7392/1/7392 7395/1/7395 7404/1/7404
+f 7395/1/7395 7398/1/7398 7404/1/7404
+f 7404/1/7404 7398/1/7398 7403/1/7403
+f 7395/1/7395 7394/1/7394 7398/1/7398
+f 7394/1/7394 7397/1/7397 7398/1/7398
+f 7397/1/7397 7401/1/7401 7398/1/7398
+f 7398/1/7398 7401/1/7401 7402/1/7402
+f 7397/1/7397 7400/1/7400 7401/1/7401
+f 7401/1/7401 7400/1/7400 7405/1/7405
+f 7397/1/7397 7399/1/7399 7400/1/7400
+f 7399/1/7399 7406/1/7406 7400/1/7400
+f 7399/1/7399 7414/1/7414 7406/1/7406
+f 7415/1/7415 7414/1/7414 7399/1/7399
+f 7396/1/7396 7415/1/7415 7399/1/7399
+f 7416/1/7416 7415/1/7415 7396/1/7396
+f 7388/1/7388 7416/1/7416 7396/1/7396
+f 7388/1/7388 7396/1/7396 7393/1/7393
+f 7389/1/7389 7388/1/7388 7393/1/7393
+f 7389/1/7389 7393/1/7393 7391/1/7391
+f 7390/1/7390 7389/1/7389 7391/1/7391
+f 7390/1/7390 7391/1/7391 7392/1/7392
+f 5746/1/5746 7390/1/7390 7392/1/7392
+f 5749/1/5749 7390/1/7390 5746/1/5746
+f 5748/1/5748 5749/1/5749 5746/1/5746
+f 5751/1/5751 5749/1/5749 5748/1/5748
+f 5751/1/5751 7328/1/7328 5749/1/5749
+f 7328/1/7328 7386/1/7386 5749/1/5749
+f 7328/1/7328 7384/1/7384 7386/1/7386
+f 7384/1/7384 7383/1/7383 7386/1/7386
+f 7386/1/7386 7383/1/7383 7385/1/7385
+f 7386/1/7386 7385/1/7385 7390/1/7390
+f 7383/1/7383 7382/1/7382 7385/1/7385
+f 7385/1/7385 7382/1/7382 7387/1/7387
+f 7385/1/7385 7387/1/7387 7388/1/7388
+f 7382/1/7382 7378/1/7378 7387/1/7387
+f 7378/1/7378 7416/1/7416 7387/1/7387
+f 7378/1/7378 7377/1/7377 7416/1/7416
+f 7378/1/7378 7374/1/7374 7377/1/7377
+f 7374/1/7374 7372/1/7372 7377/1/7377
+f 7377/1/7377 7372/1/7372 7376/1/7376
+f 7377/1/7377 7376/1/7376 7415/1/7415
+f 7372/1/7372 5796/1/5796 7376/1/7376
+f 7376/1/7376 5796/1/5796 7414/1/7414
+f 7414/1/7414 5796/1/5796 7413/1/7413
+f 7372/1/7372 5794/1/5794 5796/1/5796
+f 5794/1/5794 5795/1/5795 5796/1/5796
+f 5796/1/5796 5795/1/5795 5803/1/5803
+f 5794/1/5794 5793/1/5793 5795/1/5795
+f 5793/1/5793 5798/1/5798 5795/1/5795
+f 5795/1/5795 5798/1/5798 5802/1/5802
+f 5798/1/5798 5801/1/5801 5802/1/5802
+f 5802/1/5802 5801/1/5801 5804/1/5804
+f 5804/1/5804 5801/1/5801 5810/1/5810
+f 5804/1/5804 5810/1/5810 5805/1/5805
+f 5801/1/5801 5813/1/5813 5810/1/5810
+f 5810/1/5810 5813/1/5813 5812/1/5812
+f 5810/1/5810 5812/1/5812 5811/1/5811
+f 5811/1/5811 5812/1/5812 5816/1/5816
+f 5812/1/5812 5813/1/5813 5757/1/5757
+f 5752/1/5752 5812/1/5812 5757/1/5757
+f 5757/1/5757 5754/1/5754 5752/1/5752
+f 5756/1/5756 5754/1/5754 5757/1/5757
+f 5758/1/5758 5754/1/5754 5756/1/5756
+f 5756/1/5756 5822/1/5822 5758/1/5758
+f 5758/1/5758 5822/1/5822 5823/1/5823
+f 5758/1/5758 5823/1/5823 5824/1/5824
+f 5824/1/5824 5759/1/5759 5758/1/5758
+f 5825/1/5825 5759/1/5759 5824/1/5824
+f 5829/1/5829 5759/1/5759 5825/1/5825
+f 5825/1/5825 5826/1/5826 5829/1/5829
+f 5829/1/5829 5826/1/5826 5830/1/5830
+f 5830/1/5830 5761/1/5761 5829/1/5829
+f 5831/1/5831 5761/1/5761 5830/1/5830
+f 5830/1/5830 5777/1/5777 5831/1/5831
+f 5831/1/5831 5777/1/5777 5767/1/5767
+f 5767/1/5767 5777/1/5777 5769/1/5769
+f 5767/1/5767 5769/1/5769 5765/1/5765
+f 5765/1/5765 5763/1/5763 5767/1/5767
+f 5767/1/5767 5763/1/5763 5761/1/5761
+f 5763/1/5763 5762/1/5762 5761/1/5761
+f 5761/1/5761 5762/1/5762 5760/1/5760
+f 5761/1/5761 5760/1/5760 5759/1/5759
+f 5759/1/5759 5760/1/5760 5755/1/5755
+f 5759/1/5759 5755/1/5755 5754/1/5754
+f 5754/1/5754 5755/1/5755 5751/1/5751
+f 5754/1/5754 5751/1/5751 5750/1/5750
+f 5760/1/5760 7325/1/7325 5755/1/5755
+f 5755/1/5755 7325/1/7325 7328/1/7328
+f 7325/1/7325 7327/1/7327 7328/1/7328
+f 7325/1/7325 7326/1/7326 7327/1/7327
+f 7326/1/7326 7331/1/7331 7327/1/7327
+f 7327/1/7327 7331/1/7331 7337/1/7337
+f 7327/1/7327 7337/1/7337 7381/1/7381
+f 7327/1/7327 7381/1/7381 7384/1/7384
+f 7337/1/7337 7379/1/7379 7381/1/7381
+f 7381/1/7381 7379/1/7379 7380/1/7380
+f 7381/1/7381 7380/1/7380 7383/1/7383
+f 7379/1/7379 7375/1/7375 7380/1/7380
+f 7380/1/7380 7375/1/7375 7378/1/7378
+f 7379/1/7379 7343/1/7343 7375/1/7375
+f 7343/1/7343 7373/1/7373 7375/1/7375
+f 7375/1/7375 7373/1/7373 7374/1/7374
+f 7343/1/7343 7344/1/7344 7373/1/7373
+f 7344/1/7344 7371/1/7371 7373/1/7373
+f 7373/1/7373 7371/1/7371 7372/1/7372
+f 7344/1/7344 7345/1/7345 7371/1/7371
+f 7345/1/7345 5794/1/5794 7371/1/7371
+f 7345/1/7345 5792/1/5792 5794/1/5794
+f 7347/1/7347 5792/1/5792 7345/1/7345
+f 7341/1/7341 7347/1/7347 7345/1/7345
+f 7341/1/7341 7345/1/7345 7342/1/7342
+f 7338/1/7338 7341/1/7341 7342/1/7342
+f 7338/1/7338 7342/1/7342 7339/1/7339
+f 7335/1/7335 7338/1/7338 7339/1/7339
+f 7335/1/7335 7339/1/7339 7336/1/7336
+f 7331/1/7331 7335/1/7335 7336/1/7336
+f 7330/1/7330 7335/1/7335 7331/1/7331
+f 7330/1/7330 7334/1/7334 7335/1/7335
+f 7329/1/7329 7334/1/7334 7330/1/7330
+f 7326/1/7326 7329/1/7329 7330/1/7330
+f 7324/1/7324 7329/1/7329 7326/1/7326
+f 7324/1/7324 7332/1/7332 7329/1/7329
+f 7332/1/7332 7333/1/7333 7329/1/7329
+f 7332/1/7332 7354/1/7354 7333/1/7333
+f 7354/1/7354 7353/1/7353 7333/1/7333
+f 7353/1/7353 7348/1/7348 7333/1/7333
+f 7333/1/7333 7348/1/7348 7340/1/7340
+f 7333/1/7333 7340/1/7340 7334/1/7334
+f 7334/1/7334 7340/1/7340 7338/1/7338
+f 7348/1/7348 7346/1/7346 7340/1/7340
+f 7340/1/7340 7346/1/7346 7341/1/7341
+f 7348/1/7348 7349/1/7349 7346/1/7346
+f 7349/1/7349 7350/1/7350 7346/1/7346
+f 7346/1/7346 7350/1/7350 7347/1/7347
+f 7352/1/7352 7350/1/7350 7349/1/7349
+f 7353/1/7353 7352/1/7352 7349/1/7349
+f 7356/1/7356 7352/1/7352 7353/1/7353
+f 7355/1/7355 7356/1/7356 7353/1/7353
+f 7358/1/7358 7356/1/7356 7355/1/7355
+f 7360/1/7360 7358/1/7358 7355/1/7355
+f 7360/1/7360 7355/1/7355 7361/1/7361
+f 7321/1/7321 7360/1/7360 7361/1/7361
+f 7321/1/7321 7361/1/7361 7324/1/7324
+f 7323/1/7323 7321/1/7321 7324/1/7324
+f 7323/1/7323 7324/1/7324 7325/1/7325
+f 7322/1/7322 7321/1/7321 7323/1/7323
+f 5762/1/5762 7322/1/7322 7323/1/7323
+f 5764/1/5764 7322/1/7322 5762/1/5762
+f 5764/1/5764 7308/1/7308 7322/1/7322
+f 7308/1/7308 7320/1/7320 7322/1/7322
+f 7308/1/7308 7317/1/7317 7320/1/7320
+f 7317/1/7317 7316/1/7316 7320/1/7320
+f 7320/1/7320 7316/1/7316 7319/1/7319
+f 7320/1/7320 7319/1/7319 7321/1/7321
+f 7316/1/7316 7318/1/7318 7319/1/7319
+f 7319/1/7319 7318/1/7318 7362/1/7362
+f 7319/1/7319 7362/1/7362 7358/1/7358
+f 7362/1/7362 7359/1/7359 7358/1/7358
+f 7363/1/7363 7359/1/7359 7362/1/7362
+f 7363/1/7363 7366/1/7366 7359/1/7359
+f 7359/1/7359 7366/1/7366 7357/1/7357
+f 7359/1/7359 7357/1/7357 7356/1/7356
+f 7366/1/7366 7370/1/7370 7357/1/7357
+f 7357/1/7357 7370/1/7370 7351/1/7351
+f 7357/1/7357 7351/1/7351 7352/1/7352
+f 7370/1/7370 5790/1/5790 7351/1/7351
+f 7351/1/7351 5790/1/5790 5791/1/5791
+f 7351/1/7351 5791/1/5791 7350/1/7350
+f 7350/1/7350 5791/1/5791 5792/1/5792
+f 5791/1/5791 5787/1/5787 5792/1/5792
+f 5792/1/5792 5787/1/5787 5793/1/5793
+f 5787/1/5787 5785/1/5785 5793/1/5793
+f 5793/1/5793 5785/1/5785 5797/1/5797
+f 5785/1/5785 5799/1/5799 5797/1/5797
+f 5797/1/5797 5799/1/5799 5800/1/5800
+f 5797/1/5797 5800/1/5800 5798/1/5798
+f 5799/1/5799 5827/1/5827 5800/1/5800
+f 5827/1/5827 5823/1/5823 5800/1/5800
+f 5827/1/5827 5826/1/5826 5823/1/5823
+f 5828/1/5828 5826/1/5826 5827/1/5827
+f 5828/1/5828 5777/1/5777 5826/1/5826
+f 5779/1/5779 5777/1/5777 5828/1/5828
+f 5779/1/5779 5828/1/5828 5799/1/5799
+f 5776/1/5776 5777/1/5777 5779/1/5779
+f 5778/1/5778 5776/1/5776 5779/1/5779
+f 5785/1/5785 5778/1/5778 5779/1/5779
+f 5783/1/5783 5778/1/5778 5785/1/5785
+f 5783/1/5783 5780/1/5780 5778/1/5778
+f 5784/1/5784 5780/1/5780 5783/1/5783
+f 5786/1/5786 5784/1/5784 5783/1/5783
+f 5786/1/5786 5783/1/5783 5787/1/5787
+f 5788/1/5788 5784/1/5784 5786/1/5786
+f 5790/1/5790 5788/1/5788 5786/1/5786
+f 5838/1/5838 5788/1/5788 5790/1/5790
+f 5943/1/5943 5838/1/5838 5790/1/5790
+f 5938/1/5938 5838/1/5838 5943/1/5943
+f 7368/1/7368 5938/1/5938 5943/1/5943
+f 7368/1/7368 5943/1/5943 7365/1/7365
+f 7364/1/7364 7368/1/7368 7365/1/7365
+f 7364/1/7364 7365/1/7365 7363/1/7363
+f 7315/1/7315 7364/1/7364 7363/1/7363
+f 7315/1/7315 7363/1/7363 7318/1/7318
+f 7313/1/7313 7364/1/7364 7315/1/7315
+f 7314/1/7314 7313/1/7313 7315/1/7315
+f 7314/1/7314 7315/1/7315 7316/1/7316
+f 7312/1/7312 7313/1/7313 7314/1/7314
+f 7307/1/7307 7312/1/7312 7314/1/7314
+f 7307/1/7307 7314/1/7314 7317/1/7317
+f 7307/1/7307 7310/1/7310 7312/1/7312
+f 7310/1/7310 7311/1/7311 7312/1/7312
+f 7310/1/7310 5942/1/5942 7311/1/7311
+f 5942/1/5942 7369/1/7369 7311/1/7311
+f 7311/1/7311 7369/1/7369 7313/1/7313
+f 7369/1/7369 7367/1/7367 7313/1/7313
+f 7369/1/7369 5940/1/5940 7367/1/7367
+f 7367/1/7367 5940/1/5940 7368/1/7368
+f 7369/1/7369 5939/1/5939 5940/1/5940
+f 5939/1/5939 5937/1/5937 5940/1/5940
+f 5940/1/5940 5937/1/5937 5938/1/5938
+f 5935/1/5935 5937/1/5937 5939/1/5939
+f 5941/1/5941 5935/1/5935 5939/1/5939
+f 5936/1/5936 5935/1/5935 5941/1/5941
+f 5926/1/5926 5936/1/5936 5941/1/5941
+f 5926/1/5926 5941/1/5941 5942/1/5942
+f 7309/1/7309 5926/1/5926 5942/1/5942
+f 5924/1/5924 5926/1/5926 7309/1/7309
+f 7306/1/7306 5924/1/5924 7309/1/7309
+f 7306/1/7306 7309/1/7309 7310/1/7310
+f 5919/1/5919 5924/1/5924 7306/1/7306
+f 7304/1/7304 5919/1/5919 7306/1/7306
+f 7304/1/7304 7306/1/7306 7307/1/7307
+f 7304/1/7304 7307/1/7307 7308/1/7308
+f 7305/1/7305 7304/1/7304 7308/1/7308
+f 7303/1/7303 7304/1/7304 7305/1/7305
+f 5773/1/5773 7303/1/7303 7305/1/7305
+f 5773/1/5773 7305/1/7305 5766/1/5766
+f 5772/1/5772 5773/1/5773 5766/1/5766
+f 5772/1/5772 5766/1/5766 5771/1/5771
+f 5771/1/5771 6222/1/6222 5772/1/5772
+f 5772/1/5772 6222/1/6222 6224/1/6224
+f 5772/1/5772 6224/1/6224 6227/1/6227
+f 6227/1/6227 6224/1/6224 6228/1/6228
+f 6228/1/6228 5773/1/5773 6227/1/6227
+f 7418/1/7418 5773/1/5773 6228/1/6228
+f 6228/1/6228 6226/1/6226 7418/1/7418
+f 7418/1/7418 6226/1/6226 7417/1/7417
+f 7417/1/7417 7249/1/7249 7418/1/7418
+f 7248/1/7248 7249/1/7249 7417/1/7417
+f 7417/1/7417 7247/1/7247 7248/1/7248
+f 7248/1/7248 7247/1/7247 7245/1/7245
+f 7245/1/7245 7247/1/7247 7241/1/7241
+f 7245/1/7245 7241/1/7241 7240/1/7240
+f 7240/1/7240 7246/1/7246 7245/1/7245
+f 7245/1/7245 7246/1/7246 7249/1/7249
+f 7246/1/7246 7251/1/7251 7249/1/7249
+f 7249/1/7249 7251/1/7251 7303/1/7303
+f 7251/1/7251 5921/1/5921 7303/1/7303
+f 7251/1/7251 5920/1/5920 5921/1/5921
+f 5920/1/5920 5916/1/5916 5921/1/5921
+f 5921/1/5921 5916/1/5916 5919/1/5919
+f 5916/1/5916 5918/1/5918 5919/1/5919
+f 5919/1/5919 5918/1/5918 5923/1/5923
+f 5918/1/5918 5922/1/5922 5923/1/5923
+f 5923/1/5923 5922/1/5922 5925/1/5925
+f 5923/1/5923 5925/1/5925 5924/1/5924
+f 5922/1/5922 5927/1/5927 5925/1/5925
+f 5927/1/5927 5930/1/5930 5925/1/5925
+f 5925/1/5925 5930/1/5930 5936/1/5936
+f 5930/1/5930 5934/1/5934 5936/1/5936
+f 5930/1/5930 5929/1/5929 5934/1/5934
+f 5929/1/5929 5932/1/5932 5934/1/5934
+f 5934/1/5934 5932/1/5932 5933/1/5933
+f 5934/1/5934 5933/1/5933 5935/1/5935
+f 5932/1/5932 5839/1/5839 5933/1/5933
+f 5933/1/5933 5839/1/5839 5937/1/5937
+f 5937/1/5937 5839/1/5839 5838/1/5838
+f 5839/1/5839 5840/1/5840 5838/1/5838
+f 5839/1/5839 5841/1/5841 5840/1/5840
+f 5841/1/5841 5844/1/5844 5840/1/5840
+f 5840/1/5840 5844/1/5844 6218/1/6218
+f 5840/1/5840 6218/1/6218 5789/1/5789
+f 5840/1/5840 5789/1/5789 5788/1/5788
+f 6218/1/6218 6221/1/6221 5789/1/5789
+f 5789/1/5789 6221/1/6221 5782/1/5782
+f 5789/1/5789 5782/1/5782 5784/1/5784
+f 5784/1/5784 5782/1/5782 5781/1/5781
+f 5781/1/5781 5782/1/5782 5775/1/5775
+f 5781/1/5781 5775/1/5775 5780/1/5780
+f 5780/1/5780 5775/1/5775 5776/1/5776
+f 5775/1/5775 5770/1/5770 5776/1/5776
+f 5776/1/5776 5770/1/5770 5769/1/5769
+f 5775/1/5775 5774/1/5774 5770/1/5770
+f 5770/1/5770 5774/1/5774 5768/1/5768
+f 5765/1/5765 5770/1/5770 5768/1/5768
+f 5768/1/5768 5766/1/5766 5765/1/5765
+f 5768/1/5768 5774/1/5774 5771/1/5771
+f 5782/1/5782 5774/1/5774 5775/1/5775
+f 5782/1/5782 6222/1/6222 5774/1/5774
+f 5782/1/5782 6221/1/6221 6222/1/6222
+f 6218/1/6218 6219/1/6219 6221/1/6221
+f 6219/1/6219 6223/1/6223 6221/1/6221
+f 6223/1/6223 6224/1/6224 6221/1/6221
+f 6223/1/6223 6226/1/6226 6224/1/6224
+f 6225/1/6225 6226/1/6226 6223/1/6223
+f 6225/1/6225 7247/1/7247 6226/1/6226
+f 6220/1/6220 7247/1/7247 6225/1/6225
+f 6220/1/6220 6225/1/6225 6219/1/6219
+f 5844/1/5844 6220/1/6220 6219/1/6219
+f 5844/1/5844 7294/1/7294 6220/1/6220
+f 7294/1/7294 7242/1/7242 6220/1/6220
+f 7293/1/7293 7242/1/7242 7294/1/7294
+f 5843/1/5843 7293/1/7293 7294/1/7294
+f 7290/1/7290 7293/1/7293 5843/1/5843
+f 5845/1/5845 7290/1/7290 5843/1/5843
+f 5845/1/5845 5843/1/5843 5841/1/5841
+f 5842/1/5842 5845/1/5845 5841/1/5841
+f 5846/1/5846 5845/1/5845 5842/1/5842
+f 5931/1/5931 5846/1/5846 5842/1/5842
+f 5931/1/5931 5842/1/5842 5932/1/5932
+f 5928/1/5928 5931/1/5931 5932/1/5932
+f 5911/1/5911 5931/1/5931 5928/1/5928
+f 5912/1/5912 5911/1/5911 5928/1/5928
+f 5912/1/5912 5928/1/5928 5927/1/5927
+f 5917/1/5917 5912/1/5912 5927/1/5927
+f 5913/1/5913 5912/1/5912 5917/1/5917
+f 5915/1/5915 5913/1/5913 5917/1/5917
+f 5915/1/5915 5917/1/5917 5918/1/5918
+f 5914/1/5914 5913/1/5913 5915/1/5915
+f 5916/1/5916 5914/1/5914 5915/1/5915
+f 5894/1/5894 5914/1/5914 5916/1/5916
+f 5894/1/5894 5904/1/5904 5914/1/5914
+f 5904/1/5904 5905/1/5905 5914/1/5914
+f 5914/1/5914 5905/1/5905 5908/1/5908
+f 5905/1/5905 5903/1/5903 5908/1/5908
+f 5903/1/5903 5907/1/5907 5908/1/5908
+f 5908/1/5908 5907/1/5907 5913/1/5913
+f 5903/1/5903 5906/1/5906 5907/1/5907
+f 5907/1/5907 5906/1/5906 5911/1/5911
+f 5906/1/5906 5910/1/5910 5911/1/5911
+f 5906/1/5906 5909/1/5909 5910/1/5910
+f 5909/1/5909 5846/1/5846 5910/1/5910
+f 5909/1/5909 5848/1/5848 5846/1/5846
+f 5848/1/5848 5847/1/5847 5846/1/5846
+f 5848/1/5848 5849/1/5849 5847/1/5847
+f 5849/1/5849 7292/1/7292 5847/1/5847
+f 5847/1/5847 7292/1/7292 7290/1/7290
+f 7292/1/7292 7288/1/7288 7290/1/7290
+f 7290/1/7290 7288/1/7288 7291/1/7291
+f 7291/1/7291 7288/1/7288 7239/1/7239
+f 7291/1/7291 7239/1/7239 7293/1/7293
+f 7288/1/7288 7237/1/7237 7239/1/7239
+f 7239/1/7239 7237/1/7237 7236/1/7236
+f 7239/1/7239 7236/1/7236 7242/1/7242
+f 7242/1/7242 7236/1/7236 7241/1/7241
+f 7236/1/7236 7237/1/7237 7238/1/7238
+f 7240/1/7240 7236/1/7236 7238/1/7238
+f 7238/1/7238 7244/1/7244 7240/1/7240
+f 7243/1/7243 7244/1/7244 7238/1/7238
+f 7286/1/7286 7244/1/7244 7243/1/7243
+f 7243/1/7243 7287/1/7287 7286/1/7286
+f 7286/1/7286 7287/1/7287 7282/1/7282
+f 7286/1/7286 7282/1/7282 7285/1/7285
+f 7285/1/7285 7253/1/7253 7286/1/7286
+f 7281/1/7281 7253/1/7253 7285/1/7285
+f 7259/1/7259 7253/1/7253 7281/1/7281
+f 7281/1/7281 7280/1/7280 7259/1/7259
+f 7259/1/7259 7280/1/7280 7258/1/7258
+f 7258/1/7258 7254/1/7254 7259/1/7259
+f 7257/1/7257 7254/1/7254 7258/1/7258
+f 7258/1/7258 7277/1/7277 7257/1/7257
+f 7257/1/7257 7277/1/7277 7256/1/7256
+f 7256/1/7256 7277/1/7277 7273/1/7273
+f 7256/1/7256 7273/1/7273 7264/1/7264
+f 7264/1/7264 7255/1/7255 7256/1/7256
+f 7256/1/7256 7255/1/7255 7254/1/7254
+f 7255/1/7255 5946/1/5946 7254/1/7254
+f 7254/1/7254 5946/1/5946 5945/1/5945
+f 7254/1/7254 5945/1/5945 7253/1/7253
+f 7253/1/7253 5945/1/5945 7252/1/7252
+f 7253/1/7253 7252/1/7252 7244/1/7244
+f 7244/1/7244 7252/1/7252 7250/1/7250
+f 7244/1/7244 7250/1/7250 7246/1/7246
+f 7252/1/7252 5895/1/5895 7250/1/7250
+f 7250/1/7250 5895/1/5895 5920/1/5920
+f 5895/1/5895 5894/1/5894 5920/1/5920
+f 5895/1/5895 5891/1/5891 5894/1/5894
+f 5891/1/5891 5893/1/5893 5894/1/5894
+f 5891/1/5891 5892/1/5892 5893/1/5893
+f 5892/1/5892 5896/1/5896 5893/1/5893
+f 5893/1/5893 5896/1/5896 5899/1/5899
+f 5893/1/5893 5899/1/5899 5904/1/5904
+f 5896/1/5896 5898/1/5898 5899/1/5899
+f 5899/1/5899 5898/1/5898 5903/1/5903
+f 5898/1/5898 5902/1/5902 5903/1/5903
+f 5898/1/5898 5901/1/5901 5902/1/5902
+f 5901/1/5901 5909/1/5909 5902/1/5902
+f 5901/1/5901 5944/1/5944 5909/1/5909
+f 5900/1/5900 5944/1/5944 5901/1/5901
+f 5897/1/5897 5900/1/5900 5901/1/5901
+f 5879/1/5879 5900/1/5900 5897/1/5897
+f 5879/1/5879 5897/1/5897 5896/1/5896
+f 5882/1/5882 5879/1/5879 5896/1/5896
+f 5878/1/5878 5879/1/5879 5882/1/5882
+f 5883/1/5883 5878/1/5878 5882/1/5882
+f 5883/1/5883 5882/1/5882 5892/1/5892
+f 5881/1/5881 5878/1/5878 5883/1/5883
+f 5884/1/5884 5881/1/5881 5883/1/5883
+f 5884/1/5884 5883/1/5883 5891/1/5891
+f 5890/1/5890 5884/1/5884 5891/1/5891
+f 5890/1/5890 5886/1/5886 5884/1/5884
+f 5886/1/5886 5880/1/5880 5884/1/5884
+f 5886/1/5886 5885/1/5885 5880/1/5880
+f 5885/1/5885 5870/1/5870 5880/1/5880
+f 5880/1/5880 5870/1/5870 5875/1/5875
+f 5880/1/5880 5875/1/5875 5881/1/5881
+f 5870/1/5870 5874/1/5874 5875/1/5875
+f 5875/1/5875 5874/1/5874 5876/1/5876
+f 5875/1/5875 5876/1/5876 5878/1/5878
+f 5874/1/5874 5873/1/5873 5876/1/5876
+f 5876/1/5876 5873/1/5873 5877/1/5877
+f 5876/1/5876 5877/1/5877 5879/1/5879
+f 5873/1/5873 5854/1/5854 5877/1/5877
+f 5877/1/5877 5854/1/5854 5900/1/5900
+f 5873/1/5873 5853/1/5853 5854/1/5854
+f 5853/1/5853 5850/1/5850 5854/1/5854
+f 5854/1/5854 5850/1/5850 5848/1/5848
+f 5854/1/5854 5848/1/5848 5944/1/5944
+f 5851/1/5851 5850/1/5850 5853/1/5853
+f 5872/1/5872 5851/1/5851 5853/1/5853
+f 5865/1/5865 5851/1/5851 5872/1/5872
+f 5871/1/5871 5865/1/5865 5872/1/5872
+f 5871/1/5871 5872/1/5872 5874/1/5874
+f 5866/1/5866 5865/1/5865 5871/1/5871
+f 5866/1/5866 5871/1/5871 5870/1/5870
+f 5869/1/5869 5866/1/5866 5870/1/5870
+f 5867/1/5867 5866/1/5866 5869/1/5869
+f 5887/1/5887 5867/1/5867 5869/1/5869
+f 5887/1/5887 5869/1/5869 5885/1/5885
+f 6189/1/6189 5867/1/5867 5887/1/5887
+f 5888/1/5888 6189/1/6189 5887/1/5887
+f 5888/1/5888 5887/1/5887 5886/1/5886
+f 5889/1/5889 5888/1/5888 5886/1/5886
+f 5947/1/5947 5888/1/5888 5889/1/5889
+f 5946/1/5946 5947/1/5947 5889/1/5889
+f 5948/1/5948 5947/1/5947 5946/1/5946
+f 5948/1/5948 5949/1/5949 5947/1/5947
+f 5949/1/5949 6187/1/6187 5947/1/5947
+f 5949/1/5949 6190/1/6190 6187/1/6187
+f 6190/1/6190 6191/1/6191 6187/1/6187
+f 6187/1/6187 6191/1/6191 6192/1/6192
+f 6187/1/6187 6192/1/6192 6188/1/6188
+f 6187/1/6187 6188/1/6188 5888/1/5888
+f 6192/1/6192 6198/1/6198 6188/1/6188
+f 6188/1/6188 6198/1/6198 6201/1/6201
+f 6188/1/6188 6201/1/6201 5868/1/5868
+f 6188/1/6188 5868/1/5868 6189/1/6189
+f 6201/1/6201 5863/1/5863 5868/1/5868
+f 5868/1/5868 5863/1/5863 5864/1/5864
+f 5868/1/5868 5864/1/5864 5867/1/5867
+f 5863/1/5863 5858/1/5858 5864/1/5864
+f 5864/1/5864 5858/1/5858 5859/1/5859
+f 5864/1/5864 5859/1/5859 5866/1/5866
+f 5858/1/5858 5855/1/5855 5859/1/5859
+f 5859/1/5859 5855/1/5855 5851/1/5851
+f 5855/1/5855 5852/1/5852 5851/1/5851
+f 5855/1/5855 5856/1/5856 5852/1/5852
+f 5856/1/5856 7229/1/7229 5852/1/5852
+f 5852/1/5852 7229/1/7229 7230/1/7230
+f 5852/1/5852 7230/1/7230 5850/1/5850
+f 5850/1/5850 7230/1/7230 5849/1/5849
+f 7230/1/7230 7295/1/7295 5849/1/5849
+f 5849/1/5849 7295/1/7295 7296/1/7296
+f 7295/1/7295 7297/1/7297 7296/1/7296
+f 7296/1/7296 7297/1/7297 7289/1/7289
+f 7296/1/7296 7289/1/7289 7292/1/7292
+f 7297/1/7297 7284/1/7284 7289/1/7289
+f 7284/1/7284 7282/1/7282 7289/1/7289
+f 7284/1/7284 7280/1/7280 7282/1/7282
+f 7283/1/7283 7280/1/7280 7284/1/7284
+f 7283/1/7283 7277/1/7277 7280/1/7280
+f 7278/1/7278 7277/1/7277 7283/1/7283
+f 7278/1/7278 7283/1/7283 7297/1/7297
+f 7274/1/7274 7277/1/7277 7278/1/7278
+f 7279/1/7279 7274/1/7274 7278/1/7278
+f 7295/1/7295 7279/1/7279 7278/1/7278
+f 7298/1/7298 7279/1/7279 7295/1/7295
+f 7298/1/7298 7275/1/7275 7279/1/7279
+f 7299/1/7299 7275/1/7275 7298/1/7298
+f 7229/1/7229 7299/1/7299 7298/1/7298
+f 7228/1/7228 7299/1/7299 7229/1/7229
+f 7228/1/7228 7300/1/7300 7299/1/7299
+f 7300/1/7300 7269/1/7269 7299/1/7299
+f 7299/1/7299 7269/1/7269 7276/1/7276
+f 7276/1/7276 7269/1/7269 7272/1/7272
+f 7276/1/7276 7272/1/7272 7275/1/7275
+f 7275/1/7275 7272/1/7272 7274/1/7274
+f 7272/1/7272 7271/1/7271 7274/1/7274
+f 7274/1/7274 7271/1/7271 7273/1/7273
+f 7272/1/7272 7268/1/7268 7271/1/7271
+f 7271/1/7271 7268/1/7268 7263/1/7263
+f 7264/1/7264 7271/1/7271 7263/1/7263
+f 7263/1/7263 7260/1/7260 7264/1/7264
+f 7262/1/7262 7260/1/7260 7263/1/7263
+f 7261/1/7261 7260/1/7260 7262/1/7262
+f 7262/1/7262 7267/1/7267 7261/1/7261
+f 7261/1/7261 7267/1/7267 7266/1/7266
+f 7261/1/7261 7266/1/7266 7265/1/7265
+f 7265/1/7265 5953/1/5953 7261/1/7261
+f 6186/1/6186 5953/1/5953 7265/1/7265
+f 6185/1/6185 5953/1/5953 6186/1/6186
+f 6186/1/6186 6179/1/6179 6185/1/6185
+f 6185/1/6185 6179/1/6179 6184/1/6184
+f 6184/1/6184 5955/1/5955 6185/1/6185
+f 6183/1/6183 5955/1/5955 6184/1/6184
+f 6184/1/6184 6174/1/6174 6183/1/6183
+f 6183/1/6183 6174/1/6174 6182/1/6182
+f 6182/1/6182 6174/1/6174 6172/1/6172
+f 6182/1/6182 6172/1/6172 6173/1/6173
+f 6173/1/6173 5958/1/5958 6182/1/6182
+f 6182/1/6182 5958/1/5958 5955/1/5955
+f 5958/1/5958 5956/1/5956 5955/1/5955
+f 5955/1/5955 5956/1/5956 5952/1/5952
+f 5955/1/5955 5952/1/5952 5953/1/5953
+f 5953/1/5953 5952/1/5952 5950/1/5950
+f 5953/1/5953 5950/1/5950 7260/1/7260
+f 7260/1/7260 5950/1/5950 5948/1/5948
+f 7260/1/7260 5948/1/5948 7255/1/7255
+f 5952/1/5952 5951/1/5951 5950/1/5950
+f 5950/1/5950 5951/1/5951 5949/1/5949
+f 5952/1/5952 5954/1/5954 5951/1/5951
+f 5954/1/5954 6216/1/6216 5951/1/5951
+f 5951/1/5951 6216/1/6216 6193/1/6193
+f 5951/1/5951 6193/1/6193 6190/1/6190
+f 6193/1/6193 6194/1/6194 6190/1/6190
+f 6190/1/6190 6194/1/6194 6195/1/6195
+f 6194/1/6194 6211/1/6211 6195/1/6195
+f 6195/1/6195 6211/1/6211 6196/1/6196
+f 6195/1/6195 6196/1/6196 6191/1/6191
+f 6191/1/6191 6196/1/6196 6197/1/6197
+f 6196/1/6196 6200/1/6200 6197/1/6197
+f 6197/1/6197 6200/1/6200 6199/1/6199
+f 6197/1/6197 6199/1/6199 6198/1/6198
+f 6200/1/6200 6202/1/6202 6199/1/6199
+f 6199/1/6199 6202/1/6202 5862/1/5862
+f 6199/1/6199 5862/1/5862 5863/1/5863
+f 6202/1/6202 5860/1/5860 5862/1/5862
+f 5862/1/5862 5860/1/5860 5857/1/5857
+f 5862/1/5862 5857/1/5857 5858/1/5858
+f 5860/1/5860 5856/1/5856 5857/1/5857
+f 5860/1/5860 5861/1/5861 5856/1/5856
+f 5861/1/5861 7228/1/7228 5856/1/5856
+f 5861/1/5861 6181/1/6181 7228/1/7228
+f 7226/1/7226 6181/1/6181 5861/1/5861
+f 6209/1/6209 7226/1/7226 5861/1/5861
+f 6209/1/6209 5861/1/5861 6206/1/6206
+f 6205/1/6205 6209/1/6209 6206/1/6206
+f 6205/1/6205 6206/1/6206 6204/1/6204
+f 6203/1/6203 6205/1/6205 6204/1/6204
+f 6203/1/6203 6204/1/6204 6200/1/6200
+f 6207/1/6207 6205/1/6205 6203/1/6203
+f 6207/1/6207 6203/1/6203 6196/1/6196
+f 6207/1/6207 6208/1/6208 6205/1/6205
+f 6210/1/6210 6208/1/6208 6207/1/6207
+f 6212/1/6212 6210/1/6210 6207/1/6207
+f 6212/1/6212 6207/1/6207 6211/1/6211
+f 6215/1/6215 6210/1/6210 6212/1/6212
+f 6213/1/6213 6215/1/6215 6212/1/6212
+f 6213/1/6213 6212/1/6212 6194/1/6194
+f 6214/1/6214 6215/1/6215 6213/1/6213
+f 6193/1/6193 6214/1/6214 6213/1/6213
+f 6214/1/6214 7214/1/7214 6215/1/6215
+f 7214/1/7214 6217/1/6217 6215/1/6215
+f 7214/1/7214 7234/1/7234 6217/1/6217
+f 7234/1/7234 7232/1/7232 6217/1/6217
+f 6217/1/6217 7232/1/7232 7231/1/7231
+f 6217/1/6217 7231/1/7231 6210/1/6210
+f 7232/1/7232 7227/1/7227 7231/1/7231
+f 7231/1/7231 7227/1/7227 6209/1/6209
+f 7231/1/7231 6209/1/6209 6208/1/6208
+f 7232/1/7232 7225/1/7225 7227/1/7227
+f 7225/1/7225 7226/1/7226 7227/1/7227
+f 7225/1/7225 7224/1/7224 7226/1/7226
+f 7224/1/7224 6180/1/6180 7226/1/7226
+f 7224/1/7224 6166/1/6166 6180/1/6180
+f 6166/1/6166 6165/1/6165 6180/1/6180
+f 6180/1/6180 6165/1/6165 6176/1/6176
+f 6180/1/6180 6176/1/6176 6181/1/6181
+f 6181/1/6181 6176/1/6176 7301/1/7301
+f 6181/1/6181 7301/1/7301 7300/1/7300
+f 7301/1/7301 7270/1/7270 7300/1/7300
+f 7301/1/7301 6178/1/6178 7270/1/7270
+f 6178/1/6178 7302/1/7302 7270/1/7270
+f 7302/1/7302 7266/1/7266 7270/1/7270
+f 7302/1/7302 6179/1/6179 7266/1/7266
+f 6177/1/6177 6179/1/6179 7302/1/7302
+f 6177/1/6177 6174/1/6174 6179/1/6179
+f 6175/1/6175 6174/1/6174 6177/1/6177
+f 6175/1/6175 6177/1/6177 6178/1/6178
+f 6176/1/6176 6175/1/6175 6178/1/6178
+f 6176/1/6176 6169/1/6169 6175/1/6175
+f 6169/1/6169 6168/1/6168 6175/1/6175
+f 6164/1/6164 6168/1/6168 6169/1/6169
+f 6165/1/6165 6164/1/6164 6169/1/6169
+f 6019/1/6019 6164/1/6164 6165/1/6165
+f 6019/1/6019 6163/1/6163 6164/1/6164
+f 6163/1/6163 6167/1/6167 6164/1/6164
+f 6163/1/6163 6011/1/6011 6167/1/6167
+f 6011/1/6011 6012/1/6012 6167/1/6167
+f 6167/1/6167 6012/1/6012 6170/1/6170
+f 6167/1/6167 6170/1/6170 6168/1/6168
+f 6168/1/6168 6170/1/6170 6172/1/6172
+f 6170/1/6170 6012/1/6012 6171/1/6171
+f 6173/1/6173 6170/1/6170 6171/1/6171
+f 6171/1/6171 5962/1/5962 6173/1/6173
+f 6010/1/6010 5962/1/5962 6171/1/6171
+f 6004/1/6004 5962/1/5962 6010/1/6010
+f 6010/1/6010 6008/1/6008 6004/1/6004
+f 6004/1/6004 6008/1/6008 6005/1/6005
+f 6004/1/6004 6005/1/6005 6003/1/6003
+f 6003/1/6003 5963/1/5963 6004/1/6004
+f 6002/1/6002 5963/1/5963 6003/1/6003
+f 6000/1/6000 5963/1/5963 6002/1/6002
+f 6002/1/6002 6001/1/6001 6000/1/6000
+f 6000/1/6000 6001/1/6001 5999/1/5999
+f 5999/1/5999 5965/1/5965 6000/1/6000
+f 5998/1/5998 5965/1/5965 5999/1/5999
+f 5999/1/5999 5997/1/5997 5998/1/5998
+f 5998/1/5998 5997/1/5997 5971/1/5971
+f 5971/1/5971 5997/1/5997 5996/1/5996
+f 5971/1/5971 5996/1/5996 5970/1/5970
+f 5970/1/5970 5967/1/5967 5971/1/5971
+f 5971/1/5971 5967/1/5967 5965/1/5965
+f 5967/1/5967 5966/1/5966 5965/1/5965
+f 5965/1/5965 5966/1/5966 5964/1/5964
+f 5965/1/5965 5964/1/5964 5963/1/5963
+f 5963/1/5963 5964/1/5964 5961/1/5961
+f 5963/1/5963 5961/1/5961 5962/1/5962
+f 5962/1/5962 5961/1/5961 5959/1/5959
+f 5962/1/5962 5959/1/5959 5958/1/5958
+f 5961/1/5961 5960/1/5960 5959/1/5959
+f 5959/1/5959 5960/1/5960 5957/1/5957
+f 5959/1/5959 5957/1/5957 5956/1/5956
+f 5956/1/5956 5957/1/5957 5954/1/5954
+f 5957/1/5957 7207/1/7207 5954/1/5954
+f 5957/1/5957 7205/1/7205 7207/1/7207
+f 7205/1/7205 7206/1/7206 7207/1/7207
+f 7207/1/7207 7206/1/7206 7208/1/7208
+f 7207/1/7207 7208/1/7208 7209/1/7209
+f 7207/1/7207 7209/1/7209 6216/1/6216
+f 6216/1/6216 7209/1/7209 7213/1/7213
+f 6216/1/6216 7213/1/7213 6214/1/6214
+f 7209/1/7209 7212/1/7212 7213/1/7213
+f 7213/1/7213 7212/1/7212 7214/1/7214
+f 7212/1/7212 7216/1/7216 7214/1/7214
+f 7211/1/7211 7216/1/7216 7212/1/7212
+f 7211/1/7211 7215/1/7215 7216/1/7216
+f 7215/1/7215 7219/1/7219 7216/1/7216
+f 7216/1/7216 7219/1/7219 7233/1/7233
+f 7216/1/7216 7233/1/7233 7234/1/7234
+f 7219/1/7219 7225/1/7225 7233/1/7233
+f 7219/1/7219 7223/1/7223 7225/1/7225
+f 7218/1/7218 7223/1/7223 7219/1/7219
+f 7218/1/7218 7222/1/7222 7223/1/7223
+f 7222/1/7222 7185/1/7185 7223/1/7223
+f 7223/1/7223 7185/1/7185 7224/1/7224
+f 7184/1/7184 7185/1/7185 7222/1/7222
+f 7220/1/7220 7184/1/7184 7222/1/7222
+f 7193/1/7193 7184/1/7184 7220/1/7220
+f 7194/1/7194 7193/1/7193 7220/1/7220
+f 7194/1/7194 7220/1/7220 7217/1/7217
+f 7194/1/7194 7217/1/7217 7221/1/7221
+f 7198/1/7198 7194/1/7194 7221/1/7221
+f 7206/1/7206 7198/1/7198 7221/1/7221
+f 7206/1/7206 7221/1/7221 7210/1/7210
+f 7199/1/7199 7198/1/7198 7206/1/7206
+f 7199/1/7199 7195/1/7195 7198/1/7198
+f 7197/1/7197 7195/1/7195 7199/1/7199
+f 7201/1/7201 7197/1/7197 7199/1/7199
+f 7201/1/7201 7199/1/7199 7205/1/7205
+f 5960/1/5960 7201/1/7201 7205/1/7205
+f 5960/1/5960 7200/1/7200 7201/1/7201
+f 7204/1/7204 7200/1/7200 5960/1/5960
+f 7204/1/7204 7203/1/7203 7200/1/7200
+f 7203/1/7203 7202/1/7202 7200/1/7200
+f 7200/1/7200 7202/1/7202 7196/1/7196
+f 7200/1/7200 7196/1/7196 7197/1/7197
+f 7196/1/7196 7190/1/7190 7197/1/7197
+f 7196/1/7196 7189/1/7189 7190/1/7190
+f 7189/1/7189 7187/1/7187 7190/1/7190
+f 7187/1/7187 7188/1/7188 7190/1/7190
+f 7190/1/7190 7188/1/7188 7192/1/7192
+f 7190/1/7190 7192/1/7192 7195/1/7195
+f 7195/1/7195 7192/1/7192 7194/1/7194
+f 7188/1/7188 7186/1/7186 7192/1/7192
+f 7192/1/7192 7186/1/7186 7193/1/7193
+f 7188/1/7188 7183/1/7183 7186/1/7186
+f 7183/1/7183 7182/1/7182 7186/1/7186
+f 7186/1/7186 7182/1/7182 7184/1/7184
+f 7182/1/7182 6162/1/6162 7184/1/7184
+f 7178/1/7178 6162/1/6162 7182/1/7182
+f 7178/1/7178 6023/1/6023 6162/1/6162
+f 6023/1/6023 6017/1/6017 6162/1/6162
+f 6162/1/6162 6017/1/6017 6018/1/6018
+f 6162/1/6162 6018/1/6018 7185/1/7185
+f 7185/1/7185 6018/1/6018 6166/1/6166
+f 6018/1/6018 6019/1/6019 6166/1/6166
+f 6018/1/6018 6015/1/6015 6019/1/6019
+f 6015/1/6015 6011/1/6011 6019/1/6019
+f 6015/1/6015 6009/1/6009 6011/1/6011
+f 6011/1/6011 6009/1/6009 6008/1/6008
+f 6014/1/6014 6009/1/6009 6015/1/6015
+f 6017/1/6017 6014/1/6014 6015/1/6015
+f 6017/1/6017 6016/1/6016 6014/1/6014
+f 6016/1/6016 6013/1/6013 6014/1/6014
+f 6016/1/6016 5995/1/5995 6013/1/6013
+f 5995/1/5995 6007/1/6007 6013/1/6013
+f 6013/1/6013 6007/1/6007 6006/1/6006
+f 6013/1/6013 6006/1/6006 6009/1/6009
+f 6006/1/6006 6005/1/6005 6009/1/6009
+f 6006/1/6006 6001/1/6001 6005/1/6005
+f 6007/1/6007 6001/1/6001 6006/1/6006
+f 6007/1/6007 5997/1/5997 6001/1/6001
+f 5995/1/5995 5997/1/5997 6007/1/6007
+f 5991/1/5991 5997/1/5997 5995/1/5995
+f 5994/1/5994 5991/1/5991 5995/1/5995
+f 5990/1/5990 5991/1/5991 5994/1/5994
+f 5993/1/5993 5990/1/5990 5994/1/5994
+f 5993/1/5993 5994/1/5994 6016/1/6016
+f 6020/1/6020 5993/1/5993 6016/1/6016
+f 6022/1/6022 5993/1/5993 6020/1/6020
+f 6021/1/6021 6022/1/6022 6020/1/6020
+f 6021/1/6021 6020/1/6020 6023/1/6023
+f 7166/1/7166 6021/1/6021 6023/1/6023
+f 7166/1/7166 6023/1/6023 7177/1/7177
+f 7165/1/7165 7166/1/7166 7177/1/7177
+f 7165/1/7165 7177/1/7177 7179/1/7179
+f 7160/1/7160 7165/1/7165 7179/1/7179
+f 7160/1/7160 7179/1/7179 7181/1/7181
+f 7161/1/7161 7160/1/7160 7181/1/7181
+f 7161/1/7161 7181/1/7181 7191/1/7191
+f 7235/1/7235 7161/1/7161 7191/1/7191
+f 7235/1/7235 7191/1/7191 7202/1/7202
+f 7202/1/7202 7191/1/7191 7189/1/7189
+f 7159/1/7159 7161/1/7161 7235/1/7235
+f 7203/1/7203 7159/1/7159 7235/1/7235
+f 7152/1/7152 7159/1/7159 7203/1/7203
+f 7152/1/7152 7156/1/7156 7159/1/7159
+f 7156/1/7156 7158/1/7158 7159/1/7159
+f 7156/1/7156 7155/1/7155 7158/1/7158
+f 7155/1/7155 7157/1/7157 7158/1/7158
+f 7157/1/7157 7162/1/7162 7158/1/7158
+f 7158/1/7158 7162/1/7162 7160/1/7160
+f 7157/1/7157 7164/1/7164 7162/1/7162
+f 7162/1/7162 7164/1/7164 7165/1/7165
+f 7157/1/7157 7163/1/7163 7164/1/7164
+f 7163/1/7163 7166/1/7166 7164/1/7164
+f 7163/1/7163 7168/1/7168 7166/1/7166
+f 7167/1/7167 7168/1/7168 7163/1/7163
+f 7149/1/7149 7167/1/7167 7163/1/7163
+f 7144/1/7144 7167/1/7167 7149/1/7149
+f 7145/1/7145 7144/1/7144 7149/1/7149
+f 7145/1/7145 7149/1/7149 7150/1/7150
+f 7146/1/7146 7145/1/7145 7150/1/7150
+f 7146/1/7146 7150/1/7150 7151/1/7151
+f 7148/1/7148 7146/1/7146 7151/1/7151
+f 7148/1/7148 7151/1/7151 7152/1/7152
+f 7154/1/7154 7148/1/7148 7152/1/7152
+f 7154/1/7154 7152/1/7152 7204/1/7204
+f 5964/1/5964 7154/1/7154 7204/1/7204
+f 7153/1/7153 7148/1/7148 7154/1/7154
+f 5966/1/5966 7153/1/7153 7154/1/7154
+f 5968/1/5968 7153/1/7153 5966/1/5966
+f 5968/1/5968 7125/1/7125 7153/1/7153
+f 7125/1/7125 7147/1/7147 7153/1/7153
+f 7125/1/7125 7138/1/7138 7147/1/7147
+f 7138/1/7138 7137/1/7137 7147/1/7147
+f 7147/1/7147 7137/1/7137 7143/1/7143
+f 7147/1/7147 7143/1/7143 7148/1/7148
+f 7137/1/7137 7140/1/7140 7143/1/7143
+f 7143/1/7143 7140/1/7140 7142/1/7142
+f 7143/1/7143 7142/1/7142 7145/1/7145
+f 7140/1/7140 7139/1/7139 7142/1/7142
+f 7139/1/7139 7144/1/7144 7142/1/7142
+f 7139/1/7139 7169/1/7169 7144/1/7144
+f 7139/1/7139 7171/1/7171 7169/1/7169
+f 7171/1/7171 6159/1/6159 7169/1/7169
+f 7169/1/7169 6159/1/6159 7170/1/7170
+f 7169/1/7169 7170/1/7170 7167/1/7167
+f 6159/1/6159 6024/1/6024 7170/1/7170
+f 7170/1/7170 6024/1/6024 7168/1/7168
+f 7168/1/7168 6024/1/6024 6021/1/6021
+f 6159/1/6159 6156/1/6156 6024/1/6024
+f 6156/1/6156 6025/1/6025 6024/1/6024
+f 6024/1/6024 6025/1/6025 6022/1/6022
+f 6025/1/6025 5987/1/5987 6022/1/6022
+f 6025/1/6025 5989/1/5989 5987/1/5987
+f 5989/1/5989 5983/1/5983 5987/1/5987
+f 5987/1/5987 5983/1/5983 5988/1/5988
+f 5987/1/5987 5988/1/5988 5990/1/5990
+f 5988/1/5988 5986/1/5986 5990/1/5990
+f 5988/1/5988 5983/1/5983 5986/1/5986
+f 5983/1/5983 5984/1/5984 5986/1/5986
+f 5986/1/5986 5984/1/5984 5992/1/5992
+f 5986/1/5986 5992/1/5992 5991/1/5991
+f 5991/1/5991 5992/1/5992 5996/1/5996
+f 5992/1/5992 5984/1/5984 5976/1/5976
+f 5970/1/5970 5992/1/5992 5976/1/5976
+f 5976/1/5976 5969/1/5969 5970/1/5970
+f 5975/1/5975 5969/1/5969 5976/1/5976
+f 5973/1/5973 5969/1/5969 5975/1/5975
+f 5975/1/5975 5977/1/5977 5973/1/5973
+f 5973/1/5973 5977/1/5977 5978/1/5978
+f 5973/1/5973 5978/1/5978 5979/1/5979
+f 5979/1/5979 5974/1/5974 5973/1/5973
+f 5980/1/5980 5974/1/5974 5979/1/5979
+f 5982/1/5982 5974/1/5974 5980/1/5980
+f 5980/1/5980 5981/1/5981 5982/1/5982
+f 5982/1/5982 5981/1/5981 7107/1/7107
+f 7107/1/7107 7104/1/7104 5982/1/5982
+f 7103/1/7103 7104/1/7104 7107/1/7107
+f 7107/1/7107 6161/1/6161 7103/1/7103
+f 7103/1/7103 6161/1/6161 7101/1/7101
+f 7101/1/7101 6161/1/6161 7100/1/7100
+f 7101/1/7101 7100/1/7100 7098/1/7098
+f 7098/1/7098 7102/1/7102 7101/1/7101
+f 7101/1/7101 7102/1/7102 7104/1/7104
+f 7102/1/7102 7105/1/7105 7104/1/7104
+f 7104/1/7104 7105/1/7105 7106/1/7106
+f 7104/1/7104 7106/1/7106 5974/1/5974
+f 5974/1/5974 7106/1/7106 5972/1/5972
+f 5974/1/5974 5972/1/5972 5969/1/5969
+f 5969/1/5969 5972/1/5972 5968/1/5968
+f 5969/1/5969 5968/1/5968 5967/1/5967
+f 7106/1/7106 7124/1/7124 5972/1/5972
+f 5972/1/5972 7124/1/7124 7125/1/7125
+f 7124/1/7124 7127/1/7127 7125/1/7125
+f 7124/1/7124 7126/1/7126 7127/1/7127
+f 7126/1/7126 7130/1/7130 7127/1/7127
+f 7127/1/7127 7130/1/7130 7133/1/7133
+f 7127/1/7127 7133/1/7133 7135/1/7135
+f 7127/1/7127 7135/1/7135 7138/1/7138
+f 7133/1/7133 7134/1/7134 7135/1/7135
+f 7135/1/7135 7134/1/7134 7136/1/7136
+f 7135/1/7135 7136/1/7136 7137/1/7137
+f 7134/1/7134 7141/1/7141 7136/1/7136
+f 7136/1/7136 7141/1/7141 7139/1/7139
+f 7134/1/7134 7174/1/7174 7141/1/7141
+f 7174/1/7174 7172/1/7172 7141/1/7141
+f 7141/1/7141 7172/1/7172 7171/1/7171
+f 7174/1/7174 7173/1/7173 7172/1/7172
+f 7173/1/7173 6157/1/6157 7172/1/7172
+f 7172/1/7172 6157/1/6157 6159/1/6159
+f 7173/1/7173 6155/1/6155 6157/1/6157
+f 6155/1/6155 6156/1/6156 6157/1/6157
+f 6155/1/6155 6036/1/6036 6156/1/6156
+f 6036/1/6036 6026/1/6026 6156/1/6156
+f 6036/1/6036 6028/1/6028 6026/1/6026
+f 6028/1/6028 6029/1/6029 6026/1/6026
+f 6026/1/6026 6029/1/6029 6027/1/6027
+f 6026/1/6026 6027/1/6027 5989/1/5989
+f 6027/1/6027 5985/1/5985 5989/1/5989
+f 6027/1/6027 6030/1/6030 5985/1/5985
+f 6030/1/6030 6031/1/6031 5985/1/5985
+f 6031/1/6031 5978/1/5978 5985/1/5985
+f 6031/1/6031 5981/1/5981 5978/1/5978
+f 6033/1/6033 5981/1/5981 6031/1/6031
+f 6033/1/6033 6161/1/6161 5981/1/5981
+f 6032/1/6032 6161/1/6161 6033/1/6033
+f 6032/1/6032 6033/1/6033 6030/1/6030
+f 6029/1/6029 6032/1/6032 6030/1/6030
+f 6029/1/6029 7108/1/7108 6032/1/6032
+f 7108/1/7108 7099/1/7099 6032/1/6032
+f 7109/1/7109 7099/1/7099 7108/1/7108
+f 6034/1/6034 7109/1/7109 7108/1/7108
+f 7111/1/7111 7109/1/7109 6034/1/6034
+f 6037/1/6037 7111/1/7111 6034/1/6034
+f 6037/1/6037 6034/1/6034 6028/1/6028
+f 6035/1/6035 6037/1/6037 6028/1/6028
+f 6038/1/6038 6037/1/6037 6035/1/6035
+f 6149/1/6149 6038/1/6038 6035/1/6035
+f 6149/1/6149 6035/1/6035 6150/1/6150
+f 6146/1/6146 6149/1/6149 6150/1/6150
+f 6146/1/6146 6150/1/6150 6147/1/6147
+f 6145/1/6145 6146/1/6146 6147/1/6147
+f 6145/1/6145 6147/1/6147 6148/1/6148
+f 6145/1/6145 6148/1/6148 6104/1/6104
+f 6102/1/6102 6145/1/6145 6104/1/6104
+f 6103/1/6103 6102/1/6102 6104/1/6104
+f 6103/1/6103 6104/1/6104 7128/1/7128
+f 6100/1/6100 6103/1/6103 7128/1/7128
+f 6100/1/6100 7128/1/7128 7126/1/7126
+f 7126/1/7126 7128/1/7128 7129/1/7129
+f 7128/1/7128 6160/1/6160 7129/1/7129
+f 7129/1/7129 6160/1/6160 7131/1/7131
+f 7129/1/7129 7131/1/7131 7130/1/7130
+f 7130/1/7130 7131/1/7131 7132/1/7132
+f 7131/1/7131 7175/1/7175 7132/1/7132
+f 7132/1/7132 7175/1/7175 7134/1/7134
+f 7131/1/7131 7176/1/7176 7175/1/7175
+f 7176/1/7176 6158/1/6158 7175/1/7175
+f 7175/1/7175 6158/1/6158 7173/1/7173
+f 7176/1/7176 6153/1/6153 6158/1/6158
+f 6153/1/6153 6155/1/6155 6158/1/6158
+f 6153/1/6153 6151/1/6151 6155/1/6155
+f 6152/1/6152 6151/1/6151 6153/1/6153
+f 6154/1/6154 6152/1/6152 6153/1/6153
+f 6148/1/6148 6152/1/6152 6154/1/6154
+f 6152/1/6152 6150/1/6150 6151/1/6151
+f 6150/1/6150 6036/1/6036 6151/1/6151
+f 6154/1/6154 6153/1/6153 7176/1/7176
+f 6160/1/6160 6154/1/6154 7176/1/7176
+f 6104/1/6104 6154/1/6154 6160/1/6160
+f 6160/1/6160 7176/1/7176 7131/1/7131
+f 6100/1/6100 6099/1/6099 6103/1/6103
+f 6097/1/6097 6099/1/6099 6100/1/6100
+f 7123/1/7123 6097/1/6097 6100/1/6100
+f 7123/1/7123 6100/1/6100 7124/1/7124
+f 6101/1/6101 6097/1/6097 7123/1/7123
+f 7105/1/7105 6101/1/6101 7123/1/7123
+f 7053/1/7053 6101/1/6101 7105/1/7105
+f 7053/1/7053 6106/1/6106 6101/1/6101
+f 6106/1/6106 6096/1/6096 6101/1/6101
+f 6106/1/6106 6105/1/6105 6096/1/6096
+f 6105/1/6105 6081/1/6081 6096/1/6096
+f 6096/1/6096 6081/1/6081 6094/1/6094
+f 6096/1/6096 6094/1/6094 6093/1/6093
+f 6096/1/6096 6093/1/6093 6097/1/6097
+f 6097/1/6097 6093/1/6093 6095/1/6095
+f 6093/1/6093 6092/1/6092 6095/1/6095
+f 6095/1/6095 6092/1/6092 6098/1/6098
+f 6095/1/6095 6098/1/6098 6099/1/6099
+f 6099/1/6099 6098/1/6098 6102/1/6102
+f 6092/1/6092 6091/1/6091 6098/1/6098
+f 6098/1/6098 6091/1/6091 6145/1/6145
+f 6092/1/6092 6087/1/6087 6091/1/6091
+f 6087/1/6087 6090/1/6090 6091/1/6091
+f 6091/1/6091 6090/1/6090 6146/1/6146
+f 6087/1/6087 6085/1/6085 6090/1/6090
+f 6085/1/6085 6089/1/6089 6090/1/6090
+f 6090/1/6090 6089/1/6089 6149/1/6149
+f 6085/1/6085 6084/1/6084 6089/1/6089
+f 6084/1/6084 6038/1/6038 6089/1/6089
+f 6084/1/6084 6040/1/6040 6038/1/6038
+f 6040/1/6040 6039/1/6039 6038/1/6038
+f 6040/1/6040 6041/1/6041 6039/1/6039
+f 6041/1/6041 7112/1/7112 6039/1/6039
+f 6039/1/6039 7112/1/7112 7111/1/7111
+f 7112/1/7112 7093/1/7093 7111/1/7111
+f 7111/1/7111 7093/1/7093 7110/1/7110
+f 7110/1/7110 7093/1/7093 7097/1/7097
+f 7110/1/7110 7097/1/7097 7109/1/7109
+f 7093/1/7093 7094/1/7094 7097/1/7097
+f 7097/1/7097 7094/1/7094 7096/1/7096
+f 7097/1/7097 7096/1/7096 7099/1/7099
+f 7099/1/7099 7096/1/7096 7100/1/7100
+f 7096/1/7096 7094/1/7094 7095/1/7095
+f 7098/1/7098 7096/1/7096 7095/1/7095
+f 7095/1/7095 7087/1/7087 7098/1/7098
+f 7090/1/7090 7087/1/7087 7095/1/7095
+f 7086/1/7086 7087/1/7087 7090/1/7090
+f 7090/1/7090 7089/1/7089 7086/1/7086
+f 7086/1/7086 7089/1/7089 7088/1/7088
+f 7086/1/7086 7088/1/7088 7085/1/7085
+f 7085/1/7085 7082/1/7082 7086/1/7086
+f 7084/1/7084 7082/1/7082 7085/1/7085
+f 7083/1/7083 7082/1/7082 7084/1/7084
+f 7084/1/7084 7080/1/7080 7083/1/7083
+f 7083/1/7083 7080/1/7080 7079/1/7079
+f 7079/1/7079 7055/1/7055 7083/1/7083
+f 7078/1/7078 7055/1/7055 7079/1/7079
+f 7079/1/7079 7077/1/7077 7078/1/7078
+f 7078/1/7078 7077/1/7077 7059/1/7059
+f 7059/1/7059 7077/1/7077 7071/1/7071
+f 7059/1/7059 7071/1/7071 7058/1/7058
+f 7058/1/7058 7056/1/7056 7059/1/7059
+f 7059/1/7059 7056/1/7056 7055/1/7055
+f 7056/1/7056 6602/1/6602 7055/1/7055
+f 7055/1/7055 6602/1/6602 7054/1/7054
+f 7055/1/7055 7054/1/7054 7082/1/7082
+f 7082/1/7082 7054/1/7054 7052/1/7052
+f 7082/1/7082 7052/1/7052 7087/1/7087
+f 7087/1/7087 7052/1/7052 7053/1/7053
+f 7087/1/7087 7053/1/7053 7102/1/7102
+f 7054/1/7054 6109/1/6109 7052/1/7052
+f 7052/1/7052 6109/1/6109 6106/1/6106
+f 7054/1/7054 6117/1/6117 6109/1/6109
+f 6117/1/6117 6108/1/6108 6109/1/6109
+f 6109/1/6109 6108/1/6108 6107/1/6107
+f 6109/1/6109 6107/1/6107 6105/1/6105
+f 6107/1/6107 6072/1/6072 6105/1/6105
+f 6105/1/6105 6072/1/6072 6079/1/6079
+f 6072/1/6072 6071/1/6071 6079/1/6079
+f 6079/1/6079 6071/1/6071 6077/1/6077
+f 6079/1/6079 6077/1/6077 6081/1/6081
+f 6081/1/6081 6077/1/6077 6080/1/6080
+f 6077/1/6077 6078/1/6078 6080/1/6080
+f 6080/1/6080 6078/1/6078 6083/1/6083
+f 6080/1/6080 6083/1/6083 6086/1/6086
+f 6094/1/6094 6080/1/6080 6086/1/6086
+f 6086/1/6086 6083/1/6083 6088/1/6088
+f 6093/1/6093 6086/1/6086 6088/1/6088
+f 6083/1/6083 6087/1/6087 6088/1/6088
+f 6078/1/6078 6082/1/6082 6083/1/6083
+f 6083/1/6083 6082/1/6082 6085/1/6085
+f 6078/1/6078 6076/1/6076 6082/1/6082
+f 6076/1/6076 6084/1/6084 6082/1/6082
+f 6076/1/6076 6075/1/6075 6084/1/6084
+f 6074/1/6074 6075/1/6075 6076/1/6076
+f 6073/1/6073 6074/1/6074 6076/1/6076
+f 6068/1/6068 6074/1/6074 6073/1/6073
+f 6071/1/6071 6068/1/6068 6073/1/6073
+f 6067/1/6067 6068/1/6068 6071/1/6071
+f 6067/1/6067 6065/1/6065 6068/1/6068
+f 6065/1/6065 6066/1/6066 6068/1/6068
+f 6065/1/6065 6062/1/6062 6066/1/6066
+f 6062/1/6062 6045/1/6045 6066/1/6066
+f 6066/1/6066 6045/1/6045 6074/1/6074
+f 6062/1/6062 6044/1/6044 6045/1/6045
+f 6044/1/6044 6042/1/6042 6045/1/6045
+f 6045/1/6045 6042/1/6042 6040/1/6040
+f 6045/1/6045 6040/1/6040 6075/1/6075
+f 6043/1/6043 6042/1/6042 6044/1/6044
+f 6061/1/6061 6043/1/6043 6044/1/6044
+f 6054/1/6054 6043/1/6043 6061/1/6061
+f 6060/1/6060 6054/1/6054 6061/1/6061
+f 6060/1/6060 6061/1/6061 6063/1/6063
+f 6059/1/6059 6060/1/6060 6063/1/6063
+f 6059/1/6059 6063/1/6063 6064/1/6064
+f 6069/1/6069 6059/1/6059 6064/1/6064
+f 6069/1/6069 6064/1/6064 6070/1/6070
+f 6107/1/6107 6069/1/6069 6070/1/6070
+f 6070/1/6070 6064/1/6064 6067/1/6067
+f 6070/1/6070 6067/1/6067 6072/1/6072
+f 6110/1/6110 6059/1/6059 6069/1/6069
+f 6108/1/6108 6110/1/6110 6069/1/6069
+f 6108/1/6108 6111/1/6111 6110/1/6110
+f 6111/1/6111 6058/1/6058 6110/1/6110
+f 6111/1/6111 6056/1/6056 6058/1/6058
+f 6056/1/6056 6055/1/6055 6058/1/6058
+f 6058/1/6058 6055/1/6055 6059/1/6059
+f 6056/1/6056 6053/1/6053 6055/1/6055
+f 6053/1/6053 6049/1/6049 6055/1/6055
+f 6055/1/6055 6049/1/6049 6054/1/6054
+f 6053/1/6053 6048/1/6048 6049/1/6049
+f 6048/1/6048 6046/1/6046 6049/1/6049
+f 6049/1/6049 6046/1/6046 6043/1/6043
+f 6046/1/6046 5595/1/5595 6043/1/6043
+f 6046/1/6046 5593/1/5593 5595/1/5595
+f 5593/1/5593 5594/1/5594 5595/1/5595
+f 5595/1/5595 5594/1/5594 5596/1/5596
+f 5595/1/5595 5596/1/5596 6042/1/6042
+f 6042/1/6042 5596/1/5596 6041/1/6041
+f 5596/1/5596 7114/1/7114 6041/1/6041
+f 6041/1/6041 7114/1/7114 7113/1/7113
+f 7114/1/7114 7115/1/7115 7113/1/7113
+f 7113/1/7113 7115/1/7115 7092/1/7092
+f 7113/1/7113 7092/1/7092 7112/1/7112
+f 7115/1/7115 7091/1/7091 7092/1/7092
+f 7091/1/7091 7088/1/7088 7092/1/7092
+f 7091/1/7091 7080/1/7080 7088/1/7088
+f 7081/1/7081 7080/1/7080 7091/1/7091
+f 7081/1/7081 7077/1/7077 7080/1/7080
+f 7076/1/7076 7077/1/7077 7081/1/7081
+f 7076/1/7076 7081/1/7081 7115/1/7115
+f 7073/1/7073 7077/1/7077 7076/1/7076
+f 7075/1/7075 7073/1/7073 7076/1/7076
+f 7114/1/7114 7075/1/7075 7076/1/7076
+f 7116/1/7116 7075/1/7075 7114/1/7114
+f 7116/1/7116 7074/1/7074 7075/1/7075
+f 7117/1/7117 7074/1/7074 7116/1/7116
+f 5594/1/5594 7117/1/7117 7116/1/7116
+f 5592/1/5592 7117/1/7117 5594/1/5594
+f 5592/1/5592 7118/1/7118 7117/1/7117
+f 7118/1/7118 7068/1/7068 7117/1/7117
+f 7118/1/7118 7120/1/7120 7068/1/7068
+f 7120/1/7120 7067/1/7067 7068/1/7068
+f 7067/1/7067 7064/1/7064 7068/1/7068
+f 7068/1/7068 7064/1/7064 7066/1/7066
+f 7068/1/7068 7066/1/7066 7072/1/7072
+f 7068/1/7068 7072/1/7072 7074/1/7074
+f 7074/1/7074 7072/1/7072 7073/1/7073
+f 7072/1/7072 7070/1/7070 7073/1/7073
+f 7073/1/7073 7070/1/7070 7071/1/7071
+f 7072/1/7072 7066/1/7066 7070/1/7070
+f 7070/1/7070 7066/1/7066 7069/1/7069
+f 7058/1/7058 7070/1/7070 7069/1/7069
+f 7069/1/7069 7057/1/7057 7058/1/7058
+f 7065/1/7065 7057/1/7057 7069/1/7069
+f 7062/1/7062 7057/1/7057 7065/1/7065
+f 7065/1/7065 7064/1/7064 7062/1/7062
+f 7062/1/7062 7064/1/7064 7061/1/7061
+f 7061/1/7061 6600/1/6600 7062/1/7062
+f 7060/1/7060 6600/1/6600 7061/1/7061
+f 7061/1/7061 7063/1/7063 7060/1/7060
+f 7060/1/7060 7063/1/7063 6611/1/6611
+f 6611/1/6611 6598/1/6598 7060/1/7060
+f 6612/1/6612 6598/1/6598 6611/1/6611
+f 6611/1/6611 6610/1/6610 6612/1/6612
+f 6612/1/6612 6610/1/6610 6604/1/6604
+f 6604/1/6604 6610/1/6610 6609/1/6609
+f 6604/1/6604 6609/1/6609 6603/1/6603
+f 6603/1/6603 6597/1/6597 6604/1/6604
+f 6604/1/6604 6597/1/6597 6598/1/6598
+f 6597/1/6597 6595/1/6595 6598/1/6598
+f 6598/1/6598 6595/1/6595 6596/1/6596
+f 6598/1/6598 6596/1/6596 6600/1/6600
+f 6600/1/6600 6596/1/6596 6599/1/6599
+f 6600/1/6600 6599/1/6599 7057/1/7057
+f 7057/1/7057 6599/1/6599 6601/1/6601
+f 7057/1/7057 6601/1/6601 7056/1/7056
+f 6599/1/6599 6120/1/6120 6601/1/6601
+f 6601/1/6601 6120/1/6120 6116/1/6116
+f 6601/1/6601 6116/1/6116 6602/1/6602
+f 6602/1/6602 6116/1/6116 6117/1/6117
+f 6116/1/6116 6113/1/6113 6117/1/6117
+f 6116/1/6116 6115/1/6115 6113/1/6113
+f 6115/1/6115 6114/1/6114 6113/1/6113
+f 6113/1/6113 6114/1/6114 6112/1/6112
+f 6113/1/6113 6112/1/6112 6111/1/6111
+f 6114/1/6114 6057/1/6057 6112/1/6112
+f 6112/1/6112 6057/1/6057 6056/1/6056
+f 6114/1/6114 6144/1/6144 6057/1/6057
+f 6144/1/6144 6052/1/6052 6057/1/6057
+f 6057/1/6057 6052/1/6052 6053/1/6053
+f 6140/1/6140 6052/1/6052 6144/1/6144
+f 6125/1/6125 6140/1/6140 6144/1/6144
+f 6124/1/6124 6140/1/6140 6125/1/6125
+f 6119/1/6119 6124/1/6124 6125/1/6125
+f 6119/1/6119 6125/1/6125 6114/1/6114
+f 6123/1/6123 6124/1/6124 6119/1/6119
+f 6118/1/6118 6123/1/6123 6119/1/6119
+f 6118/1/6118 6119/1/6119 6115/1/6115
+f 6120/1/6120 6118/1/6118 6115/1/6115
+f 6120/1/6120 6121/1/6121 6118/1/6118
+f 6121/1/6121 6122/1/6122 6118/1/6118
+f 6121/1/6121 6127/1/6127 6122/1/6122
+f 6127/1/6127 6128/1/6128 6122/1/6122
+f 6122/1/6122 6128/1/6128 6126/1/6126
+f 6122/1/6122 6126/1/6126 6123/1/6123
+f 6128/1/6128 6129/1/6129 6126/1/6126
+f 6129/1/6129 6131/1/6131 6126/1/6126
+f 6126/1/6126 6131/1/6131 6130/1/6130
+f 6126/1/6126 6130/1/6130 6124/1/6124
+f 6131/1/6131 6138/1/6138 6130/1/6130
+f 6130/1/6130 6138/1/6138 6139/1/6139
+f 6130/1/6130 6139/1/6139 6140/1/6140
+f 6140/1/6140 6139/1/6139 6051/1/6051
+f 6139/1/6139 6050/1/6050 6051/1/6051
+f 6051/1/6051 6050/1/6050 6047/1/6047
+f 6051/1/6051 6047/1/6047 6048/1/6048
+f 6052/1/6052 6051/1/6051 6048/1/6048
+f 6050/1/6050 5593/1/5593 6047/1/6047
+f 6050/1/6050 5591/1/5591 5593/1/5593
+f 5591/1/5591 5592/1/5592 5593/1/5593
+f 5591/1/5591 5590/1/5590 5592/1/5592
+f 5590/1/5590 7119/1/7119 5592/1/5592
+f 5590/1/5590 6728/1/6728 7119/1/7119
+f 6728/1/6728 7121/1/7121 7119/1/7119
+f 7119/1/7119 7121/1/7121 7120/1/7120
+f 6728/1/6728 6726/1/6726 7121/1/7121
+f 6726/1/6726 7122/1/7122 7121/1/7121
+f 7121/1/7121 7122/1/7122 7067/1/7067
+f 7122/1/7122 7063/1/7063 7067/1/7067
+f 7122/1/7122 6610/1/6610 7063/1/7063
+f 6727/1/6727 6610/1/6610 7122/1/7122
+f 6725/1/6725 6610/1/6610 6727/1/6727
+f 6726/1/6726 6725/1/6725 6727/1/6727
+f 6724/1/6724 6725/1/6725 6726/1/6726
+f 6724/1/6724 6722/1/6722 6725/1/6725
+f 6722/1/6722 6609/1/6609 6725/1/6725
+f 6722/1/6722 6613/1/6613 6609/1/6609
+f 6609/1/6609 6613/1/6613 6608/1/6608
+f 6608/1/6608 6613/1/6613 6606/1/6606
+f 6608/1/6608 6606/1/6606 6594/1/6594
+f 6605/1/6605 6608/1/6608 6594/1/6594
+f 6594/1/6594 6592/1/6592 6605/1/6605
+f 6605/1/6605 6592/1/6592 6603/1/6603
+f 6594/1/6594 6591/1/6591 6592/1/6592
+f 6591/1/6591 5608/1/5608 6592/1/6592
+f 6592/1/6592 5608/1/5608 6595/1/6595
+f 5608/1/5608 5555/1/5555 6595/1/6595
+f 6595/1/6595 5555/1/5555 5605/1/5605
+f 5555/1/5555 5554/1/5554 5605/1/5605
+f 5605/1/5605 5554/1/5554 5603/1/5603
+f 5605/1/5605 5603/1/5603 6137/1/6137
+f 6596/1/6596 5605/1/5605 6137/1/6137
+f 6596/1/6596 6137/1/6137 6136/1/6136
+f 6137/1/6137 5604/1/5604 6136/1/6136
+f 6136/1/6136 5604/1/5604 6121/1/6121
+f 5604/1/5604 6133/1/6133 6121/1/6121
+f 5604/1/5604 6135/1/6135 6133/1/6133
+f 6135/1/6135 5606/1/5606 6133/1/6133
+f 6133/1/6133 5606/1/5606 6132/1/6132
+f 6133/1/6133 6132/1/6132 6127/1/6127
+f 5606/1/5606 6134/1/6134 6132/1/6132
+f 6132/1/6132 6134/1/6134 6129/1/6129
+f 6134/1/6134 6142/1/6142 6129/1/6129
+f 6129/1/6129 6142/1/6142 6141/1/6141
+f 6142/1/6142 6143/1/6143 6141/1/6141
+f 6141/1/6141 6143/1/6143 6138/1/6138
+f 6138/1/6138 6143/1/6143 6050/1/6050
+f 6142/1/6142 5586/1/5586 6143/1/6143
+f 5586/1/5586 5580/1/5580 6143/1/6143
+f 6143/1/6143 5580/1/5580 5591/1/5591
+f 5581/1/5581 5580/1/5580 5586/1/5586
+f 5587/1/5587 5581/1/5581 5586/1/5586
+f 5584/1/5584 5581/1/5581 5587/1/5587
+f 5588/1/5588 5584/1/5584 5587/1/5587
+f 5588/1/5588 5587/1/5587 6134/1/6134
+f 5585/1/5585 5584/1/5584 5588/1/5588
+f 5585/1/5585 5588/1/5588 5606/1/5606
+f 5601/1/5601 5585/1/5585 5606/1/5606
+f 5598/1/5598 5585/1/5585 5601/1/5601
+f 5602/1/5602 5598/1/5598 5601/1/5601
+f 5602/1/5602 5601/1/5601 6135/1/6135
+f 5600/1/5600 5598/1/5598 5602/1/5602
+f 5603/1/5603 5600/1/5600 5602/1/5602
+f 5603/1/5603 5602/1/5602 5604/1/5604
+f 5603/1/5603 5599/1/5599 5600/1/5600
+f 5599/1/5599 5597/1/5597 5600/1/5600
+f 5599/1/5599 5559/1/5559 5597/1/5597
+f 5559/1/5559 5563/1/5563 5597/1/5597
+f 5597/1/5597 5563/1/5563 5598/1/5598
+f 5563/1/5563 5583/1/5583 5598/1/5598
+f 5563/1/5563 5565/1/5565 5583/1/5583
+f 5565/1/5565 5578/1/5578 5583/1/5583
+f 5583/1/5583 5578/1/5578 5582/1/5582
+f 5583/1/5583 5582/1/5582 5585/1/5585
+f 5578/1/5578 5577/1/5577 5582/1/5582
+f 5582/1/5582 5577/1/5577 5581/1/5581
+f 5577/1/5577 5576/1/5576 5581/1/5581
+f 5567/1/5567 5576/1/5576 5577/1/5577
+f 5567/1/5567 5570/1/5570 5576/1/5576
+f 5576/1/5576 5570/1/5570 5579/1/5579
+f 5576/1/5576 5579/1/5579 5580/1/5580
+f 5580/1/5580 5579/1/5579 5589/1/5589
+f 5580/1/5580 5589/1/5589 5590/1/5590
+f 5579/1/5579 6724/1/6724 5589/1/5589
+f 5589/1/5589 6724/1/6724 6728/1/6728
+f 5579/1/5579 6721/1/6721 6724/1/6724
+f 5570/1/5570 6721/1/6721 5579/1/5579
+f 5570/1/5570 6622/1/6622 6721/1/6721
+f 6622/1/6622 6720/1/6720 6721/1/6721
+f 6721/1/6721 6720/1/6720 6722/1/6722
+f 6720/1/6720 6723/1/6723 6722/1/6722
+f 6720/1/6720 6606/1/6606 6723/1/6723
+f 6720/1/6720 6615/1/6615 6606/1/6606
+f 6615/1/6615 6607/1/6607 6606/1/6606
+f 6614/1/6614 6607/1/6607 6615/1/6615
+f 6616/1/6616 6614/1/6614 6615/1/6615
+f 6620/1/6620 6616/1/6616 6615/1/6615
+f 6620/1/6620 6615/1/6615 6622/1/6622
+f 5569/1/5569 6620/1/6620 6622/1/6622
+f 5572/1/5572 6620/1/6620 5569/1/5569
+f 5571/1/5571 5572/1/5572 5569/1/5569
+f 5571/1/5571 5569/1/5569 5566/1/5566
+f 5568/1/5568 5571/1/5571 5566/1/5566
+f 5568/1/5568 5566/1/5566 5561/1/5561
+f 5557/1/5557 5568/1/5568 5561/1/5561
+f 5557/1/5557 5561/1/5561 5558/1/5558
+f 5551/1/5551 5557/1/5557 5558/1/5558
+f 5551/1/5551 5558/1/5558 5556/1/5556
+f 5552/1/5552 5551/1/5551 5556/1/5556
+f 5552/1/5552 5556/1/5556 5553/1/5553
+f 5550/1/5550 5552/1/5552 5553/1/5553
+f 5550/1/5550 5553/1/5553 5554/1/5554
+f 5554/1/5554 5553/1/5553 5599/1/5599
+f 5550/1/5550 5547/1/5547 5552/1/5552
+f 5548/1/5548 5547/1/5547 5550/1/5550
+f 5549/1/5549 5548/1/5548 5550/1/5550
+f 5549/1/5549 5550/1/5550 5555/1/5555
+f 5542/1/5542 5548/1/5548 5549/1/5549
+f 5543/1/5543 5542/1/5542 5549/1/5549
+f 5543/1/5543 5549/1/5549 5607/1/5607
+f 5460/1/5460 5543/1/5543 5607/1/5607
+f 6590/1/6590 5460/1/5460 5607/1/5607
+f 6590/1/6590 5607/1/5607 6591/1/6591
+f 6589/1/6589 6590/1/6590 6591/1/6591
+f 6589/1/6589 6591/1/6591 6593/1/6593
+f 6593/1/6593 6607/1/6607 6589/1/6589
+f 6589/1/6589 6607/1/6607 6588/1/6588
+f 6589/1/6589 6588/1/6588 6587/1/6587
+f 6587/1/6587 6588/1/6588 6584/1/6584
+f 6587/1/6587 6584/1/6584 6583/1/6583
+f 6583/1/6583 6586/1/6586 6587/1/6587
+f 6587/1/6587 6586/1/6586 6590/1/6590
+f 6582/1/6582 6586/1/6586 6583/1/6583
+f 6583/1/6583 6580/1/6580 6582/1/6582
+f 6582/1/6582 6580/1/6580 6581/1/6581
+f 6581/1/6581 6573/1/6573 6582/1/6582
+f 6574/1/6574 6573/1/6573 6581/1/6581
+f 6581/1/6581 6575/1/6575 6574/1/6574
+f 6574/1/6574 6575/1/6575 6571/1/6571
+f 6571/1/6571 6568/1/6568 6574/1/6574
+f 6569/1/6569 6568/1/6568 6571/1/6571
+f 6569/1/6569 6571/1/6571 6572/1/6572
+f 6570/1/6570 6569/1/6569 6572/1/6572
+f 6570/1/6570 6572/1/6572 6577/1/6577
+f 6570/1/6570 6577/1/6577 6563/1/6563
+f 6570/1/6570 6563/1/6563 6560/1/6560
+f 6563/1/6563 6558/1/6558 6560/1/6560
+f 6560/1/6560 6558/1/6558 6557/1/6557
+f 6557/1/6557 6561/1/6561 6560/1/6560
+f 6560/1/6560 6561/1/6561 6566/1/6566
+f 6560/1/6560 6566/1/6566 6569/1/6569
+f 6561/1/6561 5461/1/5461 6566/1/6566
+f 6566/1/6566 5461/1/5461 5456/1/5456
+f 6566/1/6566 5456/1/5456 6568/1/6568
+f 6568/1/6568 5456/1/5456 6573/1/6573
+f 6573/1/6573 5456/1/5456 5453/1/5453
+f 6573/1/6573 5453/1/5453 6586/1/6586
+f 6586/1/6586 5453/1/5453 5460/1/5460
+f 5453/1/5453 5459/1/5459 5460/1/5460
+f 5453/1/5453 5455/1/5455 5459/1/5459
+f 5459/1/5459 5455/1/5455 5540/1/5540
+f 5459/1/5459 5540/1/5540 5543/1/5543
+f 5540/1/5540 5455/1/5455 5537/1/5537
+f 5536/1/5536 5540/1/5540 5537/1/5537
+f 5536/1/5536 5537/1/5537 5532/1/5532
+f 5535/1/5535 5536/1/5536 5532/1/5532
+f 5535/1/5535 5532/1/5532 5531/1/5531
+f 5531/1/5531 5534/1/5534 5535/1/5535
+f 5535/1/5535 5534/1/5534 5539/1/5539
+f 5535/1/5535 5539/1/5539 5538/1/5538
+f 5538/1/5538 5539/1/5539 5544/1/5544
+f 5538/1/5538 5544/1/5544 5542/1/5542
+f 5542/1/5542 5540/1/5540 5538/1/5538
+f 5539/1/5539 5545/1/5545 5544/1/5544
+f 5544/1/5544 5545/1/5545 5546/1/5546
+f 5544/1/5544 5546/1/5546 5547/1/5547
+f 5547/1/5547 5546/1/5546 5551/1/5551
+f 5546/1/5546 5545/1/5545 5575/1/5575
+f 5546/1/5546 5575/1/5575 5557/1/5557
+f 5545/1/5545 5574/1/5574 5575/1/5575
+f 5575/1/5575 5574/1/5574 5568/1/5568
+f 5574/1/5574 5573/1/5573 5568/1/5568
+f 5534/1/5534 5573/1/5573 5574/1/5574
+f 5533/1/5533 5573/1/5573 5534/1/5534
+f 5533/1/5533 5571/1/5571 5573/1/5573
+f 5527/1/5527 5571/1/5571 5533/1/5533
+f 5529/1/5529 5527/1/5527 5533/1/5533
+f 5529/1/5529 5533/1/5533 5531/1/5531
+f 5531/1/5531 5528/1/5528 5529/1/5529
+f 5529/1/5529 5528/1/5528 5524/1/5524
+f 5528/1/5528 5525/1/5525 5524/1/5524
+f 5524/1/5524 5525/1/5525 5522/1/5522
+f 5524/1/5524 5522/1/5522 5520/1/5520
+f 5527/1/5527 5524/1/5524 5520/1/5520
+f 5527/1/5527 5520/1/5520 5526/1/5526
+f 5526/1/5526 5572/1/5572 5527/1/5527
+f 5526/1/5526 6623/1/6623 5572/1/5572
+f 6623/1/6623 6619/1/6619 5572/1/5572
+f 5572/1/5572 6619/1/6619 6621/1/6621
+f 6619/1/6619 6617/1/6617 6621/1/6621
+f 6621/1/6621 6617/1/6617 6620/1/6620
+f 6619/1/6619 6618/1/6618 6617/1/6617
+f 6618/1/6618 6585/1/6585 6617/1/6617
+f 6617/1/6617 6585/1/6585 6614/1/6614
+f 6585/1/6585 6588/1/6588 6614/1/6614
+f 6618/1/6618 6579/1/6579 6585/1/6585
+f 6579/1/6579 6580/1/6580 6585/1/6585
+f 6585/1/6585 6580/1/6580 6584/1/6584
+f 6579/1/6579 6575/1/6575 6580/1/6580
+f 6578/1/6578 6575/1/6575 6579/1/6579
+f 6719/1/6719 6578/1/6578 6579/1/6579
+f 6578/1/6578 6719/1/6719 6624/1/6624
+f 6718/1/6718 6578/1/6578 6624/1/6624
+f 6718/1/6718 6624/1/6624 6625/1/6625
+f 6718/1/6718 6625/1/6625 6577/1/6577
+f 6577/1/6577 6625/1/6625 6627/1/6627
+f 6625/1/6625 6626/1/6626 6627/1/6627
+f 6627/1/6627 6626/1/6626 6628/1/6628
+f 6627/1/6627 6628/1/6628 6564/1/6564
+f 6563/1/6563 6627/1/6627 6564/1/6564
+f 6564/1/6564 6628/1/6628 6631/1/6631
+f 6564/1/6564 6631/1/6631 6562/1/6562
+f 6558/1/6558 6564/1/6564 6562/1/6562
+f 6558/1/6558 6562/1/6562 6559/1/6559
+f 6559/1/6559 6562/1/6562 6565/1/6565
+f 6559/1/6559 6565/1/6565 6561/1/6561
+f 6562/1/6562 6567/1/6567 6565/1/6565
+f 6567/1/6567 5479/1/5479 6565/1/6565
+f 5479/1/5479 5461/1/5461 6565/1/6565
+f 5478/1/5478 5461/1/5461 5479/1/5479
+f 5478/1/5478 5479/1/5479 5480/1/5480
+f 5478/1/5478 5480/1/5480 5481/1/5481
+f 5478/1/5478 5481/1/5481 5503/1/5503
+f 5476/1/5476 5478/1/5478 5503/1/5503
+f 5476/1/5476 5503/1/5503 5502/1/5502
+f 5477/1/5477 5476/1/5476 5502/1/5502
+f 5477/1/5477 5502/1/5502 5621/1/5621
+f 5477/1/5477 5621/1/5621 5620/1/5620
+f 5620/1/5620 5619/1/5619 5477/1/5477
+f 5477/1/5477 5619/1/5619 5475/1/5475
+f 5477/1/5477 5475/1/5475 5474/1/5474
+f 5474/1/5474 5475/1/5475 5473/1/5473
+f 5474/1/5474 5473/1/5473 5462/1/5462
+f 5478/1/5478 5474/1/5474 5462/1/5462
+f 5462/1/5462 5473/1/5473 5466/1/5466
+f 5462/1/5462 5466/1/5466 5463/1/5463
+f 5462/1/5462 5463/1/5463 5457/1/5457
+f 5461/1/5461 5462/1/5462 5457/1/5457
+f 5457/1/5457 5463/1/5463 5458/1/5458
+f 5457/1/5457 5458/1/5458 5453/1/5453
+f 5453/1/5453 5458/1/5458 5454/1/5454
+f 5454/1/5454 5458/1/5458 5464/1/5464
+f 5610/1/5610 5454/1/5454 5464/1/5464
+f 5610/1/5610 5464/1/5464 5507/1/5507
+f 5611/1/5611 5610/1/5610 5507/1/5507
+f 5611/1/5611 5507/1/5507 5515/1/5515
+f 5523/1/5523 5611/1/5611 5515/1/5515
+f 5523/1/5523 5515/1/5515 5516/1/5516
+f 5522/1/5522 5523/1/5523 5516/1/5516
+f 5522/1/5522 5516/1/5516 5517/1/5517
+f 5516/1/5516 5514/1/5514 5517/1/5517
+f 5517/1/5517 5514/1/5514 5513/1/5513
+f 5517/1/5517 5513/1/5513 5518/1/5518
+f 5521/1/5521 5517/1/5517 5518/1/5518
+f 5521/1/5521 5518/1/5518 6625/1/6625
+f 5526/1/5526 5521/1/5521 6625/1/6625
+f 6625/1/6625 5518/1/5518 5519/1/5519
+f 5520/1/5520 5517/1/5517 5521/1/5521
+f 5518/1/5518 5513/1/5513 5519/1/5519
+f 5513/1/5513 5512/1/5512 5519/1/5519
+f 5519/1/5519 5512/1/5512 5613/1/5613
+f 5519/1/5519 5613/1/5613 6626/1/6626
+f 6626/1/6626 5613/1/5613 6629/1/6629
+f 5613/1/5613 6632/1/6632 6629/1/6629
+f 6629/1/6629 6632/1/6632 6633/1/6633
+f 6629/1/6629 6633/1/6633 6630/1/6630
+f 6628/1/6628 6629/1/6629 6630/1/6630
+f 6630/1/6630 6633/1/6633 6636/1/6636
+f 6630/1/6630 6636/1/6636 6715/1/6715
+f 6716/1/6716 6630/1/6630 6715/1/6715
+f 6716/1/6716 6715/1/6715 6717/1/6717
+f 6716/1/6716 6717/1/6717 6567/1/6567
+f 6567/1/6567 6717/1/6717 5480/1/5480
+f 6717/1/6717 7419/1/7419 5480/1/5480
+f 5480/1/5480 7419/1/7419 5482/1/5482
+f 7419/1/7419 6952/1/6952 5482/1/5482
+f 6952/1/6952 5484/1/5484 5482/1/5482
+f 5484/1/5484 5483/1/5483 5482/1/5482
+f 5482/1/5482 5483/1/5483 5481/1/5481
+f 6708/1/6708 5481/1/5481 5483/1/5483
+f 5483/1/5483 6705/1/6705 6708/1/6708
+f 6709/1/6709 6708/1/6708 6705/1/6705
+f 6709/1/6709 6705/1/6705 6703/1/6703
+f 6702/1/6702 6709/1/6709 6703/1/6703
+f 6702/1/6702 6703/1/6703 6700/1/6700
+f 6704/1/6704 6702/1/6702 6700/1/6700
+f 6704/1/6704 6700/1/6700 6639/1/6639
+f 6634/1/6634 6704/1/6704 6639/1/6639
+f 6634/1/6634 6639/1/6639 6638/1/6638
+f 6638/1/6638 6635/1/6635 6634/1/6634
+f 6632/1/6632 6634/1/6634 6635/1/6635
+f 6638/1/6638 6637/1/6637 6635/1/6635
+f 6633/1/6633 6635/1/6635 6637/1/6637
+f 6637/1/6637 6638/1/6638 6947/1/6947
+f 6637/1/6637 6947/1/6947 6948/1/6948
+f 6948/1/6948 6950/1/6950 6637/1/6637
+f 6636/1/6636 6637/1/6637 6950/1/6950
+f 6948/1/6948 6951/1/6951 6950/1/6950
+f 6950/1/6950 6951/1/6951 6952/1/6952
+f 6953/1/6953 6950/1/6950 6952/1/6952
+f 6715/1/6715 6950/1/6950 6953/1/6953
+f 6952/1/6952 6951/1/6951 6949/1/6949
+f 6949/1/6949 6951/1/6951 6948/1/6948
+f 6949/1/6949 6948/1/6948 6944/1/6944
+f 6949/1/6949 6944/1/6944 6943/1/6943
+f 6943/1/6943 5484/1/5484 6949/1/6949
+f 5485/1/5485 5484/1/5484 6943/1/6943
+f 6943/1/6943 6941/1/6941 5485/1/5485
+f 5485/1/5485 6941/1/6941 5487/1/5487
+f 5486/1/5486 5485/1/5485 5487/1/5487
+f 5486/1/5486 5487/1/5487 5488/1/5488
+f 6692/1/6692 5486/1/5486 5488/1/5488
+f 6692/1/6692 5488/1/5488 6691/1/6691
+f 6691/1/6691 6690/1/6690 6692/1/6692
+f 6692/1/6692 6690/1/6690 6693/1/6693
+f 6690/1/6690 6694/1/6694 6693/1/6693
+f 6693/1/6693 6694/1/6694 6696/1/6696
+f 6693/1/6693 6696/1/6696 6698/1/6698
+f 6693/1/6693 6698/1/6698 6707/1/6707
+f 5486/1/5486 6693/1/6693 6707/1/6707
+f 5486/1/5486 6707/1/6707 5483/1/5483
+f 6707/1/6707 6706/1/6706 5483/1/5483
+f 6707/1/6707 6698/1/6698 6706/1/6706
+f 6698/1/6698 6699/1/6699 6706/1/6706
+f 6706/1/6706 6699/1/6699 6701/1/6701
+f 6706/1/6706 6701/1/6701 6705/1/6705
+f 6699/1/6699 6697/1/6697 6701/1/6701
+f 6700/1/6700 6701/1/6701 6697/1/6697
+f 6700/1/6700 6697/1/6697 6640/1/6640
+f 6695/1/6695 6640/1/6640 6697/1/6697
+f 6696/1/6696 6695/1/6695 6697/1/6697
+f 6695/1/6695 6642/1/6642 6640/1/6640
+f 6642/1/6642 6643/1/6643 6640/1/6640
+f 6640/1/6640 6643/1/6643 6641/1/6641
+f 6638/1/6638 6640/1/6640 6641/1/6641
+f 6643/1/6643 6920/1/6920 6641/1/6641
+f 6947/1/6947 6641/1/6641 6920/1/6920
+f 6947/1/6947 6920/1/6920 6946/1/6946
+f 6946/1/6946 6920/1/6920 6945/1/6945
+f 6944/1/6944 6946/1/6946 6945/1/6945
+f 6944/1/6944 6945/1/6945 6941/1/6941
+f 6945/1/6945 6942/1/6942 6941/1/6941
+f 6941/1/6941 6942/1/6942 6939/1/6939
+f 6940/1/6940 6939/1/6939 6942/1/6942
+f 6918/1/6918 6940/1/6940 6942/1/6942
+f 6917/1/6917 6940/1/6940 6918/1/6918
+f 6916/1/6916 6917/1/6917 6918/1/6918
+f 6916/1/6916 6918/1/6918 6920/1/6920
+f 6919/1/6919 6917/1/6917 6916/1/6916
+f 6645/1/6645 6919/1/6919 6916/1/6916
+f 6645/1/6645 6916/1/6916 6643/1/6643
+f 6644/1/6644 6645/1/6645 6643/1/6643
+f 6684/1/6684 6645/1/6645 6644/1/6644
+f 6684/1/6684 6644/1/6644 6686/1/6686
+f 6685/1/6685 6684/1/6684 6686/1/6686
+f 6685/1/6685 6686/1/6686 6689/1/6689
+f 6687/1/6687 6685/1/6685 6689/1/6689
+f 6687/1/6687 6689/1/6689 6690/1/6690
+f 6683/1/6683 6685/1/6685 6687/1/6687
+f 6688/1/6688 6683/1/6683 6687/1/6687
+f 6688/1/6688 6687/1/6687 6691/1/6691
+f 6681/1/6681 6683/1/6683 6688/1/6688
+f 5488/1/5488 6681/1/6681 6688/1/6688
+f 6681/1/6681 5488/1/5488 6676/1/6676
+f 6676/1/6676 6680/1/6680 6681/1/6681
+f 6676/1/6676 6678/1/6678 6680/1/6680
+f 6678/1/6678 6679/1/6679 6680/1/6680
+f 6680/1/6680 6679/1/6679 6682/1/6682
+f 6680/1/6680 6682/1/6682 6683/1/6683
+f 6679/1/6679 6684/1/6684 6682/1/6682
+f 6679/1/6679 6646/1/6646 6684/1/6684
+f 6677/1/6677 6646/1/6646 6679/1/6679
+f 6651/1/6651 6646/1/6646 6677/1/6677
+f 6675/1/6675 6651/1/6651 6677/1/6677
+f 6675/1/6675 6677/1/6677 6678/1/6678
+f 6674/1/6674 6651/1/6651 6675/1/6675
+f 5491/1/5491 6674/1/6674 6675/1/6675
+f 6676/1/6676 5491/1/5491 6675/1/6675
+f 5493/1/5493 6674/1/6674 5491/1/5491
+f 5490/1/5490 5493/1/5493 5491/1/5491
+f 5490/1/5490 5491/1/5491 5488/1/5488
+f 5488/1/5488 5489/1/5489 5490/1/5490
+f 5489/1/5489 6930/1/6930 5490/1/5490
+f 6926/1/6926 5490/1/5490 6930/1/6930
+f 6924/1/6924 6926/1/6926 6930/1/6930
+f 6924/1/6924 6930/1/6930 6938/1/6938
+f 6924/1/6924 6938/1/6938 6940/1/6940
+f 6921/1/6921 6926/1/6926 6924/1/6924
+f 6921/1/6921 6924/1/6924 6917/1/6917
+f 6921/1/6921 6925/1/6925 6926/1/6926
+f 6925/1/6925 6929/1/6929 6926/1/6926
+f 6925/1/6925 5492/1/5492 6929/1/6929
+f 5490/1/5490 6929/1/6929 5492/1/5492
+f 6928/1/6928 5492/1/5492 6925/1/6925
+f 6923/1/6923 6928/1/6928 6925/1/6925
+f 6927/1/6927 6928/1/6928 6923/1/6923
+f 6922/1/6922 6927/1/6927 6923/1/6923
+f 6922/1/6922 6923/1/6923 6650/1/6650
+f 6649/1/6649 6922/1/6922 6650/1/6650
+f 6649/1/6649 6650/1/6650 6647/1/6647
+f 6653/1/6653 6649/1/6649 6647/1/6647
+f 6648/1/6648 6653/1/6653 6647/1/6647
+f 6648/1/6648 6647/1/6647 6646/1/6646
+f 6646/1/6646 6647/1/6647 6645/1/6645
+f 6652/1/6652 6653/1/6653 6648/1/6648
+f 6655/1/6655 6652/1/6652 6648/1/6648
+f 6655/1/6655 6648/1/6648 6654/1/6654
+f 6673/1/6673 6655/1/6655 6654/1/6654
+f 6673/1/6673 6654/1/6654 6674/1/6674
+f 6672/1/6672 6655/1/6655 6673/1/6673
+f 6672/1/6672 6673/1/6673 5493/1/5493
+f 6672/1/6672 5493/1/5493 5495/1/5495
+f 5495/1/5495 6671/1/6671 6672/1/6672
+f 6671/1/6671 6664/1/6664 6672/1/6672
+f 6671/1/6671 6665/1/6665 6664/1/6664
+f 6665/1/6665 6658/1/6658 6664/1/6664
+f 6664/1/6664 6658/1/6658 6652/1/6652
+f 6658/1/6658 6656/1/6656 6652/1/6652
+f 6658/1/6658 6659/1/6659 6656/1/6656
+f 6659/1/6659 6660/1/6660 6656/1/6656
+f 6656/1/6656 6660/1/6660 6657/1/6657
+f 6656/1/6656 6657/1/6657 6653/1/6653
+f 6660/1/6660 6932/1/6932 6657/1/6657
+f 6657/1/6657 6932/1/6932 6922/1/6922
+f 6660/1/6660 6934/1/6934 6932/1/6932
+f 6934/1/6934 6933/1/6933 6932/1/6932
+f 6932/1/6932 6933/1/6933 6931/1/6931
+f 6932/1/6932 6931/1/6931 6927/1/6927
+f 6933/1/6933 5497/1/5497 6931/1/6931
+f 6931/1/6931 5497/1/5497 5494/1/5494
+f 6931/1/6931 5494/1/5494 6928/1/6928
+f 5496/1/5496 5494/1/5494 5497/1/5497
+f 5496/1/5496 5497/1/5497 5498/1/5498
+f 5498/1/5498 5499/1/5499 5496/1/5496
+f 6669/1/6669 5496/1/5496 5499/1/5499
+f 5499/1/5499 6663/1/6663 6669/1/6669
+f 6669/1/6669 6663/1/6663 6670/1/6670
+f 6670/1/6670 6663/1/6663 6665/1/6665
+f 5499/1/5499 6666/1/6666 6663/1/6663
+f 6666/1/6666 6661/1/6661 6663/1/6663
+f 6663/1/6663 6661/1/6661 6658/1/6658
+f 6666/1/6666 6659/1/6659 6661/1/6661
+f 6668/1/6668 6659/1/6659 6666/1/6666
+f 6668/1/6668 6666/1/6666 6667/1/6667
+f 5501/1/5501 6668/1/6668 6667/1/6667
+f 6667/1/6667 5499/1/5499 5501/1/5501
+f 5500/1/5500 5501/1/5501 5499/1/5499
+f 6730/1/6730 5501/1/5501 5500/1/5500
+f 6730/1/6730 5500/1/5500 6937/1/6937
+f 6936/1/6936 6730/1/6730 6937/1/6937
+f 6936/1/6936 6937/1/6937 6935/1/6935
+f 6936/1/6936 6935/1/6935 6933/1/6933
+f 6937/1/6937 5498/1/5498 6935/1/6935
+f 6729/1/6729 6730/1/6730 6936/1/6936
+f 6729/1/6729 6936/1/6936 6934/1/6934
+f 6662/1/6662 6729/1/6729 6934/1/6934
+f 6729/1/6729 6662/1/6662 5501/1/5501
+f 5501/1/5501 6662/1/6662 6659/1/6659
+f 6937/1/6937 5500/1/5500 5498/1/5498
+f 6730/1/6730 6729/1/6729 5501/1/5501
+f 6668/1/6668 5501/1/5501 6659/1/6659
+f 6667/1/6667 6666/1/6666 5499/1/5499
+f 5496/1/5496 6669/1/6669 6670/1/6670
+f 6670/1/6670 6671/1/6671 5496/1/5496
+f 5500/1/5500 5499/1/5499 5498/1/5498
+f 6935/1/6935 5498/1/5498 5497/1/5497
+f 5495/1/5495 5494/1/5494 5496/1/5496
+f 6935/1/6935 5497/1/5497 6933/1/6933
+f 6934/1/6934 6936/1/6936 6933/1/6933
+f 6662/1/6662 6934/1/6934 6660/1/6660
+f 6659/1/6659 6662/1/6662 6660/1/6660
+f 6661/1/6661 6659/1/6659 6658/1/6658
+f 6663/1/6663 6658/1/6658 6665/1/6665
+f 6670/1/6670 6665/1/6665 6671/1/6671
+f 5496/1/5496 6671/1/6671 5495/1/5495
+f 5493/1/5493 5494/1/5494 5495/1/5495
+f 5493/1/5493 5492/1/5492 5494/1/5494
+f 6672/1/6672 6664/1/6664 6655/1/6655
+f 6654/1/6654 6648/1/6648 6651/1/6651
+f 6664/1/6664 6652/1/6652 6655/1/6655
+f 6652/1/6652 6656/1/6656 6653/1/6653
+f 6653/1/6653 6657/1/6657 6649/1/6649
+f 6647/1/6647 6650/1/6650 6919/1/6919
+f 6650/1/6650 6921/1/6921 6919/1/6919
+f 6657/1/6657 6922/1/6922 6649/1/6649
+f 6650/1/6650 6923/1/6923 6921/1/6921
+f 6932/1/6932 6927/1/6927 6922/1/6922
+f 6927/1/6927 6931/1/6931 6928/1/6928
+f 6928/1/6928 5494/1/5494 5492/1/5492
+f 6923/1/6923 6925/1/6925 6921/1/6921
+f 5490/1/5490 6926/1/6926 6929/1/6929
+f 6938/1/6938 6930/1/6930 5489/1/5489
+f 6938/1/6938 5489/1/5489 6939/1/6939
+f 5489/1/5489 5487/1/5487 6939/1/6939
+f 5492/1/5492 5493/1/5493 5490/1/5490
+f 5493/1/5493 6673/1/6673 6674/1/6674
+f 6674/1/6674 6654/1/6654 6651/1/6651
+f 6651/1/6651 6648/1/6648 6646/1/6646
+f 6678/1/6678 6677/1/6677 6679/1/6679
+f 6675/1/6675 6678/1/6678 6676/1/6676
+f 5488/1/5488 5491/1/5491 6676/1/6676
+f 6681/1/6681 6680/1/6680 6683/1/6683
+f 6683/1/6683 6682/1/6682 6685/1/6685
+f 6689/1/6689 6686/1/6686 6694/1/6694
+f 6694/1/6694 6686/1/6686 6695/1/6695
+f 6682/1/6682 6684/1/6684 6685/1/6685
+f 6686/1/6686 6644/1/6644 6642/1/6642
+f 6646/1/6646 6645/1/6645 6684/1/6684
+f 6647/1/6647 6919/1/6919 6645/1/6645
+f 6919/1/6919 6921/1/6921 6917/1/6917
+f 6917/1/6917 6924/1/6924 6940/1/6940
+f 6940/1/6940 6938/1/6938 6939/1/6939
+f 6918/1/6918 6942/1/6942 6945/1/6945
+f 6920/1/6920 6918/1/6918 6945/1/6945
+f 6643/1/6643 6916/1/6916 6920/1/6920
+f 6644/1/6644 6643/1/6643 6642/1/6642
+f 6686/1/6686 6642/1/6642 6695/1/6695
+f 6696/1/6696 6697/1/6697 6699/1/6699
+f 6698/1/6698 6696/1/6696 6699/1/6699
+f 6694/1/6694 6695/1/6695 6696/1/6696
+f 6690/1/6690 6689/1/6689 6694/1/6694
+f 6691/1/6691 6687/1/6687 6690/1/6690
+f 6691/1/6691 5488/1/5488 6688/1/6688
+f 6692/1/6692 6693/1/6693 5486/1/5486
+f 5488/1/5488 5487/1/5487 5489/1/5489
+f 5483/1/5483 5485/1/5485 5486/1/5486
+f 5487/1/5487 6941/1/6941 6939/1/6939
+f 6943/1/6943 6944/1/6944 6941/1/6941
+f 6948/1/6948 6946/1/6946 6944/1/6944
+f 6948/1/6948 6947/1/6947 6946/1/6946
+f 6638/1/6638 6641/1/6641 6947/1/6947
+f 6639/1/6639 6640/1/6640 6638/1/6638
+f 6714/1/6714 6704/1/6704 6634/1/6634
+f 5615/1/5615 6714/1/6714 6634/1/6634
+f 5613/1/5613 5615/1/5615 6634/1/6634
+f 5615/1/5615 5618/1/5618 6714/1/6714
+f 5622/1/5622 6714/1/6714 5618/1/5618
+f 5622/1/5622 5618/1/5618 5620/1/5620
+f 5622/1/5622 6713/1/6713 6714/1/6714
+f 5622/1/5622 5621/1/5621 6713/1/6713
+f 5621/1/5621 6711/1/6711 6713/1/6713
+f 6713/1/6713 6711/1/6711 6702/1/6702
+f 5621/1/5621 6712/1/6712 6711/1/6711
+f 6712/1/6712 6710/1/6710 6711/1/6711
+f 6711/1/6711 6710/1/6710 6709/1/6709
+f 6712/1/6712 5481/1/5481 6710/1/6710
+f 5616/1/5616 5618/1/5618 5615/1/5615
+f 5614/1/5614 5616/1/5616 5615/1/5615
+f 5512/1/5512 5614/1/5614 5615/1/5615
+f 5511/1/5511 5614/1/5614 5512/1/5512
+f 5510/1/5510 5511/1/5511 5512/1/5512
+f 5510/1/5510 5506/1/5506 5511/1/5511
+f 5506/1/5506 5504/1/5504 5511/1/5511
+f 5469/1/5469 5504/1/5504 5506/1/5506
+f 5505/1/5505 5469/1/5469 5506/1/5506
+f 5470/1/5470 5469/1/5469 5505/1/5505
+f 5508/1/5508 5470/1/5470 5505/1/5505
+f 5508/1/5508 5505/1/5505 5509/1/5509
+f 5514/1/5514 5508/1/5508 5509/1/5509
+f 5515/1/5515 5508/1/5508 5514/1/5514
+f 5509/1/5509 5505/1/5505 5510/1/5510
+f 5509/1/5509 5510/1/5510 5513/1/5513
+f 5507/1/5507 5470/1/5470 5508/1/5508
+f 5470/1/5470 5465/1/5465 5469/1/5469
+f 5465/1/5465 5468/1/5468 5469/1/5469
+f 5469/1/5469 5468/1/5468 5471/1/5471
+f 5468/1/5468 5467/1/5467 5471/1/5471
+f 5471/1/5471 5467/1/5467 5472/1/5472
+f 5471/1/5471 5472/1/5472 5504/1/5504
+f 5504/1/5504 5472/1/5472 5617/1/5617
+f 5504/1/5504 5617/1/5617 5614/1/5614
+f 5472/1/5472 5475/1/5475 5617/1/5617
+f 5467/1/5467 5473/1/5473 5472/1/5472
+f 5468/1/5468 5463/1/5463 5467/1/5467
+f 5465/1/5465 5463/1/5463 5468/1/5468
+f 5464/1/5464 5465/1/5465 5470/1/5470
+f 5469/1/5469 5471/1/5471 5504/1/5504
+f 5505/1/5505 5506/1/5506 5510/1/5510
+f 5511/1/5511 5504/1/5504 5614/1/5614
+f 5614/1/5614 5617/1/5617 5616/1/5616
+f 5617/1/5617 5619/1/5619 5616/1/5616
+f 5616/1/5616 5619/1/5619 5618/1/5618
+f 6714/1/6714 6713/1/6713 6704/1/6704
+f 6639/1/6639 6700/1/6700 6640/1/6640
+f 6713/1/6713 6702/1/6702 6704/1/6704
+f 6703/1/6703 6701/1/6701 6700/1/6700
+f 6711/1/6711 6709/1/6709 6702/1/6702
+f 6703/1/6703 6705/1/6705 6701/1/6701
+f 6710/1/6710 6708/1/6708 6709/1/6709
+f 5483/1/5483 6706/1/6706 6705/1/6705
+f 6710/1/6710 5481/1/5481 6708/1/6708
+f 5484/1/5484 5485/1/5485 5483/1/5483
+f 6952/1/6952 6949/1/6949 5484/1/5484
+f 6953/1/6953 6952/1/6952 7419/1/7419
+f 6717/1/6717 6953/1/6953 7419/1/7419
+f 6717/1/6717 6715/1/6715 6953/1/6953
+f 6631/1/6631 6630/1/6630 6716/1/6716
+f 6715/1/6715 6636/1/6636 6950/1/6950
+f 6633/1/6633 6637/1/6637 6636/1/6636
+f 6632/1/6632 6635/1/6635 6633/1/6633
+f 5613/1/5613 6634/1/6634 6632/1/6632
+f 5512/1/5512 5615/1/5615 5613/1/5613
+f 5513/1/5513 5510/1/5510 5512/1/5512
+f 5514/1/5514 5509/1/5509 5513/1/5513
+f 5516/1/5516 5515/1/5515 5514/1/5514
+f 5612/1/5612 5611/1/5611 5523/1/5523
+f 5530/1/5530 5612/1/5612 5523/1/5523
+f 5530/1/5530 5523/1/5523 5525/1/5525
+f 5530/1/5530 5541/1/5541 5612/1/5612
+f 5541/1/5541 5609/1/5609 5612/1/5612
+f 5541/1/5541 5455/1/5455 5609/1/5609
+f 5455/1/5455 5454/1/5454 5609/1/5609
+f 5537/1/5537 5541/1/5541 5530/1/5530
+f 5612/1/5612 5609/1/5609 5611/1/5611
+f 5515/1/5515 5507/1/5507 5508/1/5508
+f 5609/1/5609 5610/1/5610 5611/1/5611
+f 5507/1/5507 5464/1/5464 5470/1/5470
+f 5609/1/5609 5454/1/5454 5610/1/5610
+f 5464/1/5464 5458/1/5458 5465/1/5465
+f 5458/1/5458 5463/1/5463 5465/1/5465
+f 5463/1/5463 5466/1/5466 5467/1/5467
+f 5467/1/5467 5466/1/5466 5473/1/5473
+f 5472/1/5472 5473/1/5473 5475/1/5475
+f 5617/1/5617 5475/1/5475 5619/1/5619
+f 5620/1/5620 5618/1/5618 5619/1/5619
+f 5620/1/5620 5621/1/5621 5622/1/5622
+f 5502/1/5502 6712/1/6712 5621/1/5621
+f 5474/1/5474 5476/1/5476 5477/1/5477
+f 5502/1/5502 5503/1/5503 6712/1/6712
+f 5478/1/5478 5476/1/5476 5474/1/5474
+f 5503/1/5503 5481/1/5481 6712/1/6712
+f 5482/1/5482 5481/1/5481 5480/1/5480
+f 5462/1/5462 5461/1/5461 5478/1/5478
+f 6567/1/6567 5480/1/5480 5479/1/5479
+f 6562/1/6562 6716/1/6716 6567/1/6567
+f 6562/1/6562 6631/1/6631 6716/1/6716
+f 6628/1/6628 6630/1/6630 6631/1/6631
+f 6626/1/6626 6629/1/6629 6628/1/6628
+f 6625/1/6625 5519/1/5519 6626/1/6626
+f 6625/1/6625 6624/1/6624 6623/1/6623
+f 6577/1/6577 6578/1/6578 6718/1/6718
+f 6577/1/6577 6576/1/6576 6578/1/6578
+f 6624/1/6624 6719/1/6719 6619/1/6619
+f 6576/1/6576 6575/1/6575 6578/1/6578
+f 6572/1/6572 6575/1/6575 6576/1/6576
+f 6719/1/6719 6579/1/6579 6618/1/6618
+f 6619/1/6619 6719/1/6719 6618/1/6618
+f 6623/1/6623 6624/1/6624 6619/1/6619
+f 6625/1/6625 6623/1/6623 5526/1/5526
+f 5526/1/5526 5520/1/5520 5521/1/5521
+f 5520/1/5520 5522/1/5522 5517/1/5517
+f 5525/1/5525 5523/1/5523 5522/1/5522
+f 5528/1/5528 5530/1/5530 5525/1/5525
+f 5532/1/5532 5530/1/5530 5528/1/5528
+f 5529/1/5529 5524/1/5524 5527/1/5527
+f 5534/1/5534 5574/1/5574 5545/1/5545
+f 5534/1/5534 5545/1/5545 5539/1/5539
+f 5531/1/5531 5533/1/5533 5534/1/5534
+f 5531/1/5531 5532/1/5532 5528/1/5528
+f 5538/1/5538 5536/1/5536 5535/1/5535
+f 5532/1/5532 5537/1/5537 5530/1/5530
+f 5538/1/5538 5540/1/5540 5536/1/5536
+f 5537/1/5537 5455/1/5455 5541/1/5541
+f 5453/1/5453 5454/1/5454 5455/1/5455
+f 5456/1/5456 5457/1/5457 5453/1/5453
+f 5461/1/5461 5457/1/5457 5456/1/5456
+f 6565/1/6565 5461/1/5461 6561/1/6561
+f 6559/1/6559 6561/1/6561 6557/1/6557
+f 6557/1/6557 6558/1/6558 6559/1/6559
+f 6563/1/6563 6564/1/6564 6558/1/6558
+f 6577/1/6577 6627/1/6627 6563/1/6563
+f 6577/1/6577 6572/1/6572 6576/1/6576
+f 6570/1/6570 6560/1/6560 6569/1/6569
+f 6569/1/6569 6566/1/6566 6568/1/6568
+f 6572/1/6572 6571/1/6571 6575/1/6575
+f 6574/1/6574 6568/1/6568 6573/1/6573
+f 6581/1/6581 6580/1/6580 6575/1/6575
+f 6582/1/6582 6573/1/6573 6586/1/6586
+f 6583/1/6583 6584/1/6584 6580/1/6580
+f 6585/1/6585 6584/1/6584 6588/1/6588
+f 6594/1/6594 6607/1/6607 6593/1/6593
+f 6587/1/6587 6590/1/6590 6589/1/6589
+f 6586/1/6586 5460/1/5460 6590/1/6590
+f 5460/1/5460 5459/1/5459 5543/1/5543
+f 5607/1/5607 5549/1/5549 5608/1/5608
+f 5543/1/5543 5540/1/5540 5542/1/5542
+f 5542/1/5542 5544/1/5544 5548/1/5548
+f 5544/1/5544 5547/1/5547 5548/1/5548
+f 5553/1/5553 5556/1/5556 5559/1/5559
+f 5556/1/5556 5560/1/5560 5559/1/5559
+f 5547/1/5547 5551/1/5551 5552/1/5552
+f 5556/1/5556 5558/1/5558 5560/1/5560
+f 5558/1/5558 5562/1/5562 5560/1/5560
+f 5560/1/5560 5562/1/5562 5564/1/5564
+f 5560/1/5560 5564/1/5564 5565/1/5565
+f 5562/1/5562 5567/1/5567 5564/1/5564
+f 5564/1/5564 5567/1/5567 5578/1/5578
+f 5562/1/5562 5566/1/5566 5567/1/5567
+f 5546/1/5546 5557/1/5557 5551/1/5551
+f 5558/1/5558 5561/1/5561 5562/1/5562
+f 5575/1/5575 5568/1/5568 5557/1/5557
+f 5561/1/5561 5566/1/5566 5562/1/5562
+f 5573/1/5573 5571/1/5571 5568/1/5568
+f 5566/1/5566 5569/1/5569 5570/1/5570
+f 5527/1/5527 5572/1/5572 5571/1/5571
+f 5572/1/5572 6621/1/6621 6620/1/6620
+f 6620/1/6620 6617/1/6617 6616/1/6616
+f 6617/1/6617 6614/1/6614 6616/1/6616
+f 6614/1/6614 6588/1/6588 6607/1/6607
+f 6622/1/6622 6615/1/6615 6720/1/6720
+f 5569/1/5569 6622/1/6622 5570/1/5570
+f 5566/1/5566 5570/1/5570 5567/1/5567
+f 5578/1/5578 5567/1/5567 5577/1/5577
+f 5565/1/5565 5564/1/5564 5578/1/5578
+f 5560/1/5560 5565/1/5565 5563/1/5563
+f 5559/1/5559 5560/1/5560 5563/1/5563
+f 5553/1/5553 5559/1/5559 5599/1/5599
+f 5600/1/5600 5597/1/5597 5598/1/5598
+f 5598/1/5598 5583/1/5583 5585/1/5585
+f 5585/1/5585 5582/1/5582 5584/1/5584
+f 5582/1/5582 5581/1/5581 5584/1/5584
+f 5581/1/5581 5576/1/5576 5580/1/5580
+f 5587/1/5587 5586/1/5586 6142/1/6142
+f 6134/1/6134 5587/1/5587 6142/1/6142
+f 5606/1/5606 5588/1/5588 6134/1/6134
+f 6135/1/6135 5601/1/5601 5606/1/5606
+f 5604/1/5604 5602/1/5602 6135/1/6135
+f 6137/1/6137 5603/1/5603 5604/1/5604
+f 5554/1/5554 5599/1/5599 5603/1/5603
+f 5555/1/5555 5550/1/5550 5554/1/5554
+f 5608/1/5608 5549/1/5549 5555/1/5555
+f 6591/1/6591 5607/1/5607 5608/1/5608
+f 6593/1/6593 6591/1/6591 6594/1/6594
+f 6603/1/6603 6608/1/6608 6605/1/6605
+f 6594/1/6594 6606/1/6606 6607/1/6607
+f 6723/1/6723 6606/1/6606 6613/1/6613
+f 6723/1/6723 6613/1/6613 6722/1/6722
+f 6721/1/6721 6722/1/6722 6724/1/6724
+f 6726/1/6726 6727/1/6727 7122/1/7122
+f 6724/1/6724 6726/1/6726 6728/1/6728
+f 5589/1/5589 6728/1/6728 5590/1/5590
+f 5580/1/5580 5590/1/5590 5591/1/5591
+f 6143/1/6143 5591/1/5591 6050/1/6050
+f 6138/1/6138 6050/1/6050 6139/1/6139
+f 6131/1/6131 6141/1/6141 6138/1/6138
+f 6129/1/6129 6141/1/6141 6131/1/6131
+f 6132/1/6132 6129/1/6129 6128/1/6128
+f 6127/1/6127 6132/1/6132 6128/1/6128
+f 6121/1/6121 6133/1/6133 6127/1/6127
+f 6136/1/6136 6121/1/6121 6120/1/6120
+f 6118/1/6118 6122/1/6122 6123/1/6123
+f 6123/1/6123 6126/1/6126 6124/1/6124
+f 6124/1/6124 6130/1/6130 6140/1/6140
+f 6140/1/6140 6051/1/6051 6052/1/6052
+f 6114/1/6114 6125/1/6125 6144/1/6144
+f 6115/1/6115 6119/1/6119 6114/1/6114
+f 6120/1/6120 6115/1/6115 6116/1/6116
+f 6599/1/6599 6136/1/6136 6120/1/6120
+f 6596/1/6596 6136/1/6136 6599/1/6599
+f 6595/1/6595 5605/1/5605 6596/1/6596
+f 6592/1/6592 6595/1/6595 6597/1/6597
+f 6603/1/6603 6592/1/6592 6597/1/6597
+f 6603/1/6603 6609/1/6609 6608/1/6608
+f 6725/1/6725 6609/1/6609 6610/1/6610
+f 6604/1/6604 6598/1/6598 6612/1/6612
+f 6611/1/6611 7063/1/7063 6610/1/6610
+f 7060/1/7060 6598/1/6598 6600/1/6600
+f 7061/1/7061 7064/1/7064 7063/1/7063
+f 7062/1/7062 6600/1/6600 7057/1/7057
+f 7069/1/7069 7066/1/7066 7065/1/7065
+f 7065/1/7065 7066/1/7066 7064/1/7064
+f 7067/1/7067 7063/1/7063 7064/1/7064
+f 7121/1/7121 7067/1/7067 7120/1/7120
+f 7119/1/7119 7120/1/7120 7118/1/7118
+f 5592/1/5592 7119/1/7119 7118/1/7118
+f 7117/1/7117 7068/1/7068 7074/1/7074
+f 7074/1/7074 7073/1/7073 7075/1/7075
+f 7115/1/7115 7081/1/7081 7091/1/7091
+f 7114/1/7114 7076/1/7076 7115/1/7115
+f 5596/1/5596 7116/1/7116 7114/1/7114
+f 5594/1/5594 7116/1/7116 5596/1/5596
+f 5593/1/5593 5592/1/5592 5594/1/5594
+f 6047/1/6047 5593/1/5593 6046/1/6046
+f 6048/1/6048 6047/1/6047 6046/1/6046
+f 6052/1/6052 6048/1/6048 6053/1/6053
+f 6057/1/6057 6053/1/6053 6056/1/6056
+f 6112/1/6112 6056/1/6056 6111/1/6111
+f 6113/1/6113 6111/1/6111 6108/1/6108
+f 6110/1/6110 6058/1/6058 6059/1/6059
+f 6064/1/6064 6063/1/6063 6065/1/6065
+f 6055/1/6055 6060/1/6060 6059/1/6059
+f 6063/1/6063 6061/1/6061 6062/1/6062
+f 6055/1/6055 6054/1/6054 6060/1/6060
+f 6049/1/6049 6043/1/6043 6054/1/6054
+f 6043/1/6043 5595/1/5595 6042/1/6042
+f 6061/1/6061 6044/1/6044 6062/1/6062
+f 6063/1/6063 6062/1/6062 6065/1/6065
+f 6064/1/6064 6065/1/6065 6067/1/6067
+f 6068/1/6068 6066/1/6066 6074/1/6074
+f 6074/1/6074 6045/1/6045 6075/1/6075
+f 6073/1/6073 6076/1/6076 6078/1/6078
+f 6077/1/6077 6073/1/6073 6078/1/6078
+f 6071/1/6071 6073/1/6073 6077/1/6077
+f 6072/1/6072 6067/1/6067 6071/1/6071
+f 6107/1/6107 6070/1/6070 6072/1/6072
+f 6108/1/6108 6069/1/6069 6107/1/6107
+f 6117/1/6117 6113/1/6113 6108/1/6108
+f 6602/1/6602 6117/1/6117 7054/1/7054
+f 7056/1/7056 6601/1/6601 6602/1/6602
+f 7058/1/7058 7057/1/7057 7056/1/7056
+f 7058/1/7058 7071/1/7071 7070/1/7070
+f 7073/1/7073 7071/1/7071 7077/1/7077
+f 7059/1/7059 7055/1/7055 7078/1/7078
+f 7079/1/7079 7080/1/7080 7077/1/7077
+f 7084/1/7084 7088/1/7088 7080/1/7080
+f 7083/1/7083 7055/1/7055 7082/1/7082
+f 7085/1/7085 7088/1/7088 7084/1/7084
+f 7092/1/7092 7088/1/7088 7089/1/7089
+f 7093/1/7093 7092/1/7092 7089/1/7089
+f 7090/1/7090 7094/1/7094 7089/1/7089
+f 7086/1/7086 7082/1/7082 7087/1/7087
+f 7095/1/7095 7094/1/7094 7090/1/7090
+f 7093/1/7093 7089/1/7089 7094/1/7094
+f 7112/1/7112 7092/1/7092 7093/1/7093
+f 6041/1/6041 7113/1/7113 7112/1/7112
+f 6042/1/6042 6041/1/6041 6040/1/6040
+f 6075/1/6075 6040/1/6040 6084/1/6084
+f 6082/1/6082 6084/1/6084 6085/1/6085
+f 6083/1/6083 6085/1/6085 6087/1/6087
+f 6088/1/6088 6087/1/6087 6092/1/6092
+f 6093/1/6093 6088/1/6088 6092/1/6092
+f 6094/1/6094 6086/1/6086 6093/1/6093
+f 6081/1/6081 6080/1/6080 6094/1/6094
+f 6105/1/6105 6079/1/6079 6081/1/6081
+f 6109/1/6109 6105/1/6105 6106/1/6106
+f 7052/1/7052 6106/1/6106 7053/1/7053
+f 6101/1/6101 6096/1/6096 6097/1/6097
+f 6097/1/6097 6095/1/6095 6099/1/6099
+f 7128/1/7128 6104/1/6104 6160/1/6160
+f 6099/1/6099 6102/1/6102 6103/1/6103
+f 6098/1/6098 6145/1/6145 6102/1/6102
+f 6104/1/6104 6148/1/6148 6154/1/6154
+f 6148/1/6148 6147/1/6147 6152/1/6152
+f 6091/1/6091 6146/1/6146 6145/1/6145
+f 6147/1/6147 6150/1/6150 6152/1/6152
+f 6090/1/6090 6149/1/6149 6146/1/6146
+f 6150/1/6150 6035/1/6035 6036/1/6036
+f 6089/1/6089 6038/1/6038 6149/1/6149
+f 6038/1/6038 6039/1/6039 6037/1/6037
+f 6039/1/6039 7111/1/7111 6037/1/6037
+f 7111/1/7111 7110/1/7110 7109/1/7109
+f 7109/1/7109 7097/1/7097 7099/1/7099
+f 6034/1/6034 7108/1/7108 6029/1/6029
+f 7099/1/7099 6161/1/6161 6032/1/6032
+f 6030/1/6030 6033/1/6033 6031/1/6031
+f 6029/1/6029 6030/1/6030 6027/1/6027
+f 6028/1/6028 6034/1/6034 6029/1/6029
+f 6035/1/6035 6028/1/6028 6036/1/6036
+f 6151/1/6151 6036/1/6036 6155/1/6155
+f 6158/1/6158 6155/1/6155 7173/1/7173
+f 7175/1/7175 7173/1/7173 7174/1/7174
+f 7175/1/7175 7174/1/7174 7134/1/7134
+f 7133/1/7133 7132/1/7132 7134/1/7134
+f 7130/1/7130 7132/1/7132 7133/1/7133
+f 7126/1/7126 7129/1/7129 7130/1/7130
+f 7124/1/7124 6100/1/6100 7126/1/7126
+f 7106/1/7106 7123/1/7123 7124/1/7124
+f 7105/1/7105 7123/1/7123 7106/1/7106
+f 7102/1/7102 7053/1/7053 7105/1/7105
+f 7098/1/7098 7087/1/7087 7102/1/7102
+f 7098/1/7098 7100/1/7100 7096/1/7096
+f 7099/1/7099 7100/1/7100 6161/1/6161
+f 7101/1/7101 7104/1/7104 7103/1/7103
+f 7107/1/7107 5981/1/5981 6161/1/6161
+f 5980/1/5980 5978/1/5978 5981/1/5981
+f 5982/1/5982 7104/1/7104 5974/1/5974
+f 5979/1/5979 5978/1/5978 5980/1/5980
+f 5985/1/5985 5978/1/5978 5977/1/5977
+f 5983/1/5983 5985/1/5985 5977/1/5977
+f 5975/1/5975 5984/1/5984 5977/1/5977
+f 5973/1/5973 5974/1/5974 5969/1/5969
+f 5976/1/5976 5984/1/5984 5975/1/5975
+f 5983/1/5983 5977/1/5977 5984/1/5984
+f 5989/1/5989 5985/1/5985 5983/1/5983
+f 6026/1/6026 5989/1/5989 6025/1/6025
+f 6156/1/6156 6026/1/6026 6025/1/6025
+f 6157/1/6157 6156/1/6156 6159/1/6159
+f 7172/1/7172 6159/1/6159 7171/1/7171
+f 7141/1/7141 7171/1/7171 7139/1/7139
+f 7136/1/7136 7139/1/7139 7140/1/7140
+f 7137/1/7137 7136/1/7136 7140/1/7140
+f 7138/1/7138 7135/1/7135 7137/1/7137
+f 7125/1/7125 7127/1/7127 7138/1/7138
+f 5972/1/5972 7125/1/7125 5968/1/5968
+f 7153/1/7153 7147/1/7147 7148/1/7148
+f 7148/1/7148 7143/1/7143 7146/1/7146
+f 7151/1/7151 7150/1/7150 7155/1/7155
+f 7143/1/7143 7145/1/7145 7146/1/7146
+f 7150/1/7150 7149/1/7149 7157/1/7157
+f 7142/1/7142 7144/1/7144 7145/1/7145
+f 7144/1/7144 7169/1/7169 7167/1/7167
+f 7167/1/7167 7170/1/7170 7168/1/7168
+f 7149/1/7149 7163/1/7163 7157/1/7157
+f 7150/1/7150 7157/1/7157 7155/1/7155
+f 7151/1/7151 7155/1/7155 7156/1/7156
+f 7152/1/7152 7151/1/7151 7156/1/7156
+f 7159/1/7159 7158/1/7158 7161/1/7161
+f 7191/1/7191 7181/1/7181 7187/1/7187
+f 7181/1/7181 7180/1/7180 7187/1/7187
+f 7187/1/7187 7180/1/7180 7183/1/7183
+f 7180/1/7180 7178/1/7178 7183/1/7183
+f 7179/1/7179 7178/1/7178 7180/1/7180
+f 7158/1/7158 7160/1/7160 7161/1/7161
+f 7181/1/7181 7179/1/7179 7180/1/7180
+f 7162/1/7162 7165/1/7165 7160/1/7160
+f 7179/1/7179 7177/1/7177 7178/1/7178
+f 7164/1/7164 7166/1/7166 7165/1/7165
+f 7168/1/7168 6021/1/6021 7166/1/7166
+f 6024/1/6024 6022/1/6022 6021/1/6021
+f 6022/1/6022 5987/1/5987 5993/1/5993
+f 5987/1/5987 5990/1/5990 5993/1/5993
+f 5990/1/5990 5986/1/5986 5991/1/5991
+f 6016/1/6016 5994/1/5994 5995/1/5995
+f 6020/1/6020 6016/1/6016 6017/1/6017
+f 6014/1/6014 6013/1/6013 6009/1/6009
+f 6017/1/6017 6015/1/6015 6018/1/6018
+f 6023/1/6023 6020/1/6020 6017/1/6017
+f 7177/1/7177 6023/1/6023 7178/1/7178
+f 7183/1/7183 7178/1/7178 7182/1/7182
+f 7187/1/7187 7183/1/7183 7188/1/7188
+f 7191/1/7191 7187/1/7187 7189/1/7189
+f 7202/1/7202 7189/1/7189 7196/1/7196
+f 7203/1/7203 7235/1/7235 7202/1/7202
+f 7204/1/7204 7152/1/7152 7203/1/7203
+f 7200/1/7200 7197/1/7197 7201/1/7201
+f 7197/1/7197 7190/1/7190 7195/1/7195
+f 7195/1/7195 7194/1/7194 7198/1/7198
+f 7221/1/7221 7217/1/7217 7210/1/7210
+f 7210/1/7210 7217/1/7217 7215/1/7215
+f 7217/1/7217 7218/1/7218 7215/1/7215
+f 7217/1/7217 7220/1/7220 7218/1/7218
+f 7192/1/7192 7193/1/7193 7194/1/7194
+f 7186/1/7186 7184/1/7184 7193/1/7193
+f 7184/1/7184 6162/1/6162 7185/1/7185
+f 7220/1/7220 7222/1/7222 7218/1/7218
+f 7215/1/7215 7218/1/7218 7219/1/7219
+f 7210/1/7210 7215/1/7215 7211/1/7211
+f 7208/1/7208 7210/1/7210 7211/1/7211
+f 7209/1/7209 7211/1/7211 7212/1/7212
+f 7208/1/7208 7211/1/7211 7209/1/7209
+f 7206/1/7206 7210/1/7210 7208/1/7208
+f 7205/1/7205 7199/1/7199 7206/1/7206
+f 5960/1/5960 7205/1/7205 5957/1/5957
+f 5961/1/5961 7204/1/7204 5960/1/5960
+f 5964/1/5964 7204/1/7204 5961/1/5961
+f 5966/1/5966 7154/1/7154 5964/1/5964
+f 5967/1/5967 5968/1/5968 5966/1/5966
+f 5970/1/5970 5969/1/5969 5967/1/5967
+f 5970/1/5970 5996/1/5996 5992/1/5992
+f 5991/1/5991 5996/1/5996 5997/1/5997
+f 5971/1/5971 5965/1/5965 5998/1/5998
+f 5999/1/5999 6001/1/6001 5997/1/5997
+f 6002/1/6002 6005/1/6005 6001/1/6001
+f 6000/1/6000 5965/1/5965 5963/1/5963
+f 6003/1/6003 6005/1/6005 6002/1/6002
+f 6009/1/6009 6005/1/6005 6008/1/6008
+f 6010/1/6010 6012/1/6012 6008/1/6008
+f 6004/1/6004 5963/1/5963 5962/1/5962
+f 6171/1/6171 6012/1/6012 6010/1/6010
+f 6011/1/6011 6008/1/6008 6012/1/6012
+f 6019/1/6019 6011/1/6011 6163/1/6163
+f 6164/1/6164 6167/1/6167 6168/1/6168
+f 6168/1/6168 6174/1/6174 6175/1/6175
+f 6178/1/6178 6177/1/6177 7302/1/7302
+f 6176/1/6176 6178/1/6178 7301/1/7301
+f 6165/1/6165 6169/1/6169 6176/1/6176
+f 6166/1/6166 6019/1/6019 6165/1/6165
+f 7185/1/7185 6166/1/6166 7224/1/7224
+f 7223/1/7223 7224/1/7224 7225/1/7225
+f 7233/1/7233 7225/1/7225 7232/1/7232
+f 7234/1/7234 7233/1/7233 7232/1/7232
+f 7216/1/7216 7234/1/7234 7214/1/7214
+f 7213/1/7213 7214/1/7214 6214/1/6214
+f 6215/1/6215 6217/1/6217 6210/1/6210
+f 6210/1/6210 7231/1/7231 6208/1/6208
+f 6204/1/6204 6206/1/6206 5860/1/5860
+f 6208/1/6208 6209/1/6209 6205/1/6205
+f 7227/1/7227 7226/1/7226 6209/1/6209
+f 7226/1/7226 6180/1/6180 6181/1/6181
+f 6206/1/6206 5861/1/5861 5860/1/5860
+f 6204/1/6204 5860/1/5860 6202/1/6202
+f 6200/1/6200 6204/1/6204 6202/1/6202
+f 6196/1/6196 6203/1/6203 6200/1/6200
+f 6211/1/6211 6207/1/6207 6196/1/6196
+f 6194/1/6194 6212/1/6212 6211/1/6211
+f 6193/1/6193 6213/1/6213 6194/1/6194
+f 6216/1/6216 6214/1/6214 6193/1/6193
+f 5954/1/5954 7207/1/7207 6216/1/6216
+f 5956/1/5956 5954/1/5954 5952/1/5952
+f 5958/1/5958 5959/1/5959 5956/1/5956
+f 6173/1/6173 5962/1/5962 5958/1/5958
+f 6173/1/6173 6172/1/6172 6170/1/6170
+f 6168/1/6168 6172/1/6172 6174/1/6174
+f 6182/1/6182 5955/1/5955 6183/1/6183
+f 6184/1/6184 6179/1/6179 6174/1/6174
+f 6186/1/6186 7266/1/7266 6179/1/6179
+f 6185/1/6185 5955/1/5955 5953/1/5953
+f 7265/1/7265 7266/1/7266 6186/1/6186
+f 7270/1/7270 7266/1/7266 7267/1/7267
+f 7269/1/7269 7270/1/7270 7267/1/7267
+f 7269/1/7269 7267/1/7267 7268/1/7268
+f 7262/1/7262 7268/1/7268 7267/1/7267
+f 7261/1/7261 5953/1/5953 7260/1/7260
+f 7263/1/7263 7268/1/7268 7262/1/7262
+f 7269/1/7269 7268/1/7268 7272/1/7272
+f 7300/1/7300 7270/1/7270 7269/1/7269
+f 6181/1/6181 7300/1/7300 7228/1/7228
+f 7299/1/7299 7276/1/7276 7275/1/7275
+f 7275/1/7275 7274/1/7274 7279/1/7279
+f 7297/1/7297 7283/1/7283 7284/1/7284
+f 7295/1/7295 7278/1/7278 7297/1/7297
+f 7230/1/7230 7298/1/7298 7295/1/7295
+f 7229/1/7229 7298/1/7298 7230/1/7230
+f 5856/1/5856 7228/1/7228 7229/1/7229
+f 5857/1/5857 5856/1/5856 5855/1/5855
+f 5858/1/5858 5857/1/5857 5855/1/5855
+f 5863/1/5863 5862/1/5862 5858/1/5858
+f 6199/1/6199 5863/1/5863 6201/1/6201
+f 6198/1/6198 6199/1/6199 6201/1/6201
+f 6192/1/6192 6197/1/6197 6198/1/6198
+f 6191/1/6191 6197/1/6197 6192/1/6192
+f 6190/1/6190 6195/1/6195 6191/1/6191
+f 5951/1/5951 6190/1/6190 5949/1/5949
+f 5950/1/5950 5949/1/5949 5948/1/5948
+f 5947/1/5947 6187/1/6187 5888/1/5888
+f 5888/1/5888 6188/1/6188 6189/1/6189
+f 6189/1/6189 5868/1/5868 5867/1/5867
+f 5867/1/5867 5864/1/5864 5866/1/5866
+f 5866/1/5866 5859/1/5859 5865/1/5865
+f 5859/1/5859 5851/1/5851 5865/1/5865
+f 5851/1/5851 5852/1/5852 5850/1/5850
+f 5872/1/5872 5853/1/5853 5873/1/5873
+f 5874/1/5874 5872/1/5872 5873/1/5873
+f 5870/1/5870 5871/1/5871 5874/1/5874
+f 5885/1/5885 5869/1/5869 5870/1/5870
+f 5886/1/5886 5887/1/5887 5885/1/5885
+f 5889/1/5889 5886/1/5886 5890/1/5890
+f 5945/1/5945 5889/1/5889 5890/1/5890
+f 5884/1/5884 5880/1/5880 5881/1/5881
+f 5881/1/5881 5875/1/5875 5878/1/5878
+f 5878/1/5878 5876/1/5876 5879/1/5879
+f 5879/1/5879 5877/1/5877 5900/1/5900
+f 5900/1/5900 5854/1/5854 5944/1/5944
+f 5897/1/5897 5901/1/5901 5898/1/5898
+f 5896/1/5896 5897/1/5897 5898/1/5898
+f 5892/1/5892 5882/1/5882 5896/1/5896
+f 5891/1/5891 5883/1/5883 5892/1/5892
+f 5890/1/5890 5891/1/5891 5895/1/5895
+f 7252/1/7252 5890/1/5890 5895/1/5895
+f 5945/1/5945 5890/1/5890 7252/1/7252
+f 5946/1/5946 5889/1/5889 5945/1/5945
+f 7255/1/7255 5948/1/5948 5946/1/5946
+f 7264/1/7264 7260/1/7260 7255/1/7255
+f 7264/1/7264 7273/1/7273 7271/1/7271
+f 7274/1/7274 7273/1/7273 7277/1/7277
+f 7256/1/7256 7254/1/7254 7257/1/7257
+f 7258/1/7258 7280/1/7280 7277/1/7277
+f 7281/1/7281 7282/1/7282 7280/1/7280
+f 7259/1/7259 7254/1/7254 7253/1/7253
+f 7285/1/7285 7282/1/7282 7281/1/7281
+f 7289/1/7289 7282/1/7282 7287/1/7287
+f 7288/1/7288 7289/1/7289 7287/1/7287
+f 7243/1/7243 7237/1/7237 7287/1/7287
+f 7286/1/7286 7253/1/7253 7244/1/7244
+f 7238/1/7238 7237/1/7237 7243/1/7243
+f 7288/1/7288 7287/1/7287 7237/1/7237
+f 7292/1/7292 7289/1/7289 7288/1/7288
+f 5849/1/5849 7296/1/7296 7292/1/7292
+f 5850/1/5850 5849/1/5849 5848/1/5848
+f 5944/1/5944 5848/1/5848 5909/1/5909
+f 5902/1/5902 5909/1/5909 5906/1/5906
+f 5903/1/5903 5902/1/5902 5906/1/5906
+f 5899/1/5899 5903/1/5903 5905/1/5905
+f 5904/1/5904 5899/1/5899 5905/1/5905
+f 5894/1/5894 5893/1/5893 5904/1/5904
+f 5914/1/5914 5908/1/5908 5913/1/5913
+f 5913/1/5913 5907/1/5907 5912/1/5912
+f 5927/1/5927 5928/1/5928 5929/1/5929
+f 5907/1/5907 5911/1/5911 5912/1/5912
+f 5911/1/5911 5910/1/5910 5931/1/5931
+f 5910/1/5910 5846/1/5846 5931/1/5931
+f 5846/1/5846 5847/1/5847 5845/1/5845
+f 5847/1/5847 7290/1/7290 5845/1/5845
+f 7290/1/7290 7291/1/7291 7293/1/7293
+f 7293/1/7293 7239/1/7239 7242/1/7242
+f 5843/1/5843 7294/1/7294 5844/1/5844
+f 7242/1/7242 7247/1/7247 6220/1/6220
+f 6219/1/6219 6225/1/6225 6223/1/6223
+f 5844/1/5844 6219/1/6219 6218/1/6218
+f 5841/1/5841 5843/1/5843 5844/1/5844
+f 5842/1/5842 5841/1/5841 5839/1/5839
+f 5932/1/5932 5842/1/5842 5839/1/5839
+f 5928/1/5928 5932/1/5932 5929/1/5929
+f 5927/1/5927 5929/1/5929 5930/1/5930
+f 5917/1/5917 5927/1/5927 5922/1/5922
+f 5918/1/5918 5917/1/5917 5922/1/5922
+f 5916/1/5916 5915/1/5915 5918/1/5918
+f 5920/1/5920 5894/1/5894 5916/1/5916
+f 7250/1/7250 5920/1/5920 7251/1/7251
+f 7246/1/7246 7250/1/7250 7251/1/7251
+f 7240/1/7240 7244/1/7244 7246/1/7246
+f 7240/1/7240 7241/1/7241 7236/1/7236
+f 7242/1/7242 7241/1/7241 7247/1/7247
+f 7245/1/7245 7249/1/7249 7248/1/7248
+f 7417/1/7417 6226/1/6226 7247/1/7247
+f 7418/1/7418 7249/1/7249 5773/1/5773
+f 6228/1/6228 6224/1/6224 6226/1/6226
+f 6221/1/6221 6224/1/6224 6222/1/6222
+f 5771/1/5771 5774/1/5774 6222/1/6222
+f 5771/1/5771 5766/1/5766 5768/1/5768
+f 6227/1/6227 5773/1/5773 5772/1/5772
+f 5766/1/5766 7305/1/7305 5764/1/5764
+f 5766/1/5766 5764/1/5764 5763/1/5763
+f 7249/1/7249 7303/1/7303 5773/1/5773
+f 7303/1/7303 5921/1/5921 7304/1/7304
+f 5921/1/5921 5919/1/5919 7304/1/7304
+f 5919/1/5919 5923/1/5923 5924/1/5924
+f 5924/1/5924 5925/1/5925 5926/1/5926
+f 5925/1/5925 5936/1/5936 5926/1/5926
+f 5936/1/5936 5934/1/5934 5935/1/5935
+f 5935/1/5935 5933/1/5933 5937/1/5937
+f 5941/1/5941 5939/1/5939 7369/1/7369
+f 5942/1/5942 5941/1/5941 7369/1/7369
+f 7309/1/7309 5942/1/5942 7310/1/7310
+f 7306/1/7306 7310/1/7310 7307/1/7307
+f 7312/1/7312 7311/1/7311 7313/1/7313
+f 7313/1/7313 7367/1/7367 7364/1/7364
+f 7367/1/7367 7368/1/7368 7364/1/7364
+f 7365/1/7365 5943/1/5943 7366/1/7366
+f 5940/1/5940 5938/1/5938 7368/1/7368
+f 5937/1/5937 5838/1/5838 5938/1/5938
+f 5838/1/5838 5840/1/5840 5788/1/5788
+f 5788/1/5788 5789/1/5789 5784/1/5784
+f 5784/1/5784 5781/1/5781 5780/1/5780
+f 5780/1/5780 5776/1/5776 5778/1/5778
+f 5799/1/5799 5828/1/5828 5827/1/5827
+f 5785/1/5785 5779/1/5779 5799/1/5799
+f 5787/1/5787 5783/1/5783 5785/1/5785
+f 5791/1/5791 5786/1/5786 5787/1/5787
+f 5790/1/5790 5786/1/5786 5791/1/5791
+f 5943/1/5943 5790/1/5790 7370/1/7370
+f 7366/1/7366 5943/1/5943 7370/1/7370
+f 7363/1/7363 7365/1/7365 7366/1/7366
+f 7318/1/7318 7363/1/7363 7362/1/7362
+f 7316/1/7316 7315/1/7315 7318/1/7318
+f 7317/1/7317 7314/1/7314 7316/1/7316
+f 7308/1/7308 7307/1/7307 7317/1/7317
+f 7305/1/7305 7308/1/7308 5764/1/5764
+f 7322/1/7322 7320/1/7320 7321/1/7321
+f 7321/1/7321 7319/1/7319 7360/1/7360
+f 7361/1/7361 7355/1/7355 7354/1/7354
+f 7319/1/7319 7358/1/7358 7360/1/7360
+f 7358/1/7358 7359/1/7359 7356/1/7356
+f 7356/1/7356 7357/1/7357 7352/1/7352
+f 7352/1/7352 7351/1/7351 7350/1/7350
+f 7353/1/7353 7349/1/7349 7348/1/7348
+f 7355/1/7355 7353/1/7353 7354/1/7354
+f 7361/1/7361 7354/1/7354 7332/1/7332
+f 7324/1/7324 7361/1/7361 7332/1/7332
+f 7329/1/7329 7333/1/7333 7334/1/7334
+f 7336/1/7336 7339/1/7339 7343/1/7343
+f 7334/1/7334 7338/1/7338 7335/1/7335
+f 7339/1/7339 7342/1/7342 7344/1/7344
+f 7340/1/7340 7341/1/7341 7338/1/7338
+f 7346/1/7346 7347/1/7347 7341/1/7341
+f 7350/1/7350 5792/1/5792 7347/1/7347
+f 7342/1/7342 7345/1/7345 7344/1/7344
+f 7339/1/7339 7344/1/7344 7343/1/7343
+f 7336/1/7336 7343/1/7343 7379/1/7379
+f 7337/1/7337 7336/1/7336 7379/1/7379
+f 7331/1/7331 7336/1/7336 7337/1/7337
+f 7326/1/7326 7330/1/7330 7331/1/7331
+f 7325/1/7325 7324/1/7324 7326/1/7326
+f 5760/1/5760 7323/1/7323 7325/1/7325
+f 5762/1/5762 7323/1/7323 5760/1/5760
+f 5763/1/5763 5764/1/5764 5762/1/5762
+f 5765/1/5765 5766/1/5766 5763/1/5763
+f 5765/1/5765 5769/1/5769 5770/1/5770
+f 5776/1/5776 5769/1/5769 5777/1/5777
+f 5767/1/5767 5761/1/5761 5831/1/5831
+f 5830/1/5830 5826/1/5826 5777/1/5777
+f 5825/1/5825 5823/1/5823 5826/1/5826
+f 5829/1/5829 5761/1/5761 5759/1/5759
+f 5824/1/5824 5823/1/5823 5825/1/5825
+f 5800/1/5800 5823/1/5823 5822/1/5822
+f 5801/1/5801 5800/1/5800 5822/1/5822
+f 5756/1/5756 5813/1/5813 5822/1/5822
+f 5758/1/5758 5759/1/5759 5754/1/5754
+f 5757/1/5757 5813/1/5813 5756/1/5756
+f 5801/1/5801 5822/1/5822 5813/1/5813
+f 5798/1/5798 5800/1/5800 5801/1/5801
+f 5793/1/5793 5797/1/5797 5798/1/5798
+f 5792/1/5792 5793/1/5793 5794/1/5794
+f 7371/1/7371 5794/1/5794 7372/1/7372
+f 7373/1/7373 7372/1/7372 7374/1/7374
+f 7375/1/7375 7374/1/7374 7378/1/7378
+f 7380/1/7380 7378/1/7378 7382/1/7382
+f 7383/1/7383 7380/1/7380 7382/1/7382
+f 7384/1/7384 7381/1/7381 7383/1/7383
+f 7328/1/7328 7327/1/7327 7384/1/7384
+f 5755/1/5755 7328/1/7328 5751/1/5751
+f 5749/1/5749 7386/1/7386 7390/1/7390
+f 7390/1/7390 7385/1/7385 7389/1/7389
+f 7391/1/7391 7393/1/7393 7394/1/7394
+f 7385/1/7385 7388/1/7388 7389/1/7389
+f 7393/1/7393 7396/1/7396 7397/1/7397
+f 7387/1/7387 7416/1/7416 7388/1/7388
+f 7416/1/7416 7377/1/7377 7415/1/7415
+f 7415/1/7415 7376/1/7376 7414/1/7414
+f 7396/1/7396 7399/1/7399 7397/1/7397
+f 7393/1/7393 7397/1/7397 7394/1/7394
+f 7391/1/7391 7394/1/7394 7395/1/7395
+f 7392/1/7392 7391/1/7391 7395/1/7395
+f 5746/1/5746 7392/1/7392 5743/1/5743
+f 5745/1/5745 5746/1/5746 5743/1/5743
+f 6232/1/6232 6236/1/6236 6237/1/6237
+f 6236/1/6236 6242/1/6242 6237/1/6237
+f 6237/1/6237 6242/1/6242 6238/1/6238
+f 6237/1/6237 6238/1/6238 6233/1/6233
+f 6233/1/6233 6238/1/6238 6239/1/6239
+f 6242/1/6242 6243/1/6243 6238/1/6238
+f 6243/1/6243 6244/1/6244 6238/1/6238
+f 6238/1/6238 6244/1/6244 6241/1/6241
+f 6244/1/6244 6248/1/6248 6241/1/6241
+f 6244/1/6244 6249/1/6249 6248/1/6248
+f 6243/1/6243 6249/1/6249 6244/1/6244
+f 6243/1/6243 7410/1/7410 6249/1/6249
+f 7410/1/7410 7409/1/7409 6249/1/6249
+f 6249/1/6249 7409/1/7409 6250/1/6250
+f 7408/1/7408 7409/1/7409 7410/1/7410
+f 6253/1/6253 7410/1/7410 6243/1/6243
+f 6252/1/6252 6243/1/6243 6242/1/6242
+f 6235/1/6235 7404/1/7404 6251/1/6251
+f 6236/1/6236 6252/1/6252 6242/1/6242
+f 7404/1/7404 7403/1/7403 6251/1/6251
+f 6252/1/6252 6253/1/6253 6243/1/6243
+f 7398/1/7398 7402/1/7402 7403/1/7403
+f 6253/1/6253 7408/1/7408 7410/1/7410
+f 7401/1/7401 7405/1/7405 7402/1/7402
+f 7408/1/7408 7407/1/7407 7409/1/7409
+f 7400/1/7400 7406/1/7406 7405/1/7405
+f 7407/1/7407 7411/1/7411 7409/1/7409
+f 7409/1/7409 7411/1/7411 7412/1/7412
+f 7414/1/7414 7413/1/7413 7406/1/7406
+f 7411/1/7411 5807/1/5807 5821/1/5821
+f 5807/1/5807 5809/1/5809 5821/1/5821
+f 5821/1/5821 5809/1/5809 5820/1/5820
+f 5796/1/5796 5803/1/5803 7413/1/7413
+f 5807/1/5807 5806/1/5806 5809/1/5809
+f 5795/1/5795 5802/1/5802 5803/1/5803
+f 5802/1/5802 5804/1/5804 5805/1/5805
+f 5805/1/5805 5810/1/5810 5811/1/5811
+f 5806/1/5806 5808/1/5808 5809/1/5809
+f 5811/1/5811 5815/1/5815 5814/1/5814
+f 5818/1/5818 5817/1/5817 6761/1/6761
+f 5809/1/5809 5818/1/5818 5820/1/5820
+f 5821/1/5821 5820/1/5820 6758/1/6758
+f 7411/1/7411 5821/1/5821 7412/1/7412
+f 7409/1/7409 7412/1/7412 6250/1/6250
+f 6249/1/6249 6250/1/6250 6248/1/6248
+f 6241/1/6241 6248/1/6248 6247/1/6247
+f 6238/1/6238 6241/1/6241 6239/1/6239
+f 6233/1/6233 6239/1/6239 6234/1/6234
+f 6232/1/6232 6237/1/6237 6233/1/6233
+f 5743/1/5743 6232/1/6232 5740/1/5740
+f 5742/1/5742 5743/1/5743 5740/1/5740
+f 5745/1/5745 5743/1/5743 5742/1/5742
+f 5748/1/5748 5746/1/5746 5745/1/5745
+f 5750/1/5750 5751/1/5751 5748/1/5748
+f 5752/1/5752 5754/1/5754 5750/1/5750
+f 5752/1/5752 5816/1/5816 5812/1/5812
+f 5811/1/5811 5816/1/5816 5815/1/5815
+f 5753/1/5753 5747/1/5747 5832/1/5832
+f 5833/1/5833 5819/1/5819 5815/1/5815
+f 5835/1/5835 5837/1/5837 5819/1/5819
+f 5834/1/5834 5747/1/5747 5744/1/5744
+f 5836/1/5836 5837/1/5837 5835/1/5835
+f 6759/1/6759 5837/1/5837 6754/1/6754
+f 6752/1/6752 6751/1/6751 6754/1/6754
+f 6753/1/6753 5744/1/5744 5741/1/5741
+f 6744/1/6744 6751/1/6751 6752/1/6752
+f 6755/1/6755 6751/1/6751 6750/1/6750
+f 6757/1/6757 6750/1/6750 6762/1/6762
+f 6756/1/6756 6757/1/6757 6762/1/6762
+f 6760/1/6760 6756/1/6756 6763/1/6763
+f 5643/1/5643 6760/1/6760 6763/1/6763
+f 5647/1/5647 5643/1/5643 5644/1/5644
+f 5648/1/5648 5647/1/5647 5644/1/5644
+f 6245/1/6245 5648/1/5648 5649/1/5649
+f 6245/1/6245 5649/1/5649 6246/1/6246
+f 6230/1/6230 6240/1/6240 6246/1/6246
+f 6229/1/6229 6230/1/6230 5674/1/5674
+f 6231/1/6231 5653/1/5653 5654/1/5654
+f 5657/1/5657 5652/1/5652 5656/1/5656
+f 5653/1/5653 5650/1/5650 5654/1/5654
+f 5650/1/5650 5645/1/5645 5646/1/5646
+f 5646/1/5646 5642/1/5642 5638/1/5638
+f 5652/1/5652 5651/1/5651 5655/1/5655
+f 5652/1/5652 5655/1/5655 5656/1/5656
+f 5671/1/5671 5657/1/5657 5656/1/5656
+f 5672/1/5672 5673/1/5673 5671/1/5671
+f 5675/1/5675 5674/1/5674 5672/1/5672
+f 5737/1/5737 5738/1/5738 5675/1/5675
+f 6741/1/6741 5739/1/5739 5737/1/5737
+f 6742/1/6742 5741/1/5741 6741/1/6741
+f 6742/1/6742 6745/1/6745 6746/1/6746
+f 6749/1/6749 6745/1/6745 6748/1/6748
+f 6743/1/6743 6740/1/6740 6747/1/6747
+f 6775/1/6775 6774/1/6774 6748/1/6748
+f 6776/1/6776 6777/1/6777 6774/1/6774
+f 6778/1/6778 6740/1/6740 6739/1/6739
+f 6781/1/6781 6777/1/6777 6776/1/6776
+f 6773/1/6773 6777/1/6777 6780/1/6780
+f 6779/1/6779 6739/1/6739 6782/1/6782
+f 6798/1/6798 6796/1/6796 6780/1/6780
+f 6799/1/6799 6780/1/6780 6796/1/6796
+f 6799/1/6799 6773/1/6773 6780/1/6780
+f 6771/1/6771 6770/1/6770 6773/1/6773
+f 6767/1/6767 6770/1/6770 6771/1/6771
+f 6766/1/6766 6764/1/6764 6767/1/6767
+f 5639/1/5639 6766/1/6766 5637/1/5637
+f 5638/1/5638 5637/1/5637 5640/1/5640
+f 5658/1/5658 5640/1/5640 5659/1/5659
+f 5661/1/5661 5659/1/5659 5663/1/5663
+f 5662/1/5662 5660/1/5660 5661/1/5661
+f 5666/1/5666 5662/1/5662 5667/1/5667
+f 5670/1/5670 5666/1/5666 5667/1/5667
+f 5668/1/5668 5665/1/5665 5669/1/5669
+f 5665/1/5665 5664/1/5664 5669/1/5669
+f 5664/1/5664 5686/1/5686 5683/1/5683
+f 5686/1/5686 5641/1/5641 5735/1/5735
+f 5684/1/5684 5687/1/5687 5688/1/5688
+f 5682/1/5682 5684/1/5684 5685/1/5685
+f 5679/1/5679 5682/1/5682 5685/1/5685
+f 5677/1/5677 5678/1/5678 5679/1/5679
+f 5676/1/5676 5670/1/5670 5677/1/5677
+f 5736/1/5736 5676/1/5676 6738/1/6738
+f 6782/1/6782 6738/1/6738 6737/1/6737
+f 6795/1/6795 6782/1/6782 6784/1/6784
+f 6784/1/6784 6792/1/6792 6794/1/6794
+f 6787/1/6787 6790/1/6790 6786/1/6786
+f 6793/1/6793 6794/1/6794 6792/1/6792
+f 6800/1/6800 6797/1/6797 6793/1/6793
+f 6802/1/6802 6800/1/6800 6804/1/6804
+f 5634/1/5634 6803/1/6803 6802/1/6802
+f 5635/1/5635 5636/1/5636 5634/1/5634
+f 5735/1/5735 5635/1/5635 5695/1/5695
+f 5692/1/5692 5695/1/5695 5696/1/5696
+f 5689/1/5689 5692/1/5692 5693/1/5693
+f 5694/1/5694 5693/1/5693 5699/1/5699
+f 5700/1/5700 5694/1/5694 5699/1/5699
+f 5680/1/5680 5690/1/5690 5700/1/5700
+f 5681/1/5681 5680/1/5680 5706/1/5706
+f 5702/1/5702 5701/1/5701 5704/1/5704
+f 5709/1/5709 5712/1/5712 5713/1/5713
+f 5712/1/5712 5723/1/5723 5713/1/5713
+f 5704/1/5704 5711/1/5711 5708/1/5708
+f 5703/1/5703 5716/1/5716 5711/1/5711
+f 5712/1/5712 5719/1/5719 5723/1/5723
+f 5719/1/5719 5722/1/5722 5723/1/5723
+f 5723/1/5723 5722/1/5722 5724/1/5724
+f 5723/1/5723 5724/1/5724 5725/1/5725
+f 5719/1/5719 5718/1/5718 5722/1/5722
+f 5698/1/5698 5717/1/5717 5716/1/5716
+f 5718/1/5718 5721/1/5721 5722/1/5722
+f 5722/1/5722 5721/1/5721 5726/1/5726
+f 5697/1/5697 5720/1/5720 5717/1/5717
+f 5720/1/5720 5633/1/5633 5631/1/5631
+f 5631/1/5631 5632/1/5632 5630/1/5630
+f 5721/1/5721 5629/1/5629 5726/1/5726
+f 5722/1/5722 5726/1/5726 5724/1/5724
+f 5725/1/5725 5724/1/5724 5728/1/5728
+f 5713/1/5713 5723/1/5723 5725/1/5725
+f 5709/1/5709 5713/1/5713 5714/1/5714
+f 5710/1/5710 5709/1/5709 5714/1/5714
+f 6807/1/6807 5715/1/5715 5731/1/5731
+f 5715/1/5715 5729/1/5729 5731/1/5731
+f 5729/1/5729 5730/1/5730 6915/1/6915
+f 5730/1/5730 5727/1/5727 5732/1/5732
+f 6914/1/6914 5733/1/5733 6913/1/6913
+f 6811/1/6811 6914/1/6914 6812/1/6812
+f 6809/1/6809 6811/1/6811 6812/1/6812
+f 6735/1/6735 6808/1/6808 6809/1/6809
+f 6732/1/6732 5710/1/5710 6735/1/6735
+f 5707/1/5707 5705/1/5705 6732/1/6732
+f 6736/1/6736 5706/1/5706 5707/1/5707
+f 6783/1/6783 6736/1/6736 6785/1/6785
+f 6788/1/6788 6785/1/6785 6789/1/6789
+f 6789/1/6789 6324/1/6324 6788/1/6788
+f 6323/1/6323 6324/1/6324 6320/1/6320
+f 6806/1/6806 6790/1/6790 6323/1/6323
+f 6322/1/6322 6805/1/6805 6806/1/6806
+f 5630/1/5630 6322/1/6322 5628/1/5628
+f 6318/1/6318 6319/1/6319 6316/1/6316
+f 5624/1/5624 6315/1/6315 6256/1/6256
+f 5626/1/5626 5628/1/5628 5624/1/5624
+f 5732/1/5732 5626/1/5626 5734/1/5734
+f 6912/1/6912 5734/1/5734 6911/1/6911
+f 6822/1/6822 6912/1/6912 6823/1/6823
+f 6820/1/6820 6823/1/6823 6824/1/6824
+f 6816/1/6816 6820/1/6820 6821/1/6821
+f 6814/1/6814 6813/1/6813 6816/1/6816
+f 6733/1/6733 6810/1/6810 6814/1/6814
+f 6731/1/6731 6733/1/6733 6330/1/6330
+f 6332/1/6332 6734/1/6734 6731/1/6731
+f 6791/1/6791 6332/1/6332 6356/1/6356
+f 6356/1/6356 6321/1/6321 6791/1/6791
+f 6316/1/6316 6321/1/6321 6317/1/6317
+f 6313/1/6313 6317/1/6317 6314/1/6314
+f 6329/1/6329 6328/1/6328 6326/1/6326
+f 6311/1/6311 6314/1/6314 6325/1/6325
+f 6307/1/6307 6311/1/6311 6312/1/6312
+f 6307/1/6307 6312/1/6312 6300/1/6300
+f 6333/1/6333 6300/1/6300 6312/1/6312
+f 6327/1/6327 6328/1/6328 6331/1/6331
+f 6334/1/6334 6300/1/6300 6333/1/6333
+f 6307/1/6307 6300/1/6300 6303/1/6303
+f 6306/1/6306 6307/1/6307 6303/1/6303
+f 6257/1/6257 6308/1/6308 6306/1/6306
+f 5625/1/5625 6257/1/6257 6254/1/6254
+f 5627/1/5627 5625/1/5625 6254/1/6254
+f 6910/1/6910 5623/1/5623 5627/1/5627
+f 6830/1/6830 6910/1/6910 6829/1/6829
+f 6828/1/6828 6829/1/6829 6831/1/6831
+f 6825/1/6825 6828/1/6828 6827/1/6827
+f 6826/1/6826 6827/1/6827 6834/1/6834
+f 6833/1/6833 6832/1/6832 6835/1/6835
+f 6847/1/6847 6844/1/6844 6846/1/6846
+f 6835/1/6835 6841/1/6841 6842/1/6842
+f 6838/1/6838 6840/1/6840 6841/1/6841
+f 6839/1/6839 6255/1/6255 6840/1/6840
+f 6844/1/6844 6843/1/6843 6846/1/6846
+f 6851/1/6851 6852/1/6852 6853/1/6853
+f 6847/1/6847 6846/1/6846 6851/1/6851
+f 6848/1/6848 6847/1/6847 6849/1/6849
+f 6857/1/6857 6848/1/6848 6849/1/6849
+f 6857/1/6857 6849/1/6849 6854/1/6854
+f 6909/1/6909 6848/1/6848 6857/1/6857
+f 6837/1/6837 6836/1/6836 6909/1/6909
+f 6907/1/6907 6834/1/6834 6837/1/6837
+f 6906/1/6906 6817/1/6817 6907/1/6907
+f 6335/1/6335 6815/1/6815 6906/1/6906
+f 6331/1/6331 6335/1/6335 6298/1/6298
+f 6301/1/6301 6298/1/6298 6297/1/6297
+f 6297/1/6297 6295/1/6295 6301/1/6301
+f 6299/1/6299 6295/1/6295 6294/1/6294
+f 6302/1/6302 6299/1/6299 6294/1/6294
+f 6258/1/6258 6302/1/6302 6304/1/6304
+f 6259/1/6259 6304/1/6304 6305/1/6305
+f 6255/1/6255 6259/1/6259 6260/1/6260
+f 6845/1/6845 6260/1/6260 6896/1/6896
+f 6898/1/6898 6896/1/6896 6899/1/6899
+f 6861/1/6861 6899/1/6899 6901/1/6901
+f 6861/1/6861 6901/1/6901 6903/1/6903
+f 6862/1/6862 6861/1/6861 6903/1/6903
+f 6856/1/6856 6861/1/6861 6862/1/6862
+f 6855/1/6855 6850/1/6850 6856/1/6856
+f 6858/1/6858 6855/1/6855 6860/1/6860
+f 6867/1/6867 6908/1/6908 6858/1/6858
+f 6336/1/6336 6867/1/6867 6337/1/6337
+f 6293/1/6293 6336/1/6336 6337/1/6337
+f 6296/1/6296 6293/1/6293 6292/1/6292
+f 6292/1/6292 6291/1/6291 6296/1/6296
+f 6290/1/6290 6291/1/6291 6288/1/6288
+f 6287/1/6287 6288/1/6288 6282/1/6282
+f 6289/1/6289 6284/1/6284 6286/1/6286
+f 6278/1/6278 6282/1/6282 6281/1/6281
+f 6272/1/6272 6278/1/6278 6277/1/6277
+f 6267/1/6267 6272/1/6272 6269/1/6269
+f 6266/1/6266 6357/1/6357 6267/1/6267
+f 6261/1/6261 6266/1/6266 6263/1/6263
+f 6262/1/6262 6261/1/6261 6263/1/6263
+f 6897/1/6897 6262/1/6262 6902/1/6902
+f 6900/1/6900 6902/1/6902 6879/1/6879
+f 6878/1/6878 6900/1/6900 6879/1/6879
+f 6877/1/6877 6878/1/6878 6873/1/6873
+f 6872/1/6872 6877/1/6877 6873/1/6873
+f 6876/1/6876 6880/1/6880 6881/1/6881
+f 6881/1/6881 6880/1/6880 6884/1/6884
+f 6884/1/6884 6885/1/6885 6886/1/6886
+f 6882/1/6882 6887/1/6887 6888/1/6888
+f 6883/1/6883 6882/1/6882 6888/1/6888
+f 6875/1/6875 6882/1/6882 6883/1/6883
+f 6870/1/6870 6874/1/6874 6875/1/6875
+f 6869/1/6869 6874/1/6874 6870/1/6870
+f 6872/1/6872 6873/1/6873 6869/1/6869
+f 6863/1/6863 6877/1/6877 6872/1/6872
+f 6864/1/6864 6859/1/6859 6863/1/6863
+f 6865/1/6865 6864/1/6864 6343/1/6343
+f 6338/1/6338 6865/1/6865 6343/1/6343
+f 6284/1/6284 6338/1/6338 6285/1/6285
+f 6280/1/6280 6285/1/6285 6279/1/6279
+f 6355/1/6355 6274/1/6274 6279/1/6279
+f 6271/1/6271 6274/1/6274 6273/1/6273
+f 6271/1/6271 6273/1/6273 6270/1/6270
+f 6268/1/6268 6270/1/6270 5393/1/5393
+f 6265/1/6265 6264/1/6264 6268/1/6268
+f 6895/1/6895 6265/1/6265 6891/1/6891
+f 6886/1/6886 6891/1/6891 6889/1/6889
+f 6890/1/6890 6889/1/6889 6894/1/6894
+f 6546/1/6546 6894/1/6894 6457/1/6457
+f 6904/1/6904 6546/1/6546 6545/1/6545
+f 6541/1/6541 6545/1/6545 6542/1/6542
+f 6540/1/6540 6905/1/6905 6541/1/6541
+f 6868/1/6868 6871/1/6871 6540/1/6540
+f 6341/1/6341 6866/1/6866 6868/1/6868
+f 6339/1/6339 6341/1/6341 6342/1/6342
+f 6340/1/6340 6339/1/6339 6342/1/6342
+f 6354/1/6354 6340/1/6340 6352/1/6352
+f 6352/1/6352 6276/1/6276 6354/1/6354
+f 6275/1/6275 6276/1/6276 5319/1/5319
+f 6353/1/6353 6347/1/6347 6351/1/6351
+f 5312/1/5312 5318/1/5318 5319/1/5319
+f 5314/1/5314 5317/1/5317 5313/1/5313
+f 5320/1/5320 5321/1/5321 5318/1/5318
+f 5324/1/5324 5320/1/5320 5322/1/5322
+f 5331/1/5331 5321/1/5321 5320/1/5320
+f 5392/1/5392 5331/1/5331 5329/1/5329
+f 6892/1/6892 5392/1/5392 5329/1/5329
+f 6893/1/6893 6892/1/6892 6445/1/6445
+f 6455/1/6455 6445/1/6445 6454/1/6454
+f 6456/1/6456 6455/1/6455 6454/1/6454
+f 6543/1/6543 6456/1/6456 6544/1/6544
+f 6539/1/6539 6544/1/6544 6462/1/6462
+f 6538/1/6538 6539/1/6539 6462/1/6462
+f 6346/1/6346 6537/1/6537 6538/1/6538
+f 6345/1/6345 6344/1/6344 6346/1/6346
+f 6347/1/6347 6345/1/6345 5309/1/5309
+f 5313/1/5313 5309/1/5309 5314/1/5314
+f 5316/1/5316 5317/1/5317 5314/1/5314
+f 5323/1/5323 5316/1/5316 5315/1/5315
+f 5323/1/5323 5315/1/5315 5338/1/5338
+f 5323/1/5323 5338/1/5338 5334/1/5334
+f 5341/1/5341 5338/1/5338 5340/1/5340
+f 5341/1/5341 5342/1/5342 5338/1/5338
+f 5339/1/5339 5338/1/5338 5342/1/5342
+f 5340/1/5340 5305/1/5305 5341/1/5341
+f 5310/1/5310 5307/1/5307 5311/1/5311
+f 5307/1/5307 5308/1/5308 5306/1/5306
+f 5341/1/5341 5305/1/5305 5346/1/5346
+f 5346/1/5346 5342/1/5342 5341/1/5341
+f 5339/1/5339 5342/1/5342 5343/1/5343
+f 5334/1/5334 5338/1/5338 5339/1/5339
+f 5327/1/5327 5323/1/5323 5334/1/5334
+f 5328/1/5328 5325/1/5325 5327/1/5327
+f 5330/1/5330 5326/1/5326 5328/1/5328
+f 6441/1/6441 5330/1/5330 6438/1/6438
+f 6440/1/6440 6441/1/6441 6438/1/6438
+f 6443/1/6443 6440/1/6440 6444/1/6444
+f 6447/1/6447 6446/1/6446 6443/1/6443
+f 6453/1/6453 6447/1/6447 6458/1/6458
+f 6459/1/6459 6461/1/6461 6458/1/6458
+f 6463/1/6463 6459/1/6459 6464/1/6464
+f 6460/1/6460 6451/1/6451 6452/1/6452
+f 6452/1/6452 6448/1/6448 6450/1/6450
+f 6465/1/6465 6467/1/6467 6468/1/6468
+f 6472/1/6472 6471/1/6471 6475/1/6475
+f 6450/1/6450 6473/1/6473 6469/1/6469
+f 6473/1/6473 6449/1/6449 6474/1/6474
+f 6474/1/6474 6437/1/6437 6439/1/6439
+f 6471/1/6471 6476/1/6476 6475/1/6475
+f 6472/1/6472 6475/1/6475 6477/1/6477
+f 6478/1/6478 6472/1/6472 6477/1/6477
+f 6478/1/6478 6477/1/6477 6522/1/6522
+f 6470/1/6470 6472/1/6472 6478/1/6478
+f 6466/1/6466 6468/1/6468 6470/1/6470
+f 6349/1/6349 6464/1/6464 6466/1/6466
+f 5306/1/5306 6349/1/6349 5304/1/5304
+f 6350/1/6350 6521/1/6521 6520/1/6520
+f 6520/1/6520 6523/1/6523 6496/1/6496
+f 6497/1/6497 6490/1/6490 6493/1/6493
+f 6490/1/6490 6491/1/6491 6493/1/6493
+f 6493/1/6493 6491/1/6491 6494/1/6494
+f 6523/1/6523 6489/1/6489 6496/1/6496
+f 6490/1/6490 6488/1/6488 6491/1/6491
+f 6488/1/6488 6487/1/6487 6491/1/6491
+f 6491/1/6491 6487/1/6487 6492/1/6492
+f 6487/1/6487 6486/1/6486 6492/1/6492
+f 6485/1/6485 6486/1/6486 6487/1/6487
+f 6482/1/6482 6483/1/6483 6489/1/6489
+f 6488/1/6488 6485/1/6485 6487/1/6487
+f 6479/1/6479 6481/1/6481 6483/1/6483
+f 6485/1/6485 6484/1/6484 6486/1/6486
+f 6480/1/6480 6435/1/6435 6481/1/6481
+f 6484/1/6484 6434/1/6434 6486/1/6486
+f 6486/1/6486 6434/1/6434 6433/1/6433
+f 6439/1/6439 6436/1/6436 6435/1/6435
+f 6436/1/6436 5333/1/5333 5337/1/5337
+f 5337/1/5337 5332/1/5332 5336/1/5336
+f 5336/1/5336 5335/1/5335 5348/1/5348
+f 5391/1/5391 5351/1/5351 5356/1/5356
+f 6434/1/6434 5391/1/5391 6433/1/6433
+f 6486/1/6486 6433/1/6433 6536/1/6536
+f 6492/1/6492 6486/1/6486 6536/1/6536
+f 6491/1/6491 6492/1/6492 6495/1/6495
+f 6491/1/6491 6495/1/6495 6494/1/6494
+f 6498/1/6498 6493/1/6493 6494/1/6494
+f 6508/1/6508 6507/1/6507 6510/1/6510
+f 6499/1/6499 6501/1/6501 6502/1/6502
+f 6501/1/6501 6500/1/6500 6509/1/6509
+f 6509/1/6509 6535/1/6535 6534/1/6534
+f 6507/1/6507 6511/1/6511 6512/1/6512
+f 6507/1/6507 6512/1/6512 6510/1/6510
+f 6513/1/6513 6508/1/6508 6510/1/6510
+f 6506/1/6506 6508/1/6508 6513/1/6513
+f 6505/1/6505 6503/1/6503 6506/1/6506
+f 6504/1/6504 6498/1/6498 6505/1/6505
+f 5300/1/5300 6519/1/6519 6504/1/6504
+f 5301/1/5301 5300/1/5300 5299/1/5299
+f 5303/1/5303 5304/1/5304 5301/1/5301
+f 5344/1/5344 5303/1/5303 5347/1/5347
+f 5347/1/5347 5345/1/5345 5344/1/5344
+f 5348/1/5348 5345/1/5345 5350/1/5350
+f 5352/1/5352 5350/1/5350 5354/1/5354
+f 5349/1/5349 5302/1/5302 5353/1/5353
+f 5358/1/5358 5354/1/5354 5359/1/5359
+f 5362/1/5362 5358/1/5358 5361/1/5361
+f 5362/1/5362 5361/1/5361 5377/1/5377
+f 5363/1/5363 5377/1/5377 5361/1/5361
+f 5360/1/5360 5302/1/5302 5364/1/5364
+f 5367/1/5367 5377/1/5377 5363/1/5363
+f 5362/1/5362 5377/1/5377 5379/1/5379
+f 5378/1/5378 5362/1/5362 5379/1/5379
+f 5384/1/5384 5380/1/5380 5378/1/5378
+f 5390/1/5390 5384/1/5384 5386/1/5386
+f 6432/1/6432 5386/1/5386 6431/1/6431
+f 6534/1/6534 6431/1/6431 6530/1/6530
+f 6526/1/6526 6530/1/6530 6527/1/6527
+f 6525/1/6525 6527/1/6527 6529/1/6529
+f 6516/1/6516 6524/1/6524 6525/1/6525
+f 6515/1/6515 6516/1/6516 6517/1/6517
+f 5289/1/5289 6515/1/6515 6517/1/6517
+f 5288/1/5288 6518/1/6518 5287/1/5287
+f 6518/1/6518 6528/1/6528 5287/1/5287
+f 6528/1/6528 6532/1/6532 5395/1/5395
+f 6532/1/6532 6531/1/6531 6533/1/6533
+f 5277/1/5277 5396/1/5396 5272/1/5272
+f 5283/1/5283 5277/1/5277 5275/1/5275
+f 5282/1/5282 5283/1/5283 5275/1/5275
+f 5285/1/5285 5284/1/5284 5282/1/5282
+f 5290/1/5290 5289/1/5289 5285/1/5285
+f 5296/1/5296 6514/1/6514 5290/1/5290
+f 5297/1/5297 5298/1/5298 5296/1/5296
+f 5364/1/5364 5297/1/5297 5365/1/5365
+f 5368/1/5368 5365/1/5365 5369/1/5369
+f 5369/1/5369 5376/1/5376 5368/1/5368
+f 5381/1/5381 5376/1/5376 5388/1/5388
+f 5382/1/5382 5381/1/5381 5388/1/5388
+f 5383/1/5383 5382/1/5382 5385/1/5385
+f 5387/1/5387 5383/1/5383 5385/1/5385
+f 6548/1/6548 5389/1/5389 6547/1/6547
+f 6547/1/6547 5389/1/5389 6396/1/6396
+f 6402/1/6402 6394/1/6394 6397/1/6397
+f 6400/1/6400 6402/1/6402 6397/1/6397
+f 6406/1/6406 6400/1/6400 6404/1/6404
+f 6430/1/6430 5387/1/5387 6406/1/6406
+f 6533/1/6533 6430/1/6430 5271/1/5271
+f 5270/1/5270 5271/1/5271 5265/1/5265
+f 5273/1/5273 5270/1/5270 5268/1/5268
+f 5274/1/5274 5268/1/5268 5269/1/5269
+f 5278/1/5278 5274/1/5274 5269/1/5269
+f 5281/1/5281 5279/1/5279 5278/1/5278
+f 5291/1/5291 5286/1/5286 5281/1/5281
+f 5293/1/5293 5291/1/5291 5294/1/5294
+f 5366/1/5366 5295/1/5295 5293/1/5293
+f 5373/1/5373 5366/1/5366 5374/1/5374
+f 5374/1/5374 5375/1/5375 5373/1/5373
+f 5389/1/5389 5375/1/5375 6396/1/6396
+f 6547/1/6547 6396/1/6396 6395/1/6395
+f 5371/1/5371 5370/1/5370 5372/1/5372
+f 6390/1/6390 6395/1/6395 6388/1/6388
+f 6393/1/6393 6390/1/6390 6389/1/6389
+f 6387/1/6387 6392/1/6392 6389/1/6389
+f 6386/1/6386 5370/1/5370 6385/1/6385
+f 6391/1/6391 6392/1/6392 6387/1/6387
+f 6427/1/6427 6392/1/6392 6426/1/6426
+f 6427/1/6427 6426/1/6426 6419/1/6419
+f 6423/1/6423 6419/1/6419 6424/1/6424
+f 6428/1/6428 6384/1/6384 6425/1/6425
+f 6385/1/6385 5394/1/5394 6384/1/6384
+f 5394/1/5394 5292/1/5292 5208/1/5208
+f 5206/1/5206 5214/1/5214 5210/1/5210
+f 5292/1/5292 5216/1/5216 5208/1/5208
+f 5216/1/5216 5280/1/5280 5217/1/5217
+f 5217/1/5217 5267/1/5267 5221/1/5221
+f 5267/1/5267 5222/1/5222 5221/1/5221
+f 5224/1/5224 5260/1/5260 5259/1/5259
+f 5224/1/5224 5259/1/5259 5223/1/5223
+f 5266/1/5266 5262/1/5262 5222/1/5222
+f 5264/1/5264 5261/1/5261 5262/1/5262
+f 5261/1/5261 5263/1/5263 5258/1/5258
+f 5260/1/5260 5257/1/5257 5259/1/5259
+f 5223/1/5223 5259/1/5259 5229/1/5229
+f 5219/1/5219 5224/1/5224 5223/1/5223
+f 5218/1/5218 5219/1/5219 5215/1/5215
+f 5214/1/5214 5215/1/5215 5210/1/5210
+f 5211/1/5211 5220/1/5220 5226/1/5226
+f 5226/1/5226 5225/1/5225 5227/1/5227
+f 5212/1/5212 5228/1/5228 5213/1/5213
+f 5235/1/5235 5234/1/5234 5238/1/5238
+f 5234/1/5234 5239/1/5239 5238/1/5238
+f 5238/1/5238 5239/1/5239 5243/1/5243
+f 5239/1/5239 5248/1/5248 5243/1/5243
+f 5237/1/5237 5248/1/5248 5239/1/5239
+f 5227/1/5227 5233/1/5233 5231/1/5231
+f 5234/1/5234 5237/1/5237 5239/1/5239
+f 5227/1/5227 5232/1/5232 5233/1/5233
+f 5237/1/5237 5253/1/5253 5248/1/5248
+f 5230/1/5230 5254/1/5254 5232/1/5232
+f 5256/1/5256 5255/1/5255 5254/1/5254
+f 5258/1/5258 6405/1/6405 5255/1/5255
+f 6405/1/6405 6401/1/6401 6403/1/6403
+f 6403/1/6403 6399/1/6399 6410/1/6410
+f 6427/1/6427 6419/1/6419 6410/1/6410
+f 6411/1/6411 6417/1/6417 6412/1/6412
+f 6408/1/6408 6412/1/6412 6413/1/6413
+f 6409/1/6409 6413/1/6413 6414/1/6414
+f 5252/1/5252 6407/1/6407 6409/1/6409
+f 5253/1/5253 5252/1/5252 5248/1/5248
+f 5243/1/5243 5248/1/5248 5246/1/5246
+f 5238/1/5238 5243/1/5243 5241/1/5241
+f 5240/1/5240 5241/1/5241 5242/1/5242
+f 5194/1/5194 5240/1/5240 5242/1/5242
+f 5196/1/5196 5201/1/5201 5194/1/5194
+f 5200/1/5200 5201/1/5201 5196/1/5196
+f 5202/1/5202 5236/1/5236 5200/1/5200
+f 5209/1/5209 5213/1/5213 5202/1/5202
+f 5206/1/5206 5210/1/5210 5209/1/5209
+f 5207/1/5207 5206/1/5206 5205/1/5205
+f 6381/1/6381 5207/1/5207 5205/1/5205
+f 6424/1/6424 6381/1/6381 6423/1/6423
+f 6423/1/6423 6418/1/6418 6419/1/6419
+f 6416/1/6416 6418/1/6418 6421/1/6421
+f 6382/1/6382 6379/1/6379 6383/1/6383
+f 6377/1/6377 6421/1/6421 6378/1/6378
+f 6371/1/6371 6367/1/6367 6377/1/6377
+f 6366/1/6366 6367/1/6367 6371/1/6371
+f 6368/1/6368 6366/1/6366 6369/1/6369
+f 6375/1/6375 6376/1/6376 6370/1/6370
+f 6379/1/6379 5204/1/5204 6376/1/6376
+f 5204/1/5204 5203/1/5203 5198/1/5198
+f 5198/1/5198 5197/1/5197 5193/1/5193
+f 5193/1/5193 5192/1/5192 5190/1/5190
+f 5190/1/5190 5189/1/5189 5185/1/5185
+f 5189/1/5189 5186/1/5186 5185/1/5185
+f 5183/1/5183 5187/1/5187 5178/1/5178
+f 5187/1/5187 5398/1/5398 5177/1/5177
+f 5195/1/5195 5245/1/5245 5186/1/5186
+f 5398/1/5398 5251/1/5251 5177/1/5177
+f 5244/1/5244 5247/1/5247 5245/1/5245
+f 5247/1/5247 5249/1/5249 5250/1/5250
+f 5250/1/5250 6415/1/6415 6361/1/6361
+f 5251/1/5251 5397/1/5397 5172/1/5172
+f 5172/1/5172 5171/1/5171 5175/1/5175
+f 5165/1/5165 5167/1/5167 5168/1/5168
+f 5171/1/5171 5173/1/5173 5176/1/5176
+f 5174/1/5174 5180/1/5180 5173/1/5173
+f 5174/1/5174 5405/1/5405 5180/1/5180
+f 6976/1/6976 5405/1/5405 5174/1/5174
+f 6964/1/6964 5405/1/5405 6976/1/6976
+f 6957/1/6957 6964/1/6964 6963/1/6963
+f 6977/1/6977 5405/1/5405 6964/1/6964
+f 5180/1/5180 5405/1/5405 6977/1/6977
+f 5404/1/5404 5179/1/5179 5180/1/5180
+f 5401/1/5401 5179/1/5179 5404/1/5404
+f 5184/1/5184 5182/1/5182 5401/1/5401
+f 5191/1/5191 5188/1/5188 5184/1/5184
+f 5199/1/5199 5191/1/5191 5400/1/5400
+f 6549/1/6549 5199/1/5199 5400/1/5400
+f 6373/1/6373 6380/1/6380 6549/1/6549
+f 6369/1/6369 6373/1/6373 6368/1/6368
+f 6372/1/6372 6365/1/6365 6368/1/6368
+f 6365/1/6365 6360/1/6360 6363/1/6363
+f 5081/1/5081 5083/1/5083 6364/1/6364
+f 6359/1/6359 6363/1/6363 6360/1/6360
+f 6359/1/6359 6358/1/6358 6361/1/6361
+f 5087/1/5087 5088/1/5088 5091/1/5091
+f 5086/1/5086 5088/1/5088 5087/1/5087
+f 5086/1/5086 5089/1/5089 5088/1/5088
+f 6358/1/6358 5170/1/5170 6429/1/6429
+f 5166/1/5166 5168/1/5168 5170/1/5170
+f 5088/1/5088 5089/1/5089 5095/1/5095
+f 5095/1/5095 5089/1/5089 5094/1/5094
+f 5095/1/5095 5094/1/5094 5096/1/5096
+f 5166/1/5166 5165/1/5165 5168/1/5168
+f 5165/1/5165 6975/1/6975 5167/1/5167
+f 6974/1/6974 6965/1/6965 6975/1/6975
+f 6974/1/6974 6971/1/6971 6965/1/6965
+f 6972/1/6972 6970/1/6970 6971/1/6971
+f 5169/1/5169 5095/1/5095 5164/1/5164
+f 5164/1/5164 5095/1/5095 5096/1/5096
+f 6972/1/6972 5163/1/5163 6978/1/6978
+f 6978/1/6978 6981/1/6981 6979/1/6979
+f 6985/1/6985 6983/1/6983 6981/1/6981
+f 7051/1/7051 6991/1/6991 6980/1/6980
+f 7051/1/7051 7046/1/7046 6991/1/6991
+f 7041/1/7041 7046/1/7046 7051/1/7051
+f 6985/1/6985 6990/1/6990 6983/1/6983
+f 7046/1/7046 6992/1/6992 6991/1/6991
+f 7046/1/7046 7042/1/7042 6992/1/6992
+f 7042/1/7042 6993/1/6993 6992/1/6992
+f 7042/1/7042 7045/1/7045 6993/1/6993
+f 6988/1/6988 6983/1/6983 6990/1/6990
+f 6984/1/6984 6983/1/6983 6988/1/6988
+f 6987/1/6987 6982/1/6982 6984/1/6984
+f 6986/1/6986 6982/1/6982 6987/1/6987
+f 6961/1/6961 6969/1/6969 6986/1/6986
+f 6956/1/6956 6960/1/6960 6961/1/6961
+f 6954/1/6954 6958/1/6958 6956/1/6956
+f 5402/1/5402 6955/1/6955 6954/1/6954
+f 5399/1/5399 5402/1/5402 5403/1/5403
+f 6550/1/6550 5403/1/5403 6553/1/6553
+f 6551/1/6551 6550/1/6550 6553/1/6553
+f 6552/1/6552 6374/1/6374 6551/1/6551
+f 6552/1/6552 5081/1/5081 6364/1/6364
+f 5075/1/5075 5079/1/5079 5074/1/5074
+f 5082/1/5082 5083/1/5083 5081/1/5081
+f 5075/1/5075 5080/1/5080 5079/1/5079
+f 5078/1/5078 5080/1/5080 5075/1/5075
+f 5082/1/5082 5084/1/5084 5083/1/5083
+f 5087/1/5087 5084/1/5084 5086/1/5086
+f 5078/1/5078 5085/1/5085 5080/1/5080
+f 5090/1/5090 5089/1/5089 5086/1/5086
+f 5090/1/5090 5094/1/5094 5089/1/5089
+f 5096/1/5096 5094/1/5094 5097/1/5097
+f 5098/1/5098 5107/1/5107 5097/1/5097
+f 5106/1/5106 5107/1/5107 5098/1/5098
+f 5092/1/5092 5085/1/5085 5093/1/5093
+f 5098/1/5098 5101/1/5101 5105/1/5105
+f 5098/1/5098 5105/1/5105 5106/1/5106
+f 5106/1/5106 5109/1/5109 5107/1/5107
+f 5110/1/5110 5109/1/5109 5111/1/5111
+f 5114/1/5114 5111/1/5111 5115/1/5115
+f 7051/1/7051 5114/1/5114 7041/1/7041
+f 7041/1/7041 7042/1/7042 7046/1/7046
+f 7038/1/7038 7043/1/7043 7042/1/7042
+f 7033/1/7033 7037/1/7037 7038/1/7038
+f 7039/1/7039 7040/1/7040 7031/1/7031
+f 7030/1/7030 7029/1/7029 7033/1/7033
+f 7029/1/7029 7032/1/7032 7033/1/7033
+f 7025/1/7025 7024/1/7024 7027/1/7027
+f 7022/1/7022 7024/1/7024 7025/1/7025
+f 7024/1/7024 7015/1/7015 7027/1/7027
+f 7017/1/7017 7015/1/7015 7024/1/7024
+f 7017/1/7017 7013/1/7013 7015/1/7015
+f 7013/1/7013 7012/1/7012 7015/1/7015
+f 7012/1/7012 7013/1/7013 7011/1/7011
+f 7029/1/7029 7028/1/7028 7032/1/7032
+f 7033/1/7033 7032/1/7032 7037/1/7037
+f 7038/1/7038 7037/1/7037 7043/1/7043
+f 7043/1/7043 7045/1/7045 7042/1/7042
+f 6999/1/6999 6993/1/6993 7045/1/7045
+f 6997/1/6997 6994/1/6994 6999/1/6999
+f 6995/1/6995 6994/1/6994 6997/1/6997
+f 6996/1/6996 6989/1/6989 6995/1/6995
+f 6556/1/6556 6959/1/6959 6996/1/6996
+f 6555/1/6555 6959/1/6959 6556/1/6556
+f 5065/1/5065 6554/1/6554 6555/1/6555
+f 5070/1/5070 6554/1/6554 5065/1/5065
+f 5071/1/5071 5072/1/5072 5070/1/5070
+f 5074/1/5074 5071/1/5071 5075/1/5075
+f 5076/1/5076 5078/1/5078 5075/1/5075
+f 5078/1/5078 5093/1/5093 5085/1/5085
+f 5077/1/5077 5073/1/5073 5066/1/5066
+f 5099/1/5099 5100/1/5100 5093/1/5093
+f 5067/1/5067 5066/1/5066 5064/1/5064
+f 5068/1/5068 5102/1/5102 5100/1/5100
+f 5069/1/5069 5064/1/5064 5061/1/5061
+f 5122/1/5122 5119/1/5119 5123/1/5123
+f 5103/1/5103 5104/1/5104 5102/1/5102
+f 5122/1/5122 5118/1/5118 5119/1/5119
+f 5108/1/5108 5104/1/5104 5112/1/5112
+f 5108/1/5108 5112/1/5112 5113/1/5113
+f 5116/1/5116 5113/1/5113 5117/1/5117
+f 5129/1/5129 5148/1/5148 5121/1/5121
+f 5116/1/5116 5117/1/5117 5150/1/5150
+f 5150/1/5150 5151/1/5151 5116/1/5116
+f 5156/1/5156 5152/1/5152 5147/1/5147
+f 5154/1/5154 5151/1/5151 5153/1/5153
+f 7031/1/7031 5153/1/5153 7026/1/7026
+f 7025/1/7025 7026/1/7026 7022/1/7022
+f 7022/1/7022 7017/1/7017 7024/1/7024
+f 7017/1/7017 7016/1/7016 7013/1/7013
+f 7020/1/7020 7018/1/7018 7019/1/7019
+f 7020/1/7020 5055/1/5055 7018/1/7018
+f 5055/1/5055 7010/1/7010 7018/1/7018
+f 7011/1/7011 7013/1/7013 7016/1/7016
+f 7007/1/7007 7012/1/7012 7011/1/7011
+f 7015/1/7015 7012/1/7012 7014/1/7014
+f 7050/1/7050 7034/1/7034 7014/1/7014
+f 7049/1/7049 7034/1/7034 7050/1/7050
+f 7048/1/7048 7035/1/7035 7049/1/7049
+f 7047/1/7047 7036/1/7036 7048/1/7048
+f 7003/1/7003 7044/1/7044 7047/1/7047
+f 7000/1/7000 7001/1/7001 7003/1/7003
+f 5059/1/5059 6998/1/6998 7000/1/7000
+f 5060/1/5060 5059/1/5059 5058/1/5058
+f 5061/1/5061 5062/1/5062 5060/1/5060
+f 5123/1/5123 5061/1/5061 5122/1/5122
+f 5120/1/5120 5118/1/5118 5122/1/5122
+f 5120/1/5120 5121/1/5121 5118/1/5118
+f 5063/1/5063 5125/1/5125 5124/1/5124
+f 5126/1/5126 5129/1/5129 5121/1/5121
+f 5131/1/5131 5148/1/5148 5129/1/5129
+f 5128/1/5128 5125/1/5125 5127/1/5127
+f 5135/1/5135 5131/1/5131 5130/1/5130
+f 5135/1/5135 5149/1/5149 5131/1/5131
+f 5156/1/5156 5147/1/5147 5149/1/5149
+f 5156/1/5156 5157/1/5157 5152/1/5152
+f 5161/1/5161 5158/1/5158 5159/1/5159
+f 5155/1/5155 5152/1/5152 5157/1/5157
+f 5155/1/5155 7021/1/7021 7023/1/7023
+f 7019/1/7019 7021/1/7021 7020/1/7020
+f 5055/1/5055 7020/1/7020 4999/1/4999
+f 4999/1/4999 5054/1/5054 5055/1/5055
+f 5054/1/5054 4994/1/4994 5055/1/5055
+f 4999/1/4999 5053/1/5053 5054/1/5054
+f 4993/1/4993 5054/1/5054 5053/1/5053
+f 4999/1/4999 4997/1/4997 5053/1/5053
+f 4997/1/4997 4992/1/4992 5053/1/5053
+f 4988/1/4988 5053/1/5053 4992/1/4992
+f 4991/1/4991 4992/1/4992 4997/1/4997
+f 4997/1/4997 4995/1/4995 4991/1/4991
+f 4995/1/4995 4996/1/4996 4991/1/4991
+f 4990/1/4990 4991/1/4991 4996/1/4996
+f 4990/1/4990 4996/1/4996 5001/1/5001
+f 4985/1/4985 4990/1/4990 5001/1/5001
+f 4985/1/4985 5001/1/5001 5002/1/5002
+f 4985/1/4985 5002/1/5002 5007/1/5007
+f 5007/1/5007 5002/1/5002 5006/1/5006
+f 5007/1/5007 5006/1/5006 5008/1/5008
+f 4986/1/4986 5007/1/5007 5008/1/5008
+f 5008/1/5008 5006/1/5006 5009/1/5009
+f 5008/1/5008 5009/1/5009 5011/1/5011
+f 5012/1/5012 5008/1/5008 5011/1/5011
+f 5012/1/5012 5011/1/5011 5013/1/5013
+f 5012/1/5012 5013/1/5013 5014/1/5014
+f 5014/1/5014 5013/1/5013 5017/1/5017
+f 5014/1/5014 5017/1/5017 5019/1/5019
+f 5020/1/5020 5014/1/5014 5019/1/5019
+f 5020/1/5020 5019/1/5019 5037/1/5037
+f 5045/1/5045 5020/1/5020 5037/1/5037
+f 5045/1/5045 5037/1/5037 5446/1/5446
+f 5422/1/5422 5045/1/5045 5446/1/5446
+f 5422/1/5422 5446/1/5446 5447/1/5447
+f 5449/1/5449 5422/1/5422 5447/1/5447
+f 5449/1/5449 5447/1/5447 5450/1/5450
+f 5450/1/5450 5452/1/5452 5449/1/5449
+f 5449/1/5449 5452/1/5452 5448/1/5448
+f 5452/1/5452 5421/1/5421 5448/1/5448
+f 5448/1/5448 5421/1/5421 5420/1/5420
+f 5420/1/5420 5422/1/5422 5448/1/5448
+f 5419/1/5419 5422/1/5422 5420/1/5420
+f 5420/1/5420 5414/1/5414 5419/1/5419
+f 5419/1/5419 5414/1/5414 5413/1/5413
+f 5419/1/5419 5413/1/5413 5415/1/5415
+f 5415/1/5415 5418/1/5418 5419/1/5419
+f 5413/1/5413 5414/1/5414 5408/1/5408
+f 5413/1/5413 5408/1/5408 5412/1/5412
+f 5414/1/5414 5030/1/5030 5408/1/5408
+f 5408/1/5408 5030/1/5030 5025/1/5025
+f 5025/1/5025 5406/1/5406 5408/1/5408
+f 5406/1/5406 5025/1/5025 5024/1/5024
+f 5406/1/5406 5024/1/5024 5444/1/5444
+f 5024/1/5024 5004/1/5004 5444/1/5444
+f 5004/1/5004 5024/1/5024 5016/1/5016
+f 5016/1/5016 5010/1/5010 5004/1/5004
+f 5013/1/5013 5010/1/5010 5016/1/5016
+f 5013/1/5013 5016/1/5016 5018/1/5018
+f 5016/1/5016 5024/1/5024 5018/1/5018
+f 5018/1/5018 5024/1/5024 5022/1/5022
+f 5017/1/5017 5018/1/5018 5022/1/5022
+f 5017/1/5017 5022/1/5022 5023/1/5023
+f 5017/1/5017 5023/1/5023 5021/1/5021
+f 5021/1/5021 5023/1/5023 5026/1/5026
+f 5021/1/5021 5026/1/5026 5027/1/5027
+f 5019/1/5019 5021/1/5021 5027/1/5027
+f 5019/1/5019 5027/1/5027 5031/1/5031
+f 5031/1/5031 5027/1/5027 5032/1/5032
+f 5031/1/5031 5032/1/5032 5036/1/5036
+f 5031/1/5031 5036/1/5036 5038/1/5038
+f 5031/1/5031 5038/1/5038 5037/1/5037
+f 5037/1/5037 5038/1/5038 5043/1/5043
+f 5037/1/5037 5043/1/5043 5044/1/5044
+f 5043/1/5043 5451/1/5451 5044/1/5044
+f 5044/1/5044 5451/1/5451 5447/1/5447
+f 5451/1/5451 5043/1/5043 5052/1/5052
+f 5052/1/5052 5450/1/5450 5451/1/5451
+f 5450/1/5450 5052/1/5052 7420/1/7420
+f 5052/1/5052 5421/1/5421 7420/1/7420
+f 5052/1/5052 5035/1/5035 5421/1/5421
+f 5421/1/5421 5035/1/5035 5414/1/5414
+f 5052/1/5052 5039/1/5039 5035/1/5035
+f 5034/1/5034 5035/1/5035 5039/1/5039
+f 5034/1/5034 5039/1/5039 5036/1/5036
+f 5033/1/5033 5034/1/5034 5036/1/5036
+f 5033/1/5033 5030/1/5030 5034/1/5034
+f 5030/1/5030 5033/1/5033 5029/1/5029
+f 5032/1/5032 5029/1/5029 5033/1/5033
+f 5036/1/5036 5039/1/5039 5040/1/5040
+f 5039/1/5039 5041/1/5041 5040/1/5040
+f 5041/1/5041 5042/1/5042 5040/1/5040
+f 5040/1/5040 5042/1/5042 5043/1/5043
+f 5041/1/5041 5052/1/5052 5042/1/5042
+f 5030/1/5030 5035/1/5035 5034/1/5034
+f 5039/1/5039 5052/1/5052 5041/1/5041
+f 5043/1/5043 5042/1/5042 5052/1/5052
+f 5038/1/5038 5040/1/5040 5043/1/5043
+f 5036/1/5036 5040/1/5040 5038/1/5038
+f 5032/1/5032 5033/1/5033 5036/1/5036
+f 5027/1/5027 5029/1/5029 5032/1/5032
+f 5027/1/5027 5028/1/5028 5029/1/5029
+f 5028/1/5028 5025/1/5025 5029/1/5029
+f 5026/1/5026 5025/1/5025 5028/1/5028
+f 5027/1/5027 5026/1/5026 5028/1/5028
+f 5025/1/5025 5026/1/5026 5023/1/5023
+f 5022/1/5022 5024/1/5024 5023/1/5023
+f 5023/1/5023 5024/1/5024 5025/1/5025
+f 5029/1/5029 5025/1/5025 5030/1/5030
+f 5414/1/5414 5035/1/5035 5030/1/5030
+f 5419/1/5419 5418/1/5418 5422/1/5422
+f 5420/1/5420 5421/1/5421 5414/1/5414
+f 5452/1/5452 7420/1/7420 5421/1/5421
+f 5452/1/5452 5450/1/5450 7420/1/7420
+f 5450/1/5450 5447/1/5447 5451/1/5451
+f 5448/1/5448 5422/1/5422 5449/1/5449
+f 5447/1/5447 5446/1/5446 5044/1/5044
+f 5418/1/5418 5045/1/5045 5422/1/5422
+f 5418/1/5418 5046/1/5046 5045/1/5045
+f 5417/1/5417 5046/1/5046 5418/1/5418
+f 5446/1/5446 5037/1/5037 5044/1/5044
+f 5046/1/5046 5020/1/5020 5045/1/5045
+f 5046/1/5046 5015/1/5015 5020/1/5020
+f 5037/1/5037 5019/1/5019 5031/1/5031
+f 5015/1/5015 5014/1/5014 5020/1/5020
+f 5019/1/5019 5017/1/5017 5021/1/5021
+f 5013/1/5013 5018/1/5018 5017/1/5017
+f 5011/1/5011 5010/1/5010 5013/1/5013
+f 5011/1/5011 5009/1/5009 5010/1/5010
+f 5009/1/5009 5005/1/5005 5010/1/5010
+f 5006/1/5006 5005/1/5005 5009/1/5009
+f 5002/1/5002 5003/1/5003 5006/1/5006
+f 5001/1/5001 4998/1/4998 5002/1/5002
+f 5001/1/5001 4996/1/4996 4998/1/4998
+f 4989/1/4989 4991/1/4991 4990/1/4990
+f 4989/1/4989 4992/1/4992 4991/1/4991
+f 4997/1/4997 4999/1/4999 4995/1/4995
+f 5158/1/5158 5161/1/5161 5162/1/5162
+f 5141/1/5141 5441/1/5441 5162/1/5162
+f 5442/1/5442 4995/1/4995 4999/1/4999
+f 4996/1/4996 4995/1/4995 4998/1/4998
+f 5002/1/5002 4998/1/4998 5003/1/5003
+f 5006/1/5006 5003/1/5003 5005/1/5005
+f 5004/1/5004 5010/1/5010 5005/1/5005
+f 5000/1/5000 5437/1/5437 5434/1/5434
+f 5004/1/5004 5438/1/5438 5444/1/5444
+f 5406/1/5406 5444/1/5444 5410/1/5410
+f 5406/1/5406 5407/1/5407 5408/1/5408
+f 5412/1/5412 5408/1/5408 5407/1/5407
+f 5415/1/5415 5413/1/5413 5412/1/5412
+f 5415/1/5415 5417/1/5417 5418/1/5418
+f 5409/1/5409 5416/1/5416 5411/1/5411
+f 5417/1/5417 5047/1/5047 5046/1/5046
+f 5423/1/5423 5048/1/5048 5416/1/5416
+f 5423/1/5423 5049/1/5049 5048/1/5048
+f 5047/1/5047 5015/1/5015 5046/1/5046
+f 5049/1/5049 4982/1/4982 5048/1/5048
+f 5015/1/5015 5012/1/5012 5014/1/5014
+f 4986/1/4986 5008/1/5008 5012/1/5012
+f 4986/1/4986 4985/1/4985 5007/1/5007
+f 4984/1/4984 4990/1/4990 4985/1/4985
+f 4984/1/4984 4989/1/4989 4990/1/4990
+f 4988/1/4988 4992/1/4992 4989/1/4989
+f 4993/1/4993 5053/1/5053 4988/1/4988
+f 4994/1/4994 5054/1/5054 4993/1/4993
+f 5055/1/5055 4994/1/4994 7010/1/7010
+f 7006/1/7006 7009/1/7009 7010/1/7010
+f 4972/1/4972 7008/1/7008 7006/1/7006
+f 7004/1/7004 7005/1/7005 4972/1/4972
+f 4978/1/4978 7002/1/7002 7004/1/7004
+f 5056/1/5056 5057/1/5057 4978/1/4978
+f 5125/1/5125 5056/1/5056 5127/1/5127
+f 5132/1/5132 5127/1/5127 5133/1/5133
+f 5136/1/5136 5137/1/5137 5133/1/5133
+f 5141/1/5141 5160/1/5160 5137/1/5137
+f 5143/1/5143 5441/1/5441 5141/1/5141
+f 5142/1/5142 5440/1/5440 5143/1/5143
+f 5142/1/5142 5140/1/5140 5144/1/5144
+f 5138/1/5138 5134/1/5134 5139/1/5139
+f 5134/1/5134 4977/1/4977 4976/1/4976
+f 4976/1/4976 4975/1/4975 4971/1/4971
+f 5140/1/5140 4979/1/4979 5144/1/5144
+f 5432/1/5432 5144/1/5144 5145/1/5145
+f 5145/1/5145 5431/1/5431 5433/1/5433
+f 5430/1/5430 5434/1/5434 5431/1/5431
+f 5436/1/5436 5434/1/5434 5430/1/5430
+f 5445/1/5445 5443/1/5443 5436/1/5436
+f 5425/1/5425 5445/1/5445 5428/1/5428
+f 5428/1/5428 5424/1/5424 5425/1/5425
+f 5429/1/5429 5146/1/5146 5427/1/5427
+f 5424/1/5424 5049/1/5049 5423/1/5423
+f 5051/1/5051 5050/1/5050 5146/1/5146
+f 5049/1/5049 4981/1/4981 4982/1/4982
+f 5051/1/5051 4973/1/4973 5050/1/5050
+f 4981/1/4981 4980/1/4980 4982/1/4982
+f 4970/1/4970 4983/1/4983 4980/1/4980
+f 4971/1/4971 4968/1/4968 4973/1/4973
+f 4970/1/4970 4969/1/4969 4987/1/4987
+f 4968/1/4968 4974/1/4974 4969/1/4969
+f 7421/1/7421 7422/1/7422 7423/1/7423
+f 7421/1/7421 7423/1/7423 7424/1/7424
+f 7421/1/7421 7424/1/7424 7444/1/7444
+f 7444/1/7444 7526/1/7526 7421/1/7421
+f 7421/1/7421 7526/1/7526 7525/1/7525
+f 7421/1/7421 7525/1/7525 7425/1/7425
+f 7425/1/7425 7525/1/7525 7524/1/7524
+f 7425/1/7425 7524/1/7524 7427/1/7427
+f 7427/1/7427 7426/1/7426 7425/1/7425
+f 7425/1/7425 7426/1/7426 7422/1/7422
+f 7503/1/7503 7422/1/7422 7426/1/7426
+f 7503/1/7503 7426/1/7426 7504/1/7504
+f 7508/1/7508 7503/1/7503 7504/1/7504
+f 7508/1/7508 7504/1/7504 7505/1/7505
+f 7505/1/7505 7506/1/7506 7508/1/7508
+f 7508/1/7508 7506/1/7506 7507/1/7507
+f 7508/1/7508 7507/1/7507 7490/1/7490
+f 7490/1/7490 7489/1/7489 7508/1/7508
+f 7508/1/7508 7489/1/7489 7487/1/7487
+f 7508/1/7508 7487/1/7487 7486/1/7486
+f 7486/1/7486 7484/1/7484 7508/1/7508
+f 7508/1/7508 7484/1/7484 7483/1/7483
+f 7508/1/7508 7483/1/7483 7482/1/7482
+f 7482/1/7482 7481/1/7481 7508/1/7508
+f 7508/1/7508 7481/1/7481 7480/1/7480
+f 7508/1/7508 7480/1/7480 7479/1/7479
+f 7479/1/7479 7478/1/7478 7508/1/7508
+f 7508/1/7508 7478/1/7478 7477/1/7477
+f 7508/1/7508 7477/1/7477 7476/1/7476
+f 7476/1/7476 7475/1/7475 7508/1/7508
+f 7508/1/7508 7475/1/7475 7473/1/7473
+f 7508/1/7508 7473/1/7473 7474/1/7474
+f 7474/1/7474 7491/1/7491 7508/1/7508
+f 7508/1/7508 7491/1/7491 7492/1/7492
+f 7508/1/7508 7492/1/7492 7493/1/7493
+f 7493/1/7493 7494/1/7494 7508/1/7508
+f 7508/1/7508 7494/1/7494 7495/1/7495
+f 7508/1/7508 7495/1/7495 7496/1/7496
+f 7496/1/7496 7497/1/7497 7508/1/7508
+f 7508/1/7508 7497/1/7497 7498/1/7498
+f 7508/1/7508 7498/1/7498 7499/1/7499
+f 7499/1/7499 7500/1/7500 7508/1/7508
+f 7508/1/7508 7500/1/7500 7501/1/7501
+f 7508/1/7508 7501/1/7501 7502/1/7502
+f 7501/1/7501 7423/1/7423 7502/1/7502
+f 7500/1/7500 7424/1/7424 7501/1/7501
+f 7500/1/7500 7445/1/7445 7424/1/7424
+f 7499/1/7499 7445/1/7445 7500/1/7500
+f 7499/1/7499 7446/1/7446 7445/1/7445
+f 7444/1/7444 7445/1/7445 7446/1/7446
+f 7444/1/7444 7446/1/7446 7447/1/7447
+f 7447/1/7447 7527/1/7527 7444/1/7444
+f 7447/1/7447 7530/1/7530 7527/1/7527
+f 7511/1/7511 7527/1/7527 7530/1/7530
+f 7511/1/7511 7530/1/7530 7528/1/7528
+f 7528/1/7528 7529/1/7529 7511/1/7511
+f 7511/1/7511 7529/1/7529 7512/1/7512
+f 7511/1/7511 7512/1/7512 7509/1/7509
+f 7509/1/7509 7510/1/7510 7511/1/7511
+f 7511/1/7511 7510/1/7510 7513/1/7513
+f 7511/1/7511 7513/1/7513 7514/1/7514
+f 7514/1/7514 7515/1/7515 7511/1/7511
+f 7511/1/7511 7515/1/7515 7516/1/7516
+f 7511/1/7511 7516/1/7516 7517/1/7517
+f 7517/1/7517 7518/1/7518 7511/1/7511
+f 7511/1/7511 7518/1/7518 7519/1/7519
+f 7511/1/7511 7519/1/7519 7520/1/7520
+f 7520/1/7520 7521/1/7521 7511/1/7511
+f 7511/1/7511 7521/1/7521 7522/1/7522
+f 7511/1/7511 7522/1/7522 7523/1/7523
+f 7523/1/7523 7524/1/7524 7511/1/7511
+f 7430/1/7430 7523/1/7523 7522/1/7522
+f 7430/1/7430 7522/1/7522 7432/1/7432
+f 7432/1/7432 7431/1/7431 7430/1/7430
+f 7430/1/7430 7431/1/7431 7429/1/7429
+f 7430/1/7430 7429/1/7429 7427/1/7427
+f 7429/1/7429 7428/1/7428 7427/1/7427
+f 7505/1/7505 7428/1/7428 7429/1/7429
+f 7506/1/7506 7429/1/7429 7431/1/7431
+f 7432/1/7432 7433/1/7433 7431/1/7431
+f 7507/1/7507 7431/1/7431 7433/1/7433
+f 7432/1/7432 7435/1/7435 7433/1/7433
+f 7490/1/7490 7433/1/7433 7435/1/7435
+f 7434/1/7434 7435/1/7435 7432/1/7432
+f 7432/1/7432 7521/1/7521 7434/1/7434
+f 7434/1/7434 7437/1/7437 7435/1/7435
+f 7489/1/7489 7435/1/7435 7437/1/7437
+f 7436/1/7436 7437/1/7437 7434/1/7434
+f 7434/1/7434 7520/1/7520 7436/1/7436
+f 7436/1/7436 7488/1/7488 7437/1/7437
+f 7487/1/7487 7437/1/7437 7488/1/7488
+f 7436/1/7436 7439/1/7439 7488/1/7488
+f 7486/1/7486 7488/1/7488 7439/1/7439
+f 7438/1/7438 7439/1/7439 7436/1/7436
+f 7436/1/7436 7519/1/7519 7438/1/7438
+f 7438/1/7438 7485/1/7485 7439/1/7439
+f 7484/1/7484 7439/1/7439 7485/1/7485
+f 7438/1/7438 7441/1/7441 7485/1/7485
+f 7483/1/7483 7485/1/7485 7441/1/7441
+f 7440/1/7440 7441/1/7441 7438/1/7438
+f 7438/1/7438 7518/1/7518 7440/1/7440
+f 7440/1/7440 7443/1/7443 7441/1/7441
+f 7482/1/7482 7441/1/7441 7443/1/7443
+f 7442/1/7442 7443/1/7443 7440/1/7440
+f 7440/1/7440 7517/1/7517 7442/1/7442
+f 7442/1/7442 7454/1/7454 7443/1/7443
+f 7481/1/7481 7443/1/7443 7454/1/7454
+f 7442/1/7442 7453/1/7453 7454/1/7454
+f 7480/1/7480 7454/1/7454 7453/1/7453
+f 7450/1/7450 7453/1/7453 7442/1/7442
+f 7442/1/7442 7516/1/7516 7450/1/7450
+f 7450/1/7450 7449/1/7449 7453/1/7453
+f 7479/1/7479 7453/1/7453 7449/1/7449
+f 7448/1/7448 7449/1/7449 7450/1/7450
+f 7450/1/7450 7515/1/7515 7448/1/7448
+f 7448/1/7448 7472/1/7472 7449/1/7449
+f 7478/1/7478 7449/1/7449 7472/1/7472
+f 7448/1/7448 7452/1/7452 7472/1/7472
+f 7477/1/7477 7472/1/7472 7452/1/7452
+f 7451/1/7451 7452/1/7452 7448/1/7448
+f 7448/1/7448 7514/1/7514 7451/1/7451
+f 7451/1/7451 7456/1/7456 7452/1/7452
+f 7476/1/7476 7452/1/7452 7456/1/7456
+f 7455/1/7455 7456/1/7456 7451/1/7451
+f 7451/1/7451 7513/1/7513 7455/1/7455
+f 7455/1/7455 7459/1/7459 7456/1/7456
+f 7475/1/7475 7456/1/7456 7459/1/7459
+f 7455/1/7455 7458/1/7458 7459/1/7459
+f 7473/1/7473 7459/1/7459 7458/1/7458
+f 7457/1/7457 7458/1/7458 7455/1/7455
+f 7455/1/7455 7510/1/7510 7457/1/7457
+f 7457/1/7457 7461/1/7461 7458/1/7458
+f 7474/1/7474 7458/1/7458 7461/1/7461
+f 7460/1/7460 7461/1/7461 7457/1/7457
+f 7462/1/7462 7460/1/7460 7457/1/7457
+f 7457/1/7457 7509/1/7509 7462/1/7462
+f 7462/1/7462 7463/1/7463 7460/1/7460
+f 7492/1/7492 7460/1/7460 7463/1/7463
+f 7464/1/7464 7463/1/7463 7462/1/7462
+f 7462/1/7462 7512/1/7512 7464/1/7464
+f 7464/1/7464 7465/1/7465 7463/1/7463
+f 7493/1/7493 7463/1/7463 7465/1/7465
+f 7466/1/7466 7465/1/7465 7464/1/7464
+f 7467/1/7467 7466/1/7466 7464/1/7464
+f 7464/1/7464 7529/1/7529 7467/1/7467
+f 7467/1/7467 7468/1/7468 7466/1/7466
+f 7495/1/7495 7466/1/7466 7468/1/7468
+f 7469/1/7469 7468/1/7468 7467/1/7467
+f 7467/1/7467 7528/1/7528 7469/1/7469
+f 7469/1/7469 7470/1/7470 7468/1/7468
+f 7496/1/7496 7468/1/7468 7470/1/7470
+f 7469/1/7469 7471/1/7471 7470/1/7470
+f 7497/1/7497 7470/1/7470 7471/1/7471
+f 7447/1/7447 7471/1/7471 7469/1/7469
+f 7494/1/7494 7465/1/7465 7466/1/7466
+f 7491/1/7491 7461/1/7461 7460/1/7460
+f 7427/1/7427 7523/1/7523 7430/1/7430
+f 7432/1/7432 7522/1/7522 7521/1/7521
+f 7434/1/7434 7521/1/7521 7520/1/7520
+f 7436/1/7436 7520/1/7520 7519/1/7519
+f 7438/1/7438 7519/1/7519 7518/1/7518
+f 7440/1/7440 7518/1/7518 7517/1/7517
+f 7442/1/7442 7517/1/7517 7516/1/7516
+f 7450/1/7450 7516/1/7516 7515/1/7515
+f 7448/1/7448 7515/1/7515 7514/1/7514
+f 7451/1/7451 7514/1/7514 7513/1/7513
+f 7455/1/7455 7513/1/7513 7510/1/7510
+f 7457/1/7457 7510/1/7510 7509/1/7509
+f 7462/1/7462 7509/1/7509 7512/1/7512
+f 7464/1/7464 7512/1/7512 7529/1/7529
+f 7467/1/7467 7529/1/7529 7528/1/7528
+f 7469/1/7469 7528/1/7528 7530/1/7530
+f 7526/1/7526 7527/1/7527 7511/1/7511
+f 7469/1/7469 7530/1/7530 7447/1/7447
+f 7447/1/7447 7446/1/7446 7471/1/7471
+f 7498/1/7498 7471/1/7471 7446/1/7446
+f 7498/1/7498 7446/1/7446 7499/1/7499
+f 7497/1/7497 7471/1/7471 7498/1/7498
+f 7496/1/7496 7470/1/7470 7497/1/7497
+f 7495/1/7495 7468/1/7468 7496/1/7496
+f 7494/1/7494 7466/1/7466 7495/1/7495
+f 7493/1/7493 7465/1/7465 7494/1/7494
+f 7492/1/7492 7463/1/7463 7493/1/7493
+f 7491/1/7491 7460/1/7460 7492/1/7492
+f 7474/1/7474 7461/1/7461 7491/1/7491
+f 7473/1/7473 7458/1/7458 7474/1/7474
+f 7475/1/7475 7459/1/7459 7473/1/7473
+f 7476/1/7476 7456/1/7456 7475/1/7475
+f 7477/1/7477 7452/1/7452 7476/1/7476
+f 7478/1/7478 7472/1/7472 7477/1/7477
+f 7479/1/7479 7449/1/7449 7478/1/7478
+f 7480/1/7480 7453/1/7453 7479/1/7479
+f 7481/1/7481 7454/1/7454 7480/1/7480
+f 7482/1/7482 7443/1/7443 7481/1/7481
+f 7483/1/7483 7441/1/7441 7482/1/7482
+f 7484/1/7484 7485/1/7485 7483/1/7483
+f 7486/1/7486 7439/1/7439 7484/1/7484
+f 7487/1/7487 7488/1/7488 7486/1/7486
+f 7489/1/7489 7437/1/7437 7487/1/7487
+f 7490/1/7490 7435/1/7435 7489/1/7489
+f 7507/1/7507 7433/1/7433 7490/1/7490
+f 7506/1/7506 7431/1/7431 7507/1/7507
+f 7505/1/7505 7429/1/7429 7506/1/7506
+f 7504/1/7504 7428/1/7428 7505/1/7505
+f 7502/1/7502 7503/1/7503 7508/1/7508
+f 7504/1/7504 7426/1/7426 7428/1/7428
+f 7502/1/7502 7422/1/7422 7503/1/7503
+f 7427/1/7427 7428/1/7428 7426/1/7426
+f 7427/1/7427 7524/1/7524 7523/1/7523
+f 7511/1/7511 7524/1/7524 7525/1/7525
+f 7511/1/7511 7525/1/7525 7526/1/7526
+f 7444/1/7444 7527/1/7527 7526/1/7526
+f 7444/1/7444 7424/1/7424 7445/1/7445
+f 7501/1/7501 7424/1/7424 7423/1/7423
+f 7502/1/7502 7423/1/7423 7422/1/7422
+f 7425/1/7425 7422/1/7422 7421/1/7421
+f 7531/1/7531 7532/1/7532 7533/1/7533
+f 7531/1/7531 7533/1/7533 7534/1/7534
+f 7531/1/7531 7534/1/7534 7535/1/7535
+f 7535/1/7535 7636/1/7636 7531/1/7531
+f 7531/1/7531 7636/1/7636 7635/1/7635
+f 7531/1/7531 7635/1/7635 7536/1/7536
+f 7536/1/7536 7635/1/7635 7634/1/7634
+f 7536/1/7536 7634/1/7634 7538/1/7538
+f 7538/1/7538 7537/1/7537 7536/1/7536
+f 7536/1/7536 7537/1/7537 7532/1/7532
+f 7612/1/7612 7532/1/7532 7537/1/7537
+f 7612/1/7612 7537/1/7537 7613/1/7613
+f 7618/1/7618 7612/1/7612 7613/1/7613
+f 7618/1/7618 7613/1/7613 7614/1/7614
+f 7614/1/7614 7615/1/7615 7618/1/7618
+f 7618/1/7618 7615/1/7615 7616/1/7616
+f 7618/1/7618 7616/1/7616 7617/1/7617
+f 7617/1/7617 7601/1/7601 7618/1/7618
+f 7618/1/7618 7601/1/7601 7600/1/7600
+f 7618/1/7618 7600/1/7600 7599/1/7599
+f 7599/1/7599 7598/1/7598 7618/1/7618
+f 7618/1/7618 7598/1/7598 7597/1/7597
+f 7618/1/7618 7597/1/7597 7596/1/7596
+f 7596/1/7596 7595/1/7595 7618/1/7618
+f 7618/1/7618 7595/1/7595 7594/1/7594
+f 7618/1/7618 7594/1/7594 7593/1/7593
+f 7593/1/7593 7592/1/7592 7618/1/7618
+f 7618/1/7618 7592/1/7592 7591/1/7591
+f 7618/1/7618 7591/1/7591 7590/1/7590
+f 7590/1/7590 7587/1/7587 7618/1/7618
+f 7618/1/7618 7587/1/7587 7585/1/7585
+f 7618/1/7618 7585/1/7585 7586/1/7586
+f 7586/1/7586 7588/1/7588 7618/1/7618
+f 7618/1/7618 7588/1/7588 7589/1/7589
+f 7618/1/7618 7589/1/7589 7602/1/7602
+f 7602/1/7602 7603/1/7603 7618/1/7618
+f 7618/1/7618 7603/1/7603 7604/1/7604
+f 7618/1/7618 7604/1/7604 7605/1/7605
+f 7605/1/7605 7606/1/7606 7618/1/7618
+f 7618/1/7618 7606/1/7606 7607/1/7607
+f 7618/1/7618 7607/1/7607 7608/1/7608
+f 7608/1/7608 7609/1/7609 7618/1/7618
+f 7618/1/7618 7609/1/7609 7610/1/7610
+f 7618/1/7618 7610/1/7610 7611/1/7611
+f 7610/1/7610 7533/1/7533 7611/1/7611
+f 7609/1/7609 7534/1/7534 7610/1/7610
+f 7609/1/7609 7584/1/7584 7534/1/7534
+f 7608/1/7608 7584/1/7584 7609/1/7609
+f 7608/1/7608 7583/1/7583 7584/1/7584
+f 7535/1/7535 7584/1/7584 7583/1/7583
+f 7535/1/7535 7583/1/7583 7580/1/7580
+f 7580/1/7580 7637/1/7637 7535/1/7535
+f 7580/1/7580 7640/1/7640 7637/1/7637
+f 7621/1/7621 7637/1/7637 7640/1/7640
+f 7621/1/7621 7640/1/7640 7638/1/7638
+f 7638/1/7638 7639/1/7639 7621/1/7621
+f 7621/1/7621 7639/1/7639 7622/1/7622
+f 7621/1/7621 7622/1/7622 7619/1/7619
+f 7619/1/7619 7620/1/7620 7621/1/7621
+f 7621/1/7621 7620/1/7620 7623/1/7623
+f 7621/1/7621 7623/1/7623 7624/1/7624
+f 7624/1/7624 7625/1/7625 7621/1/7621
+f 7621/1/7621 7625/1/7625 7626/1/7626
+f 7621/1/7621 7626/1/7626 7627/1/7627
+f 7627/1/7627 7628/1/7628 7621/1/7621
+f 7621/1/7621 7628/1/7628 7629/1/7629
+f 7621/1/7621 7629/1/7629 7630/1/7630
+f 7630/1/7630 7631/1/7631 7621/1/7621
+f 7621/1/7621 7631/1/7631 7632/1/7632
+f 7621/1/7621 7632/1/7632 7633/1/7633
+f 7633/1/7633 7634/1/7634 7621/1/7621
+f 7540/1/7540 7633/1/7633 7632/1/7632
+f 7540/1/7540 7632/1/7632 7542/1/7542
+f 7542/1/7542 7543/1/7543 7540/1/7540
+f 7540/1/7540 7543/1/7543 7541/1/7541
+f 7540/1/7540 7541/1/7541 7538/1/7538
+f 7541/1/7541 7539/1/7539 7538/1/7538
+f 7614/1/7614 7539/1/7539 7541/1/7541
+f 7615/1/7615 7541/1/7541 7543/1/7543
+f 7542/1/7542 7546/1/7546 7543/1/7543
+f 7616/1/7616 7543/1/7543 7546/1/7546
+f 7542/1/7542 7545/1/7545 7546/1/7546
+f 7617/1/7617 7546/1/7546 7545/1/7545
+f 7544/1/7544 7545/1/7545 7542/1/7542
+f 7542/1/7542 7631/1/7631 7544/1/7544
+f 7544/1/7544 7548/1/7548 7545/1/7545
+f 7601/1/7601 7545/1/7545 7548/1/7548
+f 7547/1/7547 7548/1/7548 7544/1/7544
+f 7544/1/7544 7630/1/7630 7547/1/7547
+f 7547/1/7547 7551/1/7551 7548/1/7548
+f 7600/1/7600 7548/1/7548 7551/1/7551
+f 7547/1/7547 7550/1/7550 7551/1/7551
+f 7599/1/7599 7551/1/7551 7550/1/7550
+f 7549/1/7549 7550/1/7550 7547/1/7547
+f 7547/1/7547 7629/1/7629 7549/1/7549
+f 7549/1/7549 7554/1/7554 7550/1/7550
+f 7598/1/7598 7550/1/7550 7554/1/7554
+f 7549/1/7549 7553/1/7553 7554/1/7554
+f 7597/1/7597 7554/1/7554 7553/1/7553
+f 7552/1/7552 7553/1/7553 7549/1/7549
+f 7549/1/7549 7628/1/7628 7552/1/7552
+f 7552/1/7552 7556/1/7556 7553/1/7553
+f 7596/1/7596 7553/1/7553 7556/1/7556
+f 7555/1/7555 7556/1/7556 7552/1/7552
+f 7552/1/7552 7627/1/7627 7555/1/7555
+f 7555/1/7555 7559/1/7559 7556/1/7556
+f 7595/1/7595 7556/1/7556 7559/1/7559
+f 7555/1/7555 7558/1/7558 7559/1/7559
+f 7594/1/7594 7559/1/7559 7558/1/7558
+f 7557/1/7557 7558/1/7558 7555/1/7555
+f 7555/1/7555 7626/1/7626 7557/1/7557
+f 7557/1/7557 7561/1/7561 7558/1/7558
+f 7593/1/7593 7558/1/7558 7561/1/7561
+f 7560/1/7560 7561/1/7561 7557/1/7557
+f 7557/1/7557 7625/1/7625 7560/1/7560
+f 7560/1/7560 7564/1/7564 7561/1/7561
+f 7592/1/7592 7561/1/7561 7564/1/7564
+f 7560/1/7560 7563/1/7563 7564/1/7564
+f 7591/1/7591 7564/1/7564 7563/1/7563
+f 7562/1/7562 7563/1/7563 7560/1/7560
+f 7560/1/7560 7624/1/7624 7562/1/7562
+f 7562/1/7562 7566/1/7566 7563/1/7563
+f 7590/1/7590 7563/1/7563 7566/1/7566
+f 7565/1/7565 7566/1/7566 7562/1/7562
+f 7562/1/7562 7623/1/7623 7565/1/7565
+f 7565/1/7565 7569/1/7569 7566/1/7566
+f 7587/1/7587 7566/1/7566 7569/1/7569
+f 7565/1/7565 7568/1/7568 7569/1/7569
+f 7585/1/7585 7569/1/7569 7568/1/7568
+f 7567/1/7567 7568/1/7568 7565/1/7565
+f 7565/1/7565 7620/1/7620 7567/1/7567
+f 7567/1/7567 7571/1/7571 7568/1/7568
+f 7586/1/7586 7568/1/7568 7571/1/7571
+f 7570/1/7570 7571/1/7571 7567/1/7567
+f 7572/1/7572 7570/1/7570 7567/1/7567
+f 7567/1/7567 7619/1/7619 7572/1/7572
+f 7572/1/7572 7573/1/7573 7570/1/7570
+f 7589/1/7589 7570/1/7570 7573/1/7573
+f 7574/1/7574 7573/1/7573 7572/1/7572
+f 7572/1/7572 7622/1/7622 7574/1/7574
+f 7574/1/7574 7575/1/7575 7573/1/7573
+f 7602/1/7602 7573/1/7573 7575/1/7575
+f 7577/1/7577 7575/1/7575 7574/1/7574
+f 7576/1/7576 7577/1/7577 7574/1/7574
+f 7574/1/7574 7639/1/7639 7576/1/7576
+f 7576/1/7576 7579/1/7579 7577/1/7577
+f 7604/1/7604 7577/1/7577 7579/1/7579
+f 7578/1/7578 7579/1/7579 7576/1/7576
+f 7576/1/7576 7638/1/7638 7578/1/7578
+f 7578/1/7578 7582/1/7582 7579/1/7579
+f 7605/1/7605 7579/1/7579 7582/1/7582
+f 7578/1/7578 7581/1/7581 7582/1/7582
+f 7606/1/7606 7582/1/7582 7581/1/7581
+f 7580/1/7580 7581/1/7581 7578/1/7578
+f 7603/1/7603 7575/1/7575 7577/1/7577
+f 7588/1/7588 7571/1/7571 7570/1/7570
+f 7538/1/7538 7633/1/7633 7540/1/7540
+f 7542/1/7542 7632/1/7632 7631/1/7631
+f 7544/1/7544 7631/1/7631 7630/1/7630
+f 7547/1/7547 7630/1/7630 7629/1/7629
+f 7549/1/7549 7629/1/7629 7628/1/7628
+f 7552/1/7552 7628/1/7628 7627/1/7627
+f 7555/1/7555 7627/1/7627 7626/1/7626
+f 7557/1/7557 7626/1/7626 7625/1/7625
+f 7560/1/7560 7625/1/7625 7624/1/7624
+f 7562/1/7562 7624/1/7624 7623/1/7623
+f 7565/1/7565 7623/1/7623 7620/1/7620
+f 7567/1/7567 7620/1/7620 7619/1/7619
+f 7572/1/7572 7619/1/7619 7622/1/7622
+f 7574/1/7574 7622/1/7622 7639/1/7639
+f 7576/1/7576 7639/1/7639 7638/1/7638
+f 7578/1/7578 7638/1/7638 7640/1/7640
+f 7636/1/7636 7637/1/7637 7621/1/7621
+f 7578/1/7578 7640/1/7640 7580/1/7580
+f 7580/1/7580 7583/1/7583 7581/1/7581
+f 7607/1/7607 7581/1/7581 7583/1/7583
+f 7607/1/7607 7583/1/7583 7608/1/7608
+f 7606/1/7606 7581/1/7581 7607/1/7607
+f 7605/1/7605 7582/1/7582 7606/1/7606
+f 7604/1/7604 7579/1/7579 7605/1/7605
+f 7603/1/7603 7577/1/7577 7604/1/7604
+f 7602/1/7602 7575/1/7575 7603/1/7603
+f 7589/1/7589 7573/1/7573 7602/1/7602
+f 7588/1/7588 7570/1/7570 7589/1/7589
+f 7586/1/7586 7571/1/7571 7588/1/7588
+f 7585/1/7585 7568/1/7568 7586/1/7586
+f 7587/1/7587 7569/1/7569 7585/1/7585
+f 7590/1/7590 7566/1/7566 7587/1/7587
+f 7591/1/7591 7563/1/7563 7590/1/7590
+f 7592/1/7592 7564/1/7564 7591/1/7591
+f 7593/1/7593 7561/1/7561 7592/1/7592
+f 7594/1/7594 7558/1/7558 7593/1/7593
+f 7595/1/7595 7559/1/7559 7594/1/7594
+f 7596/1/7596 7556/1/7556 7595/1/7595
+f 7597/1/7597 7553/1/7553 7596/1/7596
+f 7598/1/7598 7554/1/7554 7597/1/7597
+f 7599/1/7599 7550/1/7550 7598/1/7598
+f 7600/1/7600 7551/1/7551 7599/1/7599
+f 7601/1/7601 7548/1/7548 7600/1/7600
+f 7617/1/7617 7545/1/7545 7601/1/7601
+f 7616/1/7616 7546/1/7546 7617/1/7617
+f 7615/1/7615 7543/1/7543 7616/1/7616
+f 7614/1/7614 7541/1/7541 7615/1/7615
+f 7613/1/7613 7539/1/7539 7614/1/7614
+f 7611/1/7611 7612/1/7612 7618/1/7618
+f 7613/1/7613 7537/1/7537 7539/1/7539
+f 7611/1/7611 7532/1/7532 7612/1/7612
+f 7538/1/7538 7539/1/7539 7537/1/7537
+f 7538/1/7538 7634/1/7634 7633/1/7633
+f 7621/1/7621 7634/1/7634 7635/1/7635
+f 7621/1/7621 7635/1/7635 7636/1/7636
+f 7535/1/7535 7637/1/7637 7636/1/7636
+f 7535/1/7535 7534/1/7534 7584/1/7584
+f 7610/1/7610 7534/1/7534 7533/1/7533
+f 7611/1/7611 7533/1/7533 7532/1/7532
+f 7536/1/7536 7532/1/7532 7531/1/7531
+f 7641/1/7641 7642/1/7642 7643/1/7643
+f 7641/1/7641 7643/1/7643 7644/1/7644
+f 7641/1/7641 7644/1/7644 7645/1/7645
+f 7645/1/7645 7746/1/7746 7641/1/7641
+f 7641/1/7641 7746/1/7746 7745/1/7745
+f 7641/1/7641 7745/1/7745 7646/1/7646
+f 7646/1/7646 7745/1/7745 7744/1/7744
+f 7646/1/7646 7744/1/7744 7648/1/7648
+f 7648/1/7648 7647/1/7647 7646/1/7646
+f 7646/1/7646 7647/1/7647 7642/1/7642
+f 7709/1/7709 7642/1/7642 7647/1/7647
+f 7709/1/7709 7647/1/7647 7710/1/7710
+f 7728/1/7728 7709/1/7709 7710/1/7710
+f 7728/1/7728 7710/1/7710 7711/1/7711
+f 7711/1/7711 7712/1/7712 7728/1/7728
+f 7728/1/7728 7712/1/7712 7713/1/7713
+f 7728/1/7728 7713/1/7713 7714/1/7714
+f 7714/1/7714 7715/1/7715 7728/1/7728
+f 7728/1/7728 7715/1/7715 7716/1/7716
+f 7728/1/7728 7716/1/7716 7717/1/7717
+f 7717/1/7717 7718/1/7718 7728/1/7728
+f 7728/1/7728 7718/1/7718 7719/1/7719
+f 7728/1/7728 7719/1/7719 7720/1/7720
+f 7720/1/7720 7721/1/7721 7728/1/7728
+f 7728/1/7728 7721/1/7721 7722/1/7722
+f 7728/1/7728 7722/1/7722 7723/1/7723
+f 7723/1/7723 7724/1/7724 7728/1/7728
+f 7728/1/7728 7724/1/7724 7725/1/7725
+f 7728/1/7728 7725/1/7725 7726/1/7726
+f 7726/1/7726 7727/1/7727 7728/1/7728
+f 7728/1/7728 7727/1/7727 7695/1/7695
+f 7728/1/7728 7695/1/7695 7696/1/7696
+f 7696/1/7696 7697/1/7697 7728/1/7728
+f 7728/1/7728 7697/1/7697 7698/1/7698
+f 7728/1/7728 7698/1/7698 7699/1/7699
+f 7699/1/7699 7700/1/7700 7728/1/7728
+f 7728/1/7728 7700/1/7700 7701/1/7701
+f 7728/1/7728 7701/1/7701 7702/1/7702
+f 7702/1/7702 7703/1/7703 7728/1/7728
+f 7728/1/7728 7703/1/7703 7704/1/7704
+f 7728/1/7728 7704/1/7704 7705/1/7705
+f 7705/1/7705 7706/1/7706 7728/1/7728
+f 7728/1/7728 7706/1/7706 7707/1/7707
+f 7728/1/7728 7707/1/7707 7708/1/7708
+f 7707/1/7707 7643/1/7643 7708/1/7708
+f 7706/1/7706 7644/1/7644 7707/1/7707
+f 7706/1/7706 7694/1/7694 7644/1/7644
+f 7705/1/7705 7694/1/7694 7706/1/7706
+f 7705/1/7705 7693/1/7693 7694/1/7694
+f 7645/1/7645 7694/1/7694 7693/1/7693
+f 7645/1/7645 7693/1/7693 7690/1/7690
+f 7690/1/7690 7747/1/7747 7645/1/7645
+f 7690/1/7690 7750/1/7750 7747/1/7747
+f 7731/1/7731 7747/1/7747 7750/1/7750
+f 7731/1/7731 7750/1/7750 7748/1/7748
+f 7748/1/7748 7749/1/7749 7731/1/7731
+f 7731/1/7731 7749/1/7749 7732/1/7732
+f 7731/1/7731 7732/1/7732 7729/1/7729
+f 7729/1/7729 7730/1/7730 7731/1/7731
+f 7731/1/7731 7730/1/7730 7733/1/7733
+f 7731/1/7731 7733/1/7733 7734/1/7734
+f 7734/1/7734 7735/1/7735 7731/1/7731
+f 7731/1/7731 7735/1/7735 7736/1/7736
+f 7731/1/7731 7736/1/7736 7737/1/7737
+f 7737/1/7737 7738/1/7738 7731/1/7731
+f 7731/1/7731 7738/1/7738 7739/1/7739
+f 7731/1/7731 7739/1/7739 7740/1/7740
+f 7740/1/7740 7741/1/7741 7731/1/7731
+f 7731/1/7731 7741/1/7741 7742/1/7742
+f 7731/1/7731 7742/1/7742 7743/1/7743
+f 7743/1/7743 7744/1/7744 7731/1/7731
+f 7650/1/7650 7743/1/7743 7742/1/7742
+f 7650/1/7650 7742/1/7742 7652/1/7652
+f 7652/1/7652 7653/1/7653 7650/1/7650
+f 7650/1/7650 7653/1/7653 7651/1/7651
+f 7650/1/7650 7651/1/7651 7648/1/7648
+f 7651/1/7651 7649/1/7649 7648/1/7648
+f 7711/1/7711 7649/1/7649 7651/1/7651
+f 7712/1/7712 7651/1/7651 7653/1/7653
+f 7652/1/7652 7656/1/7656 7653/1/7653
+f 7713/1/7713 7653/1/7653 7656/1/7656
+f 7652/1/7652 7655/1/7655 7656/1/7656
+f 7714/1/7714 7656/1/7656 7655/1/7655
+f 7654/1/7654 7655/1/7655 7652/1/7652
+f 7652/1/7652 7741/1/7741 7654/1/7654
+f 7654/1/7654 7658/1/7658 7655/1/7655
+f 7715/1/7715 7655/1/7655 7658/1/7658
+f 7657/1/7657 7658/1/7658 7654/1/7654
+f 7654/1/7654 7740/1/7740 7657/1/7657
+f 7657/1/7657 7661/1/7661 7658/1/7658
+f 7716/1/7716 7658/1/7658 7661/1/7661
+f 7657/1/7657 7660/1/7660 7661/1/7661
+f 7717/1/7717 7661/1/7661 7660/1/7660
+f 7659/1/7659 7660/1/7660 7657/1/7657
+f 7657/1/7657 7739/1/7739 7659/1/7659
+f 7659/1/7659 7664/1/7664 7660/1/7660
+f 7718/1/7718 7660/1/7660 7664/1/7664
+f 7659/1/7659 7663/1/7663 7664/1/7664
+f 7719/1/7719 7664/1/7664 7663/1/7663
+f 7662/1/7662 7663/1/7663 7659/1/7659
+f 7659/1/7659 7738/1/7738 7662/1/7662
+f 7662/1/7662 7666/1/7666 7663/1/7663
+f 7720/1/7720 7663/1/7663 7666/1/7666
+f 7665/1/7665 7666/1/7666 7662/1/7662
+f 7662/1/7662 7737/1/7737 7665/1/7665
+f 7665/1/7665 7669/1/7669 7666/1/7666
+f 7721/1/7721 7666/1/7666 7669/1/7669
+f 7665/1/7665 7668/1/7668 7669/1/7669
+f 7722/1/7722 7669/1/7669 7668/1/7668
+f 7667/1/7667 7668/1/7668 7665/1/7665
+f 7665/1/7665 7736/1/7736 7667/1/7667
+f 7667/1/7667 7671/1/7671 7668/1/7668
+f 7723/1/7723 7668/1/7668 7671/1/7671
+f 7670/1/7670 7671/1/7671 7667/1/7667
+f 7667/1/7667 7735/1/7735 7670/1/7670
+f 7670/1/7670 7674/1/7674 7671/1/7671
+f 7724/1/7724 7671/1/7671 7674/1/7674
+f 7670/1/7670 7673/1/7673 7674/1/7674
+f 7725/1/7725 7674/1/7674 7673/1/7673
+f 7672/1/7672 7673/1/7673 7670/1/7670
+f 7670/1/7670 7734/1/7734 7672/1/7672
+f 7672/1/7672 7676/1/7676 7673/1/7673
+f 7726/1/7726 7673/1/7673 7676/1/7676
+f 7675/1/7675 7676/1/7676 7672/1/7672
+f 7672/1/7672 7733/1/7733 7675/1/7675
+f 7675/1/7675 7679/1/7679 7676/1/7676
+f 7727/1/7727 7676/1/7676 7679/1/7679
+f 7675/1/7675 7678/1/7678 7679/1/7679
+f 7695/1/7695 7679/1/7679 7678/1/7678
+f 7677/1/7677 7678/1/7678 7675/1/7675
+f 7675/1/7675 7730/1/7730 7677/1/7677
+f 7677/1/7677 7681/1/7681 7678/1/7678
+f 7696/1/7696 7678/1/7678 7681/1/7681
+f 7680/1/7680 7681/1/7681 7677/1/7677
+f 7682/1/7682 7680/1/7680 7677/1/7677
+f 7677/1/7677 7729/1/7729 7682/1/7682
+f 7682/1/7682 7683/1/7683 7680/1/7680
+f 7698/1/7698 7680/1/7680 7683/1/7683
+f 7684/1/7684 7683/1/7683 7682/1/7682
+f 7682/1/7682 7732/1/7732 7684/1/7684
+f 7684/1/7684 7685/1/7685 7683/1/7683
+f 7699/1/7699 7683/1/7683 7685/1/7685
+f 7687/1/7687 7685/1/7685 7684/1/7684
+f 7686/1/7686 7687/1/7687 7684/1/7684
+f 7684/1/7684 7749/1/7749 7686/1/7686
+f 7686/1/7686 7689/1/7689 7687/1/7687
+f 7701/1/7701 7687/1/7687 7689/1/7689
+f 7688/1/7688 7689/1/7689 7686/1/7686
+f 7686/1/7686 7748/1/7748 7688/1/7688
+f 7688/1/7688 7692/1/7692 7689/1/7689
+f 7702/1/7702 7689/1/7689 7692/1/7692
+f 7688/1/7688 7691/1/7691 7692/1/7692
+f 7703/1/7703 7692/1/7692 7691/1/7691
+f 7690/1/7690 7691/1/7691 7688/1/7688
+f 7700/1/7700 7685/1/7685 7687/1/7687
+f 7697/1/7697 7681/1/7681 7680/1/7680
+f 7648/1/7648 7743/1/7743 7650/1/7650
+f 7652/1/7652 7742/1/7742 7741/1/7741
+f 7654/1/7654 7741/1/7741 7740/1/7740
+f 7657/1/7657 7740/1/7740 7739/1/7739
+f 7659/1/7659 7739/1/7739 7738/1/7738
+f 7662/1/7662 7738/1/7738 7737/1/7737
+f 7665/1/7665 7737/1/7737 7736/1/7736
+f 7667/1/7667 7736/1/7736 7735/1/7735
+f 7670/1/7670 7735/1/7735 7734/1/7734
+f 7672/1/7672 7734/1/7734 7733/1/7733
+f 7675/1/7675 7733/1/7733 7730/1/7730
+f 7677/1/7677 7730/1/7730 7729/1/7729
+f 7682/1/7682 7729/1/7729 7732/1/7732
+f 7684/1/7684 7732/1/7732 7749/1/7749
+f 7686/1/7686 7749/1/7749 7748/1/7748
+f 7688/1/7688 7748/1/7748 7750/1/7750
+f 7746/1/7746 7747/1/7747 7731/1/7731
+f 7688/1/7688 7750/1/7750 7690/1/7690
+f 7690/1/7690 7693/1/7693 7691/1/7691
+f 7704/1/7704 7691/1/7691 7693/1/7693
+f 7704/1/7704 7693/1/7693 7705/1/7705
+f 7703/1/7703 7691/1/7691 7704/1/7704
+f 7702/1/7702 7692/1/7692 7703/1/7703
+f 7701/1/7701 7689/1/7689 7702/1/7702
+f 7700/1/7700 7687/1/7687 7701/1/7701
+f 7699/1/7699 7685/1/7685 7700/1/7700
+f 7698/1/7698 7683/1/7683 7699/1/7699
+f 7697/1/7697 7680/1/7680 7698/1/7698
+f 7696/1/7696 7681/1/7681 7697/1/7697
+f 7695/1/7695 7678/1/7678 7696/1/7696
+f 7727/1/7727 7679/1/7679 7695/1/7695
+f 7726/1/7726 7676/1/7676 7727/1/7727
+f 7725/1/7725 7673/1/7673 7726/1/7726
+f 7724/1/7724 7674/1/7674 7725/1/7725
+f 7723/1/7723 7671/1/7671 7724/1/7724
+f 7722/1/7722 7668/1/7668 7723/1/7723
+f 7721/1/7721 7669/1/7669 7722/1/7722
+f 7720/1/7720 7666/1/7666 7721/1/7721
+f 7719/1/7719 7663/1/7663 7720/1/7720
+f 7718/1/7718 7664/1/7664 7719/1/7719
+f 7717/1/7717 7660/1/7660 7718/1/7718
+f 7716/1/7716 7661/1/7661 7717/1/7717
+f 7715/1/7715 7658/1/7658 7716/1/7716
+f 7714/1/7714 7655/1/7655 7715/1/7715
+f 7713/1/7713 7656/1/7656 7714/1/7714
+f 7712/1/7712 7653/1/7653 7713/1/7713
+f 7711/1/7711 7651/1/7651 7712/1/7712
+f 7710/1/7710 7649/1/7649 7711/1/7711
+f 7708/1/7708 7709/1/7709 7728/1/7728
+f 7710/1/7710 7647/1/7647 7649/1/7649
+f 7708/1/7708 7642/1/7642 7709/1/7709
+f 7648/1/7648 7649/1/7649 7647/1/7647
+f 7648/1/7648 7744/1/7744 7743/1/7743
+f 7731/1/7731 7744/1/7744 7745/1/7745
+f 7731/1/7731 7745/1/7745 7746/1/7746
+f 7645/1/7645 7747/1/7747 7746/1/7746
+f 7645/1/7645 7644/1/7644 7694/1/7694
+f 7707/1/7707 7644/1/7644 7643/1/7643
+f 7708/1/7708 7643/1/7643 7642/1/7642
+f 7646/1/7646 7642/1/7642 7641/1/7641
+f 7751/1/7751 7752/1/7752 7753/1/7753
+f 7751/1/7751 7753/1/7753 7754/1/7754
+f 7755/1/7755 7751/1/7751 7754/1/7754
+f 7755/1/7755 7754/1/7754 7759/1/7759
+f 7760/1/7760 7755/1/7755 7759/1/7759
+f 7760/1/7760 7759/1/7759 7761/1/7761
+f 7765/1/7765 7760/1/7760 7761/1/7761
+f 7765/1/7765 7761/1/7761 7766/1/7766
+f 7769/1/7769 7765/1/7765 7766/1/7766
+f 7770/1/7770 7769/1/7769 7766/1/7766
+f 7770/1/7770 7766/1/7766 7768/1/7768
+f 7802/1/7802 7770/1/7770 7768/1/7768
+f 7802/1/7802 7768/1/7768 7803/1/7803
+f 7803/1/7803 7804/1/7804 7802/1/7802
+f 7802/1/7802 7804/1/7804 7805/1/7805
+f 7802/1/7802 7805/1/7805 7800/1/7800
+f 7800/1/7800 7799/1/7799 7802/1/7802
+f 7800/1/7800 7801/1/7801 7799/1/7799
+f 7801/1/7801 7798/1/7798 7799/1/7799
+f 7799/1/7799 7798/1/7798 7769/1/7769
+f 7796/1/7796 7769/1/7769 7798/1/7798
+f 7797/1/7797 7796/1/7796 7798/1/7798
+f 7797/1/7797 7798/1/7798 7909/1/7909
+f 7905/1/7905 7797/1/7797 7909/1/7909
+f 7905/1/7905 7909/1/7909 7907/1/7907
+f 7907/1/7907 7908/1/7908 7905/1/7905
+f 7908/1/7908 7906/1/7906 7905/1/7905
+f 7905/1/7905 7906/1/7906 7904/1/7904
+f 7905/1/7905 7904/1/7904 7790/1/7790
+f 7790/1/7790 7904/1/7904 7791/1/7791
+f 7790/1/7790 7791/1/7791 7786/1/7786
+f 7786/1/7786 7789/1/7789 7790/1/7790
+f 7789/1/7789 7795/1/7795 7790/1/7790
+f 7790/1/7790 7795/1/7795 7797/1/7797
+f 7789/1/7789 7794/1/7794 7795/1/7795
+f 7795/1/7795 7794/1/7794 7796/1/7796
+f 7794/1/7794 7774/1/7774 7796/1/7796
+f 7794/1/7794 7793/1/7793 7774/1/7774
+f 7774/1/7774 7793/1/7793 7792/1/7792
+f 7774/1/7774 7792/1/7792 7775/1/7775
+f 7775/1/7775 7772/1/7772 7774/1/7774
+f 7774/1/7774 7772/1/7772 7771/1/7771
+f 7774/1/7774 7771/1/7771 7769/1/7769
+f 7772/1/7772 7773/1/7773 7771/1/7771
+f 7771/1/7771 7773/1/7773 7760/1/7760
+f 7772/1/7772 7776/1/7776 7773/1/7773
+f 7776/1/7776 7777/1/7777 7773/1/7773
+f 7773/1/7773 7777/1/7777 7755/1/7755
+f 7777/1/7777 7756/1/7756 7755/1/7755
+f 7777/1/7777 7779/1/7779 7756/1/7756
+f 7756/1/7756 7779/1/7779 7752/1/7752
+f 7779/1/7779 7782/1/7782 7752/1/7752
+f 7752/1/7752 7782/1/7782 7758/1/7758
+f 7782/1/7782 7902/1/7902 7758/1/7758
+f 7758/1/7758 7902/1/7902 7914/1/7914
+f 7758/1/7758 7914/1/7914 7952/1/7952
+f 7952/1/7952 7953/1/7953 7758/1/7758
+f 7758/1/7758 7953/1/7953 7757/1/7757
+f 7753/1/7753 7758/1/7758 7757/1/7757
+f 7954/1/7954 7757/1/7757 7953/1/7953
+f 7954/1/7954 7953/1/7953 7958/1/7958
+f 7759/1/7759 7954/1/7954 7958/1/7958
+f 7764/1/7764 7759/1/7759 7958/1/7958
+f 7958/1/7958 7960/1/7960 7764/1/7764
+f 7764/1/7764 7960/1/7960 7956/1/7956
+f 7764/1/7764 7956/1/7956 7763/1/7763
+f 7956/1/7956 7957/1/7957 7763/1/7763
+f 7763/1/7763 7957/1/7957 7955/1/7955
+f 7763/1/7763 7955/1/7955 7767/1/7767
+f 7767/1/7767 7762/1/7762 7763/1/7763
+f 7763/1/7763 7762/1/7762 7759/1/7759
+f 7766/1/7766 7762/1/7762 7767/1/7767
+f 7767/1/7767 7955/1/7955 7768/1/7768
+f 7957/1/7957 7967/1/7967 7955/1/7955
+f 7803/1/7803 7955/1/7955 7967/1/7967
+f 7957/1/7957 7966/1/7966 7967/1/7967
+f 7966/1/7966 7968/1/7968 7967/1/7967
+f 7968/1/7968 7812/1/7812 7967/1/7967
+f 7967/1/7967 7812/1/7812 7804/1/7804
+f 7968/1/7968 7993/1/7993 7812/1/7812
+f 7993/1/7993 7805/1/7805 7812/1/7812
+f 7993/1/7993 7994/1/7994 7805/1/7805
+f 7994/1/7994 7811/1/7811 7805/1/7805
+f 7805/1/7805 7811/1/7811 7809/1/7809
+f 7805/1/7805 7809/1/7809 7806/1/7806
+f 7809/1/7809 7810/1/7810 7806/1/7806
+f 7806/1/7806 7810/1/7810 7808/1/7808
+f 7807/1/7807 7806/1/7806 7808/1/7808
+f 7808/1/7808 7910/1/7910 7807/1/7807
+f 7807/1/7807 7910/1/7910 7907/1/7907
+f 7798/1/7798 7807/1/7807 7907/1/7907
+f 7819/1/7819 7910/1/7910 7808/1/7808
+f 7819/1/7819 7808/1/7808 7814/1/7814
+f 7818/1/7818 7819/1/7819 7814/1/7814
+f 7814/1/7814 7820/1/7820 7818/1/7818
+f 7820/1/7820 7824/1/7824 7818/1/7818
+f 7824/1/7824 7827/1/7827 7818/1/7818
+f 7818/1/7818 7827/1/7827 7911/1/7911
+f 7911/1/7911 7827/1/7827 7906/1/7906
+f 7906/1/7906 7827/1/7827 7826/1/7826
+f 7826/1/7826 7889/1/7889 7906/1/7906
+f 7906/1/7906 7889/1/7889 7885/1/7885
+f 7889/1/7889 7871/1/7871 7885/1/7885
+f 7871/1/7871 7884/1/7884 7885/1/7885
+f 7904/1/7904 7885/1/7885 7884/1/7884
+f 7871/1/7871 7888/1/7888 7884/1/7884
+f 7791/1/7791 7884/1/7884 7888/1/7888
+f 7791/1/7791 7888/1/7888 7787/1/7787
+f 7787/1/7787 7888/1/7888 7788/1/7788
+f 7787/1/7787 7788/1/7788 7784/1/7784
+f 7786/1/7786 7787/1/7787 7784/1/7784
+f 7786/1/7786 7784/1/7784 7781/1/7781
+f 7781/1/7781 7785/1/7785 7786/1/7786
+f 7781/1/7781 7775/1/7775 7785/1/7785
+f 7781/1/7781 7778/1/7778 7775/1/7775
+f 7775/1/7775 7778/1/7778 7776/1/7776
+f 7781/1/7781 7780/1/7780 7778/1/7778
+f 7778/1/7778 7780/1/7780 7779/1/7779
+f 7784/1/7784 7780/1/7780 7781/1/7781
+f 7784/1/7784 7783/1/7783 7780/1/7780
+f 7780/1/7780 7783/1/7783 7782/1/7782
+f 7788/1/7788 7783/1/7783 7784/1/7784
+f 7788/1/7788 7900/1/7900 7783/1/7783
+f 7902/1/7902 7783/1/7783 7900/1/7900
+f 7900/1/7900 7903/1/7903 7902/1/7902
+f 7902/1/7902 7903/1/7903 7912/1/7912
+f 7903/1/7903 7913/1/7913 7912/1/7912
+f 7912/1/7912 7913/1/7913 7916/1/7916
+f 7912/1/7912 7916/1/7916 7915/1/7915
+f 7914/1/7914 7912/1/7912 7915/1/7915
+f 7914/1/7914 7915/1/7915 7943/1/7943
+f 7943/1/7943 7915/1/7915 7942/1/7942
+f 7943/1/7943 7942/1/7942 7982/1/7982
+f 7952/1/7952 7943/1/7943 7982/1/7982
+f 7982/1/7982 7963/1/7963 7952/1/7952
+f 7963/1/7963 7959/1/7959 7952/1/7952
+f 7962/1/7962 7959/1/7959 7963/1/7963
+f 7962/1/7962 7963/1/7963 7981/1/7981
+f 7962/1/7962 7981/1/7981 7980/1/7980
+f 7965/1/7965 7962/1/7962 7980/1/7980
+f 7965/1/7965 7980/1/7980 7979/1/7979
+f 7979/1/7979 7978/1/7978 7965/1/7965
+f 7978/1/7978 7964/1/7964 7965/1/7965
+f 7964/1/7964 7961/1/7961 7965/1/7965
+f 7960/1/7960 7961/1/7961 7964/1/7964
+f 7974/1/7974 7964/1/7964 7978/1/7978
+f 7974/1/7974 7969/1/7969 7964/1/7964
+f 7969/1/7969 7966/1/7966 7964/1/7964
+f 7956/1/7956 7964/1/7964 7966/1/7966
+f 7969/1/7969 7970/1/7970 7966/1/7966
+f 7970/1/7970 7971/1/7971 7966/1/7966
+f 7970/1/7970 7989/1/7989 7971/1/7971
+f 7989/1/7989 7990/1/7990 7971/1/7971
+f 7971/1/7971 7990/1/7990 7993/1/7993
+f 7989/1/7989 7988/1/7988 7990/1/7990
+f 7988/1/7988 7992/1/7992 7990/1/7990
+f 7990/1/7990 7992/1/7992 7994/1/7994
+f 7992/1/7992 7995/1/7995 7994/1/7994
+f 7994/1/7994 7995/1/7995 7996/1/7996
+f 7995/1/7995 7997/1/7997 7996/1/7996
+f 7996/1/7996 7997/1/7997 7816/1/7816
+f 7996/1/7996 7816/1/7816 7811/1/7811
+f 7811/1/7811 7816/1/7816 7813/1/7813
+f 7816/1/7816 7815/1/7815 7813/1/7813
+f 7815/1/7815 7810/1/7810 7813/1/7813
+f 7814/1/7814 7810/1/7810 7815/1/7815
+f 7815/1/7815 7817/1/7817 7814/1/7814
+f 7815/1/7815 7821/1/7821 7817/1/7817
+f 7821/1/7821 7822/1/7822 7817/1/7817
+f 7817/1/7817 7822/1/7822 7823/1/7823
+f 7817/1/7817 7823/1/7823 7820/1/7820
+f 7822/1/7822 7828/1/7828 7823/1/7823
+f 7823/1/7823 7828/1/7828 7825/1/7825
+f 7823/1/7823 7825/1/7825 7824/1/7824
+f 7825/1/7825 7826/1/7826 7824/1/7824
+f 7825/1/7825 7830/1/7830 7826/1/7826
+f 7826/1/7826 7830/1/7830 7871/1/7871
+f 7871/1/7871 7830/1/7830 7872/1/7872
+f 7871/1/7871 7872/1/7872 7873/1/7873
+f 7873/1/7873 8060/1/8060 7871/1/7871
+f 8061/1/8061 7871/1/7871 8060/1/8060
+f 8060/1/8060 8059/1/8059 8061/1/8061
+f 8061/1/8061 8059/1/8059 8148/1/8148
+f 8148/1/8148 7890/1/7890 8061/1/8061
+f 8061/1/8061 7890/1/7890 7886/1/7886
+f 7890/1/7890 7891/1/7891 7886/1/7886
+f 7886/1/7886 7891/1/7891 7887/1/7887
+f 7886/1/7886 7887/1/7887 7871/1/7871
+f 7887/1/7887 7891/1/7891 7893/1/7893
+f 7893/1/7893 7898/1/7898 7887/1/7887
+f 7887/1/7887 7898/1/7898 7899/1/7899
+f 7887/1/7887 7899/1/7899 7900/1/7900
+f 7900/1/7900 7899/1/7899 7901/1/7901
+f 8056/1/8056 7901/1/7901 7899/1/7899
+f 8056/1/8056 7899/1/7899 8059/1/8059
+f 8059/1/8059 8051/1/8051 8056/1/8056
+f 8051/1/8051 8052/1/8052 8056/1/8056
+f 8056/1/8056 8052/1/8052 8053/1/8053
+f 8056/1/8056 8053/1/8053 8057/1/8057
+f 8057/1/8057 8053/1/8053 8058/1/8058
+f 8058/1/8058 8189/1/8189 8057/1/8057
+f 8057/1/8057 8189/1/8189 8186/1/8186
+f 8057/1/8057 8186/1/8186 8185/1/8185
+f 8185/1/8185 8183/1/8183 8057/1/8057
+f 8057/1/8057 8183/1/8183 8182/1/8182
+f 8057/1/8057 8182/1/8182 8180/1/8180
+f 8180/1/8180 8178/1/8178 8057/1/8057
+f 8057/1/8057 8178/1/8178 8175/1/8175
+f 8057/1/8057 8175/1/8175 8170/1/8170
+f 8170/1/8170 8168/1/8168 8057/1/8057
+f 8057/1/8057 8168/1/8168 8167/1/8167
+f 8057/1/8057 8167/1/8167 8166/1/8166
+f 8166/1/8166 8153/1/8153 8057/1/8057
+f 8153/1/8153 8150/1/8150 8057/1/8057
+f 8057/1/8057 8150/1/8150 8149/1/8149
+f 8057/1/8057 8149/1/8149 8115/1/8115
+f 8057/1/8057 8115/1/8115 8082/1/8082
+f 8057/1/8057 8082/1/8082 8113/1/8113
+f 8113/1/8113 7917/1/7917 8057/1/8057
+f 8057/1/8057 7917/1/7917 7901/1/7901
+f 7901/1/7901 7917/1/7917 7913/1/7913
+f 7913/1/7913 7917/1/7917 7918/1/7918
+f 7913/1/7913 7918/1/7918 7919/1/7919
+f 8118/1/8118 7913/1/7913 7919/1/7919
+f 8118/1/8118 7919/1/7919 8120/1/8120
+f 8119/1/8119 8118/1/8118 8120/1/8120
+f 8119/1/8119 8120/1/8120 8121/1/8121
+f 8119/1/8119 8121/1/8121 8122/1/8122
+f 8122/1/8122 7922/1/7922 8119/1/8119
+f 8119/1/8119 7922/1/7922 7920/1/7920
+f 8119/1/8119 7920/1/7920 8117/1/8117
+f 8117/1/8117 7920/1/7920 7918/1/7918
+f 8117/1/8117 7918/1/7918 8113/1/8113
+f 8113/1/8113 8114/1/8114 8117/1/8117
+f 8117/1/8117 8114/1/8114 8118/1/8118
+f 7921/1/7921 7920/1/7920 7922/1/7922
+f 7921/1/7921 7922/1/7922 7923/1/7923
+f 8121/1/8121 7921/1/7921 7923/1/7923
+f 8121/1/8121 7923/1/7923 8123/1/8123
+f 8123/1/8123 7923/1/7923 7925/1/7925
+f 8123/1/8123 7925/1/7925 8125/1/8125
+f 8123/1/8123 8125/1/8125 8124/1/8124
+f 8122/1/8122 8123/1/8123 8124/1/8124
+f 8124/1/8124 7924/1/7924 8122/1/8122
+f 8124/1/8124 7927/1/7927 7924/1/7924
+f 7926/1/7926 7924/1/7924 7927/1/7927
+f 7926/1/7926 7927/1/7927 7928/1/7928
+f 8126/1/8126 7926/1/7926 7928/1/7928
+f 8126/1/8126 7928/1/7928 8128/1/8128
+f 8127/1/8127 8126/1/8126 8128/1/8128
+f 8127/1/8127 8128/1/8128 8129/1/8129
+f 8129/1/8129 8130/1/8130 8127/1/8127
+f 8130/1/8130 7930/1/7930 8127/1/8127
+f 8127/1/8127 7930/1/7930 7927/1/7927
+f 7929/1/7929 7927/1/7927 7930/1/7930
+f 7929/1/7929 7930/1/7930 7931/1/7931
+f 8129/1/8129 7929/1/7929 7931/1/7931
+f 8129/1/8129 7931/1/7931 8131/1/8131
+f 8131/1/8131 7931/1/7931 7933/1/7933
+f 8131/1/8131 7933/1/7933 8132/1/8132
+f 8131/1/8131 8132/1/8132 8130/1/8130
+f 8130/1/8130 8132/1/8132 8133/1/8133
+f 8130/1/8130 8133/1/8133 8134/1/8134
+f 8134/1/8134 8135/1/8135 8130/1/8130
+f 8135/1/8135 8136/1/8136 8130/1/8130
+f 8130/1/8130 8136/1/8136 8137/1/8137
+f 8130/1/8130 8137/1/8137 8138/1/8138
+f 8138/1/8138 7938/1/7938 8130/1/8130
+f 8138/1/8138 7897/1/7897 7938/1/7938
+f 7897/1/7897 7940/1/7940 7938/1/7938
+f 7938/1/7938 7940/1/7940 7939/1/7939
+f 7938/1/7938 7939/1/7939 7930/1/7930
+f 7930/1/7930 7939/1/7939 7937/1/7937
+f 7930/1/7930 7937/1/7937 7936/1/7936
+f 7936/1/7936 7935/1/7935 7930/1/7930
+f 7930/1/7930 7935/1/7935 7934/1/7934
+f 7930/1/7930 7934/1/7934 7932/1/7932
+f 8133/1/8133 7932/1/7932 7934/1/7934
+f 7935/1/7935 8134/1/8134 7934/1/7934
+f 8136/1/8136 7935/1/7935 7936/1/7936
+f 8137/1/8137 7936/1/7936 7937/1/7937
+f 8137/1/8137 7937/1/7937 7939/1/7939
+f 8137/1/8137 7939/1/7939 8139/1/8139
+f 8139/1/8139 7939/1/7939 7940/1/7940
+f 8139/1/8139 7940/1/7940 8141/1/8141
+f 8140/1/8140 8139/1/8139 8141/1/8141
+f 8140/1/8140 8141/1/8141 8142/1/8142
+f 8140/1/8140 8142/1/8142 8143/1/8143
+f 8143/1/8143 7891/1/7891 8140/1/8140
+f 8140/1/8140 7891/1/7891 7897/1/7897
+f 7891/1/7891 7896/1/7896 7897/1/7897
+f 7891/1/7891 7895/1/7895 7896/1/7896
+f 8142/1/8142 7896/1/7896 7895/1/7895
+f 8142/1/8142 7895/1/7895 8144/1/8144
+f 8144/1/8144 7895/1/7895 7894/1/7894
+f 8144/1/8144 7894/1/7894 8146/1/8146
+f 8145/1/8145 8144/1/8144 8146/1/8146
+f 8145/1/8145 8146/1/8146 8059/1/8059
+f 8059/1/8059 7898/1/7898 8145/1/8145
+f 8059/1/8059 8146/1/8146 8147/1/8147
+f 8146/1/8146 7892/1/7892 8147/1/8147
+f 8147/1/8147 7892/1/7892 8148/1/8148
+f 8143/1/8143 8144/1/8144 8145/1/8145
+f 8145/1/8145 7893/1/7893 8143/1/8143
+f 8146/1/8146 7894/1/7894 7892/1/7892
+f 7891/1/7891 7892/1/7892 7894/1/7894
+f 7894/1/7894 7895/1/7895 7891/1/7891
+f 8143/1/8143 8142/1/8142 8144/1/8144
+f 8141/1/8141 7896/1/7896 8142/1/8142
+f 8138/1/8138 8139/1/8139 8140/1/8140
+f 8141/1/8141 7940/1/7940 7896/1/7896
+f 7897/1/7897 7896/1/7896 7940/1/7940
+f 8140/1/8140 7897/1/7897 8138/1/8138
+f 8138/1/8138 8137/1/8137 8139/1/8139
+f 8136/1/8136 7936/1/7936 8137/1/8137
+f 8135/1/8135 7935/1/7935 8136/1/8136
+f 8135/1/8135 8134/1/8134 7935/1/7935
+f 8133/1/8133 7934/1/7934 8134/1/8134
+f 8132/1/8132 7932/1/7932 8133/1/8133
+f 8132/1/8132 7933/1/7933 7932/1/7932
+f 7931/1/7931 7932/1/7932 7933/1/7933
+f 7931/1/7931 7930/1/7930 7932/1/7932
+f 8130/1/8130 7938/1/7938 7930/1/7930
+f 8131/1/8131 8130/1/8130 8129/1/8129
+f 8128/1/8128 7929/1/7929 8129/1/8129
+f 8124/1/8124 8126/1/8126 8127/1/8127
+f 8128/1/8128 7928/1/7928 7929/1/7929
+f 8125/1/8125 7926/1/7926 8126/1/8126
+f 7928/1/7928 7927/1/7927 7929/1/7929
+f 7925/1/7925 7924/1/7924 7926/1/7926
+f 7922/1/7922 7924/1/7924 7925/1/7925
+f 8127/1/8127 7927/1/7927 8124/1/8124
+f 8124/1/8124 8125/1/8125 8126/1/8126
+f 8125/1/8125 7925/1/7925 7926/1/7926
+f 7923/1/7923 7922/1/7922 7925/1/7925
+f 7919/1/7919 7920/1/7920 7921/1/7921
+f 8122/1/8122 7924/1/7924 7922/1/7922
+f 8122/1/8122 8121/1/8121 8123/1/8123
+f 8120/1/8120 7921/1/7921 8121/1/8121
+f 8117/1/8117 8118/1/8118 8119/1/8119
+f 8120/1/8120 7919/1/7919 7921/1/7921
+f 8118/1/8118 8114/1/8114 7913/1/7913
+f 7919/1/7919 7918/1/7918 7920/1/7920
+f 8113/1/8113 7918/1/7918 7917/1/7917
+f 8113/1/8113 8082/1/8082 8114/1/8114
+f 8114/1/8114 8082/1/8082 8331/1/8331
+f 8114/1/8114 8331/1/8331 8316/1/8316
+f 8315/1/8315 8114/1/8114 8316/1/8316
+f 8315/1/8315 8316/1/8316 8317/1/8317
+f 8317/1/8317 8370/1/8370 8315/1/8315
+f 8315/1/8315 8370/1/8370 8374/1/8374
+f 8315/1/8315 8374/1/8374 7916/1/7916
+f 7916/1/7916 8374/1/8374 7841/1/7841
+f 7841/1/7841 7944/1/7944 7916/1/7916
+f 7916/1/7916 7944/1/7944 7941/1/7941
+f 7944/1/7944 7942/1/7942 7941/1/7941
+f 7945/1/7945 7942/1/7942 7944/1/7944
+f 7946/1/7946 7945/1/7945 7944/1/7944
+f 7944/1/7944 7947/1/7947 7946/1/7946
+f 7946/1/7946 7947/1/7947 7948/1/7948
+f 7946/1/7946 7948/1/7948 7949/1/7949
+f 7979/1/7979 7946/1/7946 7949/1/7949
+f 7979/1/7979 7949/1/7949 7977/1/7977
+f 7977/1/7977 7974/1/7974 7979/1/7979
+f 7977/1/7977 7973/1/7973 7974/1/7974
+f 7976/1/7976 7973/1/7973 7977/1/7977
+f 7983/1/7983 7976/1/7976 7977/1/7977
+f 7977/1/7977 7951/1/7951 7983/1/7983
+f 7983/1/7983 7951/1/7951 8004/1/8004
+f 7983/1/7983 8004/1/8004 8002/1/8002
+f 7983/1/7983 8002/1/8002 7986/1/7986
+f 7986/1/7986 7984/1/7984 7983/1/7983
+f 7986/1/7986 7987/1/7987 7984/1/7984
+f 7984/1/7984 7987/1/7987 7985/1/7985
+f 7984/1/7984 7985/1/7985 7976/1/7976
+f 7985/1/7985 7975/1/7975 7976/1/7976
+f 7976/1/7976 7975/1/7975 7972/1/7972
+f 7972/1/7972 7975/1/7975 7970/1/7970
+f 7970/1/7970 7975/1/7975 7985/1/7985
+f 7970/1/7970 7985/1/7985 7987/1/7987
+f 7986/1/7986 7988/1/7988 7987/1/7987
+f 7991/1/7991 7988/1/7988 7986/1/7986
+f 7991/1/7991 7986/1/7986 8000/1/8000
+f 7991/1/7991 8000/1/8000 7998/1/7998
+f 7992/1/7992 7991/1/7991 7998/1/7998
+f 7998/1/7998 8000/1/8000 7999/1/7999
+f 7998/1/7998 7999/1/7999 7997/1/7997
+f 7997/1/7997 7999/1/7999 7815/1/7815
+f 8000/1/8000 8001/1/8001 7999/1/7999
+f 7999/1/7999 8001/1/8001 7821/1/7821
+f 7821/1/7821 8001/1/8001 7835/1/7835
+f 7835/1/7835 7832/1/7832 7821/1/7821
+f 7832/1/7832 7835/1/7835 7834/1/7834
+f 7834/1/7834 7833/1/7833 7832/1/7832
+f 7832/1/7832 7833/1/7833 7831/1/7831
+f 7832/1/7832 7831/1/7831 7822/1/7822
+f 8080/1/8080 7831/1/7831 7833/1/7833
+f 8080/1/8080 7833/1/7833 8084/1/8084
+f 8083/1/8083 8080/1/8080 8084/1/8084
+f 8083/1/8083 8084/1/8084 8085/1/8085
+f 8085/1/8085 7836/1/7836 8083/1/8083
+f 7841/1/7841 8083/1/8083 7836/1/7836
+f 7836/1/7836 7840/1/7840 7841/1/7841
+f 7841/1/7841 7840/1/7840 7950/1/7950
+f 7841/1/7841 7950/1/7950 7948/1/7948
+f 7951/1/7951 7950/1/7950 7840/1/7840
+f 7949/1/7949 7950/1/7950 7951/1/7951
+f 7836/1/7836 7838/1/7838 7840/1/7840
+f 7840/1/7840 7838/1/7838 8003/1/8003
+f 8004/1/8004 7840/1/7840 8003/1/8003
+f 7835/1/7835 8003/1/8003 7838/1/7838
+f 7834/1/7834 7838/1/7838 7836/1/7836
+f 7834/1/7834 7836/1/7836 7837/1/7837
+f 8086/1/8086 7834/1/7834 7837/1/7837
+f 8086/1/8086 7837/1/7837 8088/1/8088
+f 8087/1/8087 8086/1/8086 8088/1/8088
+f 8087/1/8087 8088/1/8088 8089/1/8089
+f 8089/1/8089 7842/1/7842 8087/1/8087
+f 8087/1/8087 7842/1/7842 7839/1/7839
+f 8087/1/8087 7839/1/7839 8085/1/8085
+f 7837/1/7837 7839/1/7839 7842/1/7842
+f 7837/1/7837 7842/1/7842 7843/1/7843
+f 7843/1/7843 7842/1/7842 7844/1/7844
+f 7843/1/7843 7844/1/7844 7845/1/7845
+f 8090/1/8090 7843/1/7843 7845/1/7845
+f 8090/1/8090 7845/1/7845 8092/1/8092
+f 8092/1/8092 8093/1/8093 8090/1/8090
+f 8090/1/8090 8093/1/8093 8091/1/8091
+f 8090/1/8090 8091/1/8091 8088/1/8088
+f 8093/1/8093 7846/1/7846 8091/1/8091
+f 8091/1/8091 7846/1/7846 7844/1/7844
+f 8091/1/8091 7844/1/7844 8089/1/8089
+f 8093/1/8093 7847/1/7847 7846/1/7846
+f 7845/1/7845 7846/1/7846 7847/1/7847
+f 7845/1/7845 7847/1/7847 7848/1/7848
+f 7848/1/7848 7847/1/7847 7849/1/7849
+f 7848/1/7848 7849/1/7849 7851/1/7851
+f 7850/1/7850 7848/1/7848 7851/1/7851
+f 7852/1/7852 7850/1/7850 7851/1/7851
+f 8097/1/8097 7852/1/7852 7851/1/7851
+f 8097/1/8097 7851/1/7851 8095/1/8095
+f 8097/1/8097 8095/1/8095 8094/1/8094
+f 8094/1/8094 8098/1/8098 8097/1/8097
+f 8094/1/8094 8099/1/8099 8098/1/8098
+f 8099/1/8099 7853/1/7853 8098/1/8098
+f 8098/1/8098 7853/1/7853 7852/1/7852
+f 8099/1/8099 7854/1/7854 7853/1/7853
+f 7854/1/7854 7855/1/7855 7853/1/7853
+f 7853/1/7853 7855/1/7855 7850/1/7850
+f 7855/1/7855 7856/1/7856 7850/1/7850
+f 7856/1/7856 7857/1/7857 7850/1/7850
+f 7850/1/7850 7857/1/7857 7858/1/7858
+f 7850/1/7850 7858/1/7858 7859/1/7859
+f 8105/1/8105 7850/1/7850 7859/1/7859
+f 8105/1/8105 7859/1/7859 8107/1/8107
+f 8106/1/8106 8105/1/8105 8107/1/8107
+f 8106/1/8106 8107/1/8107 8108/1/8108
+f 8108/1/8108 7862/1/7862 8106/1/8106
+f 8106/1/8106 7862/1/7862 7860/1/7860
+f 8106/1/8106 7860/1/7860 8104/1/8104
+f 8104/1/8104 7860/1/7860 7858/1/7858
+f 8104/1/8104 7858/1/7858 8103/1/8103
+f 8103/1/8103 8094/1/8094 8104/1/8104
+f 8104/1/8104 8094/1/8094 8105/1/8105
+f 8103/1/8103 8102/1/8102 8094/1/8094
+f 8094/1/8094 8102/1/8102 8101/1/8101
+f 8094/1/8094 8101/1/8101 8100/1/8100
+f 8100/1/8100 8101/1/8101 7855/1/7855
+f 8102/1/8102 7857/1/7857 8101/1/8101
+f 8103/1/8103 7858/1/7858 8102/1/8102
+f 7860/1/7860 7862/1/7862 7861/1/7861
+f 7859/1/7859 7860/1/7860 7861/1/7861
+f 7861/1/7861 7862/1/7862 7863/1/7863
+f 7861/1/7861 7863/1/7863 7864/1/7864
+f 8109/1/8109 7861/1/7861 7864/1/7864
+f 8109/1/8109 7864/1/7864 8112/1/8112
+f 8111/1/8111 8109/1/8109 8112/1/8112
+f 8111/1/8111 8112/1/8112 8066/1/8066
+f 8066/1/8066 7867/1/7867 8111/1/8111
+f 8111/1/8111 7867/1/7867 7865/1/7865
+f 8111/1/8111 7865/1/7865 8110/1/8110
+f 8110/1/8110 7865/1/7865 7863/1/7863
+f 8110/1/8110 7863/1/7863 8108/1/8108
+f 8108/1/8108 8109/1/8109 8110/1/8110
+f 7866/1/7866 7865/1/7865 7867/1/7867
+f 7866/1/7866 7867/1/7867 7829/1/7829
+f 8067/1/8067 7866/1/7866 7829/1/7829
+f 8067/1/8067 7829/1/7829 8077/1/8077
+f 8077/1/8077 8076/1/8076 8067/1/8067
+f 8067/1/8067 8076/1/8076 8075/1/8075
+f 8075/1/8075 8074/1/8074 8067/1/8067
+f 8067/1/8067 8074/1/8074 8073/1/8073
+f 8067/1/8067 8073/1/8073 8072/1/8072
+f 8072/1/8072 8071/1/8071 8067/1/8067
+f 8067/1/8067 8071/1/8071 8070/1/8070
+f 8067/1/8067 8070/1/8070 8069/1/8069
+f 8069/1/8069 8068/1/8068 8067/1/8067
+f 8067/1/8067 8068/1/8068 8065/1/8065
+f 8067/1/8067 8065/1/8065 8064/1/8064
+f 8066/1/8066 8067/1/8067 8064/1/8064
+f 8064/1/8064 7870/1/7870 8066/1/8066
+f 8066/1/8066 7870/1/7870 7868/1/7868
+f 7829/1/7829 7868/1/7868 7870/1/7870
+f 7869/1/7869 7829/1/7829 7870/1/7870
+f 7830/1/7830 7829/1/7829 7869/1/7869
+f 7830/1/7830 7869/1/7869 8062/1/8062
+f 8062/1/8062 7869/1/7869 8063/1/8063
+f 8063/1/8063 8036/1/8036 8062/1/8062
+f 8062/1/8062 8036/1/8036 8035/1/8035
+f 8062/1/8062 8035/1/8035 8034/1/8034
+f 8034/1/8034 8032/1/8032 8062/1/8062
+f 8062/1/8062 8032/1/8032 8030/1/8030
+f 8062/1/8062 8030/1/8030 8031/1/8031
+f 8031/1/8031 8038/1/8038 8062/1/8062
+f 8062/1/8062 8038/1/8038 8040/1/8040
+f 8040/1/8040 8041/1/8041 8062/1/8062
+f 8062/1/8062 8041/1/8041 8044/1/8044
+f 8062/1/8062 8044/1/8044 8060/1/8060
+f 8060/1/8060 8328/1/8328 8062/1/8062
+f 7872/1/7872 8062/1/8062 8328/1/8328
+f 7872/1/7872 8328/1/8328 7874/1/7874
+f 8328/1/8328 8330/1/8330 7874/1/7874
+f 7874/1/7874 8330/1/8330 7876/1/7876
+f 7876/1/7876 7875/1/7875 7874/1/7874
+f 7873/1/7873 7874/1/7874 7875/1/7875
+f 7875/1/7875 8321/1/8321 7873/1/7873
+f 7877/1/7877 8321/1/8321 7875/1/7875
+f 8322/1/8322 8321/1/8321 7877/1/7877
+f 7882/1/7882 8322/1/8322 7877/1/7877
+f 7881/1/7881 7882/1/7882 7877/1/7877
+f 7881/1/7881 7877/1/7877 7878/1/7878
+f 7878/1/7878 8325/1/8325 7881/1/7881
+f 7881/1/7881 8325/1/8325 8324/1/8324
+f 7881/1/7881 8324/1/8324 7883/1/7883
+f 7883/1/7883 8324/1/8324 8323/1/8323
+f 7883/1/7883 8323/1/8323 7882/1/7882
+f 8323/1/8323 8324/1/8324 8322/1/8322
+f 8322/1/8322 8324/1/8324 8325/1/8325
+f 8326/1/8326 8325/1/8325 7878/1/7878
+f 7879/1/7879 8326/1/8326 7878/1/7878
+f 7878/1/7878 7876/1/7876 7879/1/7879
+f 7879/1/7879 7876/1/7876 7880/1/7880
+f 7880/1/7880 8327/1/8327 7879/1/7879
+f 7880/1/7880 8329/1/8329 8327/1/8327
+f 8327/1/8327 8329/1/8329 8326/1/8326
+f 8326/1/8326 8329/1/8329 8330/1/8330
+f 7876/1/7876 8329/1/8329 7880/1/7880
+f 7879/1/7879 8327/1/8327 8326/1/8326
+f 8325/1/8325 8326/1/8326 8328/1/8328
+f 8321/1/8321 8325/1/8325 8328/1/8328
+f 7878/1/7878 7877/1/7877 7876/1/7876
+f 7883/1/7883 7882/1/7882 7881/1/7881
+f 7882/1/7882 8323/1/8323 8322/1/8322
+f 8322/1/8322 8325/1/8325 8321/1/8321
+f 7877/1/7877 7875/1/7875 7876/1/7876
+f 7876/1/7876 8330/1/8330 8329/1/8329
+f 8326/1/8326 8330/1/8330 8328/1/8328
+f 8321/1/8321 8328/1/8328 8060/1/8060
+f 8060/1/8060 8044/1/8044 8051/1/8051
+f 8044/1/8044 8046/1/8046 8051/1/8051
+f 8042/1/8042 8046/1/8046 8044/1/8044
+f 8042/1/8042 8045/1/8045 8046/1/8046
+f 8050/1/8050 8046/1/8046 8045/1/8045
+f 8049/1/8049 8050/1/8050 8045/1/8045
+f 8049/1/8049 8045/1/8045 8047/1/8047
+f 8049/1/8049 8047/1/8047 8048/1/8048
+f 8048/1/8048 8201/1/8201 8049/1/8049
+f 8049/1/8049 8201/1/8201 8202/1/8202
+f 8049/1/8049 8202/1/8202 8055/1/8055
+f 8055/1/8055 8202/1/8202 8192/1/8192
+f 8055/1/8055 8192/1/8192 8190/1/8190
+f 8190/1/8190 8054/1/8054 8055/1/8055
+f 8055/1/8055 8054/1/8054 8050/1/8050
+f 8053/1/8053 8050/1/8050 8054/1/8054
+f 8190/1/8190 8187/1/8187 8054/1/8054
+f 8187/1/8187 8189/1/8189 8054/1/8054
+f 8188/1/8188 8187/1/8187 8190/1/8190
+f 8191/1/8191 8188/1/8188 8190/1/8190
+f 8190/1/8190 8193/1/8193 8191/1/8191
+f 8194/1/8194 8191/1/8191 8193/1/8193
+f 8192/1/8192 8194/1/8194 8193/1/8193
+f 8192/1/8192 8198/1/8198 8194/1/8194
+f 8197/1/8197 8194/1/8194 8198/1/8198
+f 8197/1/8197 8198/1/8198 8200/1/8200
+f 8203/1/8203 8197/1/8197 8200/1/8200
+f 8016/1/8016 8203/1/8203 8200/1/8200
+f 8048/1/8048 8016/1/8016 8200/1/8200
+f 8017/1/8017 8016/1/8016 8048/1/8048
+f 8017/1/8017 8048/1/8048 8024/1/8024
+f 8017/1/8017 8024/1/8024 8018/1/8018
+f 8017/1/8017 8018/1/8018 8015/1/8015
+f 8015/1/8015 8018/1/8018 8019/1/8019
+f 8015/1/8015 8019/1/8019 8014/1/8014
+f 8014/1/8014 8012/1/8012 8015/1/8015
+f 8011/1/8011 8015/1/8015 8012/1/8012
+f 8011/1/8011 8012/1/8012 8007/1/8007
+f 8007/1/8007 8009/1/8009 8011/1/8011
+f 8011/1/8011 8009/1/8009 8203/1/8203
+f 8007/1/8007 8006/1/8006 8009/1/8009
+f 8006/1/8006 8010/1/8010 8009/1/8009
+f 8009/1/8009 8010/1/8010 8197/1/8197
+f 8205/1/8205 8197/1/8197 8010/1/8010
+f 8010/1/8010 8207/1/8207 8205/1/8205
+f 8205/1/8205 8207/1/8207 8208/1/8208
+f 8205/1/8205 8208/1/8208 8204/1/8204
+f 8204/1/8204 8208/1/8208 8211/1/8211
+f 8204/1/8204 8211/1/8211 8216/1/8216
+f 8216/1/8216 8196/1/8196 8204/1/8204
+f 8204/1/8204 8196/1/8196 8197/1/8197
+f 8216/1/8216 8219/1/8219 8196/1/8196
+f 8219/1/8219 8222/1/8222 8196/1/8196
+f 8196/1/8196 8222/1/8222 8199/1/8199
+f 8196/1/8196 8199/1/8199 8194/1/8194
+f 8199/1/8199 8195/1/8195 8194/1/8194
+f 8199/1/8199 8222/1/8222 8195/1/8195
+f 8195/1/8195 8222/1/8222 8219/1/8219
+f 8195/1/8195 8219/1/8219 8223/1/8223
+f 8223/1/8223 8179/1/8179 8195/1/8195
+f 8195/1/8195 8179/1/8179 8191/1/8191
+f 8223/1/8223 8176/1/8176 8179/1/8179
+f 8179/1/8179 8176/1/8176 8177/1/8177
+f 8177/1/8177 8181/1/8181 8179/1/8179
+f 8179/1/8179 8181/1/8181 8184/1/8184
+f 8179/1/8179 8184/1/8184 8188/1/8188
+f 8181/1/8181 8183/1/8183 8184/1/8184
+f 8177/1/8177 8180/1/8180 8181/1/8181
+f 8176/1/8176 8173/1/8173 8177/1/8177
+f 8177/1/8177 8173/1/8173 8175/1/8175
+f 8176/1/8176 8171/1/8171 8173/1/8173
+f 8171/1/8171 8169/1/8169 8173/1/8173
+f 8173/1/8173 8169/1/8169 8170/1/8170
+f 8171/1/8171 8172/1/8172 8169/1/8169
+f 8172/1/8172 8174/1/8174 8169/1/8169
+f 8169/1/8169 8174/1/8174 8164/1/8164
+f 8169/1/8169 8164/1/8164 8167/1/8167
+f 8165/1/8165 8164/1/8164 8174/1/8174
+f 8174/1/8174 8231/1/8231 8165/1/8165
+f 8165/1/8165 8231/1/8231 8232/1/8232
+f 8165/1/8165 8232/1/8232 8156/1/8156
+f 8156/1/8156 8154/1/8154 8165/1/8165
+f 8156/1/8156 8151/1/8151 8154/1/8154
+f 8150/1/8150 8154/1/8154 8151/1/8151
+f 8155/1/8155 8151/1/8151 8156/1/8156
+f 8233/1/8233 8155/1/8155 8156/1/8156
+f 8156/1/8156 8234/1/8234 8233/1/8233
+f 8233/1/8233 8234/1/8234 8232/1/8232
+f 8215/1/8215 8233/1/8233 8232/1/8232
+f 8215/1/8215 8232/1/8232 8212/1/8212
+f 8212/1/8212 8210/1/8210 8215/1/8215
+f 8214/1/8214 8215/1/8215 8210/1/8210
+f 8214/1/8214 8210/1/8210 8209/1/8209
+f 8209/1/8209 8236/1/8236 8214/1/8214
+f 8214/1/8214 8236/1/8236 8237/1/8237
+f 8214/1/8214 8237/1/8237 8238/1/8238
+f 8238/1/8238 8237/1/8237 8239/1/8239
+f 8239/1/8239 8241/1/8241 8238/1/8238
+f 8238/1/8238 8241/1/8241 8242/1/8242
+f 8215/1/8215 8238/1/8238 8242/1/8242
+f 8241/1/8241 8243/1/8243 8242/1/8242
+f 8242/1/8242 8243/1/8243 8233/1/8233
+f 8244/1/8244 8243/1/8243 8241/1/8241
+f 8246/1/8246 8244/1/8244 8241/1/8241
+f 8241/1/8241 8257/1/8257 8246/1/8246
+f 8246/1/8246 8257/1/8257 8250/1/8250
+f 8246/1/8246 8250/1/8250 8248/1/8248
+f 8248/1/8248 8160/1/8160 8246/1/8246
+f 8246/1/8246 8160/1/8160 8247/1/8247
+f 8160/1/8160 8158/1/8158 8247/1/8247
+f 8158/1/8158 8157/1/8157 8247/1/8247
+f 8247/1/8247 8157/1/8157 8245/1/8245
+f 8247/1/8247 8245/1/8245 8244/1/8244
+f 8157/1/8157 8152/1/8152 8245/1/8245
+f 8245/1/8245 8152/1/8152 8243/1/8243
+f 8243/1/8243 8152/1/8152 8155/1/8155
+f 8157/1/8157 8116/1/8116 8152/1/8152
+f 8115/1/8115 8152/1/8152 8116/1/8116
+f 8081/1/8081 8116/1/8116 8157/1/8157
+f 8082/1/8082 8116/1/8116 8081/1/8081
+f 8081/1/8081 8079/1/8079 8082/1/8082
+f 8082/1/8082 8079/1/8079 8080/1/8080
+f 8080/1/8080 8079/1/8079 8078/1/8078
+f 8078/1/8078 8079/1/8079 8077/1/8077
+f 8077/1/8077 7828/1/7828 8078/1/8078
+f 8078/1/8078 7828/1/7828 7831/1/7831
+f 8079/1/8079 8159/1/8159 8077/1/8077
+f 8079/1/8079 8158/1/8158 8159/1/8159
+f 8079/1/8079 8081/1/8081 8158/1/8158
+f 8158/1/8158 8081/1/8081 8157/1/8157
+f 8159/1/8159 8158/1/8158 8160/1/8160
+f 8159/1/8159 8160/1/8160 8076/1/8076
+f 8076/1/8076 8160/1/8160 8161/1/8161
+f 8248/1/8248 8161/1/8161 8160/1/8160
+f 8249/1/8249 8161/1/8161 8248/1/8248
+f 8248/1/8248 8251/1/8251 8249/1/8249
+f 8249/1/8249 8251/1/8251 8254/1/8254
+f 8249/1/8249 8254/1/8254 8252/1/8252
+f 8252/1/8252 8253/1/8253 8249/1/8249
+f 8253/1/8253 8162/1/8162 8249/1/8249
+f 8253/1/8253 8163/1/8163 8162/1/8162
+f 8163/1/8163 8073/1/8073 8162/1/8162
+f 8282/1/8282 8163/1/8163 8253/1/8253
+f 8282/1/8282 8283/1/8283 8163/1/8163
+f 8283/1/8283 8071/1/8071 8163/1/8163
+f 8281/1/8281 8283/1/8283 8282/1/8282
+f 8282/1/8282 8276/1/8276 8281/1/8281
+f 8037/1/8037 8281/1/8281 8276/1/8276
+f 8037/1/8037 8276/1/8276 8273/1/8273
+f 8273/1/8273 8033/1/8033 8037/1/8037
+f 8037/1/8037 8033/1/8033 8036/1/8036
+f 8037/1/8037 8036/1/8036 8065/1/8065
+f 8273/1/8273 8274/1/8274 8033/1/8033
+f 8274/1/8274 8029/1/8029 8033/1/8033
+f 8033/1/8033 8029/1/8029 8028/1/8028
+f 8033/1/8033 8028/1/8028 8034/1/8034
+f 8022/1/8022 8028/1/8028 8029/1/8029
+f 8029/1/8029 8020/1/8020 8022/1/8022
+f 8022/1/8022 8020/1/8020 8019/1/8019
+f 8022/1/8022 8019/1/8019 8023/1/8023
+f 8023/1/8023 8027/1/8027 8022/1/8022
+f 8023/1/8023 8026/1/8026 8027/1/8027
+f 8031/1/8031 8027/1/8027 8026/1/8026
+f 8025/1/8025 8026/1/8026 8023/1/8023
+f 8018/1/8018 8025/1/8025 8023/1/8023
+f 8023/1/8023 8021/1/8021 8018/1/8018
+f 8025/1/8025 8039/1/8039 8026/1/8026
+f 8038/1/8038 8026/1/8026 8039/1/8039
+f 8024/1/8024 8039/1/8039 8025/1/8025
+f 8043/1/8043 8039/1/8039 8024/1/8024
+f 8024/1/8024 8047/1/8047 8043/1/8043
+f 8042/1/8042 8039/1/8039 8043/1/8043
+f 8042/1/8042 8041/1/8041 8039/1/8039
+f 8023/1/8023 8019/1/8019 8021/1/8021
+f 8029/1/8029 8280/1/8280 8020/1/8020
+f 8014/1/8014 8020/1/8020 8280/1/8280
+f 8280/1/8280 8279/1/8279 8014/1/8014
+f 8279/1/8279 8265/1/8265 8014/1/8014
+f 8279/1/8279 8278/1/8278 8265/1/8265
+f 8265/1/8265 8278/1/8278 8271/1/8271
+f 8265/1/8265 8271/1/8271 8268/1/8268
+f 8268/1/8268 8264/1/8264 8265/1/8265
+f 8265/1/8265 8264/1/8264 8262/1/8262
+f 8265/1/8265 8262/1/8262 8012/1/8012
+f 8012/1/8012 8262/1/8262 8013/1/8013
+f 8012/1/8012 8013/1/8013 8008/1/8008
+f 8013/1/8013 8260/1/8260 8008/1/8008
+f 8008/1/8008 8260/1/8260 8261/1/8261
+f 8008/1/8008 8261/1/8261 8005/1/8005
+f 8007/1/8007 8008/1/8008 8005/1/8005
+f 8005/1/8005 8261/1/8261 8235/1/8235
+f 8235/1/8235 8206/1/8206 8005/1/8005
+f 8005/1/8005 8206/1/8206 8006/1/8006
+f 8206/1/8206 8235/1/8235 8209/1/8209
+f 8209/1/8209 8207/1/8207 8206/1/8206
+f 8235/1/8235 8261/1/8261 8236/1/8236
+f 8236/1/8236 8261/1/8261 8240/1/8240
+f 8260/1/8260 8240/1/8240 8261/1/8261
+f 8259/1/8259 8240/1/8240 8260/1/8260
+f 8259/1/8259 8258/1/8258 8240/1/8240
+f 8258/1/8258 8256/1/8256 8240/1/8240
+f 8240/1/8240 8256/1/8256 8255/1/8255
+f 8240/1/8240 8255/1/8255 8239/1/8239
+f 8257/1/8257 8239/1/8239 8255/1/8255
+f 8251/1/8251 8255/1/8255 8256/1/8256
+f 8250/1/8250 8255/1/8255 8251/1/8251
+f 8258/1/8258 8285/1/8285 8256/1/8256
+f 8285/1/8285 8284/1/8284 8256/1/8256
+f 8256/1/8256 8284/1/8284 8252/1/8252
+f 8284/1/8284 8282/1/8282 8252/1/8252
+f 8275/1/8275 8282/1/8282 8284/1/8284
+f 8284/1/8284 8267/1/8267 8275/1/8275
+f 8275/1/8275 8267/1/8267 8269/1/8269
+f 8269/1/8269 8276/1/8276 8275/1/8275
+f 8267/1/8267 8266/1/8266 8269/1/8269
+f 8266/1/8266 8270/1/8270 8269/1/8269
+f 8273/1/8273 8269/1/8269 8270/1/8270
+f 8268/1/8268 8270/1/8270 8266/1/8266
+f 8270/1/8270 8268/1/8268 8272/1/8272
+f 8270/1/8270 8272/1/8272 8274/1/8274
+f 8272/1/8272 8277/1/8277 8274/1/8274
+f 8272/1/8272 8271/1/8271 8277/1/8277
+f 8266/1/8266 8267/1/8267 8263/1/8263
+f 8264/1/8264 8266/1/8266 8263/1/8263
+f 8263/1/8263 8267/1/8267 8258/1/8258
+f 8267/1/8267 8286/1/8286 8258/1/8258
+f 8284/1/8284 8286/1/8286 8267/1/8267
+f 8285/1/8285 8286/1/8286 8284/1/8284
+f 8258/1/8258 8286/1/8286 8285/1/8285
+f 8263/1/8263 8258/1/8258 8259/1/8259
+f 8262/1/8262 8263/1/8263 8259/1/8259
+f 8013/1/8013 8259/1/8259 8260/1/8260
+f 8262/1/8262 8259/1/8259 8013/1/8013
+f 8264/1/8264 8263/1/8263 8262/1/8262
+f 8268/1/8268 8266/1/8266 8264/1/8264
+f 8272/1/8272 8268/1/8268 8271/1/8271
+f 8271/1/8271 8278/1/8278 8277/1/8277
+f 8277/1/8277 8278/1/8278 8279/1/8279
+f 8277/1/8277 8279/1/8279 8280/1/8280
+f 8277/1/8277 8280/1/8280 8029/1/8029
+f 8022/1/8022 8027/1/8027 8028/1/8028
+f 8030/1/8030 8028/1/8028 8027/1/8027
+f 8274/1/8274 8277/1/8277 8029/1/8029
+f 8270/1/8270 8274/1/8274 8273/1/8273
+f 8273/1/8273 8276/1/8276 8269/1/8269
+f 8065/1/8065 8281/1/8281 8037/1/8037
+f 8275/1/8275 8276/1/8276 8282/1/8282
+f 8281/1/8281 8069/1/8069 8283/1/8283
+f 8252/1/8252 8282/1/8282 8253/1/8253
+f 8256/1/8256 8252/1/8252 8254/1/8254
+f 8251/1/8251 8256/1/8256 8254/1/8254
+f 8249/1/8249 8162/1/8162 8161/1/8161
+f 8162/1/8162 8074/1/8074 8161/1/8161
+f 8248/1/8248 8250/1/8250 8251/1/8251
+f 8257/1/8257 8255/1/8255 8250/1/8250
+f 8246/1/8246 8247/1/8247 8244/1/8244
+f 8244/1/8244 8245/1/8245 8243/1/8243
+f 8241/1/8241 8239/1/8239 8257/1/8257
+f 8237/1/8237 8240/1/8240 8239/1/8239
+f 8236/1/8236 8240/1/8240 8237/1/8237
+f 8209/1/8209 8235/1/8235 8236/1/8236
+f 8209/1/8209 8210/1/8210 8207/1/8207
+f 8238/1/8238 8215/1/8215 8214/1/8214
+f 8212/1/8212 8213/1/8213 8210/1/8210
+f 8213/1/8213 8211/1/8211 8210/1/8210
+f 8213/1/8213 8217/1/8217 8211/1/8211
+f 8220/1/8220 8217/1/8217 8213/1/8213
+f 8213/1/8213 8227/1/8227 8220/1/8220
+f 8225/1/8225 8220/1/8220 8227/1/8227
+f 8225/1/8225 8227/1/8227 8226/1/8226
+f 8225/1/8225 8226/1/8226 8172/1/8172
+f 8224/1/8224 8225/1/8225 8172/1/8172
+f 8227/1/8227 8228/1/8228 8226/1/8226
+f 8226/1/8226 8228/1/8228 8229/1/8229
+f 8226/1/8226 8229/1/8229 8230/1/8230
+f 8226/1/8226 8230/1/8230 8174/1/8174
+f 8230/1/8230 8229/1/8229 8212/1/8212
+f 8212/1/8212 8231/1/8231 8230/1/8230
+f 8229/1/8229 8228/1/8228 8213/1/8213
+f 8224/1/8224 8220/1/8220 8225/1/8225
+f 8224/1/8224 8221/1/8221 8220/1/8220
+f 8220/1/8220 8221/1/8221 8218/1/8218
+f 8219/1/8219 8218/1/8218 8221/1/8221
+f 8221/1/8221 8224/1/8224 8171/1/8171
+f 8213/1/8213 8228/1/8228 8227/1/8227
+f 8218/1/8218 8217/1/8217 8220/1/8220
+f 8216/1/8216 8217/1/8217 8218/1/8218
+f 8229/1/8229 8213/1/8213 8212/1/8212
+f 8242/1/8242 8233/1/8233 8215/1/8215
+f 8233/1/8233 8243/1/8243 8155/1/8155
+f 8155/1/8155 8152/1/8152 8151/1/8151
+f 8149/1/8149 8151/1/8151 8152/1/8152
+f 8156/1/8156 8232/1/8232 8234/1/8234
+f 8212/1/8212 8232/1/8232 8231/1/8231
+f 8174/1/8174 8230/1/8230 8231/1/8231
+f 8165/1/8165 8154/1/8154 8164/1/8164
+f 8153/1/8153 8164/1/8164 8154/1/8154
+f 8172/1/8172 8226/1/8226 8174/1/8174
+f 8224/1/8224 8172/1/8172 8171/1/8171
+f 8221/1/8221 8171/1/8171 8176/1/8176
+f 8221/1/8221 8176/1/8176 8223/1/8223
+f 8223/1/8223 8219/1/8219 8221/1/8221
+f 8218/1/8218 8219/1/8219 8216/1/8216
+f 8216/1/8216 8211/1/8211 8217/1/8217
+f 8210/1/8210 8211/1/8211 8208/1/8208
+f 8210/1/8210 8208/1/8208 8207/1/8207
+f 8010/1/8010 8206/1/8206 8207/1/8207
+f 8204/1/8204 8197/1/8197 8205/1/8205
+f 8006/1/8006 8206/1/8206 8010/1/8010
+f 8005/1/8005 8006/1/8006 8007/1/8007
+f 8007/1/8007 8012/1/8012 8008/1/8008
+f 8016/1/8016 8015/1/8015 8011/1/8011
+f 8014/1/8014 8265/1/8265 8012/1/8012
+f 8014/1/8014 8019/1/8019 8020/1/8020
+f 8018/1/8018 8021/1/8021 8019/1/8019
+f 8018/1/8018 8024/1/8024 8025/1/8025
+f 8015/1/8015 8016/1/8016 8017/1/8017
+f 8011/1/8011 8203/1/8203 8016/1/8016
+f 8009/1/8009 8197/1/8197 8203/1/8203
+f 8201/1/8201 8200/1/8200 8198/1/8198
+f 8196/1/8196 8194/1/8194 8197/1/8197
+f 8194/1/8194 8195/1/8195 8191/1/8191
+f 8191/1/8191 8179/1/8179 8188/1/8188
+f 8188/1/8188 8184/1/8184 8187/1/8187
+f 8184/1/8184 8186/1/8186 8187/1/8187
+f 8190/1/8190 8192/1/8192 8193/1/8193
+f 8202/1/8202 8198/1/8198 8192/1/8192
+f 8201/1/8201 8198/1/8198 8202/1/8202
+f 8048/1/8048 8200/1/8200 8201/1/8201
+f 8024/1/8024 8048/1/8048 8047/1/8047
+f 8043/1/8043 8047/1/8047 8045/1/8045
+f 8055/1/8055 8050/1/8050 8049/1/8049
+f 8052/1/8052 8046/1/8046 8050/1/8050
+f 8043/1/8043 8045/1/8045 8042/1/8042
+f 8044/1/8044 8041/1/8041 8042/1/8042
+f 8040/1/8040 8039/1/8039 8041/1/8041
+f 8038/1/8038 8039/1/8039 8040/1/8040
+f 8031/1/8031 8026/1/8026 8038/1/8038
+f 8030/1/8030 8027/1/8027 8031/1/8031
+f 8032/1/8032 8028/1/8028 8030/1/8030
+f 8034/1/8034 8028/1/8028 8032/1/8032
+f 8034/1/8034 8035/1/8035 8033/1/8033
+f 8033/1/8033 8035/1/8035 8036/1/8036
+f 8064/1/8064 8036/1/8036 8063/1/8063
+f 8063/1/8063 7869/1/7869 8064/1/8064
+f 8064/1/8064 7869/1/7869 7870/1/7870
+f 8064/1/8064 8065/1/8065 8036/1/8036
+f 8065/1/8065 8068/1/8068 8281/1/8281
+f 8068/1/8068 8069/1/8069 8281/1/8281
+f 8069/1/8069 8070/1/8070 8283/1/8283
+f 8283/1/8283 8070/1/8070 8071/1/8071
+f 8071/1/8071 8072/1/8072 8163/1/8163
+f 8163/1/8163 8072/1/8072 8073/1/8073
+f 8162/1/8162 8073/1/8073 8074/1/8074
+f 8075/1/8075 8161/1/8161 8074/1/8074
+f 8076/1/8076 8161/1/8161 8075/1/8075
+f 8077/1/8077 8159/1/8159 8076/1/8076
+f 8077/1/8077 7829/1/7829 7828/1/7828
+f 8112/1/8112 7866/1/7866 8067/1/8067
+f 7829/1/7829 7867/1/7867 7868/1/7868
+f 7864/1/7864 7865/1/7865 7866/1/7866
+f 8066/1/8066 7868/1/7868 7867/1/7867
+f 8066/1/8066 8112/1/8112 8067/1/8067
+f 8110/1/8110 8109/1/8109 8111/1/8111
+f 8112/1/8112 7864/1/7864 7866/1/7866
+f 8107/1/8107 7861/1/7861 8109/1/8109
+f 7864/1/7864 7863/1/7863 7865/1/7865
+f 8108/1/8108 7863/1/7863 7862/1/7862
+f 8108/1/8108 8107/1/8107 8109/1/8109
+f 8104/1/8104 8105/1/8105 8106/1/8106
+f 8107/1/8107 7859/1/7859 7861/1/7861
+f 8094/1/8094 7850/1/7850 8105/1/8105
+f 7859/1/7859 7858/1/7858 7860/1/7860
+f 8102/1/8102 7858/1/7858 7857/1/7857
+f 8101/1/8101 7857/1/7857 7856/1/7856
+f 7855/1/7855 8101/1/8101 7856/1/7856
+f 8100/1/8100 7855/1/7855 7854/1/7854
+f 8100/1/8100 7854/1/7854 8099/1/8099
+f 8100/1/8100 8099/1/8099 8094/1/8094
+f 8094/1/8094 8095/1/8095 8092/1/8092
+f 8092/1/8092 7848/1/7848 8094/1/8094
+f 8095/1/8095 8096/1/8096 8092/1/8092
+f 8095/1/8095 7849/1/7849 8096/1/8096
+f 8098/1/8098 7852/1/7852 8097/1/8097
+f 7853/1/7853 7850/1/7850 7852/1/7852
+f 8094/1/8094 7848/1/7848 7850/1/7850
+f 8095/1/8095 7851/1/7851 7849/1/7849
+f 8096/1/8096 7849/1/7849 7847/1/7847
+f 8096/1/8096 7847/1/7847 8093/1/8093
+f 8092/1/8092 8096/1/8096 8093/1/8093
+f 8092/1/8092 7845/1/7845 7848/1/7848
+f 8088/1/8088 7843/1/7843 8090/1/8090
+f 7845/1/7845 7844/1/7844 7846/1/7846
+f 8089/1/8089 7844/1/7844 7842/1/7842
+f 8089/1/8089 8088/1/8088 8091/1/8091
+f 8085/1/8085 8086/1/8086 8087/1/8087
+f 8088/1/8088 7837/1/7837 7843/1/7843
+f 8084/1/8084 7834/1/7834 8086/1/8086
+f 7837/1/7837 7836/1/7836 7839/1/7839
+f 8082/1/8082 8083/1/8083 7841/1/7841
+f 8085/1/8085 7839/1/7839 7836/1/7836
+f 8085/1/8085 8084/1/8084 8086/1/8086
+f 8082/1/8082 8080/1/8080 8083/1/8083
+f 8078/1/8078 7831/1/7831 8080/1/8080
+f 8084/1/8084 7833/1/7833 7834/1/7834
+f 7834/1/7834 7835/1/7835 7838/1/7838
+f 8001/1/8001 8003/1/8003 7835/1/7835
+f 8001/1/8001 8002/1/8002 8003/1/8003
+f 8000/1/8000 8002/1/8002 8001/1/8001
+f 8000/1/8000 7986/1/7986 8002/1/8002
+f 8004/1/8004 8003/1/8003 8002/1/8002
+f 7951/1/7951 7840/1/7840 8004/1/8004
+f 7983/1/7983 7984/1/7984 7976/1/7976
+f 7976/1/7976 7972/1/7972 7973/1/7973
+f 7973/1/7973 7972/1/7972 7969/1/7969
+f 7977/1/7977 7949/1/7949 7951/1/7951
+f 7949/1/7949 7948/1/7948 7950/1/7950
+f 7948/1/7948 7947/1/7947 7841/1/7841
+f 7981/1/7981 7945/1/7945 7946/1/7946
+f 7981/1/7981 7982/1/7982 7945/1/7945
+f 7841/1/7841 7947/1/7947 7944/1/7944
+f 8374/1/8374 8331/1/8331 7841/1/7841
+f 8374/1/8374 8332/1/8332 8331/1/8331
+f 8370/1/8370 8332/1/8332 8374/1/8374
+f 8370/1/8370 8333/1/8333 8332/1/8332
+f 8318/1/8318 8332/1/8332 8333/1/8333
+f 8318/1/8318 8333/1/8333 8320/1/8320
+f 8319/1/8319 8318/1/8318 8320/1/8320
+f 8319/1/8319 8320/1/8320 8366/1/8366
+f 8304/1/8304 8319/1/8319 8366/1/8366
+f 8304/1/8304 8366/1/8366 8367/1/8367
+f 8367/1/8367 8303/1/8303 8304/1/8304
+f 8304/1/8304 8303/1/8303 8302/1/8302
+f 8302/1/8302 8364/1/8364 8304/1/8304
+f 8304/1/8304 8364/1/8364 8365/1/8365
+f 8364/1/8364 8338/1/8338 8365/1/8365
+f 8365/1/8365 8338/1/8338 8334/1/8334
+f 8365/1/8365 8334/1/8334 8369/1/8369
+f 8369/1/8369 8368/1/8368 8365/1/8365
+f 8368/1/8368 8319/1/8319 8365/1/8365
+f 8319/1/8319 8368/1/8368 8317/1/8317
+f 8369/1/8369 8371/1/8371 8368/1/8368
+f 8371/1/8371 8333/1/8333 8368/1/8368
+f 8371/1/8371 8336/1/8336 8333/1/8333
+f 8335/1/8335 8333/1/8333 8336/1/8336
+f 8388/1/8388 8335/1/8335 8336/1/8336
+f 8336/1/8336 8387/1/8387 8388/1/8388
+f 8389/1/8389 8388/1/8388 8387/1/8387
+f 8393/1/8393 8389/1/8389 8387/1/8387
+f 8393/1/8393 8387/1/8387 8395/1/8395
+f 8395/1/8395 8394/1/8394 8393/1/8393
+f 8393/1/8393 8394/1/8394 8392/1/8392
+f 8393/1/8393 8392/1/8392 8391/1/8391
+f 8391/1/8391 8392/1/8392 8390/1/8390
+f 8391/1/8391 8390/1/8390 8389/1/8389
+f 8392/1/8392 8388/1/8388 8390/1/8390
+f 8394/1/8394 8388/1/8388 8392/1/8392
+f 8394/1/8394 8385/1/8385 8388/1/8388
+f 8396/1/8396 8385/1/8385 8394/1/8394
+f 8396/1/8396 8400/1/8400 8385/1/8385
+f 8386/1/8386 8385/1/8385 8400/1/8400
+f 8386/1/8386 8400/1/8400 8399/1/8399
+f 8397/1/8397 8386/1/8386 8399/1/8399
+f 8399/1/8399 8398/1/8398 8397/1/8397
+f 8397/1/8397 8398/1/8398 8396/1/8396
+f 8397/1/8397 8396/1/8396 8395/1/8395
+f 8395/1/8395 8386/1/8386 8397/1/8397
+f 8399/1/8399 8400/1/8400 8398/1/8398
+f 8372/1/8372 8385/1/8385 8386/1/8386
+f 8387/1/8387 8372/1/8372 8386/1/8386
+f 8373/1/8373 8372/1/8372 8387/1/8387
+f 8372/1/8372 8373/1/8373 8371/1/8371
+f 8335/1/8335 8385/1/8385 8372/1/8372
+f 8369/1/8369 8335/1/8335 8372/1/8372
+f 8398/1/8398 8400/1/8400 8396/1/8396
+f 8396/1/8396 8394/1/8394 8395/1/8395
+f 8395/1/8395 8387/1/8387 8386/1/8386
+f 8391/1/8391 8389/1/8389 8393/1/8393
+f 8389/1/8389 8390/1/8390 8388/1/8388
+f 8373/1/8373 8387/1/8387 8336/1/8336
+f 8385/1/8385 8335/1/8335 8388/1/8388
+f 8334/1/8334 8333/1/8333 8335/1/8335
+f 8334/1/8334 8303/1/8303 8333/1/8333
+f 8373/1/8373 8336/1/8336 8371/1/8371
+f 8372/1/8372 8371/1/8371 8369/1/8369
+f 8369/1/8369 8334/1/8334 8335/1/8335
+f 8303/1/8303 8334/1/8334 8338/1/8338
+f 8303/1/8303 8338/1/8338 8301/1/8301
+f 8301/1/8301 8338/1/8338 8348/1/8348
+f 8301/1/8301 8348/1/8348 8299/1/8299
+f 8300/1/8300 8301/1/8301 8299/1/8299
+f 8300/1/8300 8299/1/8299 8298/1/8298
+f 8298/1/8298 8362/1/8362 8300/1/8300
+f 8300/1/8300 8362/1/8362 8363/1/8363
+f 8300/1/8300 8363/1/8363 8302/1/8302
+f 8362/1/8362 8349/1/8349 8363/1/8363
+f 8363/1/8363 8349/1/8349 8348/1/8348
+f 8363/1/8363 8348/1/8348 8364/1/8364
+f 8362/1/8362 8350/1/8350 8349/1/8349
+f 8297/1/8297 8349/1/8349 8350/1/8350
+f 8297/1/8297 8350/1/8350 8295/1/8295
+f 8296/1/8296 8297/1/8297 8295/1/8295
+f 8295/1/8295 8293/1/8293 8296/1/8296
+f 8296/1/8296 8293/1/8293 8294/1/8294
+f 8360/1/8360 8296/1/8296 8294/1/8294
+f 8291/1/8291 8360/1/8360 8294/1/8294
+f 8291/1/8291 8359/1/8359 8360/1/8360
+f 8352/1/8352 8360/1/8360 8359/1/8359
+f 8352/1/8352 8359/1/8359 8353/1/8353
+f 8287/1/8287 8352/1/8352 8353/1/8353
+f 8311/1/8311 8287/1/8287 8353/1/8353
+f 8311/1/8311 8353/1/8353 8355/1/8355
+f 8355/1/8355 8313/1/8313 8311/1/8311
+f 8312/1/8312 8311/1/8311 8313/1/8313
+f 8312/1/8312 8313/1/8313 8314/1/8314
+f 8314/1/8314 8357/1/8357 8312/1/8312
+f 8312/1/8312 8357/1/8357 8358/1/8358
+f 8312/1/8312 8358/1/8358 8356/1/8356
+f 8310/1/8310 8312/1/8312 8356/1/8356
+f 8288/1/8288 8310/1/8310 8356/1/8356
+f 8288/1/8288 8356/1/8356 8359/1/8359
+f 8292/1/8292 8310/1/8310 8288/1/8288
+f 8292/1/8292 8288/1/8288 8290/1/8290
+f 8292/1/8292 8290/1/8290 8305/1/8305
+f 8292/1/8292 8305/1/8305 8306/1/8306
+f 8306/1/8306 8308/1/8308 8292/1/8292
+f 8306/1/8306 8307/1/8307 8308/1/8308
+f 8308/1/8308 8307/1/8307 8309/1/8309
+f 8308/1/8308 8309/1/8309 8310/1/8310
+f 8311/1/8311 8310/1/8310 8309/1/8309
+f 8309/1/8309 8307/1/8307 8305/1/8305
+f 8306/1/8306 8305/1/8305 8307/1/8307
+f 8305/1/8305 8290/1/8290 8309/1/8309
+f 8309/1/8309 8290/1/8290 8287/1/8287
+f 8290/1/8290 8288/1/8288 8287/1/8287
+f 8287/1/8287 8288/1/8288 8289/1/8289
+f 8289/1/8289 8288/1/8288 8291/1/8291
+f 8289/1/8289 8291/1/8291 8293/1/8293
+f 8293/1/8293 8351/1/8351 8289/1/8289
+f 8289/1/8289 8351/1/8351 8352/1/8352
+f 8351/1/8351 8293/1/8293 8350/1/8350
+f 8351/1/8351 8350/1/8350 8360/1/8360
+f 8360/1/8360 8350/1/8350 8361/1/8361
+f 8292/1/8292 8308/1/8308 8310/1/8310
+f 8356/1/8356 8358/1/8358 8353/1/8353
+f 8357/1/8357 8355/1/8355 8358/1/8358
+f 8357/1/8357 8354/1/8354 8355/1/8355
+f 8314/1/8314 8354/1/8354 8357/1/8357
+f 8314/1/8314 8313/1/8313 8354/1/8354
+f 8312/1/8312 8310/1/8310 8311/1/8311
+f 8354/1/8354 8313/1/8313 8355/1/8355
+f 8353/1/8353 8358/1/8358 8355/1/8355
+f 8309/1/8309 8287/1/8287 8311/1/8311
+f 8289/1/8289 8352/1/8352 8287/1/8287
+f 8353/1/8353 8359/1/8359 8356/1/8356
+f 8351/1/8351 8360/1/8360 8352/1/8352
+f 8288/1/8288 8359/1/8359 8291/1/8291
+f 8361/1/8361 8296/1/8296 8360/1/8360
+f 8296/1/8296 8361/1/8361 8298/1/8298
+f 8293/1/8293 8291/1/8291 8294/1/8294
+f 8298/1/8298 8297/1/8297 8296/1/8296
+f 8350/1/8350 8293/1/8293 8295/1/8295
+f 8299/1/8299 8349/1/8349 8297/1/8297
+f 8361/1/8361 8350/1/8350 8362/1/8362
+f 8298/1/8298 8361/1/8361 8362/1/8362
+f 8298/1/8298 8299/1/8299 8297/1/8297
+f 8302/1/8302 8301/1/8301 8300/1/8300
+f 8299/1/8299 8348/1/8348 8349/1/8349
+f 8364/1/8364 8348/1/8348 8338/1/8338
+f 8302/1/8302 8363/1/8363 8364/1/8364
+f 8302/1/8302 8303/1/8303 8301/1/8301
+f 8367/1/8367 8339/1/8339 8303/1/8303
+f 8339/1/8339 8337/1/8337 8303/1/8303
+f 8303/1/8303 8337/1/8337 8320/1/8320
+f 8337/1/8337 8339/1/8339 8340/1/8340
+f 8340/1/8340 8375/1/8375 8337/1/8337
+f 8366/1/8366 8337/1/8337 8375/1/8375
+f 8377/1/8377 8375/1/8375 8340/1/8340
+f 8377/1/8377 8340/1/8340 8343/1/8343
+f 8377/1/8377 8343/1/8343 8381/1/8381
+f 8380/1/8380 8377/1/8377 8381/1/8381
+f 8381/1/8381 8347/1/8347 8380/1/8380
+f 8380/1/8380 8347/1/8347 8342/1/8342
+f 8380/1/8380 8342/1/8342 8379/1/8379
+f 8342/1/8342 8344/1/8344 8379/1/8379
+f 8379/1/8379 8344/1/8344 8382/1/8382
+f 8382/1/8382 8378/1/8378 8379/1/8379
+f 8379/1/8379 8378/1/8378 8377/1/8377
+f 8378/1/8378 8376/1/8376 8377/1/8377
+f 8378/1/8378 8339/1/8339 8376/1/8376
+f 8341/1/8341 8339/1/8339 8378/1/8378
+f 8383/1/8383 8341/1/8341 8378/1/8378
+f 8383/1/8383 8346/1/8346 8341/1/8341
+f 8345/1/8345 8341/1/8341 8346/1/8346
+f 8384/1/8384 8345/1/8345 8346/1/8346
+f 8382/1/8382 8345/1/8345 8384/1/8384
+f 8384/1/8384 8383/1/8383 8382/1/8382
+f 8344/1/8344 8341/1/8341 8345/1/8345
+f 8344/1/8344 8340/1/8340 8341/1/8341
+f 8384/1/8384 8346/1/8346 8383/1/8383
+f 8382/1/8382 8383/1/8383 8378/1/8378
+f 8382/1/8382 8344/1/8344 8345/1/8345
+f 8342/1/8342 8340/1/8340 8344/1/8344
+f 8347/1/8347 8343/1/8343 8342/1/8342
+f 8379/1/8379 8377/1/8377 8380/1/8380
+f 8381/1/8381 8343/1/8343 8347/1/8347
+f 8342/1/8342 8343/1/8343 8340/1/8340
+f 8377/1/8377 8376/1/8376 8375/1/8375
+f 8367/1/8367 8375/1/8375 8376/1/8376
+f 8340/1/8340 8339/1/8339 8341/1/8341
+f 8376/1/8376 8339/1/8339 8367/1/8367
+f 8367/1/8367 8366/1/8366 8375/1/8375
+f 8365/1/8365 8319/1/8319 8304/1/8304
+f 8366/1/8366 8320/1/8320 8337/1/8337
+f 8317/1/8317 8318/1/8318 8319/1/8319
+f 8333/1/8333 8303/1/8303 8320/1/8320
+f 8316/1/8316 8332/1/8332 8318/1/8318
+f 8368/1/8368 8333/1/8333 8370/1/8370
+f 8317/1/8317 8368/1/8368 8370/1/8370
+f 8317/1/8317 8316/1/8316 8318/1/8318
+f 7916/1/7916 8114/1/8114 8315/1/8315
+f 8316/1/8316 8331/1/8331 8332/1/8332
+f 7841/1/7841 8331/1/8331 8082/1/8082
+f 8082/1/8082 8115/1/8115 8116/1/8116
+f 8149/1/8149 8152/1/8152 8115/1/8115
+f 8150/1/8150 8151/1/8151 8149/1/8149
+f 8153/1/8153 8154/1/8154 8150/1/8150
+f 8166/1/8166 8164/1/8164 8153/1/8153
+f 8167/1/8167 8164/1/8164 8166/1/8166
+f 8167/1/8167 8168/1/8168 8169/1/8169
+f 8169/1/8169 8168/1/8168 8170/1/8170
+f 8173/1/8173 8170/1/8170 8175/1/8175
+f 8177/1/8177 8175/1/8175 8178/1/8178
+f 8178/1/8178 8180/1/8180 8177/1/8177
+f 8180/1/8180 8182/1/8182 8181/1/8181
+f 8181/1/8181 8182/1/8182 8183/1/8183
+f 8183/1/8183 8185/1/8185 8184/1/8184
+f 8184/1/8184 8185/1/8185 8186/1/8186
+f 8187/1/8187 8186/1/8186 8189/1/8189
+f 8058/1/8058 8054/1/8054 8189/1/8189
+f 8053/1/8053 8054/1/8054 8058/1/8058
+f 8052/1/8052 8050/1/8050 8053/1/8053
+f 8051/1/8051 8046/1/8046 8052/1/8052
+f 8057/1/8057 7901/1/7901 8056/1/8056
+f 8059/1/8059 7899/1/7899 7898/1/7898
+f 8145/1/8145 7898/1/7898 7893/1/7893
+f 8143/1/8143 7893/1/7893 7891/1/7891
+f 7890/1/7890 7892/1/7892 7891/1/7891
+f 8148/1/8148 7892/1/7892 7890/1/7890
+f 8059/1/8059 8147/1/8147 8148/1/8148
+f 8060/1/8060 8051/1/8051 8059/1/8059
+f 7886/1/7886 7871/1/7871 8061/1/8061
+f 7873/1/7873 8321/1/8321 8060/1/8060
+f 7873/1/7873 7872/1/7872 7874/1/7874
+f 7830/1/7830 8062/1/8062 7872/1/7872
+f 7825/1/7825 7829/1/7829 7830/1/7830
+f 7828/1/7828 7829/1/7829 7825/1/7825
+f 7822/1/7822 7831/1/7831 7828/1/7828
+f 7821/1/7821 7832/1/7832 7822/1/7822
+f 7999/1/7999 7821/1/7821 7815/1/7815
+f 7997/1/7997 7815/1/7815 7816/1/7816
+f 7995/1/7995 7998/1/7998 7997/1/7997
+f 7992/1/7992 7998/1/7998 7995/1/7995
+f 7988/1/7988 7991/1/7991 7992/1/7992
+f 7987/1/7987 7988/1/7988 7989/1/7989
+f 7987/1/7987 7989/1/7989 7970/1/7970
+f 7972/1/7972 7970/1/7970 7969/1/7969
+f 7973/1/7973 7969/1/7969 7974/1/7974
+f 7979/1/7979 7974/1/7974 7978/1/7978
+f 7980/1/7980 7946/1/7946 7979/1/7979
+f 7961/1/7961 7962/1/7962 7965/1/7965
+f 7980/1/7980 7981/1/7981 7946/1/7946
+f 7961/1/7961 7959/1/7959 7962/1/7962
+f 7961/1/7961 7958/1/7958 7959/1/7959
+f 7981/1/7981 7963/1/7963 7982/1/7982
+f 7945/1/7945 7982/1/7982 7942/1/7942
+f 7915/1/7915 7941/1/7941 7942/1/7942
+f 7916/1/7916 7941/1/7941 7915/1/7915
+f 7913/1/7913 8114/1/8114 7916/1/7916
+f 7903/1/7903 7901/1/7901 7913/1/7913
+f 7900/1/7900 7901/1/7901 7903/1/7903
+f 7887/1/7887 7900/1/7900 7788/1/7788
+f 7888/1/7888 7887/1/7887 7788/1/7788
+f 7871/1/7871 7887/1/7887 7888/1/7888
+f 7826/1/7826 7871/1/7871 7889/1/7889
+f 7824/1/7824 7826/1/7826 7827/1/7827
+f 7820/1/7820 7823/1/7823 7824/1/7824
+f 7814/1/7814 7817/1/7817 7820/1/7820
+f 7818/1/7818 7911/1/7911 7819/1/7819
+f 7819/1/7819 7911/1/7911 7910/1/7910
+f 7910/1/7910 7911/1/7911 7908/1/7908
+f 7801/1/7801 7806/1/7806 7807/1/7807
+f 7814/1/7814 7808/1/7808 7810/1/7810
+f 7809/1/7809 7813/1/7813 7810/1/7810
+f 7811/1/7811 7813/1/7813 7809/1/7809
+f 7994/1/7994 7996/1/7996 7811/1/7811
+f 7990/1/7990 7994/1/7994 7993/1/7993
+f 7971/1/7971 7993/1/7993 7968/1/7968
+f 7966/1/7966 7971/1/7971 7968/1/7968
+f 7956/1/7956 7966/1/7966 7957/1/7957
+f 7960/1/7960 7964/1/7964 7956/1/7956
+f 7960/1/7960 7958/1/7958 7961/1/7961
+f 7763/1/7763 7759/1/7759 7764/1/7764
+f 7958/1/7958 7953/1/7953 7959/1/7959
+f 7754/1/7754 7757/1/7757 7954/1/7954
+f 7952/1/7952 7959/1/7959 7953/1/7953
+f 7952/1/7952 7914/1/7914 7943/1/7943
+f 7902/1/7902 7912/1/7912 7914/1/7914
+f 7782/1/7782 7783/1/7783 7902/1/7902
+f 7779/1/7779 7780/1/7780 7782/1/7782
+f 7777/1/7777 7778/1/7778 7779/1/7779
+f 7776/1/7776 7778/1/7778 7777/1/7777
+f 7775/1/7775 7776/1/7776 7772/1/7772
+f 7785/1/7785 7775/1/7775 7792/1/7792
+f 7785/1/7785 7792/1/7792 7789/1/7789
+f 7792/1/7792 7793/1/7793 7789/1/7789
+f 7789/1/7789 7793/1/7793 7794/1/7794
+f 7786/1/7786 7785/1/7785 7789/1/7789
+f 7786/1/7786 7791/1/7791 7787/1/7787
+f 7904/1/7904 7884/1/7884 7791/1/7791
+f 7906/1/7906 7885/1/7885 7904/1/7904
+f 7908/1/7908 7911/1/7911 7906/1/7906
+f 7907/1/7907 7910/1/7910 7908/1/7908
+f 7790/1/7790 7797/1/7797 7905/1/7905
+f 7909/1/7909 7798/1/7798 7907/1/7907
+f 7795/1/7795 7796/1/7796 7797/1/7797
+f 7796/1/7796 7774/1/7774 7769/1/7769
+f 7801/1/7801 7807/1/7807 7798/1/7798
+f 7806/1/7806 7801/1/7801 7800/1/7800
+f 7800/1/7800 7805/1/7805 7806/1/7806
+f 7812/1/7812 7805/1/7805 7804/1/7804
+f 7967/1/7967 7804/1/7804 7803/1/7803
+f 7768/1/7768 7955/1/7955 7803/1/7803
+f 7799/1/7799 7770/1/7770 7802/1/7802
+f 7766/1/7766 7767/1/7767 7768/1/7768
+f 7799/1/7799 7769/1/7769 7770/1/7770
+f 7769/1/7769 7771/1/7771 7765/1/7765
+f 7761/1/7761 7762/1/7762 7766/1/7766
+f 7771/1/7771 7760/1/7760 7765/1/7765
+f 7761/1/7761 7759/1/7759 7762/1/7762
+f 7773/1/7773 7755/1/7755 7760/1/7760
+f 7759/1/7759 7754/1/7754 7954/1/7954
+f 7755/1/7755 7756/1/7756 7751/1/7751
+f 7754/1/7754 7753/1/7753 7757/1/7757
+f 7752/1/7752 7758/1/7758 7753/1/7753
+f 7756/1/7756 7752/1/7752 7751/1/7751
+f 8401/1/8401 8402/1/8402 8403/1/8403
+f 8401/1/8401 8403/1/8403 8404/1/8404
+f 8405/1/8405 8401/1/8401 8404/1/8404
+f 8405/1/8405 8404/1/8404 8410/1/8410
+f 8427/1/8427 8405/1/8405 8410/1/8410
+f 8427/1/8427 8410/1/8410 8428/1/8428
+f 8431/1/8431 8427/1/8427 8428/1/8428
+f 8431/1/8431 8428/1/8428 8571/1/8571
+f 8452/1/8452 8431/1/8431 8571/1/8571
+f 8567/1/8567 8452/1/8452 8571/1/8571
+f 8567/1/8567 8571/1/8571 8570/1/8570
+f 8565/1/8565 8567/1/8567 8570/1/8570
+f 8565/1/8565 8570/1/8570 8568/1/8568
+f 8568/1/8568 8569/1/8569 8565/1/8565
+f 8565/1/8565 8569/1/8569 8566/1/8566
+f 8565/1/8565 8566/1/8566 8563/1/8563
+f 8563/1/8563 8564/1/8564 8565/1/8565
+f 8563/1/8563 8562/1/8562 8564/1/8564
+f 8562/1/8562 8560/1/8560 8564/1/8564
+f 8564/1/8564 8560/1/8560 8452/1/8452
+f 8451/1/8451 8452/1/8452 8560/1/8560
+f 8572/1/8572 8451/1/8451 8560/1/8560
+f 8572/1/8572 8560/1/8560 8561/1/8561
+f 8559/1/8559 8572/1/8572 8561/1/8561
+f 8559/1/8559 8561/1/8561 8558/1/8558
+f 8558/1/8558 8552/1/8552 8559/1/8559
+f 8552/1/8552 8543/1/8543 8559/1/8559
+f 8559/1/8559 8543/1/8543 8573/1/8573
+f 8559/1/8559 8573/1/8573 8450/1/8450
+f 8450/1/8450 8573/1/8573 8453/1/8453
+f 8450/1/8450 8453/1/8453 8444/1/8444
+f 8444/1/8444 8446/1/8446 8450/1/8450
+f 8446/1/8446 8449/1/8449 8450/1/8450
+f 8450/1/8450 8449/1/8449 8572/1/8572
+f 8446/1/8446 8448/1/8448 8449/1/8449
+f 8449/1/8449 8448/1/8448 8451/1/8451
+f 8448/1/8448 8443/1/8443 8451/1/8451
+f 8448/1/8448 8447/1/8447 8443/1/8443
+f 8443/1/8443 8447/1/8447 8442/1/8442
+f 8443/1/8443 8442/1/8442 8440/1/8440
+f 8440/1/8440 8433/1/8433 8443/1/8443
+f 8443/1/8443 8433/1/8433 8429/1/8429
+f 8443/1/8443 8429/1/8429 8452/1/8452
+f 8433/1/8433 8430/1/8430 8429/1/8429
+f 8429/1/8429 8430/1/8430 8427/1/8427
+f 8433/1/8433 8434/1/8434 8430/1/8430
+f 8434/1/8434 8432/1/8432 8430/1/8430
+f 8430/1/8430 8432/1/8432 8405/1/8405
+f 8432/1/8432 8406/1/8406 8405/1/8405
+f 8432/1/8432 8436/1/8436 8406/1/8406
+f 8406/1/8406 8436/1/8436 8402/1/8402
+f 8436/1/8436 8438/1/8438 8402/1/8402
+f 8402/1/8402 8438/1/8438 8408/1/8408
+f 8438/1/8438 8459/1/8459 8408/1/8408
+f 8408/1/8408 8459/1/8459 8460/1/8460
+f 8408/1/8408 8460/1/8460 8414/1/8414
+f 8414/1/8414 8411/1/8411 8408/1/8408
+f 8408/1/8408 8411/1/8411 8407/1/8407
+f 8403/1/8403 8408/1/8408 8407/1/8407
+f 8409/1/8409 8407/1/8407 8411/1/8411
+f 8409/1/8409 8411/1/8411 8412/1/8412
+f 8410/1/8410 8409/1/8409 8412/1/8412
+f 8417/1/8417 8410/1/8410 8412/1/8412
+f 8412/1/8412 8415/1/8415 8417/1/8417
+f 8417/1/8417 8415/1/8415 8422/1/8422
+f 8417/1/8417 8422/1/8422 8423/1/8423
+f 8422/1/8422 8424/1/8424 8423/1/8423
+f 8423/1/8423 8424/1/8424 8644/1/8644
+f 8423/1/8423 8644/1/8644 8425/1/8425
+f 8425/1/8425 8426/1/8426 8423/1/8423
+f 8423/1/8423 8426/1/8426 8410/1/8410
+f 8571/1/8571 8426/1/8426 8425/1/8425
+f 8425/1/8425 8644/1/8644 8570/1/8570
+f 8424/1/8424 8642/1/8642 8644/1/8644
+f 8568/1/8568 8644/1/8644 8642/1/8642
+f 8424/1/8424 8471/1/8471 8642/1/8642
+f 8471/1/8471 8643/1/8643 8642/1/8642
+f 8643/1/8643 8578/1/8578 8642/1/8642
+f 8642/1/8642 8578/1/8578 8569/1/8569
+f 8643/1/8643 8577/1/8577 8578/1/8578
+f 8577/1/8577 8566/1/8566 8578/1/8578
+f 8577/1/8577 8574/1/8574 8566/1/8566
+f 8574/1/8574 8575/1/8575 8566/1/8566
+f 8566/1/8566 8575/1/8575 8576/1/8576
+f 8566/1/8566 8576/1/8576 8557/1/8557
+f 8576/1/8576 8554/1/8554 8557/1/8557
+f 8557/1/8557 8554/1/8554 8553/1/8553
+f 8556/1/8556 8557/1/8557 8553/1/8553
+f 8553/1/8553 8551/1/8551 8556/1/8556
+f 8556/1/8556 8551/1/8551 8558/1/8558
+f 8560/1/8560 8556/1/8556 8558/1/8558
+f 8550/1/8550 8551/1/8551 8553/1/8553
+f 8550/1/8550 8553/1/8553 8548/1/8548
+f 8544/1/8544 8550/1/8550 8548/1/8548
+f 8548/1/8548 8545/1/8545 8544/1/8544
+f 8545/1/8545 8540/1/8540 8544/1/8544
+f 8540/1/8540 8542/1/8542 8544/1/8544
+f 8544/1/8544 8542/1/8542 8549/1/8549
+f 8549/1/8549 8542/1/8542 8543/1/8543
+f 8543/1/8543 8542/1/8542 8528/1/8528
+f 8528/1/8528 8527/1/8527 8543/1/8543
+f 8543/1/8543 8527/1/8527 8526/1/8526
+f 8527/1/8527 8497/1/8497 8526/1/8526
+f 8497/1/8497 8525/1/8525 8526/1/8526
+f 8573/1/8573 8526/1/8526 8525/1/8525
+f 8497/1/8497 8473/1/8473 8525/1/8525
+f 8453/1/8453 8525/1/8525 8473/1/8473
+f 8453/1/8453 8473/1/8473 8454/1/8454
+f 8454/1/8454 8473/1/8473 8455/1/8455
+f 8454/1/8454 8455/1/8455 8445/1/8445
+f 8444/1/8444 8454/1/8454 8445/1/8445
+f 8444/1/8444 8445/1/8445 8439/1/8439
+f 8439/1/8439 8441/1/8441 8444/1/8444
+f 8439/1/8439 8440/1/8440 8441/1/8441
+f 8439/1/8439 8435/1/8435 8440/1/8440
+f 8440/1/8440 8435/1/8435 8434/1/8434
+f 8439/1/8439 8437/1/8437 8435/1/8435
+f 8435/1/8435 8437/1/8437 8436/1/8436
+f 8445/1/8445 8437/1/8437 8439/1/8439
+f 8445/1/8445 8456/1/8456 8437/1/8437
+f 8437/1/8437 8456/1/8456 8438/1/8438
+f 8455/1/8455 8456/1/8456 8445/1/8445
+f 8455/1/8455 8458/1/8458 8456/1/8456
+f 8459/1/8459 8456/1/8456 8458/1/8458
+f 8458/1/8458 8487/1/8487 8459/1/8459
+f 8459/1/8459 8487/1/8487 8485/1/8485
+f 8487/1/8487 8486/1/8486 8485/1/8485
+f 8485/1/8485 8486/1/8486 8484/1/8484
+f 8485/1/8485 8484/1/8484 8476/1/8476
+f 8460/1/8460 8485/1/8485 8476/1/8476
+f 8460/1/8460 8476/1/8476 8461/1/8461
+f 8461/1/8461 8476/1/8476 8463/1/8463
+f 8461/1/8461 8463/1/8463 8462/1/8462
+f 8414/1/8414 8461/1/8461 8462/1/8462
+f 8462/1/8462 8419/1/8419 8414/1/8414
+f 8419/1/8419 8413/1/8413 8414/1/8414
+f 8418/1/8418 8413/1/8413 8419/1/8419
+f 8418/1/8418 8419/1/8419 8464/1/8464
+f 8418/1/8418 8464/1/8464 8467/1/8467
+f 8421/1/8421 8418/1/8418 8467/1/8467
+f 8421/1/8421 8467/1/8467 8468/1/8468
+f 8468/1/8468 8469/1/8469 8421/1/8421
+f 8469/1/8469 8420/1/8420 8421/1/8421
+f 8420/1/8420 8416/1/8416 8421/1/8421
+f 8415/1/8415 8416/1/8416 8420/1/8420
+f 8472/1/8472 8420/1/8420 8469/1/8469
+f 8472/1/8472 8470/1/8470 8420/1/8420
+f 8470/1/8470 8471/1/8471 8420/1/8420
+f 8422/1/8422 8420/1/8420 8471/1/8471
+f 8470/1/8470 8599/1/8599 8471/1/8471
+f 8599/1/8599 8593/1/8593 8471/1/8471
+f 8599/1/8599 8592/1/8592 8593/1/8593
+f 8592/1/8592 8591/1/8591 8593/1/8593
+f 8593/1/8593 8591/1/8591 8577/1/8577
+f 8592/1/8592 8590/1/8590 8591/1/8591
+f 8590/1/8590 8587/1/8587 8591/1/8591
+f 8591/1/8591 8587/1/8587 8574/1/8574
+f 8587/1/8587 8585/1/8585 8574/1/8574
+f 8574/1/8574 8585/1/8585 8581/1/8581
+f 8585/1/8585 8582/1/8582 8581/1/8581
+f 8581/1/8581 8582/1/8582 8580/1/8580
+f 8581/1/8581 8580/1/8580 8575/1/8575
+f 8575/1/8575 8580/1/8580 8579/1/8579
+f 8580/1/8580 8555/1/8555 8579/1/8579
+f 8555/1/8555 8554/1/8554 8579/1/8579
+f 8548/1/8548 8554/1/8554 8555/1/8555
+f 8555/1/8555 8546/1/8546 8548/1/8548
+f 8555/1/8555 8584/1/8584 8546/1/8546
+f 8584/1/8584 8547/1/8547 8546/1/8546
+f 8546/1/8546 8547/1/8547 8541/1/8541
+f 8546/1/8546 8541/1/8541 8545/1/8545
+f 8547/1/8547 8539/1/8539 8541/1/8541
+f 8541/1/8541 8539/1/8539 8532/1/8532
+f 8541/1/8541 8532/1/8532 8540/1/8540
+f 8532/1/8532 8528/1/8528 8540/1/8540
+f 8532/1/8532 8529/1/8529 8528/1/8528
+f 8528/1/8528 8529/1/8529 8497/1/8497
+f 8497/1/8497 8529/1/8529 8530/1/8530
+f 8497/1/8497 8530/1/8530 8531/1/8531
+f 8531/1/8531 8720/1/8720 8497/1/8497
+f 8723/1/8723 8497/1/8497 8720/1/8720
+f 8720/1/8720 8722/1/8722 8723/1/8723
+f 8723/1/8723 8722/1/8722 8725/1/8725
+f 8725/1/8725 8498/1/8498 8723/1/8723
+f 8723/1/8723 8498/1/8498 8495/1/8495
+f 8498/1/8498 8496/1/8496 8495/1/8495
+f 8495/1/8495 8496/1/8496 8457/1/8457
+f 8495/1/8495 8457/1/8457 8497/1/8497
+f 8457/1/8457 8496/1/8496 8494/1/8494
+f 8494/1/8494 8493/1/8493 8457/1/8457
+f 8457/1/8457 8493/1/8493 8492/1/8492
+f 8457/1/8457 8492/1/8492 8458/1/8458
+f 8458/1/8458 8492/1/8492 8488/1/8488
+f 8724/1/8724 8488/1/8488 8492/1/8492
+f 8724/1/8724 8492/1/8492 8722/1/8722
+f 8722/1/8722 8721/1/8721 8724/1/8724
+f 8721/1/8721 8804/1/8804 8724/1/8724
+f 8724/1/8724 8804/1/8804 8761/1/8761
+f 8724/1/8724 8761/1/8761 8759/1/8759
+f 8759/1/8759 8761/1/8761 8762/1/8762
+f 8762/1/8762 8768/1/8768 8759/1/8759
+f 8759/1/8759 8768/1/8768 8769/1/8769
+f 8759/1/8759 8769/1/8769 8770/1/8770
+f 8770/1/8770 8774/1/8774 8759/1/8759
+f 8759/1/8759 8774/1/8774 8775/1/8775
+f 8759/1/8759 8775/1/8775 8776/1/8776
+f 8776/1/8776 8777/1/8777 8759/1/8759
+f 8759/1/8759 8777/1/8777 8778/1/8778
+f 8759/1/8759 8778/1/8778 8771/1/8771
+f 8771/1/8771 8772/1/8772 8759/1/8759
+f 8759/1/8759 8772/1/8772 8773/1/8773
+f 8759/1/8759 8773/1/8773 8763/1/8763
+f 8763/1/8763 8764/1/8764 8759/1/8759
+f 8764/1/8764 8766/1/8766 8759/1/8759
+f 8759/1/8759 8766/1/8766 8767/1/8767
+f 8759/1/8759 8767/1/8767 8765/1/8765
+f 8759/1/8759 8765/1/8765 8760/1/8760
+f 8759/1/8759 8760/1/8760 8757/1/8757
+f 8757/1/8757 8489/1/8489 8759/1/8759
+f 8759/1/8759 8489/1/8489 8488/1/8488
+f 8488/1/8488 8489/1/8489 8486/1/8486
+f 8486/1/8486 8489/1/8489 8490/1/8490
+f 8486/1/8486 8490/1/8490 8491/1/8491
+f 8755/1/8755 8486/1/8486 8491/1/8491
+f 8755/1/8755 8491/1/8491 8756/1/8756
+f 8752/1/8752 8755/1/8755 8756/1/8756
+f 8752/1/8752 8756/1/8756 8753/1/8753
+f 8752/1/8752 8753/1/8753 8749/1/8749
+f 8749/1/8749 8521/1/8521 8752/1/8752
+f 8752/1/8752 8521/1/8521 8524/1/8524
+f 8752/1/8752 8524/1/8524 8754/1/8754
+f 8754/1/8754 8524/1/8524 8490/1/8490
+f 8754/1/8754 8490/1/8490 8757/1/8757
+f 8757/1/8757 8758/1/8758 8754/1/8754
+f 8754/1/8754 8758/1/8758 8755/1/8755
+f 8523/1/8523 8524/1/8524 8521/1/8521
+f 8523/1/8523 8521/1/8521 8522/1/8522
+f 8753/1/8753 8523/1/8523 8522/1/8522
+f 8753/1/8753 8522/1/8522 8750/1/8750
+f 8750/1/8750 8522/1/8522 8520/1/8520
+f 8750/1/8750 8520/1/8520 8751/1/8751
+f 8750/1/8750 8751/1/8751 8747/1/8747
+f 8749/1/8749 8750/1/8750 8747/1/8747
+f 8747/1/8747 8519/1/8519 8749/1/8749
+f 8747/1/8747 8514/1/8514 8519/1/8519
+f 8518/1/8518 8519/1/8519 8514/1/8514
+f 8518/1/8518 8514/1/8514 8517/1/8517
+f 8748/1/8748 8518/1/8518 8517/1/8517
+f 8748/1/8748 8517/1/8517 8746/1/8746
+f 8745/1/8745 8748/1/8748 8746/1/8746
+f 8745/1/8745 8746/1/8746 8744/1/8744
+f 8744/1/8744 8736/1/8736 8745/1/8745
+f 8736/1/8736 8507/1/8507 8745/1/8745
+f 8745/1/8745 8507/1/8507 8514/1/8514
+f 8513/1/8513 8514/1/8514 8507/1/8507
+f 8513/1/8513 8507/1/8507 8515/1/8515
+f 8744/1/8744 8513/1/8513 8515/1/8515
+f 8744/1/8744 8515/1/8515 8743/1/8743
+f 8743/1/8743 8515/1/8515 8516/1/8516
+f 8743/1/8743 8516/1/8516 8742/1/8742
+f 8743/1/8743 8742/1/8742 8736/1/8736
+f 8736/1/8736 8742/1/8742 8741/1/8741
+f 8736/1/8736 8741/1/8741 8740/1/8740
+f 8740/1/8740 8739/1/8739 8736/1/8736
+f 8739/1/8739 8738/1/8738 8736/1/8736
+f 8736/1/8736 8738/1/8738 8737/1/8737
+f 8736/1/8736 8737/1/8737 8733/1/8733
+f 8733/1/8733 8505/1/8505 8736/1/8736
+f 8733/1/8733 8503/1/8503 8505/1/8505
+f 8503/1/8503 8504/1/8504 8505/1/8505
+f 8505/1/8505 8504/1/8504 8506/1/8506
+f 8505/1/8505 8506/1/8506 8507/1/8507
+f 8507/1/8507 8506/1/8506 8508/1/8508
+f 8507/1/8507 8508/1/8508 8509/1/8509
+f 8509/1/8509 8510/1/8510 8507/1/8507
+f 8507/1/8507 8510/1/8510 8511/1/8511
+f 8507/1/8507 8511/1/8511 8512/1/8512
+f 8741/1/8741 8512/1/8512 8511/1/8511
+f 8510/1/8510 8740/1/8740 8511/1/8511
+f 8738/1/8738 8510/1/8510 8509/1/8509
+f 8737/1/8737 8509/1/8509 8508/1/8508
+f 8737/1/8737 8508/1/8508 8506/1/8506
+f 8737/1/8737 8506/1/8506 8734/1/8734
+f 8734/1/8734 8506/1/8506 8504/1/8504
+f 8734/1/8734 8504/1/8504 8735/1/8735
+f 8731/1/8731 8734/1/8734 8735/1/8735
+f 8731/1/8731 8735/1/8735 8732/1/8732
+f 8731/1/8731 8732/1/8732 8729/1/8729
+f 8729/1/8729 8496/1/8496 8731/1/8731
+f 8731/1/8731 8496/1/8496 8503/1/8503
+f 8496/1/8496 8502/1/8502 8503/1/8503
+f 8496/1/8496 8501/1/8501 8502/1/8502
+f 8732/1/8732 8502/1/8502 8501/1/8501
+f 8732/1/8732 8501/1/8501 8730/1/8730
+f 8730/1/8730 8501/1/8501 8500/1/8500
+f 8730/1/8730 8500/1/8500 8727/1/8727
+f 8726/1/8726 8730/1/8730 8727/1/8727
+f 8726/1/8726 8727/1/8727 8722/1/8722
+f 8722/1/8722 8493/1/8493 8726/1/8726
+f 8722/1/8722 8727/1/8727 8728/1/8728
+f 8727/1/8727 8499/1/8499 8728/1/8728
+f 8728/1/8728 8499/1/8499 8725/1/8725
+f 8729/1/8729 8730/1/8730 8726/1/8726
+f 8726/1/8726 8494/1/8494 8729/1/8729
+f 8727/1/8727 8500/1/8500 8499/1/8499
+f 8496/1/8496 8499/1/8499 8500/1/8500
+f 8500/1/8500 8501/1/8501 8496/1/8496
+f 8729/1/8729 8732/1/8732 8730/1/8730
+f 8735/1/8735 8502/1/8502 8732/1/8732
+f 8733/1/8733 8734/1/8734 8731/1/8731
+f 8735/1/8735 8504/1/8504 8502/1/8502
+f 8503/1/8503 8502/1/8502 8504/1/8504
+f 8731/1/8731 8503/1/8503 8733/1/8733
+f 8733/1/8733 8737/1/8737 8734/1/8734
+f 8738/1/8738 8509/1/8509 8737/1/8737
+f 8739/1/8739 8510/1/8510 8738/1/8738
+f 8739/1/8739 8740/1/8740 8510/1/8510
+f 8741/1/8741 8511/1/8511 8740/1/8740
+f 8742/1/8742 8512/1/8512 8741/1/8741
+f 8742/1/8742 8516/1/8516 8512/1/8512
+f 8515/1/8515 8512/1/8512 8516/1/8516
+f 8515/1/8515 8507/1/8507 8512/1/8512
+f 8736/1/8736 8505/1/8505 8507/1/8507
+f 8743/1/8743 8736/1/8736 8744/1/8744
+f 8746/1/8746 8513/1/8513 8744/1/8744
+f 8747/1/8747 8748/1/8748 8745/1/8745
+f 8746/1/8746 8517/1/8517 8513/1/8513
+f 8751/1/8751 8518/1/8518 8748/1/8748
+f 8517/1/8517 8514/1/8514 8513/1/8513
+f 8520/1/8520 8519/1/8519 8518/1/8518
+f 8521/1/8521 8519/1/8519 8520/1/8520
+f 8745/1/8745 8514/1/8514 8747/1/8747
+f 8747/1/8747 8751/1/8751 8748/1/8748
+f 8751/1/8751 8520/1/8520 8518/1/8518
+f 8522/1/8522 8521/1/8521 8520/1/8520
+f 8491/1/8491 8524/1/8524 8523/1/8523
+f 8749/1/8749 8519/1/8519 8521/1/8521
+f 8749/1/8749 8753/1/8753 8750/1/8750
+f 8756/1/8756 8523/1/8523 8753/1/8753
+f 8754/1/8754 8755/1/8755 8752/1/8752
+f 8756/1/8756 8491/1/8491 8523/1/8523
+f 8755/1/8755 8758/1/8758 8486/1/8486
+f 8491/1/8491 8490/1/8490 8524/1/8524
+f 8757/1/8757 8490/1/8490 8489/1/8489
+f 8757/1/8757 8760/1/8760 8758/1/8758
+f 8758/1/8758 8760/1/8760 8975/1/8975
+f 8758/1/8758 8975/1/8975 8960/1/8960
+f 8959/1/8959 8758/1/8758 8960/1/8960
+f 8959/1/8959 8960/1/8960 8961/1/8961
+f 8961/1/8961 9020/1/9020 8959/1/8959
+f 8959/1/8959 9020/1/9020 9032/1/9032
+f 8959/1/8959 9032/1/9032 8484/1/8484
+f 8484/1/8484 9032/1/9032 8479/1/8479
+f 8479/1/8479 8474/1/8474 8484/1/8484
+f 8484/1/8484 8474/1/8474 8475/1/8475
+f 8474/1/8474 8463/1/8463 8475/1/8475
+f 8465/1/8465 8463/1/8463 8474/1/8474
+f 8466/1/8466 8465/1/8465 8474/1/8474
+f 8474/1/8474 8477/1/8477 8466/1/8466
+f 8466/1/8466 8477/1/8477 8478/1/8478
+f 8466/1/8466 8478/1/8478 8481/1/8481
+f 8468/1/8468 8466/1/8466 8481/1/8481
+f 8468/1/8468 8481/1/8481 8605/1/8605
+f 8605/1/8605 8472/1/8472 8468/1/8468
+f 8605/1/8605 8604/1/8604 8472/1/8472
+f 8603/1/8603 8604/1/8604 8605/1/8605
+f 8598/1/8598 8603/1/8603 8605/1/8605
+f 8605/1/8605 8606/1/8606 8598/1/8598
+f 8598/1/8598 8606/1/8606 8607/1/8607
+f 8598/1/8598 8607/1/8607 8597/1/8597
+f 8598/1/8598 8597/1/8597 8594/1/8594
+f 8594/1/8594 8596/1/8596 8598/1/8598
+f 8594/1/8594 8595/1/8595 8596/1/8596
+f 8596/1/8596 8595/1/8595 8600/1/8600
+f 8596/1/8596 8600/1/8600 8603/1/8603
+f 8600/1/8600 8602/1/8602 8603/1/8603
+f 8603/1/8603 8602/1/8602 8601/1/8601
+f 8601/1/8601 8602/1/8602 8599/1/8599
+f 8599/1/8599 8602/1/8602 8600/1/8600
+f 8599/1/8599 8600/1/8600 8595/1/8595
+f 8594/1/8594 8590/1/8590 8595/1/8595
+f 8588/1/8588 8590/1/8590 8594/1/8594
+f 8588/1/8588 8594/1/8594 8589/1/8589
+f 8588/1/8588 8589/1/8589 8586/1/8586
+f 8587/1/8587 8588/1/8588 8586/1/8586
+f 8586/1/8586 8589/1/8589 8583/1/8583
+f 8586/1/8586 8583/1/8583 8582/1/8582
+f 8582/1/8582 8583/1/8583 8555/1/8555
+f 8589/1/8589 8610/1/8610 8583/1/8583
+f 8583/1/8583 8610/1/8610 8584/1/8584
+f 8584/1/8584 8610/1/8610 8611/1/8611
+f 8611/1/8611 8612/1/8612 8584/1/8584
+f 8612/1/8612 8611/1/8611 8613/1/8613
+f 8613/1/8613 8615/1/8615 8612/1/8612
+f 8612/1/8612 8615/1/8615 8616/1/8616
+f 8612/1/8612 8616/1/8616 8547/1/8547
+f 8808/1/8808 8616/1/8616 8615/1/8615
+f 8808/1/8808 8615/1/8615 8814/1/8814
+f 8809/1/8809 8808/1/8808 8814/1/8814
+f 8809/1/8809 8814/1/8814 8815/1/8815
+f 8815/1/8815 8482/1/8482 8809/1/8809
+f 8479/1/8479 8809/1/8809 8482/1/8482
+f 8482/1/8482 8483/1/8483 8479/1/8479
+f 8479/1/8479 8483/1/8483 8480/1/8480
+f 8479/1/8479 8480/1/8480 8478/1/8478
+f 8606/1/8606 8480/1/8480 8483/1/8483
+f 8481/1/8481 8480/1/8480 8606/1/8606
+f 8482/1/8482 8609/1/8609 8483/1/8483
+f 8483/1/8483 8609/1/8609 8608/1/8608
+f 8607/1/8607 8483/1/8483 8608/1/8608
+f 8611/1/8611 8608/1/8608 8609/1/8609
+f 8613/1/8613 8609/1/8609 8482/1/8482
+f 8613/1/8613 8482/1/8482 8614/1/8614
+f 8816/1/8816 8613/1/8613 8614/1/8614
+f 8816/1/8816 8614/1/8614 8818/1/8818
+f 8817/1/8817 8816/1/8816 8818/1/8818
+f 8817/1/8817 8818/1/8818 8819/1/8819
+f 8819/1/8819 8617/1/8617 8817/1/8817
+f 8817/1/8817 8617/1/8617 8619/1/8619
+f 8817/1/8817 8619/1/8619 8815/1/8815
+f 8614/1/8614 8619/1/8619 8617/1/8617
+f 8614/1/8614 8617/1/8617 8618/1/8618
+f 8618/1/8618 8617/1/8617 8620/1/8620
+f 8618/1/8618 8620/1/8620 8621/1/8621
+f 8820/1/8820 8618/1/8618 8621/1/8621
+f 8820/1/8820 8621/1/8621 8822/1/8822
+f 8822/1/8822 8823/1/8823 8820/1/8820
+f 8820/1/8820 8823/1/8823 8821/1/8821
+f 8820/1/8820 8821/1/8821 8818/1/8818
+f 8823/1/8823 8622/1/8622 8821/1/8821
+f 8821/1/8821 8622/1/8622 8620/1/8620
+f 8821/1/8821 8620/1/8620 8819/1/8819
+f 8823/1/8823 8623/1/8623 8622/1/8622
+f 8621/1/8621 8622/1/8622 8623/1/8623
+f 8621/1/8621 8623/1/8623 8624/1/8624
+f 8624/1/8624 8623/1/8623 8625/1/8625
+f 8624/1/8624 8625/1/8625 8626/1/8626
+f 8627/1/8627 8624/1/8624 8626/1/8626
+f 8628/1/8628 8627/1/8627 8626/1/8626
+f 8827/1/8827 8628/1/8628 8626/1/8626
+f 8827/1/8827 8626/1/8626 8825/1/8825
+f 8827/1/8827 8825/1/8825 8824/1/8824
+f 8824/1/8824 8828/1/8828 8827/1/8827
+f 8824/1/8824 8829/1/8829 8828/1/8828
+f 8829/1/8829 8629/1/8629 8828/1/8828
+f 8828/1/8828 8629/1/8629 8628/1/8628
+f 8829/1/8829 8630/1/8630 8629/1/8629
+f 8630/1/8630 8631/1/8631 8629/1/8629
+f 8629/1/8629 8631/1/8631 8627/1/8627
+f 8631/1/8631 8632/1/8632 8627/1/8627
+f 8632/1/8632 8633/1/8633 8627/1/8627
+f 8627/1/8627 8633/1/8633 8634/1/8634
+f 8627/1/8627 8634/1/8634 8635/1/8635
+f 8835/1/8835 8627/1/8627 8635/1/8635
+f 8835/1/8835 8635/1/8635 8837/1/8837
+f 8836/1/8836 8835/1/8835 8837/1/8837
+f 8836/1/8836 8837/1/8837 8838/1/8838
+f 8838/1/8838 8638/1/8638 8836/1/8836
+f 8836/1/8836 8638/1/8638 8636/1/8636
+f 8836/1/8836 8636/1/8636 8834/1/8834
+f 8834/1/8834 8636/1/8636 8634/1/8634
+f 8834/1/8834 8634/1/8634 8833/1/8833
+f 8833/1/8833 8824/1/8824 8834/1/8834
+f 8834/1/8834 8824/1/8824 8835/1/8835
+f 8833/1/8833 8832/1/8832 8824/1/8824
+f 8824/1/8824 8832/1/8832 8831/1/8831
+f 8824/1/8824 8831/1/8831 8830/1/8830
+f 8830/1/8830 8831/1/8831 8631/1/8631
+f 8832/1/8832 8633/1/8633 8831/1/8831
+f 8833/1/8833 8634/1/8634 8832/1/8832
+f 8636/1/8636 8638/1/8638 8637/1/8637
+f 8635/1/8635 8636/1/8636 8637/1/8637
+f 8637/1/8637 8638/1/8638 8639/1/8639
+f 8637/1/8637 8639/1/8639 8640/1/8640
+f 8839/1/8839 8637/1/8637 8640/1/8640
+f 8839/1/8839 8640/1/8640 8842/1/8842
+f 8841/1/8841 8839/1/8839 8842/1/8842
+f 8841/1/8841 8842/1/8842 8843/1/8843
+f 8843/1/8843 8537/1/8537 8841/1/8841
+f 8841/1/8841 8537/1/8537 8641/1/8641
+f 8841/1/8841 8641/1/8641 8840/1/8840
+f 8840/1/8840 8641/1/8641 8639/1/8639
+f 8840/1/8840 8639/1/8639 8838/1/8838
+f 8838/1/8838 8839/1/8839 8840/1/8840
+f 8536/1/8536 8641/1/8641 8537/1/8537
+f 8536/1/8536 8537/1/8537 8533/1/8533
+f 8844/1/8844 8536/1/8536 8533/1/8533
+f 8844/1/8844 8533/1/8533 8811/1/8811
+f 8811/1/8811 8875/1/8875 8844/1/8844
+f 8844/1/8844 8875/1/8875 8874/1/8874
+f 8874/1/8874 8868/1/8868 8844/1/8844
+f 8844/1/8844 8868/1/8868 8867/1/8867
+f 8844/1/8844 8867/1/8867 8871/1/8871
+f 8871/1/8871 8870/1/8870 8844/1/8844
+f 8844/1/8844 8870/1/8870 8873/1/8873
+f 8844/1/8844 8873/1/8873 8872/1/8872
+f 8872/1/8872 8848/1/8848 8844/1/8844
+f 8844/1/8844 8848/1/8848 8846/1/8846
+f 8844/1/8844 8846/1/8846 8845/1/8845
+f 8843/1/8843 8844/1/8844 8845/1/8845
+f 8845/1/8845 8535/1/8535 8843/1/8843
+f 8843/1/8843 8535/1/8535 8538/1/8538
+f 8533/1/8533 8538/1/8538 8535/1/8535
+f 8534/1/8534 8533/1/8533 8535/1/8535
+f 8529/1/8529 8533/1/8533 8534/1/8534
+f 8529/1/8529 8534/1/8534 8715/1/8715
+f 8715/1/8715 8534/1/8534 8850/1/8850
+f 8850/1/8850 8847/1/8847 8715/1/8715
+f 8715/1/8715 8847/1/8847 8851/1/8851
+f 8715/1/8715 8851/1/8851 8883/1/8883
+f 8883/1/8883 8884/1/8884 8715/1/8715
+f 8715/1/8715 8884/1/8884 8714/1/8714
+f 8715/1/8715 8714/1/8714 8712/1/8712
+f 8712/1/8712 8713/1/8713 8715/1/8715
+f 8715/1/8715 8713/1/8713 8716/1/8716
+f 8716/1/8716 8717/1/8717 8715/1/8715
+f 8715/1/8715 8717/1/8717 8718/1/8718
+f 8715/1/8715 8718/1/8718 8720/1/8720
+f 8720/1/8720 8971/1/8971 8715/1/8715
+f 8530/1/8530 8715/1/8715 8971/1/8971
+f 8530/1/8530 8971/1/8971 8645/1/8645
+f 8971/1/8971 8974/1/8974 8645/1/8645
+f 8645/1/8645 8974/1/8974 8647/1/8647
+f 8647/1/8647 8646/1/8646 8645/1/8645
+f 8531/1/8531 8645/1/8645 8646/1/8646
+f 8646/1/8646 8965/1/8965 8531/1/8531
+f 8648/1/8648 8965/1/8965 8646/1/8646
+f 8966/1/8966 8965/1/8965 8648/1/8648
+f 8653/1/8653 8966/1/8966 8648/1/8648
+f 8652/1/8652 8653/1/8653 8648/1/8648
+f 8652/1/8652 8648/1/8648 8649/1/8649
+f 8649/1/8649 8969/1/8969 8652/1/8652
+f 8652/1/8652 8969/1/8969 8968/1/8968
+f 8652/1/8652 8968/1/8968 8654/1/8654
+f 8654/1/8654 8968/1/8968 8967/1/8967
+f 8654/1/8654 8967/1/8967 8653/1/8653
+f 8967/1/8967 8968/1/8968 8966/1/8966
+f 8966/1/8966 8968/1/8968 8969/1/8969
+f 8970/1/8970 8969/1/8969 8649/1/8649
+f 8650/1/8650 8970/1/8970 8649/1/8649
+f 8649/1/8649 8647/1/8647 8650/1/8650
+f 8650/1/8650 8647/1/8647 8651/1/8651
+f 8651/1/8651 8972/1/8972 8650/1/8650
+f 8651/1/8651 8973/1/8973 8972/1/8972
+f 8972/1/8972 8973/1/8973 8970/1/8970
+f 8970/1/8970 8973/1/8973 8974/1/8974
+f 8647/1/8647 8973/1/8973 8651/1/8651
+f 8650/1/8650 8972/1/8972 8970/1/8970
+f 8969/1/8969 8970/1/8970 8971/1/8971
+f 8965/1/8965 8969/1/8969 8971/1/8971
+f 8649/1/8649 8648/1/8648 8647/1/8647
+f 8654/1/8654 8653/1/8653 8652/1/8652
+f 8653/1/8653 8967/1/8967 8966/1/8966
+f 8966/1/8966 8969/1/8969 8965/1/8965
+f 8648/1/8648 8646/1/8646 8647/1/8647
+f 8647/1/8647 8974/1/8974 8973/1/8973
+f 8970/1/8970 8974/1/8974 8971/1/8971
+f 8965/1/8965 8971/1/8971 8720/1/8720
+f 8720/1/8720 8718/1/8718 8721/1/8721
+f 8718/1/8718 8803/1/8803 8721/1/8721
+f 8719/1/8719 8803/1/8803 8718/1/8718
+f 8719/1/8719 8798/1/8798 8803/1/8803
+f 8779/1/8779 8803/1/8803 8798/1/8798
+f 8793/1/8793 8779/1/8779 8798/1/8798
+f 8793/1/8793 8798/1/8798 8797/1/8797
+f 8793/1/8793 8797/1/8797 8796/1/8796
+f 8796/1/8796 8792/1/8792 8793/1/8793
+f 8793/1/8793 8792/1/8792 8789/1/8789
+f 8793/1/8793 8789/1/8789 8782/1/8782
+f 8782/1/8782 8789/1/8789 8787/1/8787
+f 8782/1/8782 8787/1/8787 8784/1/8784
+f 8784/1/8784 8780/1/8780 8782/1/8782
+f 8782/1/8782 8780/1/8780 8779/1/8779
+f 8761/1/8761 8779/1/8779 8780/1/8780
+f 8784/1/8784 8781/1/8781 8780/1/8780
+f 8781/1/8781 8768/1/8768 8780/1/8780
+f 8786/1/8786 8781/1/8781 8784/1/8784
+f 8925/1/8925 8786/1/8786 8784/1/8784
+f 8784/1/8784 8788/1/8788 8925/1/8925
+f 8791/1/8791 8925/1/8925 8788/1/8788
+f 8787/1/8787 8791/1/8791 8788/1/8788
+f 8787/1/8787 8790/1/8790 8791/1/8791
+f 8794/1/8794 8791/1/8791 8790/1/8790
+f 8794/1/8794 8790/1/8790 8795/1/8795
+f 8800/1/8800 8794/1/8794 8795/1/8795
+f 8799/1/8799 8800/1/8800 8795/1/8795
+f 8796/1/8796 8799/1/8799 8795/1/8795
+f 8706/1/8706 8799/1/8799 8796/1/8796
+f 8706/1/8706 8796/1/8796 8707/1/8707
+f 8706/1/8706 8707/1/8707 8703/1/8703
+f 8706/1/8706 8703/1/8703 8701/1/8701
+f 8701/1/8701 8703/1/8703 8702/1/8702
+f 8701/1/8701 8702/1/8702 8700/1/8700
+f 8700/1/8700 8662/1/8662 8701/1/8701
+f 8661/1/8661 8701/1/8701 8662/1/8662
+f 8661/1/8661 8662/1/8662 8657/1/8657
+f 8657/1/8657 8659/1/8659 8661/1/8661
+f 8661/1/8661 8659/1/8659 8800/1/8800
+f 8657/1/8657 8656/1/8656 8659/1/8659
+f 8656/1/8656 8660/1/8660 8659/1/8659
+f 8659/1/8659 8660/1/8660 8794/1/8794
+f 8801/1/8801 8794/1/8794 8660/1/8660
+f 8660/1/8660 8887/1/8887 8801/1/8801
+f 8801/1/8801 8887/1/8887 8930/1/8930
+f 8801/1/8801 8930/1/8930 8929/1/8929
+f 8929/1/8929 8930/1/8930 8931/1/8931
+f 8929/1/8929 8931/1/8931 8932/1/8932
+f 8932/1/8932 8927/1/8927 8929/1/8929
+f 8929/1/8929 8927/1/8927 8794/1/8794
+f 8932/1/8932 8935/1/8935 8927/1/8927
+f 8935/1/8935 8936/1/8936 8927/1/8927
+f 8927/1/8927 8936/1/8936 8928/1/8928
+f 8927/1/8927 8928/1/8928 8791/1/8791
+f 8928/1/8928 8926/1/8926 8791/1/8791
+f 8928/1/8928 8936/1/8936 8926/1/8926
+f 8926/1/8926 8936/1/8936 8935/1/8935
+f 8926/1/8926 8935/1/8935 8924/1/8924
+f 8924/1/8924 8923/1/8923 8926/1/8926
+f 8926/1/8926 8923/1/8923 8925/1/8925
+f 8924/1/8924 8921/1/8921 8923/1/8923
+f 8923/1/8923 8921/1/8921 8922/1/8922
+f 8922/1/8922 8785/1/8785 8923/1/8923
+f 8923/1/8923 8785/1/8785 8783/1/8783
+f 8923/1/8923 8783/1/8783 8786/1/8786
+f 8785/1/8785 8774/1/8774 8783/1/8783
+f 8922/1/8922 8776/1/8776 8785/1/8785
+f 8921/1/8921 8920/1/8920 8922/1/8922
+f 8922/1/8922 8920/1/8920 8778/1/8778
+f 8921/1/8921 8919/1/8919 8920/1/8920
+f 8919/1/8919 8906/1/8906 8920/1/8920
+f 8920/1/8920 8906/1/8906 8771/1/8771
+f 8919/1/8919 8909/1/8909 8906/1/8906
+f 8909/1/8909 8904/1/8904 8906/1/8906
+f 8906/1/8906 8904/1/8904 8882/1/8882
+f 8906/1/8906 8882/1/8882 8773/1/8773
+f 8901/1/8901 8882/1/8882 8904/1/8904
+f 8904/1/8904 8905/1/8905 8901/1/8901
+f 8901/1/8901 8905/1/8905 8902/1/8902
+f 8901/1/8901 8902/1/8902 8900/1/8900
+f 8900/1/8900 8881/1/8881 8901/1/8901
+f 8900/1/8900 8880/1/8880 8881/1/8881
+f 8766/1/8766 8881/1/8881 8880/1/8880
+f 8898/1/8898 8880/1/8880 8900/1/8900
+f 8899/1/8899 8898/1/8898 8900/1/8900
+f 8900/1/8900 8903/1/8903 8899/1/8899
+f 8899/1/8899 8903/1/8903 8902/1/8902
+f 8889/1/8889 8899/1/8899 8902/1/8902
+f 8889/1/8889 8902/1/8902 8910/1/8910
+f 8910/1/8910 8886/1/8886 8889/1/8889
+f 8885/1/8885 8889/1/8889 8886/1/8886
+f 8885/1/8885 8886/1/8886 8673/1/8673
+f 8673/1/8673 8665/1/8665 8885/1/8885
+f 8885/1/8885 8665/1/8665 8672/1/8672
+f 8885/1/8885 8672/1/8672 8888/1/8888
+f 8888/1/8888 8672/1/8672 8890/1/8890
+f 8890/1/8890 8891/1/8891 8888/1/8888
+f 8888/1/8888 8891/1/8891 8892/1/8892
+f 8889/1/8889 8888/1/8888 8892/1/8892
+f 8891/1/8891 8897/1/8897 8892/1/8892
+f 8892/1/8892 8897/1/8897 8899/1/8899
+f 8894/1/8894 8897/1/8897 8891/1/8891
+f 8877/1/8877 8894/1/8894 8891/1/8891
+f 8891/1/8891 8893/1/8893 8877/1/8877
+f 8877/1/8877 8893/1/8893 8861/1/8861
+f 8877/1/8877 8861/1/8861 8863/1/8863
+f 8863/1/8863 8876/1/8876 8877/1/8877
+f 8877/1/8877 8876/1/8876 8895/1/8895
+f 8876/1/8876 8812/1/8812 8895/1/8895
+f 8812/1/8812 8878/1/8878 8895/1/8895
+f 8895/1/8895 8878/1/8878 8896/1/8896
+f 8895/1/8895 8896/1/8896 8894/1/8894
+f 8878/1/8878 8879/1/8879 8896/1/8896
+f 8896/1/8896 8879/1/8879 8897/1/8897
+f 8897/1/8897 8879/1/8879 8898/1/8898
+f 8878/1/8878 8805/1/8805 8879/1/8879
+f 8765/1/8765 8879/1/8879 8805/1/8805
+f 8806/1/8806 8805/1/8805 8878/1/8878
+f 8760/1/8760 8805/1/8805 8806/1/8806
+f 8806/1/8806 8807/1/8807 8760/1/8760
+f 8760/1/8760 8807/1/8807 8808/1/8808
+f 8808/1/8808 8807/1/8807 8810/1/8810
+f 8810/1/8810 8807/1/8807 8811/1/8811
+f 8811/1/8811 8539/1/8539 8810/1/8810
+f 8810/1/8810 8539/1/8539 8616/1/8616
+f 8807/1/8807 8813/1/8813 8811/1/8811
+f 8807/1/8807 8812/1/8812 8813/1/8813
+f 8807/1/8807 8806/1/8806 8812/1/8812
+f 8812/1/8812 8806/1/8806 8878/1/8878
+f 8813/1/8813 8812/1/8812 8876/1/8876
+f 8813/1/8813 8876/1/8876 8875/1/8875
+f 8875/1/8875 8876/1/8876 8865/1/8865
+f 8863/1/8863 8865/1/8865 8876/1/8876
+f 8860/1/8860 8865/1/8865 8863/1/8863
+f 8863/1/8863 8857/1/8857 8860/1/8860
+f 8860/1/8860 8857/1/8857 8858/1/8858
+f 8860/1/8860 8858/1/8858 8855/1/8855
+f 8855/1/8855 8859/1/8859 8860/1/8860
+f 8859/1/8859 8864/1/8864 8860/1/8860
+f 8859/1/8859 8866/1/8866 8864/1/8864
+f 8866/1/8866 8867/1/8867 8864/1/8864
+f 8852/1/8852 8866/1/8866 8859/1/8859
+f 8852/1/8852 8869/1/8869 8866/1/8866
+f 8869/1/8869 8870/1/8870 8866/1/8866
+f 8849/1/8849 8869/1/8869 8852/1/8852
+f 8852/1/8852 8689/1/8689 8849/1/8849
+f 8690/1/8690 8849/1/8849 8689/1/8689
+f 8690/1/8690 8689/1/8689 8686/1/8686
+f 8686/1/8686 8691/1/8691 8690/1/8690
+f 8690/1/8690 8691/1/8691 8847/1/8847
+f 8690/1/8690 8847/1/8847 8846/1/8846
+f 8686/1/8686 8687/1/8687 8691/1/8691
+f 8687/1/8687 8693/1/8693 8691/1/8691
+f 8691/1/8691 8693/1/8693 8698/1/8698
+f 8691/1/8691 8698/1/8698 8883/1/8883
+f 8697/1/8697 8698/1/8698 8693/1/8693
+f 8693/1/8693 8699/1/8699 8697/1/8697
+f 8697/1/8697 8699/1/8699 8702/1/8702
+f 8697/1/8697 8702/1/8702 8705/1/8705
+f 8705/1/8705 8710/1/8710 8697/1/8697
+f 8705/1/8705 8709/1/8709 8710/1/8710
+f 8712/1/8712 8710/1/8710 8709/1/8709
+f 8708/1/8708 8709/1/8709 8705/1/8705
+f 8703/1/8703 8708/1/8708 8705/1/8705
+f 8705/1/8705 8704/1/8704 8703/1/8703
+f 8708/1/8708 8711/1/8711 8709/1/8709
+f 8713/1/8713 8709/1/8709 8711/1/8711
+f 8707/1/8707 8711/1/8711 8708/1/8708
+f 8802/1/8802 8711/1/8711 8707/1/8707
+f 8707/1/8707 8797/1/8797 8802/1/8802
+f 8719/1/8719 8711/1/8711 8802/1/8802
+f 8719/1/8719 8717/1/8717 8711/1/8711
+f 8705/1/8705 8702/1/8702 8704/1/8704
+f 8693/1/8693 8696/1/8696 8699/1/8699
+f 8700/1/8700 8699/1/8699 8696/1/8696
+f 8696/1/8696 8695/1/8695 8700/1/8700
+f 8695/1/8695 8678/1/8678 8700/1/8700
+f 8695/1/8695 8694/1/8694 8678/1/8678
+f 8678/1/8678 8694/1/8694 8684/1/8684
+f 8678/1/8678 8684/1/8684 8681/1/8681
+f 8681/1/8681 8677/1/8677 8678/1/8678
+f 8678/1/8678 8677/1/8677 8675/1/8675
+f 8678/1/8678 8675/1/8675 8662/1/8662
+f 8662/1/8662 8675/1/8675 8674/1/8674
+f 8662/1/8662 8674/1/8674 8658/1/8658
+f 8674/1/8674 8671/1/8671 8658/1/8658
+f 8658/1/8658 8671/1/8671 8663/1/8663
+f 8658/1/8658 8663/1/8663 8655/1/8655
+f 8657/1/8657 8658/1/8658 8655/1/8655
+f 8655/1/8655 8663/1/8663 8664/1/8664
+f 8664/1/8664 8667/1/8667 8655/1/8655
+f 8655/1/8655 8667/1/8667 8656/1/8656
+f 8667/1/8667 8664/1/8664 8673/1/8673
+f 8673/1/8673 8887/1/8887 8667/1/8667
+f 8664/1/8664 8663/1/8663 8665/1/8665
+f 8665/1/8665 8663/1/8663 8666/1/8666
+f 8671/1/8671 8666/1/8666 8663/1/8663
+f 8670/1/8670 8666/1/8666 8671/1/8671
+f 8670/1/8670 8668/1/8668 8666/1/8666
+f 8668/1/8668 8669/1/8669 8666/1/8666
+f 8666/1/8666 8669/1/8669 8862/1/8862
+f 8666/1/8666 8862/1/8862 8890/1/8890
+f 8893/1/8893 8890/1/8890 8862/1/8862
+f 8857/1/8857 8862/1/8862 8669/1/8669
+f 8861/1/8861 8862/1/8862 8857/1/8857
+f 8668/1/8668 8854/1/8854 8669/1/8669
+f 8854/1/8854 8853/1/8853 8669/1/8669
+f 8669/1/8669 8853/1/8853 8855/1/8855
+f 8853/1/8853 8852/1/8852 8855/1/8855
+f 8688/1/8688 8852/1/8852 8853/1/8853
+f 8853/1/8853 8680/1/8680 8688/1/8688
+f 8688/1/8688 8680/1/8680 8682/1/8682
+f 8682/1/8682 8689/1/8689 8688/1/8688
+f 8680/1/8680 8679/1/8679 8682/1/8682
+f 8679/1/8679 8683/1/8683 8682/1/8682
+f 8686/1/8686 8682/1/8682 8683/1/8683
+f 8681/1/8681 8683/1/8683 8679/1/8679
+f 8683/1/8683 8681/1/8681 8685/1/8685
+f 8683/1/8683 8685/1/8685 8687/1/8687
+f 8685/1/8685 8692/1/8692 8687/1/8687
+f 8685/1/8685 8684/1/8684 8692/1/8692
+f 8679/1/8679 8680/1/8680 8676/1/8676
+f 8677/1/8677 8679/1/8679 8676/1/8676
+f 8676/1/8676 8680/1/8680 8668/1/8668
+f 8680/1/8680 8856/1/8856 8668/1/8668
+f 8853/1/8853 8856/1/8856 8680/1/8680
+f 8854/1/8854 8856/1/8856 8853/1/8853
+f 8668/1/8668 8856/1/8856 8854/1/8854
+f 8676/1/8676 8668/1/8668 8670/1/8670
+f 8675/1/8675 8676/1/8676 8670/1/8670
+f 8674/1/8674 8670/1/8670 8671/1/8671
+f 8675/1/8675 8670/1/8670 8674/1/8674
+f 8677/1/8677 8676/1/8676 8675/1/8675
+f 8681/1/8681 8679/1/8679 8677/1/8677
+f 8685/1/8685 8681/1/8681 8684/1/8684
+f 8684/1/8684 8694/1/8694 8692/1/8692
+f 8692/1/8692 8694/1/8694 8695/1/8695
+f 8692/1/8692 8695/1/8695 8696/1/8696
+f 8692/1/8692 8696/1/8696 8693/1/8693
+f 8697/1/8697 8710/1/8710 8698/1/8698
+f 8714/1/8714 8698/1/8698 8710/1/8710
+f 8687/1/8687 8692/1/8692 8693/1/8693
+f 8683/1/8683 8687/1/8687 8686/1/8686
+f 8686/1/8686 8689/1/8689 8682/1/8682
+f 8846/1/8846 8849/1/8849 8690/1/8690
+f 8688/1/8688 8689/1/8689 8852/1/8852
+f 8849/1/8849 8872/1/8872 8869/1/8869
+f 8855/1/8855 8852/1/8852 8859/1/8859
+f 8669/1/8669 8855/1/8855 8858/1/8858
+f 8857/1/8857 8669/1/8669 8858/1/8858
+f 8860/1/8860 8864/1/8864 8865/1/8865
+f 8864/1/8864 8868/1/8868 8865/1/8865
+f 8863/1/8863 8861/1/8861 8857/1/8857
+f 8893/1/8893 8862/1/8862 8861/1/8861
+f 8877/1/8877 8895/1/8895 8894/1/8894
+f 8894/1/8894 8896/1/8896 8897/1/8897
+f 8891/1/8891 8890/1/8890 8893/1/8893
+f 8672/1/8672 8666/1/8666 8890/1/8890
+f 8665/1/8665 8666/1/8666 8672/1/8672
+f 8673/1/8673 8664/1/8664 8665/1/8665
+f 8673/1/8673 8886/1/8886 8887/1/8887
+f 8888/1/8888 8889/1/8889 8885/1/8885
+f 8910/1/8910 8912/1/8912 8886/1/8886
+f 8912/1/8912 8931/1/8931 8886/1/8886
+f 8912/1/8912 8933/1/8933 8931/1/8931
+f 8915/1/8915 8933/1/8933 8912/1/8912
+f 8912/1/8912 8914/1/8914 8915/1/8915
+f 8916/1/8916 8915/1/8915 8914/1/8914
+f 8916/1/8916 8914/1/8914 8907/1/8907
+f 8916/1/8916 8907/1/8907 8909/1/8909
+f 8917/1/8917 8916/1/8916 8909/1/8909
+f 8914/1/8914 8913/1/8913 8907/1/8907
+f 8907/1/8907 8913/1/8913 8911/1/8911
+f 8907/1/8907 8911/1/8911 8908/1/8908
+f 8907/1/8907 8908/1/8908 8904/1/8904
+f 8908/1/8908 8911/1/8911 8910/1/8910
+f 8910/1/8910 8905/1/8905 8908/1/8908
+f 8911/1/8911 8913/1/8913 8912/1/8912
+f 8917/1/8917 8915/1/8915 8916/1/8916
+f 8917/1/8917 8918/1/8918 8915/1/8915
+f 8915/1/8915 8918/1/8918 8934/1/8934
+f 8935/1/8935 8934/1/8934 8918/1/8918
+f 8918/1/8918 8917/1/8917 8919/1/8919
+f 8912/1/8912 8913/1/8913 8914/1/8914
+f 8934/1/8934 8933/1/8933 8915/1/8915
+f 8932/1/8932 8933/1/8933 8934/1/8934
+f 8911/1/8911 8912/1/8912 8910/1/8910
+f 8892/1/8892 8899/1/8899 8889/1/8889
+f 8899/1/8899 8897/1/8897 8898/1/8898
+f 8898/1/8898 8879/1/8879 8880/1/8880
+f 8767/1/8767 8880/1/8880 8879/1/8879
+f 8900/1/8900 8902/1/8902 8903/1/8903
+f 8910/1/8910 8902/1/8902 8905/1/8905
+f 8904/1/8904 8908/1/8908 8905/1/8905
+f 8901/1/8901 8881/1/8881 8882/1/8882
+f 8764/1/8764 8882/1/8882 8881/1/8881
+f 8909/1/8909 8907/1/8907 8904/1/8904
+f 8917/1/8917 8909/1/8909 8919/1/8919
+f 8918/1/8918 8919/1/8919 8921/1/8921
+f 8918/1/8918 8921/1/8921 8924/1/8924
+f 8924/1/8924 8935/1/8935 8918/1/8918
+f 8934/1/8934 8935/1/8935 8932/1/8932
+f 8932/1/8932 8931/1/8931 8933/1/8933
+f 8886/1/8886 8931/1/8931 8930/1/8930
+f 8886/1/8886 8930/1/8930 8887/1/8887
+f 8660/1/8660 8667/1/8667 8887/1/8887
+f 8929/1/8929 8794/1/8794 8801/1/8801
+f 8656/1/8656 8667/1/8667 8660/1/8660
+f 8655/1/8655 8656/1/8656 8657/1/8657
+f 8657/1/8657 8662/1/8662 8658/1/8658
+f 8799/1/8799 8701/1/8701 8661/1/8661
+f 8700/1/8700 8678/1/8678 8662/1/8662
+f 8700/1/8700 8702/1/8702 8699/1/8699
+f 8703/1/8703 8704/1/8704 8702/1/8702
+f 8703/1/8703 8707/1/8707 8708/1/8708
+f 8701/1/8701 8799/1/8799 8706/1/8706
+f 8661/1/8661 8800/1/8800 8799/1/8799
+f 8659/1/8659 8794/1/8794 8800/1/8800
+f 8792/1/8792 8795/1/8795 8790/1/8790
+f 8927/1/8927 8791/1/8791 8794/1/8794
+f 8791/1/8791 8926/1/8926 8925/1/8925
+f 8925/1/8925 8923/1/8923 8786/1/8786
+f 8786/1/8786 8783/1/8783 8781/1/8781
+f 8783/1/8783 8769/1/8769 8781/1/8781
+f 8784/1/8784 8787/1/8787 8788/1/8788
+f 8789/1/8789 8790/1/8790 8787/1/8787
+f 8792/1/8792 8790/1/8790 8789/1/8789
+f 8796/1/8796 8795/1/8795 8792/1/8792
+f 8707/1/8707 8796/1/8796 8797/1/8797
+f 8802/1/8802 8797/1/8797 8798/1/8798
+f 8782/1/8782 8779/1/8779 8793/1/8793
+f 8804/1/8804 8803/1/8803 8779/1/8779
+f 8802/1/8802 8798/1/8798 8719/1/8719
+f 8718/1/8718 8717/1/8717 8719/1/8719
+f 8716/1/8716 8711/1/8711 8717/1/8717
+f 8713/1/8713 8711/1/8711 8716/1/8716
+f 8712/1/8712 8709/1/8709 8713/1/8713
+f 8714/1/8714 8710/1/8710 8712/1/8712
+f 8884/1/8884 8698/1/8698 8714/1/8714
+f 8883/1/8883 8698/1/8698 8884/1/8884
+f 8883/1/8883 8851/1/8851 8691/1/8691
+f 8691/1/8691 8851/1/8851 8847/1/8847
+f 8845/1/8845 8847/1/8847 8850/1/8850
+f 8850/1/8850 8534/1/8534 8845/1/8845
+f 8845/1/8845 8534/1/8534 8535/1/8535
+f 8845/1/8845 8846/1/8846 8847/1/8847
+f 8846/1/8846 8848/1/8848 8849/1/8849
+f 8848/1/8848 8872/1/8872 8849/1/8849
+f 8872/1/8872 8873/1/8873 8869/1/8869
+f 8869/1/8869 8873/1/8873 8870/1/8870
+f 8870/1/8870 8871/1/8871 8866/1/8866
+f 8866/1/8866 8871/1/8871 8867/1/8867
+f 8864/1/8864 8867/1/8867 8868/1/8868
+f 8874/1/8874 8865/1/8865 8868/1/8868
+f 8875/1/8875 8865/1/8865 8874/1/8874
+f 8811/1/8811 8813/1/8813 8875/1/8875
+f 8811/1/8811 8533/1/8533 8539/1/8539
+f 8842/1/8842 8536/1/8536 8844/1/8844
+f 8533/1/8533 8537/1/8537 8538/1/8538
+f 8640/1/8640 8641/1/8641 8536/1/8536
+f 8843/1/8843 8538/1/8538 8537/1/8537
+f 8843/1/8843 8842/1/8842 8844/1/8844
+f 8840/1/8840 8839/1/8839 8841/1/8841
+f 8842/1/8842 8640/1/8640 8536/1/8536
+f 8837/1/8837 8637/1/8637 8839/1/8839
+f 8640/1/8640 8639/1/8639 8641/1/8641
+f 8838/1/8838 8639/1/8639 8638/1/8638
+f 8838/1/8838 8837/1/8837 8839/1/8839
+f 8834/1/8834 8835/1/8835 8836/1/8836
+f 8837/1/8837 8635/1/8635 8637/1/8637
+f 8824/1/8824 8627/1/8627 8835/1/8835
+f 8635/1/8635 8634/1/8634 8636/1/8636
+f 8832/1/8832 8634/1/8634 8633/1/8633
+f 8831/1/8831 8633/1/8633 8632/1/8632
+f 8631/1/8631 8831/1/8831 8632/1/8632
+f 8830/1/8830 8631/1/8631 8630/1/8630
+f 8830/1/8830 8630/1/8630 8829/1/8829
+f 8830/1/8830 8829/1/8829 8824/1/8824
+f 8824/1/8824 8825/1/8825 8822/1/8822
+f 8822/1/8822 8624/1/8624 8824/1/8824
+f 8825/1/8825 8826/1/8826 8822/1/8822
+f 8825/1/8825 8625/1/8625 8826/1/8826
+f 8828/1/8828 8628/1/8628 8827/1/8827
+f 8629/1/8629 8627/1/8627 8628/1/8628
+f 8824/1/8824 8624/1/8624 8627/1/8627
+f 8825/1/8825 8626/1/8626 8625/1/8625
+f 8826/1/8826 8625/1/8625 8623/1/8623
+f 8826/1/8826 8623/1/8623 8823/1/8823
+f 8822/1/8822 8826/1/8826 8823/1/8823
+f 8822/1/8822 8621/1/8621 8624/1/8624
+f 8818/1/8818 8618/1/8618 8820/1/8820
+f 8621/1/8621 8620/1/8620 8622/1/8622
+f 8819/1/8819 8620/1/8620 8617/1/8617
+f 8819/1/8819 8818/1/8818 8821/1/8821
+f 8815/1/8815 8816/1/8816 8817/1/8817
+f 8818/1/8818 8614/1/8614 8618/1/8618
+f 8814/1/8814 8613/1/8613 8816/1/8816
+f 8614/1/8614 8482/1/8482 8619/1/8619
+f 8760/1/8760 8809/1/8809 8479/1/8479
+f 8815/1/8815 8619/1/8619 8482/1/8482
+f 8815/1/8815 8814/1/8814 8816/1/8816
+f 8760/1/8760 8808/1/8808 8809/1/8809
+f 8810/1/8810 8616/1/8616 8808/1/8808
+f 8814/1/8814 8615/1/8615 8613/1/8613
+f 8613/1/8613 8611/1/8611 8609/1/8609
+f 8610/1/8610 8608/1/8608 8611/1/8611
+f 8610/1/8610 8597/1/8597 8608/1/8608
+f 8589/1/8589 8597/1/8597 8610/1/8610
+f 8589/1/8589 8594/1/8594 8597/1/8597
+f 8607/1/8607 8608/1/8608 8597/1/8597
+f 8606/1/8606 8483/1/8483 8607/1/8607
+f 8598/1/8598 8596/1/8596 8603/1/8603
+f 8603/1/8603 8601/1/8601 8604/1/8604
+f 8604/1/8604 8601/1/8601 8470/1/8470
+f 8605/1/8605 8481/1/8481 8606/1/8606
+f 8481/1/8481 8478/1/8478 8480/1/8480
+f 8478/1/8478 8477/1/8477 8479/1/8479
+f 8464/1/8464 8465/1/8465 8466/1/8466
+f 8464/1/8464 8462/1/8462 8465/1/8465
+f 8479/1/8479 8477/1/8477 8474/1/8474
+f 9032/1/9032 8975/1/8975 8479/1/8479
+f 9032/1/9032 8976/1/8976 8975/1/8975
+f 9020/1/9020 8976/1/8976 9032/1/9032
+f 9020/1/9020 8977/1/8977 8976/1/8976
+f 8962/1/8962 8976/1/8976 8977/1/8977
+f 8962/1/8962 8977/1/8977 8964/1/8964
+f 8963/1/8963 8962/1/8962 8964/1/8964
+f 8963/1/8963 8964/1/8964 9016/1/9016
+f 8954/1/8954 8963/1/8963 9016/1/9016
+f 8954/1/8954 9016/1/9016 9017/1/9017
+f 9017/1/9017 8953/1/8953 8954/1/8954
+f 8954/1/8954 8953/1/8953 8952/1/8952
+f 8952/1/8952 9014/1/9014 8954/1/8954
+f 8954/1/8954 9014/1/9014 9015/1/9015
+f 9014/1/9014 8982/1/8982 9015/1/9015
+f 9015/1/9015 8982/1/8982 8978/1/8978
+f 9015/1/9015 8978/1/8978 9019/1/9019
+f 9019/1/9019 9018/1/9018 9015/1/9015
+f 9018/1/9018 8963/1/8963 9015/1/9015
+f 8963/1/8963 9018/1/9018 8961/1/8961
+f 9019/1/9019 9021/1/9021 9018/1/9018
+f 9021/1/9021 8977/1/8977 9018/1/9018
+f 9021/1/9021 8980/1/8980 8977/1/8977
+f 8979/1/8979 8977/1/8977 8980/1/8980
+f 8986/1/8986 8979/1/8979 8980/1/8980
+f 8980/1/8980 9024/1/9024 8986/1/8986
+f 9027/1/9027 8986/1/8986 9024/1/9024
+f 9026/1/9026 9027/1/9027 9024/1/9024
+f 9026/1/9026 9024/1/9024 9028/1/9028
+f 9028/1/9028 8988/1/8988 9026/1/9026
+f 9026/1/9026 8988/1/8988 8989/1/8989
+f 9026/1/9026 8989/1/8989 9031/1/9031
+f 9031/1/9031 8989/1/8989 8990/1/8990
+f 9031/1/9031 8990/1/8990 9027/1/9027
+f 8989/1/8989 8986/1/8986 8990/1/8990
+f 8988/1/8988 8986/1/8986 8989/1/8989
+f 8988/1/8988 8987/1/8987 8986/1/8986
+f 8991/1/8991 8987/1/8987 8988/1/8988
+f 8991/1/8991 8992/1/8992 8987/1/8987
+f 9025/1/9025 8987/1/8987 8992/1/8992
+f 9025/1/9025 8992/1/8992 9030/1/9030
+f 9029/1/9029 9025/1/9025 9030/1/9030
+f 9030/1/9030 8993/1/8993 9029/1/9029
+f 9029/1/9029 8993/1/8993 8991/1/8991
+f 9029/1/9029 8991/1/8991 9028/1/9028
+f 9028/1/9028 9025/1/9025 9029/1/9029
+f 9030/1/9030 8992/1/8992 8993/1/8993
+f 9022/1/9022 8987/1/8987 9025/1/9025
+f 9024/1/9024 9022/1/9022 9025/1/9025
+f 9023/1/9023 9022/1/9022 9024/1/9024
+f 9022/1/9022 9023/1/9023 9021/1/9021
+f 8979/1/8979 8987/1/8987 9022/1/9022
+f 9019/1/9019 8979/1/8979 9022/1/9022
+f 8993/1/8993 8992/1/8992 8991/1/8991
+f 8991/1/8991 8988/1/8988 9028/1/9028
+f 9028/1/9028 9024/1/9024 9025/1/9025
+f 9031/1/9031 9027/1/9027 9026/1/9026
+f 9027/1/9027 8990/1/8990 8986/1/8986
+f 9023/1/9023 9024/1/9024 8980/1/8980
+f 8987/1/8987 8979/1/8979 8986/1/8986
+f 8978/1/8978 8977/1/8977 8979/1/8979
+f 8978/1/8978 8953/1/8953 8977/1/8977
+f 9023/1/9023 8980/1/8980 9021/1/9021
+f 9022/1/9022 9021/1/9021 9019/1/9019
+f 9019/1/9019 8978/1/8978 8979/1/8979
+f 8953/1/8953 8978/1/8978 8982/1/8982
+f 8953/1/8953 8982/1/8982 8951/1/8951
+f 8951/1/8951 8982/1/8982 8984/1/8984
+f 8951/1/8951 8984/1/8984 8949/1/8949
+f 8950/1/8950 8951/1/8951 8949/1/8949
+f 8950/1/8950 8949/1/8949 8948/1/8948
+f 8948/1/8948 9012/1/9012 8950/1/8950
+f 8950/1/8950 9012/1/9012 9013/1/9013
+f 8950/1/8950 9013/1/9013 8952/1/8952
+f 9012/1/9012 8985/1/8985 9013/1/9013
+f 9013/1/9013 8985/1/8985 8984/1/8984
+f 9013/1/9013 8984/1/8984 9014/1/9014
+f 9012/1/9012 8994/1/8994 8985/1/8985
+f 8947/1/8947 8985/1/8985 8994/1/8994
+f 8947/1/8947 8994/1/8994 8945/1/8945
+f 8946/1/8946 8947/1/8947 8945/1/8945
+f 8945/1/8945 8943/1/8943 8946/1/8946
+f 8946/1/8946 8943/1/8943 8944/1/8944
+f 9010/1/9010 8946/1/8946 8944/1/8944
+f 8941/1/8941 9010/1/9010 8944/1/8944
+f 8941/1/8941 9009/1/9009 9010/1/9010
+f 8996/1/8996 9010/1/9010 9009/1/9009
+f 8996/1/8996 9009/1/9009 8997/1/8997
+f 8937/1/8937 8996/1/8996 8997/1/8997
+f 9001/1/9001 8937/1/8937 8997/1/8997
+f 9001/1/9001 8997/1/8997 9000/1/9000
+f 9000/1/9000 8999/1/8999 9001/1/9001
+f 9003/1/9003 9001/1/9001 8999/1/8999
+f 9003/1/9003 8999/1/8999 9005/1/9005
+f 9005/1/9005 9006/1/9006 9003/1/9003
+f 9003/1/9003 9006/1/9006 9007/1/9007
+f 9003/1/9003 9007/1/9007 9008/1/9008
+f 9004/1/9004 9003/1/9003 9008/1/9008
+f 8938/1/8938 9004/1/9004 9008/1/9008
+f 8938/1/8938 9008/1/9008 9009/1/9009
+f 8942/1/8942 9004/1/9004 8938/1/8938
+f 8942/1/8942 8938/1/8938 8940/1/8940
+f 8942/1/8942 8940/1/8940 8955/1/8955
+f 8942/1/8942 8955/1/8955 8956/1/8956
+f 8956/1/8956 8958/1/8958 8942/1/8942
+f 8956/1/8956 8957/1/8957 8958/1/8958
+f 8958/1/8958 8957/1/8957 9002/1/9002
+f 8958/1/8958 9002/1/9002 9004/1/9004
+f 9001/1/9001 9004/1/9004 9002/1/9002
+f 9002/1/9002 8957/1/8957 8955/1/8955
+f 8956/1/8956 8955/1/8955 8957/1/8957
+f 8955/1/8955 8940/1/8940 9002/1/9002
+f 9002/1/9002 8940/1/8940 8937/1/8937
+f 8940/1/8940 8938/1/8938 8937/1/8937
+f 8937/1/8937 8938/1/8938 8939/1/8939
+f 8939/1/8939 8938/1/8938 8941/1/8941
+f 8939/1/8939 8941/1/8941 8943/1/8943
+f 8943/1/8943 8995/1/8995 8939/1/8939
+f 8939/1/8939 8995/1/8995 8996/1/8996
+f 8995/1/8995 8943/1/8943 8994/1/8994
+f 8995/1/8995 8994/1/8994 9010/1/9010
+f 9010/1/9010 8994/1/8994 9011/1/9011
+f 8942/1/8942 8958/1/8958 9004/1/9004
+f 9008/1/9008 9007/1/9007 8997/1/8997
+f 9006/1/9006 9000/1/9000 9007/1/9007
+f 9006/1/9006 8998/1/8998 9000/1/9000
+f 9005/1/9005 8998/1/8998 9006/1/9006
+f 9005/1/9005 8999/1/8999 8998/1/8998
+f 9003/1/9003 9004/1/9004 9001/1/9001
+f 8998/1/8998 8999/1/8999 9000/1/9000
+f 8997/1/8997 9007/1/9007 9000/1/9000
+f 9002/1/9002 8937/1/8937 9001/1/9001
+f 8939/1/8939 8996/1/8996 8937/1/8937
+f 8997/1/8997 9009/1/9009 9008/1/9008
+f 8995/1/8995 9010/1/9010 8996/1/8996
+f 8938/1/8938 9009/1/9009 8941/1/8941
+f 9011/1/9011 8946/1/8946 9010/1/9010
+f 8946/1/8946 9011/1/9011 8948/1/8948
+f 8943/1/8943 8941/1/8941 8944/1/8944
+f 8948/1/8948 8947/1/8947 8946/1/8946
+f 8994/1/8994 8943/1/8943 8945/1/8945
+f 8949/1/8949 8985/1/8985 8947/1/8947
+f 9011/1/9011 8994/1/8994 9012/1/9012
+f 8948/1/8948 9011/1/9011 9012/1/9012
+f 8948/1/8948 8949/1/8949 8947/1/8947
+f 8952/1/8952 8951/1/8951 8950/1/8950
+f 8949/1/8949 8984/1/8984 8985/1/8985
+f 9014/1/9014 8984/1/8984 8982/1/8982
+f 8952/1/8952 9013/1/9013 9014/1/9014
+f 8952/1/8952 8953/1/8953 8951/1/8951
+f 9017/1/9017 8983/1/8983 8953/1/8953
+f 8983/1/8983 8981/1/8981 8953/1/8953
+f 8953/1/8953 8981/1/8981 8964/1/8964
+f 8981/1/8981 8983/1/8983 9037/1/9037
+f 9037/1/9037 9033/1/9033 8981/1/8981
+f 9016/1/9016 8981/1/8981 9033/1/9033
+f 9038/1/9038 9033/1/9033 9037/1/9037
+f 9038/1/9038 9037/1/9037 9039/1/9039
+f 9038/1/9038 9039/1/9039 9040/1/9040
+f 9042/1/9042 9038/1/9038 9040/1/9040
+f 9040/1/9040 9041/1/9041 9042/1/9042
+f 9042/1/9042 9041/1/9041 9043/1/9043
+f 9042/1/9042 9043/1/9043 9044/1/9044
+f 9043/1/9043 9045/1/9045 9044/1/9044
+f 9044/1/9044 9045/1/9045 9046/1/9046
+f 9046/1/9046 9035/1/9035 9044/1/9044
+f 9044/1/9044 9035/1/9035 9038/1/9038
+f 9035/1/9035 9034/1/9034 9038/1/9038
+f 9035/1/9035 8983/1/8983 9034/1/9034
+f 9036/1/9036 8983/1/8983 9035/1/9035
+f 9050/1/9050 9036/1/9036 9035/1/9035
+f 9050/1/9050 9049/1/9049 9036/1/9036
+f 9047/1/9047 9036/1/9036 9049/1/9049
+f 9048/1/9048 9047/1/9047 9049/1/9049
+f 9046/1/9046 9047/1/9047 9048/1/9048
+f 9048/1/9048 9050/1/9050 9046/1/9046
+f 9045/1/9045 9036/1/9036 9047/1/9047
+f 9045/1/9045 9037/1/9037 9036/1/9036
+f 9048/1/9048 9049/1/9049 9050/1/9050
+f 9046/1/9046 9050/1/9050 9035/1/9035
+f 9046/1/9046 9045/1/9045 9047/1/9047
+f 9043/1/9043 9037/1/9037 9045/1/9045
+f 9041/1/9041 9039/1/9039 9043/1/9043
+f 9044/1/9044 9038/1/9038 9042/1/9042
+f 9040/1/9040 9039/1/9039 9041/1/9041
+f 9043/1/9043 9039/1/9039 9037/1/9037
+f 9038/1/9038 9034/1/9034 9033/1/9033
+f 9017/1/9017 9033/1/9033 9034/1/9034
+f 9037/1/9037 8983/1/8983 9036/1/9036
+f 9034/1/9034 8983/1/8983 9017/1/9017
+f 9017/1/9017 9016/1/9016 9033/1/9033
+f 9015/1/9015 8963/1/8963 8954/1/8954
+f 9016/1/9016 8964/1/8964 8981/1/8981
+f 8961/1/8961 8962/1/8962 8963/1/8963
+f 8977/1/8977 8953/1/8953 8964/1/8964
+f 8960/1/8960 8976/1/8976 8962/1/8962
+f 9018/1/9018 8977/1/8977 9020/1/9020
+f 8961/1/8961 9018/1/9018 9020/1/9020
+f 8961/1/8961 8960/1/8960 8962/1/8962
+f 8484/1/8484 8758/1/8758 8959/1/8959
+f 8960/1/8960 8975/1/8975 8976/1/8976
+f 8479/1/8479 8975/1/8975 8760/1/8760
+f 8760/1/8760 8765/1/8765 8805/1/8805
+f 8767/1/8767 8879/1/8879 8765/1/8765
+f 8766/1/8766 8880/1/8880 8767/1/8767
+f 8764/1/8764 8881/1/8881 8766/1/8766
+f 8763/1/8763 8882/1/8882 8764/1/8764
+f 8773/1/8773 8882/1/8882 8763/1/8763
+f 8773/1/8773 8772/1/8772 8906/1/8906
+f 8906/1/8906 8772/1/8772 8771/1/8771
+f 8920/1/8920 8771/1/8771 8778/1/8778
+f 8922/1/8922 8778/1/8778 8777/1/8777
+f 8777/1/8777 8776/1/8776 8922/1/8922
+f 8776/1/8776 8775/1/8775 8785/1/8785
+f 8785/1/8785 8775/1/8775 8774/1/8774
+f 8774/1/8774 8770/1/8770 8783/1/8783
+f 8783/1/8783 8770/1/8770 8769/1/8769
+f 8781/1/8781 8769/1/8769 8768/1/8768
+f 8762/1/8762 8780/1/8780 8768/1/8768
+f 8761/1/8761 8780/1/8780 8762/1/8762
+f 8804/1/8804 8779/1/8779 8761/1/8761
+f 8721/1/8721 8803/1/8803 8804/1/8804
+f 8759/1/8759 8488/1/8488 8724/1/8724
+f 8722/1/8722 8492/1/8492 8493/1/8493
+f 8726/1/8726 8493/1/8493 8494/1/8494
+f 8729/1/8729 8494/1/8494 8496/1/8496
+f 8498/1/8498 8499/1/8499 8496/1/8496
+f 8725/1/8725 8499/1/8499 8498/1/8498
+f 8722/1/8722 8728/1/8728 8725/1/8725
+f 8720/1/8720 8721/1/8721 8722/1/8722
+f 8495/1/8495 8497/1/8497 8723/1/8723
+f 8531/1/8531 8965/1/8965 8720/1/8720
+f 8531/1/8531 8530/1/8530 8645/1/8645
+f 8529/1/8529 8715/1/8715 8530/1/8530
+f 8532/1/8532 8533/1/8533 8529/1/8529
+f 8539/1/8539 8533/1/8533 8532/1/8532
+f 8547/1/8547 8616/1/8616 8539/1/8539
+f 8584/1/8584 8612/1/8612 8547/1/8547
+f 8583/1/8583 8584/1/8584 8555/1/8555
+f 8582/1/8582 8555/1/8555 8580/1/8580
+f 8585/1/8585 8586/1/8586 8582/1/8582
+f 8587/1/8587 8586/1/8586 8585/1/8585
+f 8590/1/8590 8588/1/8588 8587/1/8587
+f 8595/1/8595 8590/1/8590 8592/1/8592
+f 8595/1/8595 8592/1/8592 8599/1/8599
+f 8601/1/8601 8599/1/8599 8470/1/8470
+f 8604/1/8604 8470/1/8470 8472/1/8472
+f 8468/1/8468 8472/1/8472 8469/1/8469
+f 8467/1/8467 8466/1/8466 8468/1/8468
+f 8416/1/8416 8418/1/8418 8421/1/8421
+f 8467/1/8467 8464/1/8464 8466/1/8466
+f 8416/1/8416 8413/1/8413 8418/1/8418
+f 8416/1/8416 8412/1/8412 8413/1/8413
+f 8464/1/8464 8419/1/8419 8462/1/8462
+f 8465/1/8465 8462/1/8462 8463/1/8463
+f 8476/1/8476 8475/1/8475 8463/1/8463
+f 8484/1/8484 8475/1/8475 8476/1/8476
+f 8486/1/8486 8758/1/8758 8484/1/8484
+f 8487/1/8487 8488/1/8488 8486/1/8486
+f 8458/1/8458 8488/1/8488 8487/1/8487
+f 8457/1/8457 8458/1/8458 8455/1/8455
+f 8473/1/8473 8457/1/8457 8455/1/8455
+f 8497/1/8497 8457/1/8457 8473/1/8473
+f 8528/1/8528 8497/1/8497 8527/1/8527
+f 8540/1/8540 8528/1/8528 8542/1/8542
+f 8545/1/8545 8541/1/8541 8540/1/8540
+f 8548/1/8548 8546/1/8546 8545/1/8545
+f 8544/1/8544 8549/1/8549 8550/1/8550
+f 8550/1/8550 8549/1/8549 8551/1/8551
+f 8551/1/8551 8549/1/8549 8552/1/8552
+f 8562/1/8562 8557/1/8557 8556/1/8556
+f 8548/1/8548 8553/1/8553 8554/1/8554
+f 8576/1/8576 8579/1/8579 8554/1/8554
+f 8575/1/8575 8579/1/8579 8576/1/8576
+f 8574/1/8574 8581/1/8581 8575/1/8575
+f 8591/1/8591 8574/1/8574 8577/1/8577
+f 8593/1/8593 8577/1/8577 8643/1/8643
+f 8471/1/8471 8593/1/8593 8643/1/8643
+f 8422/1/8422 8471/1/8471 8424/1/8424
+f 8415/1/8415 8420/1/8420 8422/1/8422
+f 8415/1/8415 8412/1/8412 8416/1/8416
+f 8423/1/8423 8410/1/8410 8417/1/8417
+f 8412/1/8412 8411/1/8411 8413/1/8413
+f 8404/1/8404 8407/1/8407 8409/1/8409
+f 8414/1/8414 8413/1/8413 8411/1/8411
+f 8414/1/8414 8460/1/8460 8461/1/8461
+f 8459/1/8459 8485/1/8485 8460/1/8460
+f 8438/1/8438 8456/1/8456 8459/1/8459
+f 8436/1/8436 8437/1/8437 8438/1/8438
+f 8432/1/8432 8435/1/8435 8436/1/8436
+f 8434/1/8434 8435/1/8435 8432/1/8432
+f 8440/1/8440 8434/1/8434 8433/1/8433
+f 8441/1/8441 8440/1/8440 8442/1/8442
+f 8441/1/8441 8442/1/8442 8446/1/8446
+f 8442/1/8442 8447/1/8447 8446/1/8446
+f 8446/1/8446 8447/1/8447 8448/1/8448
+f 8444/1/8444 8441/1/8441 8446/1/8446
+f 8444/1/8444 8453/1/8453 8454/1/8454
+f 8573/1/8573 8525/1/8525 8453/1/8453
+f 8543/1/8543 8526/1/8526 8573/1/8573
+f 8552/1/8552 8549/1/8549 8543/1/8543
+f 8558/1/8558 8551/1/8551 8552/1/8552
+f 8450/1/8450 8572/1/8572 8559/1/8559
+f 8561/1/8561 8560/1/8560 8558/1/8558
+f 8449/1/8449 8451/1/8451 8572/1/8572
+f 8451/1/8451 8443/1/8443 8452/1/8452
+f 8562/1/8562 8556/1/8556 8560/1/8560
+f 8557/1/8557 8562/1/8562 8563/1/8563
+f 8563/1/8563 8566/1/8566 8557/1/8557
+f 8578/1/8578 8566/1/8566 8569/1/8569
+f 8642/1/8642 8569/1/8569 8568/1/8568
+f 8570/1/8570 8644/1/8644 8568/1/8568
+f 8564/1/8564 8567/1/8567 8565/1/8565
+f 8571/1/8571 8425/1/8425 8570/1/8570
+f 8564/1/8564 8452/1/8452 8567/1/8567
+f 8452/1/8452 8429/1/8429 8431/1/8431
+f 8428/1/8428 8426/1/8426 8571/1/8571
+f 8429/1/8429 8427/1/8427 8431/1/8431
+f 8428/1/8428 8410/1/8410 8426/1/8426
+f 8430/1/8430 8405/1/8405 8427/1/8427
+f 8410/1/8410 8404/1/8404 8409/1/8409
+f 8405/1/8405 8406/1/8406 8401/1/8401
+f 8404/1/8404 8403/1/8403 8407/1/8407
+f 8402/1/8402 8408/1/8408 8403/1/8403
+f 8406/1/8406 8402/1/8402 8401/1/8401
+f 9051/1/9051 9052/1/9052 9053/1/9053
+f 9051/1/9051 9053/1/9053 9054/1/9054
+f 9057/1/9057 9051/1/9051 9054/1/9054
+f 9057/1/9057 9054/1/9054 9059/1/9059
+f 9059/1/9059 9058/1/9058 9057/1/9057
+f 9057/1/9057 9058/1/9058 9056/1/9056
+f 9057/1/9057 9056/1/9056 9055/1/9055
+f 9055/1/9055 9056/1/9056 9052/1/9052
+f 9060/1/9060 9052/1/9052 9056/1/9056
+f 9060/1/9060 9056/1/9056 9058/1/9058
+f 9059/1/9059 9060/1/9060 9058/1/9058
+f 9199/1/9199 9060/1/9060 9059/1/9059
+f 9245/1/9245 9060/1/9060 9199/1/9199
+f 9245/1/9245 9199/1/9199 9243/1/9243
+f 9243/1/9243 9244/1/9244 9245/1/9245
+f 9245/1/9245 9244/1/9244 9246/1/9246
+f 9246/1/9246 9053/1/9053 9245/1/9245
+f 9069/1/9069 9053/1/9053 9246/1/9246
+f 9246/1/9246 9070/1/9070 9069/1/9069
+f 9068/1/9068 9069/1/9069 9070/1/9070
+f 9061/1/9061 9068/1/9068 9070/1/9070
+f 9200/1/9200 9061/1/9061 9070/1/9070
+f 9200/1/9200 9054/1/9054 9061/1/9061
+f 9061/1/9061 9054/1/9054 9062/1/9062
+f 9061/1/9061 9062/1/9062 9063/1/9063
+f 9061/1/9061 9063/1/9063 9064/1/9064
+f 9064/1/9064 9066/1/9066 9061/1/9061
+f 9064/1/9064 9065/1/9065 9066/1/9066
+f 9066/1/9066 9065/1/9065 9067/1/9067
+f 9066/1/9066 9067/1/9067 9068/1/9068
+f 9065/1/9065 9063/1/9063 9067/1/9067
+f 9064/1/9064 9063/1/9063 9065/1/9065
+f 9067/1/9067 9063/1/9063 9062/1/9062
+f 9067/1/9067 9062/1/9062 9069/1/9069
+f 9199/1/9199 9054/1/9054 9200/1/9200
+f 9199/1/9199 9200/1/9200 9198/1/9198
+f 9199/1/9199 9198/1/9198 9197/1/9197
+f 9197/1/9197 9198/1/9198 9100/1/9100
+f 9197/1/9197 9100/1/9100 9165/1/9165
+f 9166/1/9166 9197/1/9197 9165/1/9165
+f 9165/1/9165 9164/1/9164 9166/1/9166
+f 9123/1/9123 9166/1/9166 9164/1/9164
+f 9123/1/9123 9164/1/9164 9126/1/9126
+f 9125/1/9125 9123/1/9123 9126/1/9126
+f 9125/1/9125 9126/1/9126 9127/1/9127
+f 9127/1/9127 9161/1/9161 9125/1/9125
+f 9125/1/9125 9161/1/9161 9163/1/9163
+f 9125/1/9125 9163/1/9163 9124/1/9124
+f 9124/1/9124 9163/1/9163 9165/1/9165
+f 9161/1/9161 9162/1/9162 9163/1/9163
+f 9163/1/9163 9162/1/9162 9164/1/9164
+f 9161/1/9161 9159/1/9159 9162/1/9162
+f 9128/1/9128 9162/1/9162 9159/1/9159
+f 9128/1/9128 9159/1/9159 9130/1/9130
+f 9129/1/9129 9128/1/9128 9130/1/9130
+f 9235/1/9235 9129/1/9129 9130/1/9130
+f 9130/1/9130 9234/1/9234 9235/1/9235
+f 9234/1/9234 9236/1/9236 9235/1/9235
+f 9235/1/9235 9236/1/9236 9237/1/9237
+f 9235/1/9235 9237/1/9237 9238/1/9238
+f 9238/1/9238 9208/1/9208 9235/1/9235
+f 9238/1/9238 9204/1/9204 9208/1/9208
+f 9204/1/9204 9207/1/9207 9208/1/9208
+f 9208/1/9208 9207/1/9207 9209/1/9209
+f 9208/1/9208 9209/1/9209 9129/1/9129
+f 9129/1/9129 9209/1/9209 9210/1/9210
+f 9129/1/9129 9210/1/9210 9160/1/9160
+f 9129/1/9129 9160/1/9160 9127/1/9127
+f 9160/1/9160 9210/1/9210 9211/1/9211
+f 9160/1/9160 9211/1/9211 9212/1/9212
+f 9138/1/9138 9160/1/9160 9212/1/9212
+f 9138/1/9138 9212/1/9212 9192/1/9192
+f 9138/1/9138 9192/1/9192 9137/1/9137
+f 9137/1/9137 9135/1/9135 9138/1/9138
+f 9135/1/9135 9158/1/9158 9138/1/9138
+f 9156/1/9156 9158/1/9158 9135/1/9135
+f 9156/1/9156 9135/1/9135 9154/1/9154
+f 9156/1/9156 9154/1/9154 9155/1/9155
+f 9155/1/9155 9154/1/9154 9153/1/9153
+f 9145/1/9145 9155/1/9155 9153/1/9153
+f 9153/1/9153 9151/1/9151 9145/1/9145
+f 9145/1/9145 9151/1/9151 9149/1/9149
+f 9145/1/9145 9149/1/9149 9147/1/9147
+f 9147/1/9147 9146/1/9146 9145/1/9145
+f 9146/1/9146 9144/1/9144 9145/1/9145
+f 9145/1/9145 9144/1/9144 9143/1/9143
+f 9143/1/9143 9136/1/9136 9145/1/9145
+f 9132/1/9132 9136/1/9136 9143/1/9143
+f 9143/1/9143 9133/1/9133 9132/1/9132
+f 9131/1/9131 9132/1/9132 9133/1/9133
+f 9131/1/9131 9133/1/9133 9134/1/9134
+f 9131/1/9131 9134/1/9134 9140/1/9140
+f 9140/1/9140 9142/1/9142 9131/1/9131
+f 9131/1/9131 9142/1/9142 9144/1/9144
+f 9131/1/9131 9144/1/9144 9154/1/9154
+f 9140/1/9140 9141/1/9141 9142/1/9142
+f 9142/1/9142 9141/1/9141 9143/1/9143
+f 9141/1/9141 9139/1/9139 9143/1/9143
+f 9140/1/9140 9139/1/9139 9141/1/9141
+f 9134/1/9134 9139/1/9139 9140/1/9140
+f 9134/1/9134 9133/1/9133 9139/1/9139
+f 9135/1/9135 9132/1/9132 9131/1/9131
+f 9143/1/9143 9139/1/9139 9133/1/9133
+f 9136/1/9136 9132/1/9132 9135/1/9135
+f 9142/1/9142 9143/1/9143 9144/1/9144
+f 9154/1/9154 9144/1/9144 9146/1/9146
+f 9154/1/9154 9146/1/9146 9148/1/9148
+f 9150/1/9150 9154/1/9154 9148/1/9148
+f 9149/1/9149 9150/1/9150 9148/1/9148
+f 9150/1/9150 9152/1/9152 9154/1/9154
+f 9151/1/9151 9152/1/9152 9150/1/9150
+f 9147/1/9147 9148/1/9148 9146/1/9146
+f 9149/1/9149 9148/1/9148 9147/1/9147
+f 9151/1/9151 9150/1/9150 9149/1/9149
+f 9153/1/9153 9152/1/9152 9151/1/9151
+f 9145/1/9145 9136/1/9136 9155/1/9155
+f 9136/1/9136 9157/1/9157 9155/1/9155
+f 9157/1/9157 9158/1/9158 9155/1/9155
+f 9157/1/9157 9159/1/9159 9158/1/9158
+f 9158/1/9158 9159/1/9159 9160/1/9160
+f 9157/1/9157 9137/1/9137 9159/1/9159
+f 9159/1/9159 9137/1/9137 9233/1/9233
+f 9233/1/9233 9137/1/9137 9232/1/9232
+f 9232/1/9232 9212/1/9212 9233/1/9233
+f 9232/1/9232 9213/1/9213 9212/1/9212
+f 9213/1/9213 9186/1/9186 9212/1/9212
+f 9212/1/9212 9186/1/9186 9188/1/9188
+f 9212/1/9212 9188/1/9188 9190/1/9190
+f 9187/1/9187 9190/1/9190 9188/1/9188
+f 9189/1/9189 9190/1/9190 9187/1/9187
+f 9232/1/9232 9189/1/9189 9187/1/9187
+f 9232/1/9232 9187/1/9187 9231/1/9231
+f 9231/1/9231 9187/1/9187 9185/1/9185
+f 9231/1/9231 9185/1/9185 9230/1/9230
+f 9230/1/9230 9214/1/9214 9231/1/9231
+f 9231/1/9231 9214/1/9214 9213/1/9213
+f 9214/1/9214 9184/1/9184 9213/1/9213
+f 9214/1/9214 9182/1/9182 9184/1/9184
+f 9183/1/9183 9184/1/9184 9182/1/9182
+f 9183/1/9183 9182/1/9182 9181/1/9181
+f 9230/1/9230 9183/1/9183 9181/1/9181
+f 9230/1/9230 9181/1/9181 9229/1/9229
+f 9229/1/9229 9215/1/9215 9230/1/9230
+f 9229/1/9229 9216/1/9216 9215/1/9215
+f 9216/1/9216 9178/1/9178 9215/1/9215
+f 9215/1/9215 9178/1/9178 9180/1/9180
+f 9215/1/9215 9180/1/9180 9182/1/9182
+f 9179/1/9179 9180/1/9180 9178/1/9178
+f 9179/1/9179 9178/1/9178 9177/1/9177
+f 9228/1/9228 9179/1/9179 9177/1/9177
+f 9228/1/9228 9177/1/9177 9223/1/9223
+f 9223/1/9223 9217/1/9217 9228/1/9228
+f 9228/1/9228 9217/1/9217 9216/1/9216
+f 9217/1/9217 9176/1/9176 9216/1/9216
+f 9217/1/9217 9174/1/9174 9176/1/9176
+f 9173/1/9173 9176/1/9176 9174/1/9174
+f 9173/1/9173 9174/1/9174 9171/1/9171
+f 9223/1/9223 9173/1/9173 9171/1/9171
+f 9223/1/9223 9171/1/9171 9224/1/9224
+f 9222/1/9222 9223/1/9223 9224/1/9224
+f 9224/1/9224 9225/1/9225 9222/1/9222
+f 9222/1/9222 9225/1/9225 9226/1/9226
+f 9222/1/9222 9226/1/9226 9227/1/9227
+f 9227/1/9227 9205/1/9205 9222/1/9222
+f 9222/1/9222 9205/1/9205 9220/1/9220
+f 9221/1/9221 9220/1/9220 9205/1/9205
+f 9221/1/9221 9205/1/9205 9206/1/9206
+f 9226/1/9226 9221/1/9221 9206/1/9206
+f 9226/1/9226 9206/1/9206 9242/1/9242
+f 9242/1/9242 9206/1/9206 9202/1/9202
+f 9242/1/9242 9202/1/9202 9241/1/9241
+f 9227/1/9227 9242/1/9242 9241/1/9241
+f 9227/1/9227 9241/1/9241 9239/1/9239
+f 9239/1/9239 9203/1/9203 9227/1/9227
+f 9239/1/9239 9207/1/9207 9203/1/9203
+f 9237/1/9237 9207/1/9207 9239/1/9239
+f 9239/1/9239 9241/1/9241 9240/1/9240
+f 9239/1/9239 9240/1/9240 9238/1/9238
+f 9241/1/9241 9201/1/9201 9240/1/9240
+f 9240/1/9240 9201/1/9201 9204/1/9204
+f 9201/1/9201 9203/1/9203 9204/1/9204
+f 9201/1/9201 9202/1/9202 9203/1/9203
+f 9203/1/9203 9202/1/9202 9205/1/9205
+f 9241/1/9241 9202/1/9202 9201/1/9201
+f 9206/1/9206 9205/1/9205 9202/1/9202
+f 9219/1/9219 9220/1/9220 9221/1/9221
+f 9225/1/9225 9219/1/9219 9221/1/9221
+f 9219/1/9219 9217/1/9217 9220/1/9220
+f 9218/1/9218 9217/1/9217 9219/1/9219
+f 9224/1/9224 9218/1/9218 9219/1/9219
+f 9196/1/9196 9218/1/9218 9224/1/9224
+f 9224/1/9224 9167/1/9167 9196/1/9196
+f 9196/1/9196 9167/1/9167 9194/1/9194
+f 9194/1/9194 9195/1/9195 9196/1/9196
+f 9194/1/9194 9193/1/9193 9195/1/9195
+f 9193/1/9193 9169/1/9169 9195/1/9195
+f 9195/1/9195 9169/1/9169 9168/1/9168
+f 9195/1/9195 9168/1/9168 9218/1/9218
+f 9167/1/9167 9168/1/9168 9169/1/9169
+f 9167/1/9167 9169/1/9169 9170/1/9170
+f 9171/1/9171 9168/1/9168 9167/1/9167
+f 9172/1/9172 9168/1/9168 9171/1/9171
+f 9168/1/9168 9172/1/9172 9217/1/9217
+f 9170/1/9170 9169/1/9169 9193/1/9193
+f 9170/1/9170 9193/1/9193 9194/1/9194
+f 9167/1/9167 9170/1/9170 9194/1/9194
+f 9196/1/9196 9195/1/9195 9218/1/9218
+f 9218/1/9218 9168/1/9168 9217/1/9217
+f 9227/1/9227 9203/1/9203 9205/1/9205
+f 9227/1/9227 9226/1/9226 9242/1/9242
+f 9225/1/9225 9221/1/9221 9226/1/9226
+f 9224/1/9224 9219/1/9219 9225/1/9225
+f 9222/1/9222 9220/1/9220 9223/1/9223
+f 9224/1/9224 9171/1/9171 9167/1/9167
+f 9175/1/9175 9173/1/9173 9223/1/9223
+f 9171/1/9171 9174/1/9174 9172/1/9172
+f 9175/1/9175 9176/1/9176 9173/1/9173
+f 9177/1/9177 9176/1/9176 9175/1/9175
+f 9172/1/9172 9174/1/9174 9217/1/9217
+f 9223/1/9223 9220/1/9220 9217/1/9217
+f 9223/1/9223 9177/1/9177 9175/1/9175
+f 9229/1/9229 9179/1/9179 9228/1/9228
+f 9177/1/9177 9178/1/9178 9176/1/9176
+f 9181/1/9181 9180/1/9180 9179/1/9179
+f 9216/1/9216 9176/1/9176 9178/1/9178
+f 9228/1/9228 9216/1/9216 9229/1/9229
+f 9229/1/9229 9181/1/9181 9179/1/9179
+f 9181/1/9181 9182/1/9182 9180/1/9180
+f 9185/1/9185 9184/1/9184 9183/1/9183
+f 9185/1/9185 9186/1/9186 9184/1/9184
+f 9215/1/9215 9182/1/9182 9214/1/9214
+f 9230/1/9230 9215/1/9215 9214/1/9214
+f 9230/1/9230 9185/1/9185 9183/1/9183
+f 9187/1/9187 9186/1/9186 9185/1/9185
+f 9191/1/9191 9189/1/9189 9232/1/9232
+f 9191/1/9191 9192/1/9192 9189/1/9189
+f 9189/1/9189 9192/1/9192 9190/1/9190
+f 9187/1/9187 9188/1/9188 9186/1/9186
+f 9213/1/9213 9184/1/9184 9186/1/9186
+f 9231/1/9231 9213/1/9213 9232/1/9232
+f 9232/1/9232 9137/1/9137 9191/1/9191
+f 9137/1/9137 9157/1/9157 9136/1/9136
+f 9153/1/9153 9154/1/9154 9152/1/9152
+f 9154/1/9154 9135/1/9135 9131/1/9131
+f 9155/1/9155 9158/1/9158 9156/1/9156
+f 9136/1/9136 9135/1/9135 9137/1/9137
+f 9137/1/9137 9192/1/9192 9191/1/9191
+f 9192/1/9192 9212/1/9212 9190/1/9190
+f 9158/1/9158 9160/1/9160 9138/1/9138
+f 9233/1/9233 9212/1/9212 9211/1/9211
+f 9233/1/9233 9211/1/9211 9234/1/9234
+f 9234/1/9234 9211/1/9211 9210/1/9210
+f 9236/1/9236 9210/1/9210 9209/1/9209
+f 9237/1/9237 9209/1/9209 9207/1/9207
+f 9204/1/9204 9203/1/9203 9207/1/9207
+f 9240/1/9240 9204/1/9204 9238/1/9238
+f 9238/1/9238 9237/1/9237 9239/1/9239
+f 9236/1/9236 9209/1/9209 9237/1/9237
+f 9234/1/9234 9210/1/9210 9236/1/9236
+f 9130/1/9130 9233/1/9233 9234/1/9234
+f 9208/1/9208 9129/1/9129 9235/1/9235
+f 9127/1/9127 9128/1/9128 9129/1/9129
+f 9159/1/9159 9233/1/9233 9130/1/9130
+f 9126/1/9126 9162/1/9162 9128/1/9128
+f 9160/1/9160 9159/1/9159 9161/1/9161
+f 9127/1/9127 9160/1/9160 9161/1/9161
+f 9127/1/9127 9126/1/9126 9128/1/9128
+f 9124/1/9124 9123/1/9123 9125/1/9125
+f 9121/1/9121 9123/1/9123 9124/1/9124
+f 9121/1/9121 9124/1/9124 9100/1/9100
+f 9121/1/9121 9100/1/9100 9119/1/9119
+f 9119/1/9119 9120/1/9120 9121/1/9121
+f 9121/1/9121 9120/1/9120 9122/1/9122
+f 9120/1/9120 9099/1/9099 9122/1/9122
+f 9166/1/9166 9122/1/9122 9099/1/9099
+f 9166/1/9166 9099/1/9099 9243/1/9243
+f 9120/1/9120 9097/1/9097 9099/1/9099
+f 9098/1/9098 9099/1/9099 9097/1/9097
+f 9098/1/9098 9097/1/9097 9096/1/9096
+f 9117/1/9117 9098/1/9098 9096/1/9096
+f 9117/1/9117 9096/1/9096 9115/1/9115
+f 9115/1/9115 9116/1/9116 9117/1/9117
+f 9117/1/9117 9116/1/9116 9118/1/9118
+f 9117/1/9117 9118/1/9118 9119/1/9119
+f 9116/1/9116 9095/1/9095 9118/1/9118
+f 9118/1/9118 9095/1/9095 9097/1/9097
+f 9116/1/9116 9093/1/9093 9095/1/9095
+f 9094/1/9094 9095/1/9095 9093/1/9093
+f 9094/1/9094 9093/1/9093 9092/1/9092
+f 9114/1/9114 9094/1/9094 9092/1/9092
+f 9090/1/9090 9114/1/9114 9092/1/9092
+f 9092/1/9092 9089/1/9089 9090/1/9090
+f 9089/1/9089 9088/1/9088 9090/1/9090
+f 9112/1/9112 9090/1/9090 9088/1/9088
+f 9112/1/9112 9088/1/9088 9110/1/9110
+f 9109/1/9109 9112/1/9112 9110/1/9110
+f 9109/1/9109 9110/1/9110 9107/1/9107
+f 9107/1/9107 9086/1/9086 9109/1/9109
+f 9109/1/9109 9086/1/9086 9087/1/9087
+f 9109/1/9109 9087/1/9087 9111/1/9111
+f 9111/1/9111 9087/1/9087 9089/1/9089
+f 9091/1/9091 9111/1/9111 9089/1/9089
+f 9113/1/9113 9111/1/9111 9091/1/9091
+f 9113/1/9113 9091/1/9091 9093/1/9093
+f 9111/1/9111 9113/1/9113 9112/1/9112
+f 9112/1/9112 9113/1/9113 9114/1/9114
+f 9114/1/9114 9113/1/9113 9115/1/9115
+f 9086/1/9086 9085/1/9085 9087/1/9087
+f 9087/1/9087 9085/1/9085 9088/1/9088
+f 9086/1/9086 9084/1/9084 9085/1/9085
+f 9085/1/9085 9084/1/9084 9083/1/9083
+f 9083/1/9083 9075/1/9075 9085/1/9085
+f 9085/1/9085 9075/1/9075 9106/1/9106
+f 9085/1/9085 9106/1/9106 9108/1/9108
+f 9110/1/9110 9085/1/9085 9108/1/9108
+f 9108/1/9108 9106/1/9106 9107/1/9107
+f 9107/1/9107 9106/1/9106 9105/1/9105
+f 9105/1/9105 9084/1/9084 9107/1/9107
+f 9105/1/9105 9072/1/9072 9084/1/9084
+f 9072/1/9072 9076/1/9076 9084/1/9084
+f 9076/1/9076 9078/1/9078 9084/1/9084
+f 9084/1/9084 9078/1/9078 9080/1/9080
+f 9084/1/9084 9080/1/9080 9082/1/9082
+f 9081/1/9081 9082/1/9082 9080/1/9080
+f 9081/1/9081 9080/1/9080 9079/1/9079
+f 9075/1/9075 9081/1/9081 9079/1/9079
+f 9075/1/9075 9079/1/9079 9077/1/9077
+f 9077/1/9077 9076/1/9076 9075/1/9075
+f 9079/1/9079 9078/1/9078 9077/1/9077
+f 9083/1/9083 9082/1/9082 9081/1/9081
+f 9079/1/9079 9080/1/9080 9078/1/9078
+f 9077/1/9077 9078/1/9078 9076/1/9076
+f 9076/1/9076 9072/1/9072 9075/1/9075
+f 9075/1/9075 9072/1/9072 9071/1/9071
+f 9071/1/9071 9072/1/9072 9073/1/9073
+f 9071/1/9071 9073/1/9073 9074/1/9074
+f 9074/1/9074 9106/1/9106 9071/1/9071
+f 9074/1/9074 9104/1/9104 9106/1/9106
+f 9102/1/9102 9104/1/9104 9074/1/9074
+f 9074/1/9074 9101/1/9101 9102/1/9102
+f 9102/1/9102 9101/1/9101 9103/1/9103
+f 9101/1/9101 9073/1/9073 9103/1/9103
+f 9102/1/9102 9103/1/9103 9104/1/9104
+f 9104/1/9104 9103/1/9103 9105/1/9105
+f 9074/1/9074 9073/1/9073 9101/1/9101
+f 9103/1/9103 9073/1/9073 9072/1/9072
+f 9103/1/9103 9072/1/9072 9105/1/9105
+f 9104/1/9104 9105/1/9105 9106/1/9106
+f 9071/1/9071 9106/1/9106 9075/1/9075
+f 9083/1/9083 9081/1/9081 9075/1/9075
+f 9083/1/9083 9084/1/9084 9082/1/9082
+f 9107/1/9107 9084/1/9084 9086/1/9086
+f 9107/1/9107 9110/1/9110 9108/1/9108
+f 9111/1/9111 9112/1/9112 9109/1/9109
+f 9110/1/9110 9088/1/9088 9085/1/9085
+f 9087/1/9087 9088/1/9088 9089/1/9089
+f 9091/1/9091 9089/1/9089 9092/1/9092
+f 9112/1/9112 9114/1/9114 9090/1/9090
+f 9115/1/9115 9094/1/9094 9114/1/9114
+f 9092/1/9092 9093/1/9093 9091/1/9091
+f 9096/1/9096 9095/1/9095 9094/1/9094
+f 9113/1/9113 9093/1/9093 9116/1/9116
+f 9115/1/9115 9113/1/9113 9116/1/9116
+f 9115/1/9115 9096/1/9096 9094/1/9094
+f 9119/1/9119 9098/1/9098 9117/1/9117
+f 9096/1/9096 9097/1/9097 9095/1/9095
+f 9100/1/9100 9099/1/9099 9098/1/9098
+f 9099/1/9099 9100/1/9100 9244/1/9244
+f 9118/1/9118 9097/1/9097 9120/1/9120
+f 9119/1/9119 9118/1/9118 9120/1/9120
+f 9119/1/9119 9100/1/9100 9098/1/9098
+f 9122/1/9122 9123/1/9123 9121/1/9121
+f 9126/1/9126 9164/1/9164 9162/1/9162
+f 9123/1/9123 9122/1/9122 9166/1/9166
+f 9163/1/9163 9164/1/9164 9165/1/9165
+f 9243/1/9243 9197/1/9197 9166/1/9166
+f 9100/1/9100 9124/1/9124 9165/1/9165
+f 9244/1/9244 9100/1/9100 9198/1/9198
+f 9246/1/9246 9198/1/9198 9200/1/9200
+f 9061/1/9061 9066/1/9066 9068/1/9068
+f 9068/1/9068 9067/1/9067 9069/1/9069
+f 9200/1/9200 9070/1/9070 9246/1/9246
+f 9069/1/9069 9062/1/9062 9053/1/9053
+f 9244/1/9244 9198/1/9198 9246/1/9246
+f 9243/1/9243 9099/1/9099 9244/1/9244
+f 9243/1/9243 9199/1/9199 9197/1/9197
+f 9060/1/9060 9245/1/9245 9053/1/9053
+f 9059/1/9059 9054/1/9054 9199/1/9199
+f 9055/1/9055 9051/1/9051 9057/1/9057
+f 9062/1/9062 9054/1/9054 9053/1/9053
+f 9053/1/9053 9052/1/9052 9060/1/9060
+f 9055/1/9055 9052/1/9052 9051/1/9051
+f 9247/1/9247 9248/1/9248 9249/1/9249
+f 9247/1/9247 9249/1/9249 9250/1/9250
+f 9253/1/9253 9247/1/9247 9250/1/9250
+f 9253/1/9253 9250/1/9250 9255/1/9255
+f 9255/1/9255 9254/1/9254 9253/1/9253
+f 9253/1/9253 9254/1/9254 9252/1/9252
+f 9253/1/9253 9252/1/9252 9251/1/9251
+f 9251/1/9251 9252/1/9252 9248/1/9248
+f 9252/1/9252 9254/1/9254 9248/1/9248
+f 9248/1/9248 9254/1/9254 9256/1/9256
+f 9255/1/9255 9256/1/9256 9254/1/9254
+f 9255/1/9255 9257/1/9257 9256/1/9256
+f 9256/1/9256 9257/1/9257 9258/1/9258
+f 9258/1/9258 9266/1/9266 9256/1/9256
+f 9249/1/9249 9256/1/9256 9266/1/9266
+f 9249/1/9249 9266/1/9266 9442/1/9442
+f 9442/1/9442 9266/1/9266 9441/1/9441
+f 9442/1/9442 9441/1/9441 9439/1/9439
+f 9439/1/9439 9394/1/9394 9442/1/9442
+f 9442/1/9442 9394/1/9394 9396/1/9396
+f 9250/1/9250 9442/1/9442 9396/1/9396
+f 9396/1/9396 9395/1/9395 9250/1/9250
+f 9250/1/9250 9395/1/9395 9265/1/9265
+f 9250/1/9250 9265/1/9265 9257/1/9257
+f 9257/1/9257 9265/1/9265 9261/1/9261
+f 9257/1/9257 9261/1/9261 9259/1/9259
+f 9261/1/9261 9260/1/9260 9259/1/9259
+f 9259/1/9259 9260/1/9260 9258/1/9258
+f 9261/1/9261 9262/1/9262 9260/1/9260
+f 9262/1/9262 9264/1/9264 9260/1/9260
+f 9260/1/9260 9264/1/9264 9266/1/9266
+f 9265/1/9265 9266/1/9266 9264/1/9264
+f 9265/1/9265 9264/1/9264 9263/1/9263
+f 9263/1/9263 9264/1/9264 9262/1/9262
+f 9263/1/9263 9262/1/9262 9261/1/9261
+f 9265/1/9265 9263/1/9263 9261/1/9261
+f 9265/1/9265 9395/1/9395 9266/1/9266
+f 9394/1/9394 9395/1/9395 9396/1/9396
+f 9394/1/9394 9393/1/9393 9395/1/9395
+f 9440/1/9440 9395/1/9395 9393/1/9393
+f 9440/1/9440 9393/1/9393 9326/1/9326
+f 9352/1/9352 9440/1/9440 9326/1/9326
+f 9326/1/9326 9287/1/9287 9352/1/9352
+f 9289/1/9289 9352/1/9352 9287/1/9287
+f 9288/1/9288 9289/1/9289 9287/1/9287
+f 9287/1/9287 9285/1/9285 9288/1/9288
+f 9288/1/9288 9285/1/9285 9286/1/9286
+f 9288/1/9288 9286/1/9286 9351/1/9351
+f 9288/1/9288 9351/1/9351 9290/1/9290
+f 9290/1/9290 9351/1/9351 9349/1/9349
+f 9290/1/9290 9349/1/9349 9292/1/9292
+f 9292/1/9292 9291/1/9291 9290/1/9290
+f 9290/1/9290 9291/1/9291 9289/1/9289
+f 9291/1/9291 9350/1/9350 9289/1/9289
+f 9291/1/9291 9348/1/9348 9350/1/9350
+f 9347/1/9347 9350/1/9350 9348/1/9348
+f 9347/1/9347 9348/1/9348 9345/1/9345
+f 9294/1/9294 9347/1/9347 9345/1/9345
+f 9345/1/9345 9417/1/9417 9294/1/9294
+f 9294/1/9294 9417/1/9417 9400/1/9400
+f 9294/1/9294 9400/1/9400 9397/1/9397
+f 9294/1/9294 9397/1/9397 9293/1/9293
+f 9294/1/9294 9293/1/9293 9292/1/9292
+f 9293/1/9293 9397/1/9397 9438/1/9438
+f 9437/1/9437 9293/1/9293 9438/1/9438
+f 9437/1/9437 9438/1/9438 9435/1/9435
+f 9435/1/9435 9398/1/9398 9437/1/9437
+f 9437/1/9437 9398/1/9398 9401/1/9401
+f 9437/1/9437 9401/1/9401 9420/1/9420
+f 9420/1/9420 9401/1/9401 9400/1/9400
+f 9420/1/9420 9400/1/9400 9418/1/9418
+f 9418/1/9418 9346/1/9346 9420/1/9420
+f 9420/1/9420 9346/1/9346 9293/1/9293
+f 9293/1/9293 9346/1/9346 9348/1/9348
+f 9346/1/9346 9418/1/9418 9419/1/9419
+f 9362/1/9362 9346/1/9346 9419/1/9419
+f 9362/1/9362 9419/1/9419 9391/1/9391
+f 9391/1/9391 9361/1/9361 9362/1/9362
+f 9361/1/9361 9359/1/9359 9362/1/9362
+f 9359/1/9359 9342/1/9342 9362/1/9362
+f 9362/1/9362 9342/1/9342 9344/1/9344
+f 9341/1/9341 9344/1/9344 9342/1/9342
+f 9340/1/9340 9341/1/9341 9342/1/9342
+f 9342/1/9342 9332/1/9332 9340/1/9340
+f 9332/1/9332 9338/1/9338 9340/1/9340
+f 9338/1/9338 9339/1/9339 9340/1/9340
+f 9338/1/9338 9337/1/9337 9339/1/9339
+f 9337/1/9337 9331/1/9331 9339/1/9339
+f 9339/1/9339 9331/1/9331 9341/1/9341
+f 9341/1/9341 9331/1/9331 9360/1/9360
+f 9361/1/9361 9341/1/9341 9360/1/9360
+f 9343/1/9343 9341/1/9341 9361/1/9361
+f 9343/1/9343 9361/1/9361 9345/1/9345
+f 9345/1/9345 9344/1/9344 9343/1/9343
+f 9346/1/9346 9344/1/9344 9345/1/9345
+f 9360/1/9360 9331/1/9331 9327/1/9327
+f 9360/1/9360 9327/1/9327 9358/1/9358
+f 9358/1/9358 9359/1/9359 9360/1/9360
+f 9357/1/9357 9359/1/9359 9358/1/9358
+f 9356/1/9356 9357/1/9357 9358/1/9358
+f 9356/1/9356 9355/1/9355 9357/1/9357
+f 9355/1/9355 9328/1/9328 9357/1/9357
+f 9355/1/9355 9329/1/9329 9328/1/9328
+f 9327/1/9327 9328/1/9328 9329/1/9329
+f 9327/1/9327 9329/1/9329 9330/1/9330
+f 9330/1/9330 9354/1/9354 9327/1/9327
+f 9327/1/9327 9354/1/9354 9356/1/9356
+f 9330/1/9330 9353/1/9353 9354/1/9354
+f 9354/1/9354 9353/1/9353 9355/1/9355
+f 9330/1/9330 9329/1/9329 9353/1/9353
+f 9353/1/9353 9329/1/9329 9355/1/9355
+f 9354/1/9354 9355/1/9355 9356/1/9356
+f 9357/1/9357 9328/1/9328 9359/1/9359
+f 9327/1/9327 9356/1/9356 9358/1/9358
+f 9327/1/9327 9331/1/9331 9328/1/9328
+f 9328/1/9328 9331/1/9331 9332/1/9332
+f 9332/1/9332 9331/1/9331 9333/1/9333
+f 9332/1/9332 9333/1/9333 9334/1/9334
+f 9334/1/9334 9336/1/9336 9332/1/9332
+f 9334/1/9334 9335/1/9335 9336/1/9336
+f 9336/1/9336 9335/1/9335 9337/1/9337
+f 9335/1/9335 9333/1/9333 9337/1/9337
+f 9334/1/9334 9333/1/9333 9335/1/9335
+f 9337/1/9337 9333/1/9333 9331/1/9331
+f 9336/1/9336 9337/1/9337 9338/1/9338
+f 9332/1/9332 9336/1/9336 9338/1/9338
+f 9342/1/9342 9328/1/9328 9332/1/9332
+f 9339/1/9339 9341/1/9341 9340/1/9340
+f 9343/1/9343 9344/1/9344 9341/1/9341
+f 9359/1/9359 9328/1/9328 9342/1/9342
+f 9360/1/9360 9359/1/9359 9361/1/9361
+f 9392/1/9392 9361/1/9361 9391/1/9391
+f 9391/1/9391 9390/1/9390 9392/1/9392
+f 9392/1/9392 9390/1/9390 9416/1/9416
+f 9416/1/9416 9390/1/9390 9387/1/9387
+f 9416/1/9416 9387/1/9387 9415/1/9415
+f 9421/1/9421 9416/1/9416 9415/1/9415
+f 9421/1/9421 9415/1/9415 9422/1/9422
+f 9422/1/9422 9384/1/9384 9421/1/9421
+f 9421/1/9421 9384/1/9384 9386/1/9386
+f 9421/1/9421 9386/1/9386 9419/1/9419
+f 9419/1/9419 9386/1/9386 9388/1/9388
+f 9419/1/9419 9388/1/9388 9389/1/9389
+f 9388/1/9388 9387/1/9387 9389/1/9389
+f 9386/1/9386 9387/1/9387 9388/1/9388
+f 9386/1/9386 9385/1/9385 9387/1/9387
+f 9384/1/9384 9385/1/9385 9386/1/9386
+f 9384/1/9384 9383/1/9383 9385/1/9385
+f 9414/1/9414 9385/1/9385 9383/1/9383
+f 9414/1/9414 9383/1/9383 9381/1/9381
+f 9414/1/9414 9381/1/9381 9413/1/9413
+f 9423/1/9423 9414/1/9414 9413/1/9413
+f 9423/1/9423 9413/1/9413 9424/1/9424
+f 9424/1/9424 9378/1/9378 9423/1/9423
+f 9423/1/9423 9378/1/9378 9380/1/9380
+f 9423/1/9423 9380/1/9380 9382/1/9382
+f 9423/1/9423 9382/1/9382 9422/1/9422
+f 9380/1/9380 9381/1/9381 9382/1/9382
+f 9380/1/9380 9379/1/9379 9381/1/9381
+f 9378/1/9378 9379/1/9379 9380/1/9380
+f 9378/1/9378 9377/1/9377 9379/1/9379
+f 9412/1/9412 9379/1/9379 9377/1/9377
+f 9412/1/9412 9377/1/9377 9409/1/9409
+f 9425/1/9425 9412/1/9412 9409/1/9409
+f 9425/1/9425 9409/1/9409 9428/1/9428
+f 9427/1/9427 9425/1/9425 9428/1/9428
+f 9427/1/9427 9428/1/9428 9429/1/9429
+f 9429/1/9429 9411/1/9411 9427/1/9427
+f 9427/1/9427 9411/1/9411 9410/1/9410
+f 9427/1/9427 9410/1/9410 9426/1/9426
+f 9426/1/9426 9410/1/9410 9364/1/9364
+f 9426/1/9426 9364/1/9364 9363/1/9363
+f 9363/1/9363 9370/1/9370 9426/1/9426
+f 9426/1/9426 9370/1/9370 9425/1/9425
+f 9370/1/9370 9372/1/9372 9425/1/9425
+f 9372/1/9372 9373/1/9373 9425/1/9425
+f 9425/1/9425 9373/1/9373 9375/1/9375
+f 9425/1/9425 9375/1/9375 9424/1/9424
+f 9373/1/9373 9374/1/9374 9375/1/9375
+f 9375/1/9375 9374/1/9374 9376/1/9376
+f 9375/1/9375 9376/1/9376 9377/1/9377
+f 9376/1/9376 9374/1/9374 9409/1/9409
+f 9409/1/9409 9374/1/9374 9371/1/9371
+f 9409/1/9409 9371/1/9371 9410/1/9410
+f 9406/1/9406 9409/1/9409 9410/1/9410
+f 9410/1/9410 9371/1/9371 9369/1/9369
+f 9369/1/9369 9371/1/9371 9370/1/9370
+f 9368/1/9368 9369/1/9369 9370/1/9370
+f 9368/1/9368 9367/1/9367 9369/1/9369
+f 9369/1/9369 9367/1/9367 9365/1/9365
+f 9364/1/9364 9369/1/9369 9365/1/9365
+f 9366/1/9366 9365/1/9365 9367/1/9367
+f 9363/1/9363 9365/1/9365 9366/1/9366
+f 9366/1/9366 9368/1/9368 9363/1/9363
+f 9366/1/9366 9367/1/9367 9368/1/9368
+f 9373/1/9373 9371/1/9371 9374/1/9374
+f 9372/1/9372 9371/1/9371 9373/1/9373
+f 9370/1/9370 9371/1/9371 9372/1/9372
+f 9363/1/9363 9368/1/9368 9370/1/9370
+f 9363/1/9363 9364/1/9364 9365/1/9365
+f 9410/1/9410 9369/1/9369 9364/1/9364
+f 9410/1/9410 9411/1/9411 9406/1/9406
+f 9406/1/9406 9411/1/9411 9407/1/9407
+f 9406/1/9406 9407/1/9407 9404/1/9404
+f 9430/1/9430 9406/1/9406 9404/1/9404
+f 9430/1/9430 9404/1/9404 9433/1/9433
+f 9432/1/9432 9430/1/9430 9433/1/9433
+f 9433/1/9433 9434/1/9434 9432/1/9432
+f 9434/1/9434 9405/1/9405 9432/1/9432
+f 9432/1/9432 9405/1/9405 9408/1/9408
+f 9432/1/9432 9408/1/9408 9431/1/9431
+f 9431/1/9431 9408/1/9408 9407/1/9407
+f 9431/1/9431 9407/1/9407 9429/1/9429
+f 9429/1/9429 9430/1/9430 9431/1/9431
+f 9404/1/9404 9408/1/9408 9405/1/9405
+f 9404/1/9404 9405/1/9405 9402/1/9402
+f 9402/1/9402 9405/1/9405 9403/1/9403
+f 9402/1/9402 9403/1/9403 9399/1/9399
+f 9399/1/9399 9398/1/9398 9402/1/9402
+f 9397/1/9397 9398/1/9398 9399/1/9399
+f 9436/1/9436 9399/1/9399 9403/1/9403
+f 9436/1/9436 9403/1/9403 9434/1/9434
+f 9438/1/9438 9399/1/9399 9436/1/9436
+f 9434/1/9434 9403/1/9403 9405/1/9405
+f 9433/1/9433 9436/1/9436 9434/1/9434
+f 9435/1/9435 9436/1/9436 9433/1/9433
+f 9433/1/9433 9402/1/9402 9435/1/9435
+f 9431/1/9431 9430/1/9430 9432/1/9432
+f 9433/1/9433 9404/1/9404 9402/1/9402
+f 9428/1/9428 9406/1/9406 9430/1/9430
+f 9404/1/9404 9407/1/9407 9408/1/9408
+f 9429/1/9429 9407/1/9407 9411/1/9411
+f 9429/1/9429 9428/1/9428 9430/1/9430
+f 9426/1/9426 9425/1/9425 9427/1/9427
+f 9428/1/9428 9409/1/9409 9406/1/9406
+f 9424/1/9424 9412/1/9412 9425/1/9425
+f 9409/1/9409 9377/1/9377 9376/1/9376
+f 9413/1/9413 9379/1/9379 9412/1/9412
+f 9375/1/9375 9377/1/9377 9378/1/9378
+f 9424/1/9424 9375/1/9375 9378/1/9378
+f 9424/1/9424 9413/1/9413 9412/1/9412
+f 9422/1/9422 9414/1/9414 9423/1/9423
+f 9413/1/9413 9381/1/9381 9379/1/9379
+f 9382/1/9382 9381/1/9381 9383/1/9383
+f 9415/1/9415 9385/1/9385 9414/1/9414
+f 9382/1/9382 9383/1/9383 9384/1/9384
+f 9422/1/9422 9382/1/9382 9384/1/9384
+f 9422/1/9422 9415/1/9415 9414/1/9414
+f 9419/1/9419 9416/1/9416 9421/1/9421
+f 9419/1/9419 9417/1/9417 9416/1/9416
+f 9417/1/9417 9361/1/9361 9416/1/9416
+f 9415/1/9415 9387/1/9387 9385/1/9385
+f 9389/1/9389 9387/1/9387 9390/1/9390
+f 9389/1/9389 9390/1/9390 9391/1/9391
+f 9416/1/9416 9361/1/9361 9392/1/9392
+f 9391/1/9391 9419/1/9419 9389/1/9389
+f 9344/1/9344 9346/1/9346 9362/1/9362
+f 9418/1/9418 9417/1/9417 9419/1/9419
+f 9397/1/9397 9401/1/9401 9398/1/9398
+f 9435/1/9435 9402/1/9402 9398/1/9398
+f 9435/1/9435 9438/1/9438 9436/1/9436
+f 9420/1/9420 9293/1/9293 9437/1/9437
+f 9438/1/9438 9397/1/9397 9399/1/9399
+f 9397/1/9397 9400/1/9400 9401/1/9401
+f 9418/1/9418 9400/1/9400 9417/1/9417
+f 9345/1/9345 9361/1/9361 9417/1/9417
+f 9292/1/9292 9347/1/9347 9294/1/9294
+f 9345/1/9345 9348/1/9348 9346/1/9346
+f 9349/1/9349 9350/1/9350 9347/1/9347
+f 9349/1/9349 9352/1/9352 9350/1/9350
+f 9293/1/9293 9348/1/9348 9291/1/9291
+f 9292/1/9292 9293/1/9293 9291/1/9291
+f 9292/1/9292 9349/1/9349 9347/1/9347
+f 9351/1/9351 9352/1/9352 9349/1/9349
+f 9352/1/9352 9351/1/9351 9439/1/9439
+f 9351/1/9351 9286/1/9286 9325/1/9325
+f 9351/1/9351 9325/1/9325 9393/1/9393
+f 9286/1/9286 9323/1/9323 9325/1/9325
+f 9323/1/9323 9324/1/9324 9325/1/9325
+f 9325/1/9325 9324/1/9324 9326/1/9326
+f 9285/1/9285 9326/1/9326 9324/1/9324
+f 9285/1/9285 9324/1/9324 9283/1/9283
+f 9284/1/9284 9285/1/9285 9283/1/9283
+f 9284/1/9284 9283/1/9283 9282/1/9282
+f 9282/1/9282 9321/1/9321 9284/1/9284
+f 9284/1/9284 9321/1/9321 9323/1/9323
+f 9321/1/9321 9322/1/9322 9323/1/9323
+f 9321/1/9321 9320/1/9320 9322/1/9322
+f 9281/1/9281 9322/1/9322 9320/1/9320
+f 9281/1/9281 9320/1/9320 9279/1/9279
+f 9280/1/9280 9281/1/9281 9279/1/9279
+f 9280/1/9280 9279/1/9279 9278/1/9278
+f 9278/1/9278 9318/1/9318 9280/1/9280
+f 9280/1/9280 9318/1/9318 9319/1/9319
+f 9280/1/9280 9319/1/9319 9282/1/9282
+f 9318/1/9318 9317/1/9317 9319/1/9319
+f 9319/1/9319 9317/1/9317 9320/1/9320
+f 9316/1/9316 9317/1/9317 9318/1/9318
+f 9318/1/9318 9276/1/9276 9316/1/9316
+f 9274/1/9274 9316/1/9316 9276/1/9276
+f 9275/1/9275 9274/1/9274 9276/1/9276
+f 9278/1/9278 9275/1/9275 9276/1/9276
+f 9277/1/9277 9275/1/9275 9278/1/9278
+f 9275/1/9275 9277/1/9277 9315/1/9315
+f 9275/1/9275 9315/1/9315 9273/1/9273
+f 9273/1/9273 9315/1/9315 9313/1/9313
+f 9273/1/9273 9313/1/9313 9272/1/9272
+f 9272/1/9272 9271/1/9271 9273/1/9273
+f 9273/1/9273 9271/1/9271 9274/1/9274
+f 9271/1/9271 9314/1/9314 9274/1/9274
+f 9271/1/9271 9312/1/9312 9314/1/9314
+f 9311/1/9311 9314/1/9314 9312/1/9312
+f 9310/1/9310 9311/1/9311 9312/1/9312
+f 9312/1/9312 9302/1/9302 9310/1/9310
+f 9310/1/9310 9302/1/9302 9306/1/9306
+f 9310/1/9310 9306/1/9306 9308/1/9308
+f 9308/1/9308 9309/1/9309 9310/1/9310
+f 9308/1/9308 9307/1/9307 9309/1/9309
+f 9307/1/9307 9301/1/9301 9309/1/9309
+f 9309/1/9309 9301/1/9301 9311/1/9311
+f 9311/1/9311 9301/1/9301 9272/1/9272
+f 9272/1/9272 9301/1/9301 9299/1/9299
+f 9272/1/9272 9299/1/9299 9268/1/9268
+f 9268/1/9268 9299/1/9299 9295/1/9295
+f 9268/1/9268 9295/1/9295 9269/1/9269
+f 9267/1/9267 9268/1/9268 9269/1/9269
+f 9267/1/9267 9269/1/9269 9270/1/9270
+f 9267/1/9267 9270/1/9270 9300/1/9300
+f 9300/1/9300 9271/1/9271 9267/1/9267
+f 9300/1/9300 9270/1/9270 9296/1/9296
+f 9300/1/9300 9296/1/9296 9298/1/9298
+f 9298/1/9298 9299/1/9299 9300/1/9300
+f 9298/1/9298 9297/1/9297 9299/1/9299
+f 9296/1/9296 9297/1/9297 9298/1/9298
+f 9296/1/9296 9295/1/9295 9297/1/9297
+f 9270/1/9270 9295/1/9295 9296/1/9296
+f 9267/1/9267 9271/1/9271 9268/1/9268
+f 9270/1/9270 9269/1/9269 9295/1/9295
+f 9299/1/9299 9297/1/9297 9295/1/9295
+f 9299/1/9299 9301/1/9301 9300/1/9300
+f 9300/1/9300 9301/1/9301 9302/1/9302
+f 9302/1/9302 9301/1/9301 9303/1/9303
+f 9302/1/9302 9303/1/9303 9304/1/9304
+f 9304/1/9304 9303/1/9303 9305/1/9305
+f 9304/1/9304 9305/1/9305 9306/1/9306
+f 9306/1/9306 9305/1/9305 9307/1/9307
+f 9305/1/9305 9303/1/9303 9307/1/9307
+f 9307/1/9307 9303/1/9303 9301/1/9301
+f 9306/1/9306 9307/1/9307 9308/1/9308
+f 9302/1/9302 9304/1/9304 9306/1/9306
+f 9312/1/9312 9300/1/9300 9302/1/9302
+f 9309/1/9309 9311/1/9311 9310/1/9310
+f 9313/1/9313 9314/1/9314 9311/1/9311
+f 9313/1/9313 9316/1/9316 9314/1/9314
+f 9271/1/9271 9300/1/9300 9312/1/9312
+f 9268/1/9268 9271/1/9271 9272/1/9272
+f 9272/1/9272 9313/1/9313 9311/1/9311
+f 9315/1/9315 9316/1/9316 9313/1/9313
+f 9315/1/9315 9277/1/9277 9317/1/9317
+f 9279/1/9279 9317/1/9317 9277/1/9277
+f 9273/1/9273 9274/1/9274 9275/1/9275
+f 9274/1/9274 9314/1/9314 9316/1/9316
+f 9315/1/9315 9317/1/9317 9316/1/9316
+f 9278/1/9278 9276/1/9276 9318/1/9318
+f 9278/1/9278 9279/1/9279 9277/1/9277
+f 9282/1/9282 9281/1/9281 9280/1/9280
+f 9279/1/9279 9320/1/9320 9317/1/9317
+f 9283/1/9283 9322/1/9322 9281/1/9281
+f 9319/1/9319 9320/1/9320 9321/1/9321
+f 9282/1/9282 9319/1/9319 9321/1/9321
+f 9282/1/9282 9283/1/9283 9281/1/9281
+f 9283/1/9283 9324/1/9324 9322/1/9322
+f 9323/1/9323 9322/1/9322 9324/1/9324
+f 9284/1/9284 9323/1/9323 9286/1/9286
+f 9286/1/9286 9285/1/9285 9284/1/9284
+f 9290/1/9290 9289/1/9289 9288/1/9288
+f 9289/1/9289 9350/1/9350 9352/1/9352
+f 9285/1/9285 9287/1/9287 9326/1/9326
+f 9439/1/9439 9440/1/9440 9352/1/9352
+f 9326/1/9326 9393/1/9393 9325/1/9325
+f 9441/1/9441 9395/1/9395 9440/1/9440
+f 9351/1/9351 9393/1/9393 9394/1/9394
+f 9439/1/9439 9351/1/9351 9394/1/9394
+f 9439/1/9439 9441/1/9441 9440/1/9440
+f 9266/1/9266 9395/1/9395 9441/1/9441
+f 9260/1/9260 9266/1/9266 9258/1/9258
+f 9259/1/9259 9258/1/9258 9257/1/9257
+f 9255/1/9255 9250/1/9250 9257/1/9257
+f 9251/1/9251 9247/1/9247 9253/1/9253
+f 9249/1/9249 9442/1/9442 9250/1/9250
+f 9248/1/9248 9256/1/9256 9249/1/9249
+f 9251/1/9251 9248/1/9248 9247/1/9247
+f 9443/1/9443 9444/1/9444 9445/1/9445
+f 9443/1/9443 9445/1/9445 9446/1/9446
+f 9443/1/9443 9446/1/9446 9447/1/9447
+f 9447/1/9447 9456/1/9456 9443/1/9443
+f 9443/1/9443 9456/1/9456 9459/1/9459
+f 9456/1/9456 9457/1/9457 9459/1/9459
+f 9457/1/9457 9458/1/9458 9459/1/9459
+f 9459/1/9459 9458/1/9458 9460/1/9460
+f 9461/1/9461 9459/1/9459 9460/1/9460
+f 9463/1/9463 9461/1/9461 9460/1/9460
+f 9463/1/9463 9460/1/9460 9464/1/9464
+f 9464/1/9464 9469/1/9469 9463/1/9463
+f 9469/1/9469 9471/1/9471 9463/1/9463
+f 9463/1/9463 9471/1/9471 9462/1/9462
+f 9462/1/9462 9471/1/9471 9473/1/9473
+f 9462/1/9462 9473/1/9473 9466/1/9466
+f 9466/1/9466 9467/1/9467 9462/1/9462
+f 9462/1/9462 9467/1/9467 9461/1/9461
+f 9467/1/9467 9468/1/9468 9461/1/9461
+f 9468/1/9468 9454/1/9454 9461/1/9461
+f 9461/1/9461 9454/1/9454 9453/1/9453
+f 9453/1/9453 9454/1/9454 9452/1/9452
+f 9453/1/9453 9452/1/9452 9451/1/9451
+f 9449/1/9449 9453/1/9453 9451/1/9451
+f 9451/1/9451 9450/1/9450 9449/1/9449
+f 9449/1/9449 9450/1/9450 9448/1/9448
+f 9449/1/9449 9448/1/9448 9444/1/9444
+f 9450/1/9450 9452/1/9452 9448/1/9448
+f 9444/1/9444 9453/1/9453 9449/1/9449
+f 9444/1/9444 9459/1/9459 9453/1/9453
+f 9451/1/9451 9452/1/9452 9450/1/9450
+f 9448/1/9448 9452/1/9452 9454/1/9454
+f 9448/1/9448 9454/1/9454 9445/1/9445
+f 9445/1/9445 9454/1/9454 9457/1/9457
+f 9458/1/9458 9454/1/9454 9468/1/9468
+f 9471/1/9471 9458/1/9458 9468/1/9468
+f 9467/1/9467 9474/1/9474 9468/1/9468
+f 9473/1/9473 9468/1/9468 9474/1/9474
+f 9466/1/9466 9474/1/9474 9467/1/9467
+f 9466/1/9466 9473/1/9473 9474/1/9474
+f 9471/1/9471 9468/1/9468 9473/1/9473
+f 9469/1/9469 9458/1/9458 9471/1/9471
+f 9469/1/9469 9470/1/9470 9458/1/9458
+f 9472/1/9472 9470/1/9470 9469/1/9469
+f 9465/1/9465 9470/1/9470 9472/1/9472
+f 9465/1/9465 9472/1/9472 9464/1/9464
+f 9460/1/9460 9470/1/9470 9465/1/9465
+f 9464/1/9464 9472/1/9472 9469/1/9469
+f 9464/1/9464 9460/1/9460 9465/1/9465
+f 9462/1/9462 9461/1/9461 9463/1/9463
+f 9453/1/9453 9459/1/9459 9461/1/9461
+f 9460/1/9460 9458/1/9458 9470/1/9470
+f 9457/1/9457 9454/1/9454 9458/1/9458
+f 9456/1/9456 9455/1/9455 9457/1/9457
+f 9446/1/9446 9457/1/9457 9455/1/9455
+f 9447/1/9447 9455/1/9455 9456/1/9456
+f 9447/1/9447 9446/1/9446 9455/1/9455
+f 9445/1/9445 9457/1/9457 9446/1/9446
+f 9445/1/9445 9444/1/9444 9448/1/9448
+f 9443/1/9443 9459/1/9459 9444/1/9444
+f 9475/1/9475 9476/1/9476 9477/1/9477
+f 9479/1/9479 9475/1/9475 9477/1/9477
+f 9479/1/9479 9477/1/9477 9875/1/9875
+f 9875/1/9875 9496/1/9496 9479/1/9479
+f 9495/1/9495 9479/1/9479 9496/1/9496
+f 9495/1/9495 9496/1/9496 9497/1/9497
+f 9497/1/9497 9612/1/9612 9495/1/9495
+f 9495/1/9495 9612/1/9612 9613/1/9613
+f 9495/1/9495 9613/1/9613 9614/1/9614
+f 9478/1/9478 9495/1/9495 9614/1/9614
+f 9614/1/9614 9475/1/9475 9478/1/9478
+f 9613/1/9613 9876/1/9876 9614/1/9614
+f 9614/1/9614 9876/1/9876 9875/1/9875
+f 9614/1/9614 9875/1/9875 9601/1/9601
+f 9601/1/9601 9485/1/9485 9614/1/9614
+f 9614/1/9614 9485/1/9485 9483/1/9483
+f 9614/1/9614 9483/1/9483 9481/1/9481
+f 9481/1/9481 9476/1/9476 9614/1/9614
+f 9476/1/9476 9481/1/9481 9480/1/9480
+f 9480/1/9480 9481/1/9481 9482/1/9482
+f 9875/1/9875 9480/1/9480 9482/1/9482
+f 9482/1/9482 9484/1/9484 9875/1/9875
+f 9875/1/9875 9484/1/9484 9486/1/9486
+f 9875/1/9875 9486/1/9486 9874/1/9874
+f 9874/1/9874 9486/1/9486 9488/1/9488
+f 9874/1/9874 9488/1/9488 9871/1/9871
+f 9599/1/9599 9874/1/9874 9871/1/9871
+f 9599/1/9599 9871/1/9871 9602/1/9602
+f 9600/1/9600 9599/1/9599 9602/1/9602
+f 9602/1/9602 9603/1/9603 9600/1/9600
+f 9600/1/9600 9603/1/9603 9604/1/9604
+f 9600/1/9600 9604/1/9604 9605/1/9605
+f 9605/1/9605 9607/1/9607 9600/1/9600
+f 9600/1/9600 9607/1/9607 9642/1/9642
+f 9600/1/9600 9642/1/9642 9652/1/9652
+f 9652/1/9652 9653/1/9653 9600/1/9600
+f 9600/1/9600 9653/1/9653 9654/1/9654
+f 9600/1/9600 9654/1/9654 9655/1/9655
+f 9655/1/9655 9656/1/9656 9600/1/9600
+f 9600/1/9600 9656/1/9656 9657/1/9657
+f 9600/1/9600 9657/1/9657 9658/1/9658
+f 9658/1/9658 9659/1/9659 9600/1/9600
+f 9600/1/9600 9659/1/9659 9660/1/9660
+f 9600/1/9600 9660/1/9660 9661/1/9661
+f 9661/1/9661 9662/1/9662 9600/1/9600
+f 9600/1/9600 9662/1/9662 9663/1/9663
+f 9600/1/9600 9663/1/9663 9597/1/9597
+f 9597/1/9597 9490/1/9490 9600/1/9600
+f 9597/1/9597 9492/1/9492 9490/1/9490
+f 9491/1/9491 9490/1/9490 9492/1/9492
+f 9491/1/9491 9492/1/9492 9493/1/9493
+f 9870/1/9870 9491/1/9491 9493/1/9493
+f 9870/1/9870 9493/1/9493 9980/1/9980
+f 9974/1/9974 9870/1/9870 9980/1/9980
+f 9974/1/9974 9980/1/9980 9834/1/9834
+f 9972/1/9972 9974/1/9974 9834/1/9834
+f 9834/1/9834 9971/1/9971 9972/1/9972
+f 9714/1/9714 9972/1/9972 9971/1/9971
+f 9714/1/9714 9971/1/9971 9712/1/9712
+f 9713/1/9713 9714/1/9714 9712/1/9712
+f 9709/1/9709 9713/1/9713 9712/1/9712
+f 9709/1/9709 9712/1/9712 9711/1/9711
+f 9711/1/9711 9710/1/9710 9709/1/9709
+f 9709/1/9709 9710/1/9710 9708/1/9708
+f 9709/1/9709 9708/1/9708 9703/1/9703
+f 9703/1/9703 9772/1/9772 9709/1/9709
+f 9709/1/9709 9772/1/9772 9773/1/9773
+f 9773/1/9773 9774/1/9774 9709/1/9709
+f 9709/1/9709 9774/1/9774 9775/1/9775
+f 9709/1/9709 9775/1/9775 9776/1/9776
+f 9776/1/9776 9777/1/9777 9709/1/9709
+f 9709/1/9709 9777/1/9777 9801/1/9801
+f 9709/1/9709 9801/1/9801 9722/1/9722
+f 9722/1/9722 9801/1/9801 9802/1/9802
+f 9722/1/9722 9802/1/9802 9799/1/9799
+f 9799/1/9799 9800/1/9800 9722/1/9722
+f 9722/1/9722 9800/1/9800 9782/1/9782
+f 9722/1/9722 9782/1/9782 9768/1/9768
+f 9768/1/9768 9778/1/9778 9722/1/9722
+f 9722/1/9722 9778/1/9778 9784/1/9784
+f 9722/1/9722 9784/1/9784 9785/1/9785
+f 9786/1/9786 9722/1/9722 9785/1/9785
+f 9785/1/9785 9830/1/9830 9786/1/9786
+f 9786/1/9786 9830/1/9830 9829/1/9829
+f 9786/1/9786 9829/1/9829 9787/1/9787
+f 9787/1/9787 9829/1/9829 9832/1/9832
+f 9787/1/9787 9832/1/9832 9788/1/9788
+f 9788/1/9788 9761/1/9761 9787/1/9787
+f 9787/1/9787 9761/1/9761 9723/1/9723
+f 9787/1/9787 9723/1/9723 9722/1/9722
+f 9722/1/9722 9723/1/9723 9713/1/9713
+f 9723/1/9723 9730/1/9730 9713/1/9713
+f 9713/1/9713 9730/1/9730 9731/1/9731
+f 9713/1/9713 9731/1/9731 9732/1/9732
+f 9732/1/9732 9733/1/9733 9713/1/9713
+f 9713/1/9713 9733/1/9733 9734/1/9734
+f 9713/1/9713 9734/1/9734 9726/1/9726
+f 9726/1/9726 9727/1/9727 9713/1/9713
+f 9727/1/9727 9728/1/9728 9713/1/9713
+f 9713/1/9713 9728/1/9728 9729/1/9729
+f 9713/1/9713 9729/1/9729 9725/1/9725
+f 9724/1/9724 9713/1/9713 9725/1/9725
+f 9724/1/9724 9725/1/9725 9803/1/9803
+f 9803/1/9803 9804/1/9804 9724/1/9724
+f 9724/1/9724 9804/1/9804 9805/1/9805
+f 9724/1/9724 9805/1/9805 9806/1/9806
+f 9806/1/9806 9807/1/9807 9724/1/9724
+f 9724/1/9724 9807/1/9807 9808/1/9808
+f 9724/1/9724 9808/1/9808 9809/1/9809
+f 9809/1/9809 9810/1/9810 9724/1/9724
+f 9724/1/9724 9810/1/9810 9811/1/9811
+f 9724/1/9724 9811/1/9811 9812/1/9812
+f 9812/1/9812 9813/1/9813 9724/1/9724
+f 9724/1/9724 9813/1/9813 9814/1/9814
+f 9724/1/9724 9814/1/9814 9739/1/9739
+f 9739/1/9739 9571/1/9571 9724/1/9724
+f 9724/1/9724 9571/1/9571 9573/1/9573
+f 9724/1/9724 9573/1/9573 9718/1/9718
+f 9718/1/9718 9573/1/9573 9494/1/9494
+f 9718/1/9718 9494/1/9494 9598/1/9598
+f 9598/1/9598 9716/1/9716 9718/1/9718
+f 9718/1/9718 9716/1/9716 9713/1/9713
+f 9716/1/9716 9715/1/9715 9713/1/9713
+f 9716/1/9716 9696/1/9696 9715/1/9715
+f 9721/1/9721 9715/1/9715 9696/1/9696
+f 9721/1/9721 9696/1/9696 9720/1/9720
+f 9720/1/9720 10045/1/10045 9721/1/9721
+f 9721/1/9721 10045/1/10045 9979/1/9979
+f 10045/1/10045 9842/1/9842 9979/1/9979
+f 9979/1/9979 9842/1/9842 9973/1/9973
+f 9979/1/9979 9973/1/9973 9972/1/9972
+f 9715/1/9715 9979/1/9979 9972/1/9972
+f 9842/1/9842 9976/1/9976 9973/1/9973
+f 9973/1/9973 9976/1/9976 9977/1/9977
+f 9973/1/9973 9977/1/9977 9978/1/9978
+f 9978/1/9978 10061/1/10061 9973/1/9973
+f 10062/1/10062 9973/1/9973 10061/1/10061
+f 9818/1/9818 10062/1/10062 10061/1/10061
+f 9818/1/9818 10061/1/10061 9697/1/9697
+f 9696/1/9696 9818/1/9818 9697/1/9697
+f 9696/1/9696 9697/1/9697 9694/1/9694
+f 9694/1/9694 9700/1/9700 9696/1/9696
+f 9696/1/9696 9700/1/9700 9719/1/9719
+f 9700/1/9700 10047/1/10047 9719/1/9719
+f 9719/1/9719 10047/1/10047 10046/1/10046
+f 9719/1/9719 10046/1/10046 9720/1/9720
+f 10046/1/10046 10047/1/10047 9842/1/9842
+f 9842/1/9842 10047/1/10047 10048/1/10048
+f 9842/1/9842 10048/1/10048 9843/1/9843
+f 9529/1/9529 9842/1/9842 9843/1/9843
+f 9529/1/9529 9843/1/9843 9844/1/9844
+f 9845/1/9845 9529/1/9529 9844/1/9844
+f 9705/1/9705 9845/1/9845 9844/1/9844
+f 9705/1/9705 9844/1/9844 9695/1/9695
+f 9695/1/9695 9530/1/9530 9705/1/9705
+f 9705/1/9705 9530/1/9530 9704/1/9704
+f 9703/1/9703 9704/1/9704 9530/1/9530
+f 9703/1/9703 9530/1/9530 9527/1/9527
+f 9527/1/9527 9768/1/9768 9703/1/9703
+f 9703/1/9703 9768/1/9768 9781/1/9781
+f 9703/1/9703 9781/1/9781 9769/1/9769
+f 9769/1/9769 9770/1/9770 9703/1/9703
+f 9770/1/9770 9771/1/9771 9703/1/9703
+f 9770/1/9770 10057/1/10057 9771/1/9771
+f 9771/1/9771 10057/1/10057 10056/1/10056
+f 9771/1/9771 10056/1/10056 9772/1/9772
+f 9772/1/9772 10056/1/10056 10055/1/10055
+f 10054/1/10054 9772/1/9772 10055/1/10055
+f 9840/1/9840 10054/1/10054 10055/1/10055
+f 9835/1/9835 10054/1/10054 9840/1/9840
+f 9840/1/9840 9966/1/9966 9835/1/9835
+f 9835/1/9835 9966/1/9966 9967/1/9967
+f 9835/1/9835 9967/1/9967 9968/1/9968
+f 9968/1/9968 9969/1/9969 9835/1/9835
+f 9835/1/9835 9969/1/9969 9970/1/9970
+f 9835/1/9835 9970/1/9970 9834/1/9834
+f 9834/1/9834 9823/1/9823 9835/1/9835
+f 9835/1/9835 9823/1/9823 9828/1/9828
+f 9835/1/9835 9828/1/9828 10052/1/10052
+f 10050/1/10050 9835/1/9835 10052/1/10052
+f 9777/1/9777 10050/1/10050 10052/1/10052
+f 10050/1/10050 10051/1/10051 9835/1/9835
+f 10051/1/10051 10053/1/10053 9835/1/9835
+f 9775/1/9775 10053/1/10053 10051/1/10051
+f 9776/1/9776 10051/1/10051 10050/1/10050
+f 9828/1/9828 9777/1/9777 10052/1/10052
+f 9823/1/9823 9827/1/9827 9828/1/9828
+f 9802/1/9802 9828/1/9828 9827/1/9827
+f 9823/1/9823 9826/1/9826 9827/1/9827
+f 9799/1/9799 9827/1/9827 9826/1/9826
+f 9825/1/9825 9826/1/9826 9823/1/9823
+f 9823/1/9823 9824/1/9824 9825/1/9825
+f 9782/1/9782 9825/1/9825 9824/1/9824
+f 9820/1/9820 9782/1/9782 9824/1/9824
+f 9783/1/9783 9782/1/9782 9820/1/9820
+f 9783/1/9783 9820/1/9820 9779/1/9779
+f 9768/1/9768 9783/1/9783 9779/1/9779
+f 9779/1/9779 9780/1/9780 9768/1/9768
+f 9779/1/9779 9819/1/9819 9780/1/9780
+f 9780/1/9780 9819/1/9819 9822/1/9822
+f 9780/1/9780 9822/1/9822 9781/1/9781
+f 9781/1/9781 9822/1/9822 9838/1/9838
+f 10058/1/10058 9781/1/9781 9838/1/9838
+f 9840/1/9840 10058/1/10058 9838/1/9838
+f 9840/1/9840 9838/1/9838 9821/1/9821
+f 9821/1/9821 9525/1/9525 9840/1/9840
+f 9840/1/9840 9525/1/9525 9529/1/9529
+f 9525/1/9525 9527/1/9527 9529/1/9529
+f 9525/1/9525 9524/1/9524 9527/1/9527
+f 9524/1/9524 9766/1/9766 9527/1/9527
+f 9524/1/9524 9765/1/9765 9766/1/9766
+f 9765/1/9765 9841/1/9841 9766/1/9766
+f 9766/1/9766 9841/1/9841 9839/1/9839
+f 9766/1/9766 9839/1/9839 9767/1/9767
+f 9766/1/9766 9767/1/9767 9768/1/9768
+f 9767/1/9767 9839/1/9839 9837/1/9837
+f 9767/1/9767 9837/1/9837 9778/1/9778
+f 9778/1/9778 9837/1/9837 9836/1/9836
+f 9821/1/9821 9836/1/9836 9837/1/9837
+f 9821/1/9821 9831/1/9831 9836/1/9836
+f 9784/1/9784 9836/1/9836 9831/1/9831
+f 9823/1/9823 9831/1/9831 9821/1/9821
+f 9821/1/9821 9820/1/9820 9823/1/9823
+f 9819/1/9819 9820/1/9820 9821/1/9821
+f 9823/1/9823 9830/1/9830 9831/1/9831
+f 9837/1/9837 9839/1/9839 9821/1/9821
+f 9523/1/9523 9839/1/9839 9841/1/9841
+f 9523/1/9523 9841/1/9841 10001/1/10001
+f 10001/1/10001 9526/1/9526 9523/1/9523
+f 9523/1/9523 9526/1/9526 9524/1/9524
+f 9524/1/9524 9526/1/9526 9528/1/9528
+f 9528/1/9528 9763/1/9763 9524/1/9524
+f 9528/1/9528 9762/1/9762 9763/1/9763
+f 9764/1/9764 9763/1/9763 9762/1/9762
+f 9762/1/9762 9793/1/9793 9764/1/9764
+f 9793/1/9793 10003/1/10003 9764/1/9764
+f 9764/1/9764 10003/1/10003 10002/1/10002
+f 10000/1/10000 10002/1/10002 10003/1/10003
+f 10000/1/10000 10003/1/10003 9999/1/9999
+f 9541/1/9541 10000/1/10000 9999/1/9999
+f 9541/1/9541 9999/1/9999 9544/1/9544
+f 9543/1/9543 9541/1/9541 9544/1/9544
+f 9543/1/9543 9544/1/9544 9545/1/9545
+f 9760/1/9760 9543/1/9543 9545/1/9545
+f 9760/1/9760 9545/1/9545 9761/1/9761
+f 9789/1/9789 9760/1/9760 9761/1/9761
+f 9790/1/9790 9760/1/9760 9789/1/9789
+f 9789/1/9789 10006/1/10006 9790/1/9790
+f 9790/1/9790 10006/1/10006 10005/1/10005
+f 9790/1/9790 10005/1/10005 9791/1/9791
+f 9791/1/9791 10005/1/10005 10004/1/10004
+f 9791/1/9791 10004/1/10004 9792/1/9792
+f 9760/1/9760 9791/1/9791 9792/1/9792
+f 9760/1/9760 9792/1/9792 9762/1/9762
+f 9762/1/9762 9542/1/9542 9760/1/9760
+f 9540/1/9540 9542/1/9542 9762/1/9762
+f 9762/1/9762 9538/1/9538 9540/1/9540
+f 9537/1/9537 9540/1/9540 9538/1/9538
+f 9537/1/9537 9538/1/9538 9535/1/9535
+f 9535/1/9535 9536/1/9536 9537/1/9537
+f 9537/1/9537 9536/1/9536 9534/1/9534
+f 10000/1/10000 9537/1/9537 9534/1/9534
+f 10000/1/10000 9534/1/9534 10001/1/10001
+f 9539/1/9539 9537/1/9537 10000/1/10000
+f 9535/1/9535 9534/1/9534 9536/1/9536
+f 9533/1/9533 9534/1/9534 9535/1/9535
+f 9533/1/9533 9535/1/9535 9762/1/9762
+f 9533/1/9533 9526/1/9526 9534/1/9534
+f 9539/1/9539 9540/1/9540 9537/1/9537
+f 9762/1/9762 9535/1/9535 9538/1/9538
+f 9539/1/9539 9542/1/9542 9540/1/9540
+f 9541/1/9541 9542/1/9542 9539/1/9539
+f 9792/1/9792 10004/1/10004 10007/1/10007
+f 9792/1/9792 10007/1/10007 9793/1/9793
+f 9999/1/9999 10007/1/10007 10004/1/10004
+f 10004/1/10004 10005/1/10005 9999/1/9999
+f 9999/1/9999 10005/1/10005 10006/1/10006
+f 9999/1/9999 10006/1/10006 9990/1/9990
+f 9990/1/9990 10006/1/10006 10008/1/10008
+f 9990/1/9990 10008/1/10008 9832/1/9832
+f 9832/1/9832 9833/1/9833 9990/1/9990
+f 9833/1/9833 9989/1/9989 9990/1/9990
+f 9990/1/9990 9989/1/9989 9991/1/9991
+f 9991/1/9991 9992/1/9992 9990/1/9990
+f 9990/1/9990 9992/1/9992 9993/1/9993
+f 9990/1/9990 9993/1/9993 9994/1/9994
+f 9548/1/9548 9990/1/9990 9994/1/9994
+f 9548/1/9548 9994/1/9994 9550/1/9550
+f 9550/1/9550 9547/1/9547 9548/1/9548
+f 9547/1/9547 9546/1/9546 9548/1/9548
+f 9545/1/9545 9546/1/9546 9547/1/9547
+f 9545/1/9545 9547/1/9547 9758/1/9758
+f 9547/1/9547 9549/1/9549 9758/1/9758
+f 9758/1/9758 9549/1/9549 9551/1/9551
+f 9758/1/9758 9551/1/9551 9553/1/9553
+f 9553/1/9553 9555/1/9555 9758/1/9758
+f 9557/1/9557 9758/1/9758 9555/1/9555
+f 9557/1/9557 9555/1/9555 9558/1/9558
+f 9558/1/9558 9559/1/9559 9557/1/9557
+f 9560/1/9560 9559/1/9559 9558/1/9558
+f 9994/1/9994 9560/1/9560 9558/1/9558
+f 9994/1/9994 9558/1/9558 9556/1/9556
+f 9556/1/9556 9554/1/9554 9994/1/9994
+f 9994/1/9994 9554/1/9554 9552/1/9552
+f 9553/1/9553 9552/1/9552 9554/1/9554
+f 9556/1/9556 9553/1/9553 9554/1/9554
+f 9562/1/9562 9560/1/9560 9994/1/9994
+f 9998/1/9998 9562/1/9562 9994/1/9994
+f 9998/1/9998 9994/1/9994 9997/1/9997
+f 9759/1/9759 9998/1/9998 9997/1/9997
+f 9759/1/9759 9997/1/9997 9797/1/9797
+f 9758/1/9758 9759/1/9759 9797/1/9797
+f 9758/1/9758 9797/1/9797 9798/1/9798
+f 9794/1/9794 9758/1/9758 9798/1/9798
+f 9798/1/9798 9995/1/9995 9794/1/9794
+f 9794/1/9794 9995/1/9995 9993/1/9993
+f 9794/1/9794 9993/1/9993 9796/1/9796
+f 9796/1/9796 9761/1/9761 9794/1/9794
+f 9795/1/9795 9761/1/9761 9796/1/9796
+f 9796/1/9796 9992/1/9992 9795/1/9795
+f 9798/1/9798 9996/1/9996 9995/1/9995
+f 9994/1/9994 9995/1/9995 9996/1/9996
+f 9761/1/9761 9758/1/9758 9794/1/9794
+f 9797/1/9797 9996/1/9996 9798/1/9798
+f 9757/1/9757 9759/1/9759 9758/1/9758
+f 9559/1/9559 9757/1/9757 9758/1/9758
+f 9561/1/9561 9757/1/9757 9559/1/9559
+f 9561/1/9561 9563/1/9563 9757/1/9757
+f 9757/1/9757 9563/1/9563 9565/1/9565
+f 9757/1/9757 9565/1/9565 9756/1/9756
+f 9756/1/9756 9984/1/9984 9757/1/9757
+f 9757/1/9757 9984/1/9984 9998/1/9998
+f 9566/1/9566 9998/1/9998 9984/1/9984
+f 9566/1/9566 9984/1/9984 9568/1/9568
+f 9568/1/9568 9565/1/9565 9566/1/9566
+f 9567/1/9567 9565/1/9565 9568/1/9568
+f 9568/1/9568 9569/1/9569 9567/1/9567
+f 9755/1/9755 9567/1/9567 9569/1/9569
+f 9755/1/9755 9569/1/9569 9739/1/9739
+f 9739/1/9739 9754/1/9754 9755/1/9755
+f 9754/1/9754 9985/1/9985 9755/1/9755
+f 9755/1/9755 9985/1/9985 9983/1/9983
+f 9755/1/9755 9983/1/9983 9756/1/9756
+f 9985/1/9985 9982/1/9982 9983/1/9983
+f 9570/1/9570 9983/1/9983 9982/1/9982
+f 9570/1/9570 9982/1/9982 9572/1/9572
+f 9572/1/9572 9571/1/9571 9570/1/9570
+f 9570/1/9570 9571/1/9571 9569/1/9569
+f 9572/1/9572 9982/1/9982 9981/1/9981
+f 9572/1/9572 9981/1/9981 9574/1/9574
+f 9574/1/9574 9573/1/9573 9572/1/9572
+f 9980/1/9980 9574/1/9574 9981/1/9981
+f 9982/1/9982 10044/1/10044 9981/1/9981
+f 9981/1/9981 10044/1/10044 10031/1/10031
+f 9981/1/9981 10031/1/10031 10030/1/10030
+f 10029/1/10029 9981/1/9981 10030/1/10030
+f 10030/1/10030 9812/1/9812 10029/1/10029
+f 10029/1/10029 10028/1/10028 9981/1/9981
+f 10028/1/10028 10027/1/10027 9981/1/9981
+f 9981/1/9981 10027/1/10027 10026/1/10026
+f 9981/1/9981 10026/1/10026 10025/1/10025
+f 10025/1/10025 10024/1/10024 9981/1/9981
+f 10024/1/10024 10023/1/10023 9981/1/9981
+f 9981/1/9981 10023/1/10023 10022/1/10022
+f 9981/1/9981 10022/1/10022 10021/1/10021
+f 9981/1/9981 10021/1/10021 10020/1/10020
+f 9834/1/9834 9981/1/9981 10020/1/10020
+f 9834/1/9834 10020/1/10020 10010/1/10010
+f 10010/1/10010 9833/1/9833 9834/1/9834
+f 10010/1/10010 10011/1/10011 9833/1/9833
+f 10011/1/10011 10015/1/10015 9833/1/9833
+f 9833/1/9833 10015/1/10015 10016/1/10016
+f 9833/1/9833 10016/1/10016 10017/1/10017
+f 10017/1/10017 10018/1/10018 9833/1/9833
+f 9833/1/9833 10018/1/10018 10019/1/10019
+f 9833/1/9833 10019/1/10019 10012/1/10012
+f 10012/1/10012 10013/1/10013 9833/1/9833
+f 9833/1/9833 10013/1/10013 10014/1/10014
+f 9833/1/9833 10014/1/10014 10009/1/10009
+f 9833/1/9833 10009/1/10009 9982/1/9982
+f 9982/1/9982 9988/1/9988 9833/1/9833
+f 9982/1/9982 9987/1/9987 9988/1/9988
+f 9752/1/9752 9988/1/9988 9987/1/9987
+f 9752/1/9752 9987/1/9987 9753/1/9753
+f 9752/1/9752 9753/1/9753 9739/1/9739
+f 9739/1/9739 9751/1/9751 9752/1/9752
+f 9750/1/9750 9751/1/9751 9739/1/9739
+f 9750/1/9750 9739/1/9739 9723/1/9723
+f 9750/1/9750 9723/1/9723 9795/1/9795
+f 9795/1/9795 9991/1/9991 9750/1/9750
+f 9723/1/9723 9739/1/9739 9737/1/9737
+f 9723/1/9723 9737/1/9737 9736/1/9736
+f 9736/1/9736 9735/1/9735 9723/1/9723
+f 9735/1/9735 9736/1/9736 10009/1/10009
+f 10009/1/10009 9736/1/9736 10032/1/10032
+f 9736/1/9736 9737/1/9737 10032/1/10032
+f 10032/1/10032 9737/1/9737 10033/1/10033
+f 9982/1/9982 10032/1/10032 10033/1/10033
+f 10033/1/10033 10034/1/10034 9982/1/9982
+f 9982/1/9982 10034/1/10034 10035/1/10035
+f 9982/1/9982 10035/1/10035 10036/1/10036
+f 10036/1/10036 10037/1/10037 9982/1/9982
+f 9982/1/9982 10037/1/10037 10038/1/10038
+f 9982/1/9982 10038/1/10038 10039/1/10039
+f 10039/1/10039 10040/1/10040 9982/1/9982
+f 9982/1/9982 10040/1/10040 10041/1/10041
+f 9982/1/9982 10041/1/10041 10042/1/10042
+f 10042/1/10042 10043/1/10043 9982/1/9982
+f 10042/1/10042 9748/1/9748 10043/1/10043
+f 9748/1/9748 9749/1/9749 10043/1/10043
+f 10043/1/10043 9749/1/9749 10044/1/10044
+f 9749/1/9749 9814/1/9814 10044/1/10044
+f 9739/1/9739 9749/1/9749 9748/1/9748
+f 9748/1/9748 9747/1/9747 9739/1/9739
+f 9739/1/9739 9747/1/9747 9746/1/9746
+f 9739/1/9739 9746/1/9746 9745/1/9745
+f 9745/1/9745 9744/1/9744 9739/1/9739
+f 9739/1/9739 9744/1/9744 9743/1/9743
+f 9739/1/9739 9743/1/9743 9742/1/9742
+f 9742/1/9742 9741/1/9741 9739/1/9739
+f 9739/1/9739 9741/1/9741 9740/1/9740
+f 9739/1/9739 9740/1/9740 9738/1/9738
+f 9738/1/9738 9740/1/9740 10034/1/10034
+f 9740/1/9740 9741/1/9741 10035/1/10035
+f 9741/1/9741 9742/1/9742 10036/1/10036
+f 9742/1/9742 9743/1/9743 10037/1/10037
+f 9743/1/9743 9744/1/9744 10038/1/10038
+f 9744/1/9744 9745/1/9745 10039/1/10039
+f 9745/1/9745 9746/1/9746 10040/1/10040
+f 9746/1/9746 9747/1/9747 10041/1/10041
+f 9747/1/9747 9748/1/9748 10042/1/10042
+f 10041/1/10041 9747/1/9747 10042/1/10042
+f 10040/1/10040 9746/1/9746 10041/1/10041
+f 10039/1/10039 9745/1/9745 10040/1/10040
+f 10038/1/10038 9744/1/9744 10039/1/10039
+f 10037/1/10037 9743/1/9743 10038/1/10038
+f 10036/1/10036 9742/1/9742 10037/1/10037
+f 10035/1/10035 9741/1/9741 10036/1/10036
+f 10034/1/10034 9740/1/9740 10035/1/10035
+f 10033/1/10033 9738/1/9738 10034/1/10034
+f 9737/1/9737 9738/1/9738 10033/1/10033
+f 9738/1/9738 9737/1/9737 9739/1/9739
+f 9750/1/9750 9989/1/9989 9751/1/9751
+f 9751/1/9751 9989/1/9989 9988/1/9988
+f 9753/1/9753 9987/1/9987 9986/1/9986
+f 9753/1/9753 9986/1/9986 9754/1/9754
+f 9751/1/9751 9988/1/9988 9752/1/9752
+f 9986/1/9986 9987/1/9987 9982/1/9982
+f 9982/1/9982 10009/1/10009 10032/1/10032
+f 10014/1/10014 9735/1/9735 10009/1/10009
+f 9730/1/9730 9735/1/9735 10014/1/10014
+f 10013/1/10013 9730/1/9730 10014/1/10014
+f 10012/1/10012 9731/1/9731 10013/1/10013
+f 10019/1/10019 9732/1/9732 10012/1/10012
+f 10018/1/10018 9733/1/9733 10019/1/10019
+f 10017/1/10017 9734/1/9734 10018/1/10018
+f 10016/1/10016 9726/1/9726 10017/1/10017
+f 10015/1/10015 9727/1/9727 10016/1/10016
+f 10011/1/10011 9728/1/9728 10015/1/10015
+f 10010/1/10010 9729/1/9729 10011/1/10011
+f 10020/1/10020 9725/1/9725 10010/1/10010
+f 10021/1/10021 9803/1/9803 10020/1/10020
+f 10022/1/10022 9804/1/9804 10021/1/10021
+f 10023/1/10023 9805/1/9805 10022/1/10022
+f 10024/1/10024 9806/1/9806 10023/1/10023
+f 10025/1/10025 9807/1/9807 10024/1/10024
+f 10026/1/10026 9808/1/9808 10025/1/10025
+f 10027/1/10027 9809/1/9809 10026/1/10026
+f 10028/1/10028 9810/1/9810 10027/1/10027
+f 10029/1/10029 9811/1/9811 10028/1/10028
+f 10031/1/10031 9813/1/9813 10030/1/10030
+f 10044/1/10044 9814/1/9814 10031/1/10031
+f 9982/1/9982 10043/1/10043 10044/1/10044
+f 9568/1/9568 9983/1/9983 9570/1/9570
+f 9986/1/9986 9982/1/9982 9985/1/9985
+f 9754/1/9754 9986/1/9986 9985/1/9985
+f 9739/1/9739 9753/1/9753 9754/1/9754
+f 9756/1/9756 9567/1/9567 9755/1/9755
+f 9570/1/9570 9569/1/9569 9568/1/9568
+f 9568/1/9568 9984/1/9984 9983/1/9983
+f 9564/1/9564 9998/1/9998 9566/1/9566
+f 9566/1/9566 9563/1/9563 9564/1/9564
+f 9756/1/9756 9983/1/9983 9984/1/9984
+f 9756/1/9756 9565/1/9565 9567/1/9567
+f 9565/1/9565 9563/1/9563 9566/1/9566
+f 9563/1/9563 9561/1/9561 9564/1/9564
+f 9564/1/9564 9561/1/9561 9562/1/9562
+f 9797/1/9797 9997/1/9997 9996/1/9996
+f 9757/1/9757 9998/1/9998 9759/1/9759
+f 9997/1/9997 9994/1/9994 9996/1/9996
+f 9564/1/9564 9562/1/9562 9998/1/9998
+f 9562/1/9562 9561/1/9561 9560/1/9560
+f 9560/1/9560 9561/1/9561 9559/1/9559
+f 9558/1/9558 9555/1/9555 9556/1/9556
+f 9559/1/9559 9758/1/9758 9557/1/9557
+f 9555/1/9555 9553/1/9553 9556/1/9556
+f 9551/1/9551 9552/1/9552 9553/1/9553
+f 9551/1/9551 9550/1/9550 9552/1/9552
+f 9549/1/9549 9550/1/9550 9551/1/9551
+f 9549/1/9549 9547/1/9547 9550/1/9550
+f 9994/1/9994 9552/1/9552 9550/1/9550
+f 9546/1/9546 9990/1/9990 9548/1/9548
+f 9544/1/9544 9990/1/9990 9546/1/9546
+f 9994/1/9994 9993/1/9993 9995/1/9995
+f 9796/1/9796 9993/1/9993 9992/1/9992
+f 9795/1/9795 9992/1/9992 9991/1/9991
+f 9750/1/9750 9991/1/9991 9989/1/9989
+f 9833/1/9833 9988/1/9988 9989/1/9989
+f 9832/1/9832 9823/1/9823 9833/1/9833
+f 9789/1/9789 10008/1/10008 10006/1/10006
+f 9788/1/9788 10008/1/10008 9789/1/9789
+f 9790/1/9790 9791/1/9791 9760/1/9760
+f 9761/1/9761 9545/1/9545 9758/1/9758
+f 9542/1/9542 9543/1/9543 9760/1/9760
+f 9545/1/9545 9544/1/9544 9546/1/9546
+f 9542/1/9542 9541/1/9541 9543/1/9543
+f 9544/1/9544 9999/1/9999 9990/1/9990
+f 9539/1/9539 10000/1/10000 9541/1/9541
+f 9999/1/9999 10003/1/10003 10007/1/10007
+f 10001/1/10001 10002/1/10002 10000/1/10000
+f 9763/1/9763 10002/1/10002 10001/1/10001
+f 9763/1/9763 10001/1/10001 9765/1/9765
+f 9793/1/9793 10007/1/10007 10003/1/10003
+f 9762/1/9762 9792/1/9792 9793/1/9793
+f 9764/1/9764 10002/1/10002 9763/1/9763
+f 9533/1/9533 9762/1/9762 9528/1/9528
+f 9528/1/9528 9526/1/9526 9533/1/9533
+f 10001/1/10001 9534/1/9534 9526/1/9526
+f 9525/1/9525 9839/1/9839 9523/1/9523
+f 9765/1/9765 10001/1/10001 9841/1/9841
+f 9763/1/9763 9765/1/9765 9524/1/9524
+f 9523/1/9523 9524/1/9524 9525/1/9525
+f 9821/1/9821 9839/1/9839 9525/1/9525
+f 10057/1/10057 10058/1/10058 9840/1/9840
+f 9821/1/9821 9838/1/9838 9822/1/9822
+f 9821/1/9821 9822/1/9822 9819/1/9819
+f 9779/1/9779 9820/1/9820 9819/1/9819
+f 9823/1/9823 9820/1/9820 9824/1/9824
+f 9800/1/9800 9826/1/9826 9825/1/9825
+f 9834/1/9834 9833/1/9833 9823/1/9823
+f 9711/1/9711 9970/1/9970 9969/1/9969
+f 9710/1/9710 9969/1/9969 9968/1/9968
+f 9708/1/9708 9968/1/9968 9967/1/9967
+f 9708/1/9708 9967/1/9967 9707/1/9707
+f 9707/1/9707 9967/1/9967 9966/1/9966
+f 9707/1/9707 9966/1/9966 9706/1/9706
+f 9703/1/9703 9707/1/9707 9706/1/9706
+f 9706/1/9706 9966/1/9966 9965/1/9965
+f 9706/1/9706 9965/1/9965 9704/1/9704
+f 9704/1/9704 9965/1/9965 9845/1/9845
+f 9845/1/9845 9965/1/9965 9840/1/9840
+f 9840/1/9840 9965/1/9965 9966/1/9966
+f 9835/1/9835 10053/1/10053 10054/1/10054
+f 9774/1/9774 10054/1/10054 10053/1/10053
+f 9840/1/9840 10055/1/10055 10056/1/10056
+f 9840/1/9840 10056/1/10056 10057/1/10057
+f 9770/1/9770 10058/1/10058 10057/1/10057
+f 9769/1/9769 10058/1/10058 9770/1/9770
+f 9769/1/9769 9781/1/9781 10058/1/10058
+f 9768/1/9768 9780/1/9780 9781/1/9781
+f 9527/1/9527 9766/1/9766 9768/1/9768
+f 9529/1/9529 9527/1/9527 9530/1/9530
+f 9529/1/9529 9530/1/9530 9531/1/9531
+f 9531/1/9531 9530/1/9530 9532/1/9532
+f 9531/1/9531 9532/1/9532 9521/1/9521
+f 9521/1/9521 9846/1/9846 9531/1/9531
+f 9846/1/9846 10049/1/10049 9531/1/9531
+f 9531/1/9531 10049/1/10049 9842/1/9842
+f 9693/1/9693 10049/1/10049 9846/1/9846
+f 9693/1/9693 9846/1/9846 9691/1/9691
+f 9693/1/9693 9691/1/9691 9522/1/9522
+f 9693/1/9693 9522/1/9522 9532/1/9532
+f 9693/1/9693 9532/1/9532 9701/1/9701
+f 9694/1/9694 9701/1/9701 9532/1/9532
+f 9694/1/9694 9532/1/9532 9695/1/9695
+f 9695/1/9695 9699/1/9699 9694/1/9694
+f 9695/1/9695 9843/1/9843 9699/1/9699
+f 9702/1/9702 9701/1/9701 9694/1/9694
+f 9694/1/9694 9698/1/9698 9702/1/9702
+f 9698/1/9698 9977/1/9977 9702/1/9702
+f 9702/1/9702 9976/1/9976 9701/1/9701
+f 9701/1/9701 9976/1/9976 10049/1/10049
+f 9522/1/9522 9691/1/9691 9577/1/9577
+f 9522/1/9522 9577/1/9577 9520/1/9520
+f 9519/1/9519 9522/1/9522 9520/1/9520
+f 9519/1/9519 9520/1/9520 9517/1/9517
+f 9852/1/9852 9519/1/9519 9517/1/9517
+f 9852/1/9852 9517/1/9517 9949/1/9949
+f 9949/1/9949 9950/1/9950 9852/1/9852
+f 9852/1/9852 9950/1/9950 9951/1/9951
+f 9852/1/9852 9951/1/9951 9901/1/9901
+f 9901/1/9901 9959/1/9959 9852/1/9852
+f 9852/1/9852 9959/1/9959 9960/1/9960
+f 9852/1/9852 9960/1/9960 9961/1/9961
+f 9963/1/9963 9852/1/9852 9961/1/9961
+f 9638/1/9638 9963/1/9963 9961/1/9961
+f 9638/1/9638 9961/1/9961 9632/1/9632
+f 9582/1/9582 9638/1/9638 9632/1/9632
+f 9629/1/9629 9582/1/9582 9632/1/9632
+f 9629/1/9629 9632/1/9632 9633/1/9633
+f 9633/1/9633 9634/1/9634 9629/1/9629
+f 9629/1/9629 9634/1/9634 9635/1/9635
+f 9629/1/9629 9635/1/9635 9636/1/9636
+f 9636/1/9636 9637/1/9637 9629/1/9629
+f 9629/1/9629 9637/1/9637 9680/1/9680
+f 9629/1/9629 9680/1/9680 9585/1/9585
+f 9585/1/9585 9607/1/9607 9629/1/9629
+f 9629/1/9629 9607/1/9607 9617/1/9617
+f 9629/1/9629 9617/1/9617 9631/1/9631
+f 9630/1/9630 9629/1/9629 9631/1/9631
+f 9631/1/9631 9954/1/9954 9630/1/9630
+f 9630/1/9630 9954/1/9954 9953/1/9953
+f 9630/1/9630 9953/1/9953 9628/1/9628
+f 9628/1/9628 9953/1/9953 9952/1/9952
+f 9628/1/9628 9952/1/9952 9627/1/9627
+f 9628/1/9628 9627/1/9627 9582/1/9582
+f 9582/1/9582 9627/1/9627 9626/1/9626
+f 9582/1/9582 9626/1/9626 9625/1/9625
+f 9518/1/9518 9582/1/9582 9625/1/9625
+f 9518/1/9518 9625/1/9625 9516/1/9516
+f 9515/1/9515 9518/1/9518 9516/1/9516
+f 9514/1/9514 9515/1/9515 9516/1/9516
+f 9514/1/9514 9516/1/9516 9512/1/9512
+f 9512/1/9512 9513/1/9513 9514/1/9514
+f 9512/1/9512 9511/1/9511 9513/1/9513
+f 9511/1/9511 9947/1/9947 9513/1/9513
+f 9513/1/9513 9947/1/9947 9515/1/9515
+f 9948/1/9948 9515/1/9515 9947/1/9947
+f 9623/1/9623 9948/1/9948 9947/1/9947
+f 9623/1/9623 9947/1/9947 9622/1/9622
+f 9622/1/9622 9507/1/9507 9623/1/9623
+f 9509/1/9509 9623/1/9623 9507/1/9507
+f 9507/1/9507 9508/1/9508 9509/1/9509
+f 9508/1/9508 9510/1/9510 9509/1/9509
+f 9509/1/9509 9510/1/9510 9511/1/9511
+f 9510/1/9510 9508/1/9508 9511/1/9511
+f 9507/1/9507 9506/1/9506 9508/1/9508
+f 9506/1/9506 9944/1/9944 9508/1/9508
+f 9508/1/9508 9944/1/9944 9945/1/9945
+f 9508/1/9508 9945/1/9945 9946/1/9946
+f 9946/1/9946 9947/1/9947 9508/1/9508
+f 9621/1/9621 9946/1/9946 9945/1/9945
+f 9621/1/9621 9945/1/9945 9620/1/9620
+f 9620/1/9620 9505/1/9505 9621/1/9621
+f 9621/1/9621 9505/1/9505 9507/1/9507
+f 9620/1/9620 9503/1/9503 9505/1/9505
+f 9503/1/9503 9504/1/9504 9505/1/9505
+f 9505/1/9505 9504/1/9504 9506/1/9506
+f 9504/1/9504 9943/1/9943 9506/1/9506
+f 9504/1/9504 9942/1/9942 9943/1/9943
+f 9618/1/9618 9943/1/9943 9942/1/9942
+f 9618/1/9618 9942/1/9942 9615/1/9615
+f 9503/1/9503 9618/1/9618 9615/1/9615
+f 9503/1/9503 9615/1/9615 9501/1/9501
+f 9501/1/9501 9502/1/9502 9503/1/9503
+f 9501/1/9501 9500/1/9500 9502/1/9502
+f 9500/1/9500 9879/1/9879 9502/1/9502
+f 9502/1/9502 9879/1/9879 9880/1/9880
+f 9502/1/9502 9880/1/9880 9881/1/9881
+f 9502/1/9502 9881/1/9881 9882/1/9882
+f 9882/1/9882 9902/1/9902 9502/1/9502
+f 9502/1/9502 9902/1/9902 9941/1/9941
+f 9502/1/9502 9941/1/9941 9940/1/9940
+f 9940/1/9940 9504/1/9504 9502/1/9502
+f 9616/1/9616 9940/1/9940 9941/1/9941
+f 9616/1/9616 9941/1/9941 9617/1/9617
+f 9501/1/9501 9616/1/9616 9617/1/9617
+f 9615/1/9615 9940/1/9940 9616/1/9616
+f 9617/1/9617 9941/1/9941 9902/1/9902
+f 9882/1/9882 9901/1/9901 9902/1/9902
+f 9954/1/9954 9902/1/9902 9901/1/9901
+f 9900/1/9900 9901/1/9901 9882/1/9882
+f 9882/1/9882 9867/1/9867 9900/1/9900
+f 9867/1/9867 9912/1/9912 9900/1/9900
+f 9900/1/9900 9912/1/9912 9914/1/9914
+f 9900/1/9900 9914/1/9914 9915/1/9915
+f 9916/1/9916 9900/1/9900 9915/1/9915
+f 9587/1/9587 9916/1/9916 9915/1/9915
+f 9587/1/9587 9915/1/9915 9588/1/9588
+f 9588/1/9588 9585/1/9585 9587/1/9587
+f 9585/1/9585 9586/1/9586 9587/1/9587
+f 9585/1/9585 9584/1/9584 9586/1/9586
+f 9584/1/9584 9917/1/9917 9586/1/9586
+f 9586/1/9586 9917/1/9917 9916/1/9916
+f 9917/1/9917 9851/1/9851 9916/1/9916
+f 9917/1/9917 9918/1/9918 9851/1/9851
+f 9918/1/9918 9850/1/9850 9851/1/9851
+f 9851/1/9851 9850/1/9850 9519/1/9519
+f 9849/1/9849 9519/1/9519 9850/1/9850
+f 9580/1/9580 9849/1/9849 9850/1/9850
+f 9580/1/9580 9850/1/9850 9583/1/9583
+f 9580/1/9580 9583/1/9583 9581/1/9581
+f 9580/1/9580 9581/1/9581 9520/1/9520
+f 9520/1/9520 9579/1/9579 9580/1/9580
+f 9520/1/9520 9576/1/9576 9579/1/9579
+f 9576/1/9576 9848/1/9848 9579/1/9579
+f 9579/1/9579 9848/1/9848 9849/1/9849
+f 9576/1/9576 9853/1/9853 9848/1/9848
+f 9847/1/9847 9848/1/9848 9853/1/9853
+f 9847/1/9847 9853/1/9853 9854/1/9854
+f 9854/1/9854 9860/1/9860 9847/1/9847
+f 9847/1/9847 9860/1/9860 10059/1/10059
+f 9847/1/9847 10059/1/10059 9863/1/9863
+f 9863/1/9863 9864/1/9864 9847/1/9847
+f 9847/1/9847 9864/1/9864 9865/1/9865
+f 9865/1/9865 9866/1/9866 9847/1/9847
+f 9847/1/9847 9866/1/9866 9521/1/9521
+f 9692/1/9692 9866/1/9866 9865/1/9865
+f 9692/1/9692 9865/1/9865 9686/1/9686
+f 9577/1/9577 9692/1/9692 9686/1/9686
+f 9577/1/9577 9686/1/9686 9593/1/9593
+f 9593/1/9593 9690/1/9690 9577/1/9577
+f 9577/1/9577 9690/1/9690 9578/1/9578
+f 9577/1/9577 9578/1/9578 9575/1/9575
+f 9575/1/9575 9576/1/9576 9577/1/9577
+f 9578/1/9578 9855/1/9855 9575/1/9575
+f 9575/1/9575 9855/1/9855 9853/1/9853
+f 9578/1/9578 9856/1/9856 9855/1/9855
+f 9854/1/9854 9855/1/9855 9856/1/9856
+f 9856/1/9856 9857/1/9857 9854/1/9854
+f 9854/1/9854 9857/1/9857 9858/1/9858
+f 9854/1/9854 9858/1/9858 9859/1/9859
+f 9862/1/9862 9854/1/9854 9859/1/9859
+f 9862/1/9862 9859/1/9859 9867/1/9867
+f 9867/1/9867 9869/1/9869 9862/1/9862
+f 9862/1/9862 9869/1/9869 9870/1/9870
+f 9867/1/9867 9913/1/9913 9869/1/9869
+f 9913/1/9913 9932/1/9932 9869/1/9869
+f 9869/1/9869 9932/1/9932 9933/1/9933
+f 9933/1/9933 9934/1/9934 9869/1/9869
+f 9869/1/9869 9934/1/9934 9935/1/9935
+f 9869/1/9869 9935/1/9935 9927/1/9927
+f 9927/1/9927 9928/1/9928 9869/1/9869
+f 9928/1/9928 9929/1/9929 9869/1/9869
+f 9869/1/9869 9929/1/9929 9930/1/9930
+f 9869/1/9869 9930/1/9930 9931/1/9931
+f 9931/1/9931 9936/1/9936 9869/1/9869
+f 9869/1/9869 9936/1/9936 9937/1/9937
+f 9869/1/9869 9937/1/9937 9938/1/9938
+f 9939/1/9939 9869/1/9869 9938/1/9938
+f 9938/1/9938 9677/1/9677 9939/1/9939
+f 9677/1/9677 9663/1/9663 9939/1/9939
+f 9939/1/9939 9663/1/9663 9895/1/9895
+f 9939/1/9939 9895/1/9895 9872/1/9872
+f 9872/1/9872 9895/1/9895 9896/1/9896
+f 9872/1/9872 9896/1/9896 9887/1/9887
+f 9887/1/9887 9888/1/9888 9872/1/9872
+f 9888/1/9888 9889/1/9889 9872/1/9872
+f 9872/1/9872 9889/1/9889 9890/1/9890
+f 9872/1/9872 9890/1/9890 9891/1/9891
+f 9891/1/9891 9892/1/9892 9872/1/9872
+f 9872/1/9872 9892/1/9892 9893/1/9893
+f 9872/1/9872 9893/1/9893 9894/1/9894
+f 9894/1/9894 9897/1/9897 9872/1/9872
+f 9872/1/9872 9897/1/9897 9898/1/9898
+f 9872/1/9872 9898/1/9898 9882/1/9882
+f 9882/1/9882 9883/1/9883 9872/1/9872
+f 9872/1/9872 9883/1/9883 9884/1/9884
+f 9872/1/9872 9884/1/9884 9885/1/9885
+f 9885/1/9885 9886/1/9886 9872/1/9872
+f 9872/1/9872 9886/1/9886 9873/1/9873
+f 9872/1/9872 9873/1/9873 9871/1/9871
+f 9871/1/9871 9489/1/9489 9872/1/9872
+f 9872/1/9872 9489/1/9489 9869/1/9869
+f 9489/1/9489 9491/1/9491 9869/1/9869
+f 9603/1/9603 9873/1/9873 9886/1/9886
+f 9604/1/9604 9886/1/9886 9885/1/9885
+f 9605/1/9605 9885/1/9885 9884/1/9884
+f 9605/1/9605 9884/1/9884 9606/1/9606
+f 9606/1/9606 9884/1/9884 9883/1/9883
+f 9606/1/9606 9883/1/9883 9608/1/9608
+f 9501/1/9501 9606/1/9606 9608/1/9608
+f 9501/1/9501 9608/1/9608 9609/1/9609
+f 9499/1/9499 9501/1/9501 9609/1/9609
+f 9609/1/9609 9610/1/9610 9499/1/9499
+f 9499/1/9499 9610/1/9610 9611/1/9611
+f 9499/1/9499 9611/1/9611 9497/1/9497
+f 9499/1/9499 9497/1/9497 9500/1/9500
+f 9500/1/9500 9497/1/9497 9498/1/9498
+f 9498/1/9498 9878/1/9878 9500/1/9500
+f 9498/1/9498 9877/1/9877 9878/1/9878
+f 9612/1/9612 9878/1/9878 9877/1/9877
+f 9611/1/9611 9878/1/9878 9612/1/9612
+f 9611/1/9611 9879/1/9879 9878/1/9878
+f 9496/1/9496 9877/1/9877 9498/1/9498
+f 9496/1/9496 9876/1/9876 9877/1/9877
+f 9610/1/9610 9879/1/9879 9611/1/9611
+f 9609/1/9609 9880/1/9880 9610/1/9610
+f 9608/1/9608 9881/1/9881 9609/1/9609
+f 9607/1/9607 9606/1/9606 9501/1/9501
+f 9608/1/9608 9883/1/9883 9881/1/9881
+f 9882/1/9882 9898/1/9898 9899/1/9899
+f 9898/1/9898 9642/1/9642 9899/1/9899
+f 9642/1/9642 9646/1/9646 9899/1/9899
+f 9899/1/9899 9646/1/9646 9903/1/9903
+f 9867/1/9867 9899/1/9899 9903/1/9903
+f 9903/1/9903 9904/1/9904 9867/1/9867
+f 9867/1/9867 9904/1/9904 9905/1/9905
+f 9867/1/9867 9905/1/9905 9906/1/9906
+f 9906/1/9906 9907/1/9907 9867/1/9867
+f 9867/1/9867 9907/1/9907 9908/1/9908
+f 9867/1/9867 9908/1/9908 9909/1/9909
+f 9910/1/9910 9867/1/9867 9909/1/9909
+f 9909/1/9909 9648/1/9648 9910/1/9910
+f 9648/1/9648 9647/1/9647 9910/1/9910
+f 9910/1/9910 9647/1/9647 9911/1/9911
+f 9647/1/9647 9664/1/9664 9911/1/9911
+f 9911/1/9911 9664/1/9664 9913/1/9913
+f 9664/1/9664 9666/1/9666 9913/1/9913
+f 9666/1/9666 9664/1/9664 9591/1/9591
+f 9665/1/9665 9666/1/9666 9591/1/9591
+f 9665/1/9665 9591/1/9591 9597/1/9597
+f 9667/1/9667 9665/1/9665 9597/1/9597
+f 9597/1/9597 9668/1/9668 9667/1/9667
+f 9667/1/9667 9668/1/9668 9934/1/9934
+f 9597/1/9597 9669/1/9669 9668/1/9668
+f 9668/1/9668 9669/1/9669 9935/1/9935
+f 9670/1/9670 9669/1/9669 9597/1/9597
+f 9597/1/9597 9671/1/9671 9670/1/9670
+f 9670/1/9670 9671/1/9671 9928/1/9928
+f 9597/1/9597 9672/1/9672 9671/1/9671
+f 9671/1/9671 9672/1/9672 9929/1/9929
+f 9673/1/9673 9672/1/9672 9597/1/9597
+f 9597/1/9597 9674/1/9674 9673/1/9673
+f 9673/1/9673 9674/1/9674 9931/1/9931
+f 9597/1/9597 9675/1/9675 9674/1/9674
+f 9674/1/9674 9675/1/9675 9936/1/9936
+f 9676/1/9676 9675/1/9675 9597/1/9597
+f 9597/1/9597 9677/1/9677 9676/1/9676
+f 9675/1/9675 9676/1/9676 9937/1/9937
+f 9672/1/9672 9673/1/9673 9930/1/9930
+f 9669/1/9669 9670/1/9670 9927/1/9927
+f 9665/1/9665 9667/1/9667 9933/1/9933
+f 9597/1/9597 9591/1/9591 9594/1/9594
+f 9597/1/9597 9594/1/9594 9598/1/9598
+f 9592/1/9592 9594/1/9594 9591/1/9591
+f 9592/1/9592 9591/1/9591 9590/1/9590
+f 9590/1/9590 9868/1/9868 9592/1/9592
+f 9592/1/9592 9868/1/9868 9859/1/9859
+f 9592/1/9592 9859/1/9859 9688/1/9688
+f 9593/1/9593 9592/1/9592 9688/1/9688
+f 9688/1/9688 9689/1/9689 9593/1/9593
+f 9688/1/9688 9858/1/9858 9689/1/9689
+f 9590/1/9590 9912/1/9912 9868/1/9868
+f 9589/1/9589 9912/1/9912 9590/1/9590
+f 9590/1/9590 9591/1/9591 9589/1/9589
+f 9589/1/9589 9591/1/9591 9585/1/9585
+f 9593/1/9593 9594/1/9594 9592/1/9592
+f 9593/1/9593 9596/1/9596 9594/1/9594
+f 9595/1/9595 9594/1/9594 9596/1/9596
+f 9596/1/9596 9861/1/9861 9595/1/9595
+f 9595/1/9595 9861/1/9861 10060/1/10060
+f 9595/1/9595 10060/1/10060 9717/1/9717
+f 9717/1/9717 9716/1/9716 9595/1/9595
+f 9717/1/9717 10060/1/10060 9975/1/9975
+f 9717/1/9717 9975/1/9975 9817/1/9817
+f 9696/1/9696 9717/1/9717 9817/1/9817
+f 9817/1/9817 9975/1/9975 10062/1/10062
+f 9975/1/9975 10060/1/10060 9862/1/9862
+f 9862/1/9862 9974/1/9974 9975/1/9975
+f 9975/1/9975 9974/1/9974 9973/1/9973
+f 9862/1/9862 10060/1/10060 9861/1/9861
+f 9596/1/9596 9860/1/9860 9861/1/9861
+f 9816/1/9816 9860/1/9860 9596/1/9596
+f 9595/1/9595 9716/1/9716 9594/1/9594
+f 9816/1/9816 9596/1/9596 9593/1/9593
+f 9815/1/9815 9816/1/9816 9593/1/9593
+f 9593/1/9593 9687/1/9687 9815/1/9815
+f 9687/1/9687 9863/1/9863 9815/1/9815
+f 9815/1/9815 10059/1/10059 9816/1/9816
+f 9666/1/9666 9665/1/9665 9932/1/9932
+f 9591/1/9591 9664/1/9664 9647/1/9647
+f 9591/1/9591 9647/1/9647 9607/1/9607
+f 9607/1/9607 9647/1/9647 9648/1/9648
+f 9607/1/9607 9648/1/9648 9649/1/9649
+f 9649/1/9649 9650/1/9650 9607/1/9607
+f 9607/1/9607 9650/1/9650 9651/1/9651
+f 9607/1/9607 9651/1/9651 9643/1/9643
+f 9643/1/9643 9644/1/9644 9607/1/9607
+f 9644/1/9644 9645/1/9645 9607/1/9607
+f 9607/1/9607 9645/1/9645 9646/1/9646
+f 9645/1/9645 9644/1/9644 9904/1/9904
+f 9644/1/9644 9643/1/9643 9905/1/9905
+f 9643/1/9643 9651/1/9651 9906/1/9906
+f 9651/1/9651 9650/1/9650 9907/1/9907
+f 9650/1/9650 9649/1/9649 9908/1/9908
+f 9649/1/9649 9648/1/9648 9909/1/9909
+f 9910/1/9910 9911/1/9911 9867/1/9867
+f 9908/1/9908 9649/1/9649 9909/1/9909
+f 9907/1/9907 9650/1/9650 9908/1/9908
+f 9906/1/9906 9651/1/9651 9907/1/9907
+f 9905/1/9905 9643/1/9643 9906/1/9906
+f 9904/1/9904 9644/1/9644 9905/1/9905
+f 9903/1/9903 9645/1/9645 9904/1/9904
+f 9646/1/9646 9645/1/9645 9903/1/9903
+f 9897/1/9897 9652/1/9652 9898/1/9898
+f 9894/1/9894 9653/1/9653 9897/1/9897
+f 9893/1/9893 9654/1/9654 9894/1/9894
+f 9892/1/9892 9655/1/9655 9893/1/9893
+f 9891/1/9891 9656/1/9656 9892/1/9892
+f 9890/1/9890 9657/1/9657 9891/1/9891
+f 9889/1/9889 9658/1/9658 9890/1/9890
+f 9888/1/9888 9659/1/9659 9889/1/9889
+f 9887/1/9887 9660/1/9660 9888/1/9888
+f 9896/1/9896 9661/1/9661 9887/1/9887
+f 9895/1/9895 9662/1/9662 9896/1/9896
+f 9676/1/9676 9677/1/9677 9938/1/9938
+f 9872/1/9872 9869/1/9869 9939/1/9939
+f 9937/1/9937 9676/1/9676 9938/1/9938
+f 9936/1/9936 9675/1/9675 9937/1/9937
+f 9931/1/9931 9674/1/9674 9936/1/9936
+f 9930/1/9930 9673/1/9673 9931/1/9931
+f 9929/1/9929 9672/1/9672 9930/1/9930
+f 9928/1/9928 9671/1/9671 9929/1/9929
+f 9927/1/9927 9670/1/9670 9928/1/9928
+f 9935/1/9935 9669/1/9669 9927/1/9927
+f 9934/1/9934 9668/1/9668 9935/1/9935
+f 9933/1/9933 9667/1/9667 9934/1/9934
+f 9932/1/9932 9665/1/9665 9933/1/9933
+f 9913/1/9913 9666/1/9666 9932/1/9932
+f 9911/1/9911 9913/1/9913 9867/1/9867
+f 9867/1/9867 9859/1/9859 9868/1/9868
+f 9861/1/9861 9854/1/9854 9862/1/9862
+f 9688/1/9688 9859/1/9859 9858/1/9858
+f 9689/1/9689 9858/1/9858 9857/1/9857
+f 9689/1/9689 9857/1/9857 9690/1/9690
+f 9690/1/9690 9857/1/9857 9856/1/9856
+f 9690/1/9690 9856/1/9856 9578/1/9578
+f 9593/1/9593 9689/1/9689 9690/1/9690
+f 9593/1/9593 9686/1/9686 9687/1/9687
+f 9686/1/9686 9864/1/9864 9687/1/9687
+f 9691/1/9691 9866/1/9866 9692/1/9692
+f 9686/1/9686 9865/1/9865 9864/1/9864
+f 9687/1/9687 9864/1/9864 9863/1/9863
+f 9815/1/9815 9863/1/9863 10059/1/10059
+f 9816/1/9816 10059/1/10059 9860/1/9860
+f 9854/1/9854 9861/1/9861 9860/1/9860
+f 9854/1/9854 9853/1/9853 9855/1/9855
+f 9847/1/9847 9521/1/9521 9848/1/9848
+f 9848/1/9848 9521/1/9521 9519/1/9519
+f 9575/1/9575 9853/1/9853 9576/1/9576
+f 9520/1/9520 9581/1/9581 9582/1/9582
+f 9581/1/9581 9685/1/9685 9582/1/9582
+f 9582/1/9582 9685/1/9685 9641/1/9641
+f 9582/1/9582 9641/1/9641 9639/1/9639
+f 9639/1/9639 9640/1/9640 9582/1/9582
+f 9639/1/9639 9962/1/9962 9640/1/9640
+f 9640/1/9640 9962/1/9962 9963/1/9963
+f 9639/1/9639 9964/1/9964 9962/1/9962
+f 9962/1/9962 9964/1/9964 9852/1/9852
+f 9852/1/9852 9964/1/9964 9921/1/9921
+f 9852/1/9852 9921/1/9921 9851/1/9851
+f 9851/1/9851 9921/1/9921 9922/1/9922
+f 9851/1/9851 9922/1/9922 9919/1/9919
+f 9919/1/9919 9920/1/9920 9851/1/9851
+f 9851/1/9851 9920/1/9920 9900/1/9900
+f 9920/1/9920 9923/1/9923 9900/1/9900
+f 9900/1/9900 9923/1/9923 9924/1/9924
+f 9900/1/9900 9924/1/9924 9925/1/9925
+f 9925/1/9925 9926/1/9926 9900/1/9900
+f 9681/1/9681 9926/1/9926 9925/1/9925
+f 9681/1/9681 9925/1/9925 9679/1/9679
+f 9585/1/9585 9681/1/9681 9679/1/9679
+f 9678/1/9678 9585/1/9585 9679/1/9679
+f 9679/1/9679 9924/1/9924 9678/1/9678
+f 9678/1/9678 9581/1/9581 9585/1/9585
+f 9682/1/9682 9581/1/9581 9678/1/9678
+f 9682/1/9682 9678/1/9678 9920/1/9920
+f 9682/1/9682 9920/1/9920 9683/1/9683
+f 9682/1/9682 9683/1/9683 9581/1/9581
+f 9683/1/9683 9684/1/9684 9581/1/9581
+f 9683/1/9683 9919/1/9919 9684/1/9684
+f 9680/1/9680 9926/1/9926 9681/1/9681
+f 9679/1/9679 9925/1/9925 9924/1/9924
+f 9678/1/9678 9924/1/9924 9923/1/9923
+f 9920/1/9920 9678/1/9678 9923/1/9923
+f 9683/1/9683 9920/1/9920 9919/1/9919
+f 9684/1/9684 9919/1/9919 9922/1/9922
+f 9684/1/9684 9922/1/9922 9685/1/9685
+f 9685/1/9685 9922/1/9922 9921/1/9921
+f 9964/1/9964 9685/1/9685 9921/1/9921
+f 9641/1/9641 9964/1/9964 9639/1/9639
+f 9641/1/9641 9685/1/9685 9964/1/9964
+f 9581/1/9581 9684/1/9684 9685/1/9685
+f 9581/1/9581 9583/1/9583 9584/1/9584
+f 9583/1/9583 9918/1/9918 9584/1/9584
+f 9579/1/9579 9849/1/9849 9580/1/9580
+f 9848/1/9848 9519/1/9519 9849/1/9849
+f 9583/1/9583 9850/1/9850 9918/1/9918
+f 9584/1/9584 9918/1/9918 9917/1/9917
+f 9581/1/9581 9584/1/9584 9585/1/9585
+f 9588/1/9588 9589/1/9589 9585/1/9585
+f 9588/1/9588 9914/1/9914 9589/1/9589
+f 9586/1/9586 9916/1/9916 9587/1/9587
+f 9851/1/9851 9900/1/9900 9916/1/9916
+f 9588/1/9588 9915/1/9915 9914/1/9914
+f 9589/1/9589 9914/1/9914 9912/1/9912
+f 9867/1/9867 9868/1/9868 9912/1/9912
+f 9882/1/9882 9899/1/9899 9867/1/9867
+f 9900/1/9900 9926/1/9926 9901/1/9901
+f 9926/1/9926 9955/1/9955 9901/1/9901
+f 9901/1/9901 9955/1/9955 9956/1/9956
+f 9901/1/9901 9956/1/9956 9957/1/9957
+f 9957/1/9957 9958/1/9958 9901/1/9901
+f 9635/1/9635 9958/1/9958 9957/1/9957
+f 9636/1/9636 9957/1/9957 9956/1/9956
+f 9637/1/9637 9956/1/9956 9955/1/9955
+f 9926/1/9926 9637/1/9637 9955/1/9955
+f 9882/1/9882 9881/1/9881 9883/1/9883
+f 9609/1/9609 9881/1/9881 9880/1/9880
+f 9610/1/9610 9880/1/9880 9879/1/9879
+f 9500/1/9500 9878/1/9878 9879/1/9879
+f 9499/1/9499 9500/1/9500 9501/1/9501
+f 9615/1/9615 9616/1/9616 9501/1/9501
+f 9619/1/9619 9618/1/9618 9503/1/9503
+f 9615/1/9615 9942/1/9942 9940/1/9940
+f 9619/1/9619 9943/1/9943 9618/1/9618
+f 9619/1/9619 9944/1/9944 9943/1/9943
+f 9620/1/9620 9944/1/9944 9619/1/9619
+f 9940/1/9940 9942/1/9942 9504/1/9504
+f 9503/1/9503 9502/1/9502 9504/1/9504
+f 9619/1/9619 9503/1/9503 9620/1/9620
+f 9622/1/9622 9946/1/9946 9621/1/9621
+f 9620/1/9620 9945/1/9945 9944/1/9944
+f 9506/1/9506 9943/1/9943 9944/1/9944
+f 9505/1/9505 9506/1/9506 9507/1/9507
+f 9512/1/9512 9623/1/9623 9509/1/9509
+f 9621/1/9621 9507/1/9507 9622/1/9622
+f 9622/1/9622 9947/1/9947 9946/1/9946
+f 9624/1/9624 9948/1/9948 9623/1/9623
+f 9516/1/9516 9624/1/9624 9623/1/9623
+f 9624/1/9624 9949/1/9949 9948/1/9948
+f 9625/1/9625 9949/1/9949 9624/1/9624
+f 9949/1/9949 9515/1/9515 9948/1/9948
+f 9511/1/9511 9508/1/9508 9947/1/9947
+f 9509/1/9509 9511/1/9511 9512/1/9512
+f 9512/1/9512 9516/1/9516 9623/1/9623
+f 9514/1/9514 9513/1/9513 9515/1/9515
+f 9517/1/9517 9518/1/9518 9515/1/9515
+f 9516/1/9516 9625/1/9625 9624/1/9624
+f 9520/1/9520 9582/1/9582 9518/1/9518
+f 9626/1/9626 9950/1/9950 9625/1/9625
+f 9627/1/9627 9951/1/9951 9626/1/9626
+f 9627/1/9627 9952/1/9952 9951/1/9951
+f 9901/1/9901 9952/1/9952 9953/1/9953
+f 9954/1/9954 9901/1/9901 9953/1/9953
+f 9631/1/9631 9902/1/9902 9954/1/9954
+f 9628/1/9628 9629/1/9629 9630/1/9630
+f 9617/1/9617 9902/1/9902 9631/1/9631
+f 9501/1/9501 9617/1/9617 9607/1/9607
+f 9585/1/9585 9591/1/9591 9607/1/9607
+f 9585/1/9585 9680/1/9680 9681/1/9681
+f 9680/1/9680 9637/1/9637 9926/1/9926
+f 9636/1/9636 9956/1/9956 9637/1/9637
+f 9635/1/9635 9957/1/9957 9636/1/9636
+f 9634/1/9634 9958/1/9958 9635/1/9635
+f 9634/1/9634 9959/1/9959 9958/1/9958
+f 9633/1/9633 9959/1/9959 9634/1/9634
+f 9633/1/9633 9632/1/9632 9959/1/9959
+f 9628/1/9628 9582/1/9582 9629/1/9629
+f 9582/1/9582 9640/1/9640 9638/1/9638
+f 9640/1/9640 9963/1/9963 9638/1/9638
+f 9962/1/9962 9852/1/9852 9963/1/9963
+f 9632/1/9632 9961/1/9961 9960/1/9960
+f 9959/1/9959 9632/1/9632 9960/1/9960
+f 9901/1/9901 9958/1/9958 9959/1/9959
+f 9901/1/9901 9951/1/9951 9952/1/9952
+f 9626/1/9626 9951/1/9951 9950/1/9950
+f 9625/1/9625 9950/1/9950 9949/1/9949
+f 9949/1/9949 9517/1/9517 9515/1/9515
+f 9851/1/9851 9519/1/9519 9852/1/9852
+f 9517/1/9517 9520/1/9520 9518/1/9518
+f 9521/1/9521 9522/1/9522 9519/1/9519
+f 9520/1/9520 9577/1/9577 9576/1/9576
+f 9691/1/9691 9692/1/9692 9577/1/9577
+f 9691/1/9691 9846/1/9846 9866/1/9866
+f 9701/1/9701 10049/1/10049 9693/1/9693
+f 9866/1/9866 9846/1/9846 9521/1/9521
+f 9521/1/9521 9532/1/9532 9522/1/9522
+f 9706/1/9706 9704/1/9704 9703/1/9703
+f 9695/1/9695 9532/1/9532 9530/1/9530
+f 9704/1/9704 9845/1/9845 9705/1/9705
+f 9840/1/9840 9529/1/9529 9845/1/9845
+f 9695/1/9695 9844/1/9844 9843/1/9843
+f 9531/1/9531 9842/1/9842 9529/1/9529
+f 9699/1/9699 9843/1/9843 10048/1/10048
+f 9699/1/9699 10048/1/10048 9700/1/9700
+f 9700/1/9700 10048/1/10048 10047/1/10047
+f 9694/1/9694 9699/1/9699 9700/1/9700
+f 9694/1/9694 9697/1/9697 9698/1/9698
+f 9697/1/9697 9978/1/9978 9698/1/9698
+f 9817/1/9817 9818/1/9818 9696/1/9696
+f 9817/1/9817 10062/1/10062 9818/1/9818
+f 9975/1/9975 9973/1/9973 10062/1/10062
+f 9697/1/9697 10061/1/10061 9978/1/9978
+f 9698/1/9698 9978/1/9978 9977/1/9977
+f 9702/1/9702 9977/1/9977 9976/1/9976
+f 9842/1/9842 10049/1/10049 9976/1/9976
+f 10045/1/10045 10046/1/10046 9842/1/9842
+f 9720/1/9720 10046/1/10046 10045/1/10045
+f 9696/1/9696 9719/1/9719 9720/1/9720
+f 9721/1/9721 9979/1/9979 9715/1/9715
+f 9717/1/9717 9696/1/9696 9716/1/9716
+f 9598/1/9598 9594/1/9594 9716/1/9716
+f 9598/1/9598 9494/1/9494 9492/1/9492
+f 9574/1/9574 9494/1/9494 9573/1/9573
+f 9493/1/9493 9494/1/9494 9574/1/9574
+f 9572/1/9572 9573/1/9573 9571/1/9571
+f 9739/1/9739 9569/1/9569 9571/1/9571
+f 9739/1/9739 9814/1/9814 9749/1/9749
+f 9814/1/9814 9813/1/9813 10031/1/10031
+f 9813/1/9813 9812/1/9812 10030/1/10030
+f 9812/1/9812 9811/1/9811 10029/1/10029
+f 9811/1/9811 9810/1/9810 10028/1/10028
+f 9810/1/9810 9809/1/9809 10027/1/10027
+f 9809/1/9809 9808/1/9808 10026/1/10026
+f 9808/1/9808 9807/1/9807 10025/1/10025
+f 9807/1/9807 9806/1/9806 10024/1/10024
+f 9806/1/9806 9805/1/9805 10023/1/10023
+f 9805/1/9805 9804/1/9804 10022/1/10022
+f 9804/1/9804 9803/1/9803 10021/1/10021
+f 9803/1/9803 9725/1/9725 10020/1/10020
+f 9718/1/9718 9713/1/9713 9724/1/9724
+f 9725/1/9725 9729/1/9729 10010/1/10010
+f 9729/1/9729 9728/1/9728 10011/1/10011
+f 9728/1/9728 9727/1/9727 10015/1/10015
+f 9727/1/9727 9726/1/9726 10016/1/10016
+f 9726/1/9726 9734/1/9734 10017/1/10017
+f 9734/1/9734 9733/1/9733 10018/1/10018
+f 9733/1/9733 9732/1/9732 10019/1/10019
+f 9732/1/9732 9731/1/9731 10012/1/10012
+f 9731/1/9731 9730/1/9730 10013/1/10013
+f 9723/1/9723 9735/1/9735 9730/1/9730
+f 9795/1/9795 9723/1/9723 9761/1/9761
+f 9789/1/9789 9761/1/9761 9788/1/9788
+f 9788/1/9788 9832/1/9832 10008/1/10008
+f 9829/1/9829 9823/1/9823 9832/1/9832
+f 9829/1/9829 9830/1/9830 9823/1/9823
+f 9785/1/9785 9831/1/9831 9830/1/9830
+f 9787/1/9787 9722/1/9722 9786/1/9786
+f 9784/1/9784 9831/1/9831 9785/1/9785
+f 9778/1/9778 9836/1/9836 9784/1/9784
+f 9768/1/9768 9767/1/9767 9778/1/9778
+f 9768/1/9768 9782/1/9782 9783/1/9783
+f 9800/1/9800 9825/1/9825 9782/1/9782
+f 9799/1/9799 9826/1/9826 9800/1/9800
+f 9802/1/9802 9827/1/9827 9799/1/9799
+f 9801/1/9801 9828/1/9828 9802/1/9802
+f 9801/1/9801 9777/1/9777 9828/1/9828
+f 9776/1/9776 10050/1/10050 9777/1/9777
+f 9775/1/9775 10051/1/10051 9776/1/9776
+f 9774/1/9774 10053/1/10053 9775/1/9775
+f 9773/1/9773 10054/1/10054 9774/1/9774
+f 9773/1/9773 9772/1/9772 10054/1/10054
+f 9703/1/9703 9771/1/9771 9772/1/9772
+f 9703/1/9703 9708/1/9708 9707/1/9707
+f 9710/1/9710 9968/1/9968 9708/1/9708
+f 9711/1/9711 9969/1/9969 9710/1/9710
+f 9712/1/9712 9970/1/9970 9711/1/9711
+f 9722/1/9722 9713/1/9713 9709/1/9709
+f 9713/1/9713 9715/1/9715 9714/1/9714
+f 9712/1/9712 9971/1/9971 9970/1/9970
+f 9715/1/9715 9972/1/9972 9714/1/9714
+f 9834/1/9834 9970/1/9970 9971/1/9971
+f 9972/1/9972 9973/1/9973 9974/1/9974
+f 9980/1/9980 9981/1/9981 9834/1/9834
+f 9862/1/9862 9870/1/9870 9974/1/9974
+f 9493/1/9493 9574/1/9574 9980/1/9980
+f 9869/1/9869 9491/1/9491 9870/1/9870
+f 9493/1/9493 9492/1/9492 9494/1/9494
+f 9489/1/9489 9490/1/9490 9491/1/9491
+f 9489/1/9489 9487/1/9487 9490/1/9490
+f 9490/1/9490 9487/1/9487 9599/1/9599
+f 9599/1/9599 9487/1/9487 9601/1/9601
+f 9488/1/9488 9487/1/9487 9489/1/9489
+f 9598/1/9598 9492/1/9492 9597/1/9597
+f 9597/1/9597 9663/1/9663 9677/1/9677
+f 9663/1/9663 9662/1/9662 9895/1/9895
+f 9662/1/9662 9661/1/9661 9896/1/9896
+f 9661/1/9661 9660/1/9660 9887/1/9887
+f 9660/1/9660 9659/1/9659 9888/1/9888
+f 9659/1/9659 9658/1/9658 9889/1/9889
+f 9658/1/9658 9657/1/9657 9890/1/9890
+f 9657/1/9657 9656/1/9656 9891/1/9891
+f 9656/1/9656 9655/1/9655 9892/1/9892
+f 9655/1/9655 9654/1/9654 9893/1/9893
+f 9654/1/9654 9653/1/9653 9894/1/9894
+f 9653/1/9653 9652/1/9652 9897/1/9897
+f 9652/1/9652 9642/1/9642 9898/1/9898
+f 9607/1/9607 9646/1/9646 9642/1/9642
+f 9605/1/9605 9606/1/9606 9607/1/9607
+f 9604/1/9604 9885/1/9885 9605/1/9605
+f 9603/1/9603 9886/1/9886 9604/1/9604
+f 9602/1/9602 9873/1/9873 9603/1/9603
+f 9600/1/9600 9490/1/9490 9599/1/9599
+f 9602/1/9602 9871/1/9871 9873/1/9873
+f 9601/1/9601 9874/1/9874 9599/1/9599
+f 9871/1/9871 9488/1/9488 9489/1/9489
+f 9486/1/9486 9487/1/9487 9488/1/9488
+f 9485/1/9485 9487/1/9487 9486/1/9486
+f 9484/1/9484 9485/1/9485 9486/1/9486
+f 9482/1/9482 9483/1/9483 9484/1/9484
+f 9481/1/9481 9483/1/9483 9482/1/9482
+f 9483/1/9483 9485/1/9485 9484/1/9484
+f 9601/1/9601 9487/1/9487 9485/1/9485
+f 9601/1/9601 9875/1/9875 9874/1/9874
+f 9613/1/9613 9877/1/9877 9876/1/9876
+f 9612/1/9612 9877/1/9877 9613/1/9613
+f 9497/1/9497 9611/1/9611 9612/1/9612
+f 9497/1/9497 9496/1/9496 9498/1/9498
+f 9478/1/9478 9479/1/9479 9495/1/9495
+f 9875/1/9875 9876/1/9876 9496/1/9496
+f 9875/1/9875 9477/1/9477 9480/1/9480
+f 9478/1/9478 9475/1/9475 9479/1/9479
+f 9477/1/9477 9476/1/9476 9480/1/9480
+f 9614/1/9614 9476/1/9476 9475/1/9475
+f 10063/1/10063 10064/1/10064 10065/1/10065
+f 10063/1/10063 10065/1/10065 10066/1/10066
+f 10083/1/10083 10063/1/10063 10066/1/10066
+f 10083/1/10083 10066/1/10066 10080/1/10080
+f 10080/1/10080 10082/1/10082 10083/1/10083
+f 10083/1/10083 10082/1/10082 10089/1/10089
+f 10083/1/10083 10089/1/10089 10090/1/10090
+f 10089/1/10089 10093/1/10093 10090/1/10090
+f 10093/1/10093 10067/1/10067 10090/1/10090
+f 10090/1/10090 10067/1/10067 10063/1/10063
+f 10063/1/10063 10067/1/10067 10068/1/10068
+f 10068/1/10068 10067/1/10067 10076/1/10076
+f 10068/1/10068 10076/1/10076 10077/1/10077
+f 10094/1/10094 10068/1/10068 10077/1/10077
+f 10094/1/10094 10077/1/10077 10105/1/10105
+f 10098/1/10098 10094/1/10094 10105/1/10105
+f 10098/1/10098 10105/1/10105 10100/1/10100
+f 10099/1/10099 10098/1/10098 10100/1/10100
+f 10099/1/10099 10100/1/10100 10101/1/10101
+f 10128/1/10128 10099/1/10099 10101/1/10101
+f 10128/1/10128 10101/1/10101 10103/1/10103
+f 10103/1/10103 10130/1/10130 10128/1/10128
+f 10129/1/10129 10128/1/10128 10130/1/10130
+f 10129/1/10129 10130/1/10130 10155/1/10155
+f 10104/1/10104 10129/1/10129 10155/1/10155
+f 10154/1/10154 10104/1/10104 10155/1/10155
+f 10162/1/10162 10154/1/10154 10155/1/10155
+f 10155/1/10155 10171/1/10171 10162/1/10162
+f 10162/1/10162 10171/1/10171 10178/1/10178
+f 10162/1/10162 10178/1/10178 10161/1/10161
+f 10161/1/10161 10178/1/10178 10177/1/10177
+f 10176/1/10176 10161/1/10161 10177/1/10177
+f 10173/1/10173 10176/1/10176 10177/1/10177
+f 10173/1/10173 10177/1/10177 10169/1/10169
+f 10154/1/10154 10173/1/10173 10169/1/10169
+f 10154/1/10154 10169/1/10169 10209/1/10209
+f 10186/1/10186 10154/1/10154 10209/1/10209
+f 10186/1/10186 10209/1/10209 10182/1/10182
+f 10182/1/10182 10185/1/10185 10186/1/10186
+f 10186/1/10186 10185/1/10185 10187/1/10187
+f 10186/1/10186 10187/1/10187 10152/1/10152
+f 10152/1/10152 10187/1/10187 10170/1/10170
+f 10170/1/10170 10147/1/10147 10152/1/10152
+f 10147/1/10147 10151/1/10151 10152/1/10152
+f 10152/1/10152 10151/1/10151 10153/1/10153
+f 10152/1/10152 10153/1/10153 10154/1/10154
+f 10154/1/10154 10153/1/10153 10156/1/10156
+f 10164/1/10164 10156/1/10156 10153/1/10153
+f 10164/1/10164 10153/1/10153 10165/1/10165
+f 10165/1/10165 10170/1/10170 10164/1/10164
+f 10164/1/10164 10170/1/10170 10163/1/10163
+f 10169/1/10169 10163/1/10163 10170/1/10170
+f 10169/1/10169 10103/1/10103 10163/1/10163
+f 10103/1/10103 10104/1/10104 10163/1/10163
+f 10163/1/10163 10104/1/10104 10156/1/10156
+f 10103/1/10103 10102/1/10102 10104/1/10104
+f 10102/1/10102 10127/1/10127 10104/1/10104
+f 10102/1/10102 10125/1/10125 10127/1/10127
+f 10125/1/10125 10126/1/10126 10127/1/10127
+f 10127/1/10127 10126/1/10126 10128/1/10128
+f 10125/1/10125 10124/1/10124 10126/1/10126
+f 10124/1/10124 10099/1/10099 10126/1/10126
+f 10122/1/10122 10099/1/10099 10124/1/10124
+f 10123/1/10123 10122/1/10122 10124/1/10124
+f 10119/1/10119 10122/1/10122 10123/1/10123
+f 10119/1/10119 10123/1/10123 10100/1/10100
+f 10100/1/10100 10123/1/10123 10125/1/10125
+f 10119/1/10119 10118/1/10118 10122/1/10122
+f 10118/1/10118 10106/1/10106 10122/1/10122
+f 10106/1/10106 10097/1/10097 10122/1/10122
+f 10106/1/10106 10079/1/10079 10097/1/10097
+f 10079/1/10079 10095/1/10095 10097/1/10097
+f 10097/1/10097 10095/1/10095 10098/1/10098
+f 10095/1/10095 10079/1/10079 10096/1/10096
+f 10095/1/10095 10096/1/10096 10091/1/10091
+f 10091/1/10091 10094/1/10094 10095/1/10095
+f 10091/1/10091 10096/1/10096 10092/1/10092
+f 10091/1/10091 10092/1/10092 10089/1/10089
+f 10089/1/10089 10064/1/10064 10091/1/10091
+f 10091/1/10091 10064/1/10064 10068/1/10068
+f 10096/1/10096 10078/1/10078 10092/1/10092
+f 10092/1/10092 10078/1/10078 10076/1/10076
+f 10092/1/10092 10076/1/10076 10093/1/10093
+f 10096/1/10096 10079/1/10079 10078/1/10078
+f 10077/1/10077 10078/1/10078 10079/1/10079
+f 10077/1/10077 10079/1/10079 10106/1/10106
+f 10118/1/10118 10108/1/10108 10106/1/10106
+f 10107/1/10107 10106/1/10106 10108/1/10108
+f 10107/1/10107 10108/1/10108 10109/1/10109
+f 10107/1/10107 10109/1/10109 10134/1/10134
+f 10134/1/10134 10132/1/10132 10107/1/10107
+f 10107/1/10107 10132/1/10132 10120/1/10120
+f 10107/1/10107 10120/1/10120 10105/1/10105
+f 10105/1/10105 10120/1/10120 10117/1/10117
+f 10105/1/10105 10117/1/10117 10119/1/10119
+f 10120/1/10120 10121/1/10121 10117/1/10117
+f 10117/1/10117 10121/1/10121 10118/1/10118
+f 10118/1/10118 10121/1/10121 10110/1/10110
+f 10121/1/10121 10131/1/10131 10110/1/10110
+f 10110/1/10110 10131/1/10131 10133/1/10133
+f 10110/1/10110 10133/1/10133 10135/1/10135
+f 10135/1/10135 10112/1/10112 10110/1/10110
+f 10111/1/10111 10110/1/10110 10112/1/10112
+f 10111/1/10111 10112/1/10112 10113/1/10113
+f 10136/1/10136 10111/1/10111 10113/1/10113
+f 10136/1/10136 10113/1/10113 10138/1/10138
+f 10138/1/10138 10137/1/10137 10136/1/10136
+f 10136/1/10136 10137/1/10137 10135/1/10135
+f 10136/1/10136 10135/1/10135 10134/1/10134
+f 10137/1/10137 10114/1/10114 10135/1/10135
+f 10114/1/10114 10137/1/10137 10140/1/10140
+f 10146/1/10146 10114/1/10114 10140/1/10140
+f 10146/1/10146 10140/1/10140 10144/1/10144
+f 10144/1/10144 10145/1/10145 10146/1/10146
+f 10146/1/10146 10145/1/10145 10116/1/10116
+f 10116/1/10116 10145/1/10145 10115/1/10115
+f 10115/1/10115 10114/1/10114 10116/1/10116
+f 10113/1/10113 10114/1/10114 10115/1/10115
+f 10115/1/10115 10139/1/10139 10113/1/10113
+f 10145/1/10145 10139/1/10139 10115/1/10115
+f 10145/1/10145 10141/1/10141 10139/1/10139
+f 10140/1/10140 10139/1/10139 10141/1/10141
+f 10140/1/10140 10141/1/10141 10142/1/10142
+f 10142/1/10142 10141/1/10141 10143/1/10143
+f 10142/1/10142 10143/1/10143 10144/1/10144
+f 10143/1/10143 10141/1/10141 10145/1/10145
+f 10144/1/10144 10143/1/10143 10145/1/10145
+f 10144/1/10144 10140/1/10140 10142/1/10142
+f 10116/1/10116 10114/1/10114 10146/1/10146
+f 10137/1/10137 10139/1/10139 10140/1/10140
+f 10138/1/10138 10139/1/10139 10137/1/10137
+f 10139/1/10139 10138/1/10138 10113/1/10113
+f 10134/1/10134 10111/1/10111 10136/1/10136
+f 10113/1/10113 10112/1/10112 10114/1/10114
+f 10109/1/10109 10110/1/10110 10111/1/10111
+f 10135/1/10135 10114/1/10114 10112/1/10112
+f 10134/1/10134 10135/1/10135 10133/1/10133
+f 10132/1/10132 10133/1/10133 10131/1/10131
+f 10120/1/10120 10131/1/10131 10121/1/10121
+f 10132/1/10132 10131/1/10131 10120/1/10120
+f 10134/1/10134 10133/1/10133 10132/1/10132
+f 10134/1/10134 10109/1/10109 10111/1/10111
+f 10109/1/10109 10108/1/10108 10110/1/10110
+f 10105/1/10105 10106/1/10106 10107/1/10107
+f 10110/1/10110 10108/1/10108 10118/1/10118
+f 10117/1/10117 10118/1/10118 10119/1/10119
+f 10122/1/10122 10097/1/10097 10099/1/10099
+f 10123/1/10123 10124/1/10124 10125/1/10125
+f 10100/1/10100 10125/1/10125 10102/1/10102
+f 10169/1/10169 10171/1/10171 10103/1/10103
+f 10165/1/10165 10172/1/10172 10170/1/10170
+f 10166/1/10166 10172/1/10172 10165/1/10165
+f 10150/1/10150 10166/1/10166 10165/1/10165
+f 10150/1/10150 10165/1/10165 10151/1/10151
+f 10149/1/10149 10166/1/10166 10150/1/10150
+f 10149/1/10149 10150/1/10150 10147/1/10147
+f 10147/1/10147 10148/1/10148 10149/1/10149
+f 10148/1/10148 10167/1/10167 10149/1/10149
+f 10148/1/10148 10168/1/10168 10167/1/10167
+f 10167/1/10167 10168/1/10168 10166/1/10166
+f 10147/1/10147 10168/1/10168 10148/1/10148
+f 10147/1/10147 10172/1/10172 10168/1/10168
+f 10149/1/10149 10167/1/10167 10166/1/10166
+f 10166/1/10166 10168/1/10168 10172/1/10172
+f 10163/1/10163 10156/1/10156 10164/1/10164
+f 10165/1/10165 10153/1/10153 10151/1/10151
+f 10147/1/10147 10150/1/10150 10151/1/10151
+f 10172/1/10172 10147/1/10147 10170/1/10170
+f 10187/1/10187 10169/1/10169 10170/1/10170
+f 10187/1/10187 10208/1/10208 10169/1/10169
+f 10185/1/10185 10208/1/10208 10187/1/10187
+f 10185/1/10185 10204/1/10204 10208/1/10208
+f 10207/1/10207 10208/1/10208 10204/1/10204
+f 10207/1/10207 10204/1/10204 10203/1/10203
+f 10179/1/10179 10207/1/10207 10203/1/10203
+f 10179/1/10179 10203/1/10203 10193/1/10193
+f 10179/1/10179 10193/1/10193 10191/1/10191
+f 10191/1/10191 10180/1/10180 10179/1/10179
+f 10179/1/10179 10180/1/10180 10181/1/10181
+f 10179/1/10179 10181/1/10181 10182/1/10182
+f 10181/1/10181 10180/1/10180 10183/1/10183
+f 10183/1/10183 10192/1/10192 10181/1/10181
+f 10181/1/10181 10192/1/10192 10194/1/10194
+f 10181/1/10181 10194/1/10194 10201/1/10201
+f 10181/1/10181 10201/1/10201 10204/1/10204
+f 10216/1/10216 10201/1/10201 10194/1/10194
+f 10216/1/10216 10194/1/10194 10218/1/10218
+f 10217/1/10217 10216/1/10216 10218/1/10218
+f 10219/1/10219 10217/1/10217 10218/1/10218
+f 10221/1/10221 10219/1/10219 10218/1/10218
+f 10218/1/10218 10195/1/10195 10221/1/10221
+f 10221/1/10221 10195/1/10195 10200/1/10200
+f 10199/1/10199 10221/1/10221 10200/1/10200
+f 10199/1/10199 10200/1/10200 10198/1/10198
+f 10199/1/10199 10198/1/10198 10197/1/10197
+f 10199/1/10199 10197/1/10197 10196/1/10196
+f 10196/1/10196 10217/1/10217 10199/1/10199
+f 10199/1/10199 10217/1/10217 10222/1/10222
+f 10217/1/10217 10220/1/10220 10222/1/10222
+f 10221/1/10221 10222/1/10222 10220/1/10220
+f 10196/1/10196 10215/1/10215 10217/1/10217
+f 10193/1/10193 10215/1/10215 10196/1/10196
+f 10195/1/10195 10193/1/10193 10196/1/10196
+f 10194/1/10194 10193/1/10193 10195/1/10195
+f 10197/1/10197 10195/1/10195 10196/1/10196
+f 10197/1/10197 10198/1/10198 10195/1/10195
+f 10222/1/10222 10221/1/10221 10199/1/10199
+f 10195/1/10195 10198/1/10198 10200/1/10200
+f 10221/1/10221 10220/1/10220 10219/1/10219
+f 10219/1/10219 10220/1/10220 10217/1/10217
+f 10215/1/10215 10216/1/10216 10217/1/10217
+f 10215/1/10215 10213/1/10213 10216/1/10216
+f 10214/1/10214 10213/1/10213 10215/1/10215
+f 10203/1/10203 10214/1/10214 10215/1/10215
+f 10205/1/10205 10214/1/10214 10203/1/10203
+f 10203/1/10203 10202/1/10202 10205/1/10205
+f 10206/1/10206 10205/1/10205 10202/1/10202
+f 10206/1/10206 10202/1/10202 10213/1/10213
+f 10213/1/10213 10211/1/10211 10206/1/10206
+f 10211/1/10211 10210/1/10210 10206/1/10206
+f 10211/1/10211 10212/1/10212 10210/1/10210
+f 10210/1/10210 10212/1/10212 10205/1/10205
+f 10213/1/10213 10212/1/10212 10211/1/10211
+f 10213/1/10213 10202/1/10202 10201/1/10201
+f 10206/1/10206 10210/1/10210 10205/1/10205
+f 10201/1/10201 10202/1/10202 10203/1/10203
+f 10205/1/10205 10212/1/10212 10214/1/10214
+f 10213/1/10213 10214/1/10214 10212/1/10212
+f 10218/1/10218 10194/1/10194 10195/1/10195
+f 10213/1/10213 10201/1/10201 10216/1/10216
+f 10191/1/10191 10194/1/10194 10192/1/10192
+f 10191/1/10191 10192/1/10192 10190/1/10190
+f 10191/1/10191 10190/1/10190 10189/1/10189
+f 10189/1/10189 10184/1/10184 10191/1/10191
+f 10189/1/10189 10188/1/10188 10184/1/10184
+f 10184/1/10184 10188/1/10188 10183/1/10183
+f 10188/1/10188 10190/1/10190 10183/1/10183
+f 10189/1/10189 10190/1/10190 10188/1/10188
+f 10183/1/10183 10190/1/10190 10192/1/10192
+f 10184/1/10184 10183/1/10183 10180/1/10180
+f 10191/1/10191 10184/1/10184 10180/1/10180
+f 10193/1/10193 10194/1/10194 10191/1/10191
+f 10193/1/10193 10203/1/10203 10215/1/10215
+f 10182/1/10182 10207/1/10207 10179/1/10179
+f 10203/1/10203 10204/1/10204 10201/1/10201
+f 10209/1/10209 10208/1/10208 10207/1/10207
+f 10181/1/10181 10204/1/10204 10185/1/10185
+f 10182/1/10182 10181/1/10181 10185/1/10185
+f 10182/1/10182 10209/1/10209 10207/1/10207
+f 10152/1/10152 10154/1/10154 10186/1/10186
+f 10209/1/10209 10169/1/10169 10208/1/10208
+f 10160/1/10160 10173/1/10173 10154/1/10154
+f 10161/1/10161 10160/1/10160 10154/1/10154
+f 10159/1/10159 10160/1/10160 10161/1/10161
+f 10159/1/10159 10158/1/10158 10160/1/10160
+f 10157/1/10157 10158/1/10158 10159/1/10159
+f 10175/1/10175 10157/1/10157 10159/1/10159
+f 10175/1/10175 10159/1/10159 10176/1/10176
+f 10174/1/10174 10157/1/10157 10175/1/10175
+f 10173/1/10173 10174/1/10174 10175/1/10175
+f 10173/1/10173 10158/1/10158 10174/1/10174
+f 10174/1/10174 10158/1/10158 10157/1/10157
+f 10173/1/10173 10160/1/10160 10158/1/10158
+f 10175/1/10175 10176/1/10176 10173/1/10173
+f 10176/1/10176 10159/1/10159 10161/1/10161
+f 10169/1/10169 10177/1/10177 10178/1/10178
+f 10169/1/10169 10178/1/10178 10171/1/10171
+f 10161/1/10161 10154/1/10154 10162/1/10162
+f 10154/1/10154 10156/1/10156 10104/1/10104
+f 10104/1/10104 10127/1/10127 10129/1/10129
+f 10155/1/10155 10130/1/10130 10171/1/10171
+f 10127/1/10127 10128/1/10128 10129/1/10129
+f 10103/1/10103 10171/1/10171 10130/1/10130
+f 10101/1/10101 10102/1/10102 10103/1/10103
+f 10126/1/10126 10099/1/10099 10128/1/10128
+f 10101/1/10101 10100/1/10100 10102/1/10102
+f 10097/1/10097 10098/1/10098 10099/1/10099
+f 10100/1/10100 10105/1/10105 10119/1/10119
+f 10095/1/10095 10094/1/10094 10098/1/10098
+f 10105/1/10105 10077/1/10077 10106/1/10106
+f 10091/1/10091 10068/1/10068 10094/1/10094
+f 10077/1/10077 10076/1/10076 10078/1/10078
+f 10093/1/10093 10076/1/10076 10067/1/10067
+f 10089/1/10089 10092/1/10092 10093/1/10093
+f 10082/1/10082 10065/1/10065 10089/1/10089
+f 10082/1/10082 10069/1/10069 10065/1/10065
+f 10081/1/10081 10069/1/10069 10082/1/10082
+f 10081/1/10081 10071/1/10071 10069/1/10069
+f 10069/1/10069 10071/1/10071 10070/1/10070
+f 10066/1/10066 10069/1/10069 10070/1/10070
+f 10070/1/10070 10071/1/10071 10072/1/10072
+f 10070/1/10070 10072/1/10072 10073/1/10073
+f 10073/1/10073 10084/1/10084 10070/1/10070
+f 10070/1/10070 10084/1/10084 10080/1/10080
+f 10081/1/10081 10080/1/10080 10084/1/10084
+f 10086/1/10086 10081/1/10081 10084/1/10084
+f 10086/1/10086 10084/1/10084 10087/1/10087
+f 10087/1/10087 10072/1/10072 10086/1/10086
+f 10086/1/10086 10072/1/10072 10085/1/10085
+f 10087/1/10087 10074/1/10074 10072/1/10072
+f 10072/1/10072 10074/1/10074 10075/1/10075
+f 10088/1/10088 10075/1/10075 10074/1/10074
+f 10084/1/10084 10075/1/10075 10088/1/10088
+f 10088/1/10088 10074/1/10074 10087/1/10087
+f 10087/1/10087 10084/1/10084 10088/1/10088
+f 10085/1/10085 10081/1/10081 10086/1/10086
+f 10084/1/10084 10073/1/10073 10075/1/10075
+f 10073/1/10073 10072/1/10072 10075/1/10075
+f 10085/1/10085 10072/1/10072 10071/1/10071
+f 10085/1/10085 10071/1/10071 10081/1/10081
+f 10080/1/10080 10081/1/10081 10082/1/10082
+f 10080/1/10080 10066/1/10066 10070/1/10070
+f 10090/1/10090 10063/1/10063 10083/1/10083
+f 10066/1/10066 10065/1/10065 10069/1/10069
+f 10089/1/10089 10065/1/10065 10064/1/10064
+f 10068/1/10068 10064/1/10064 10063/1/10063
+# 20456 faces, 5 coords texture
+
+# End of File
diff --git a/resources/qml/AboutDialog.qml b/resources/qml/AboutDialog.qml deleted file mode 100644 index 9a7e53260b..0000000000 --- a/resources/qml/AboutDialog.qml +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Window 2.1 - -import UM 1.1 as UM - -UM.Dialog -{ - id: base - - //: About dialog title - title: catalog.i18nc("@title:window","About Cura") - - minimumWidth: 500 * screenScaleFactor - minimumHeight: 650 * screenScaleFactor - width: minimumWidth - height: minimumHeight - - Rectangle - { - width: parent.width + 2 * margin // margin from Dialog.qml - height: version.y + version.height + margin - - anchors.top: parent.top - anchors.topMargin: - margin - anchors.horizontalCenter: parent.horizontalCenter - - color: UM.Theme.getColor("viewport_background") - } - - Image - { - id: logo - width: (base.minimumWidth * 0.85) | 0 - height: (width * (1/4.25)) | 0 - - source: UM.Theme.getImage("logo") - - sourceSize.width: width - sourceSize.height: height - anchors.top: parent.top - anchors.topMargin: ((base.minimumWidth - width) / 2) | 0 - anchors.horizontalCenter: parent.horizontalCenter - - UM.I18nCatalog{id: catalog; name:"cura"} - } - - Label - { - id: version - - text: catalog.i18nc("@label","version: %1").arg(UM.Application.version) - font: UM.Theme.getFont("large") - color: UM.Theme.getColor("text") - anchors.right : logo.right - anchors.top: logo.bottom - anchors.topMargin: (UM.Theme.getSize("default_margin").height / 2) | 0 - } - - Label - { - id: description - width: parent.width - - //: About dialog application description - text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.") - font: UM.Theme.getFont("system") - wrapMode: Text.WordWrap - anchors.top: version.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - } - - Label - { - id: creditsNotes - width: parent.width - - //: About dialog application author note - text: catalog.i18nc("@info:credit","Cura is developed by Ultimaker B.V. in cooperation with the community.\nCura proudly uses the following open source projects:") - font: UM.Theme.getFont("system") - wrapMode: Text.WordWrap - anchors.top: description.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - } - - ScrollView - { - id: credits - anchors.top: creditsNotes.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - - width: parent.width - height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height) - - ListView - { - id: projectsList - - width: parent.width - - delegate: Row - { - Label - { - text: "<a href='%1' title='%2'>%2</a>".arg(model.url).arg(model.name) - width: (projectsList.width * 0.25) | 0 - elide: Text.ElideRight - onLinkActivated: Qt.openUrlExternally(link) - } - Label - { - text: model.description - elide: Text.ElideRight - width: (projectsList.width * 0.6) | 0 - } - Label - { - text: model.license - elide: Text.ElideRight - width: (projectsList.width * 0.15) | 0 - } - } - model: ListModel - { - id: projectsModel - } - Component.onCompleted: - { - projectsModel.append({ name:"Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "LGPLv3", url: "https://github.com/Ultimaker/Cura" }); - projectsModel.append({ name:"Uranium", description: catalog.i18nc("@label", "Application framework"), license: "LGPLv3", url: "https://github.com/Ultimaker/Uranium" }); - projectsModel.append({ name:"CuraEngine", description: catalog.i18nc("@label", "G-code generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" }); - projectsModel.append({ name:"libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "LGPLv3", url: "https://github.com/Ultimaker/libArcus" }); - - projectsModel.append({ name:"Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" }); - projectsModel.append({ name:"Qt5", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" }); - projectsModel.append({ name:"PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" }); - projectsModel.append({ name:"SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" }); - projectsModel.append({ name:"Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" }); - projectsModel.append({ name:"SciPy", description: catalog.i18nc("@label", "Support library for scientific computing"), license: "BSD-new", url: "https://www.scipy.org/" }); - projectsModel.append({ name:"NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" }); - projectsModel.append({ name:"NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" }); - projectsModel.append({ name:"Shapely", description: catalog.i18nc("@label", "Support library for handling planar objects"), license: "BSD", url: "https://github.com/Toblerity/Shapely" }); - projectsModel.append({ name:"Trimesh", description: catalog.i18nc("@label", "Support library for handling triangular meshes"), license: "MIT", url: "https://trimsh.org" }); - projectsModel.append({ name:"NetworkX", description: catalog.i18nc("@label", "Support library for analysis of complex networks"), license: "3-clause BSD", url: "https://networkx.github.io/" }); - projectsModel.append({ name:"libSavitar", description: catalog.i18nc("@label", "Support library for handling 3MF files"), license: "LGPLv3", url: "https://github.com/ultimaker/libsavitar" }); - projectsModel.append({ name:"libCharon", description: catalog.i18nc("@label", "Support library for file metadata and streaming"), license: "LGPLv3", url: "https://github.com/ultimaker/libcharon" }); - projectsModel.append({ name:"PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" }); - projectsModel.append({ name:"python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" }); - projectsModel.append({ name:"Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" }); - projectsModel.append({ name:"Requests", description: catalog.i18nc("@Label", "Python HTTP library"), license: "GPL", url: "http://docs.python-requests.org" }); - - projectsModel.append({ name:"Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" }); - projectsModel.append({ name:"Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" }); - projectsModel.append({ name:"AppImageKit", description: catalog.i18nc("@label", "Linux cross-distribution application deployment"), license: "MIT", url: "https://github.com/AppImage/AppImageKit" }); - } - } - } - - rightButtons: Button - { - //: Close about dialog button - id: closeButton - text: catalog.i18nc("@action:button","Close"); - - onClicked: base.visible = false; - } -} diff --git a/resources/qml/Account/AccountDetails.qml b/resources/qml/Account/AccountDetails.qml new file mode 100644 index 0000000000..45f822e41f --- /dev/null +++ b/resources/qml/Account/AccountDetails.qml @@ -0,0 +1,69 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Column +{ + property var profile: null + property var loggedIn: false + property var profileImage: "" + + padding: UM.Theme.getSize("wide_margin").height + spacing: UM.Theme.getSize("wide_margin").height + + AvatarImage + { + id: avatar + width: UM.Theme.getSize("avatar_image").width + height: UM.Theme.getSize("avatar_image").height + anchors.horizontalCenter: parent.horizontalCenter + source: + { + if(loggedIn) + { + if(profileImage) + { + return profileImage + } + return UM.Theme.getImage("avatar_no_user") + } + return UM.Theme.getImage("avatar_no_user") + } + outlineColor: loggedIn ? UM.Theme.getColor("account_widget_outline_active") : UM.Theme.getColor("lining") + } + + Label + { + id: information + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignHCenter + renderType: Text.NativeRendering + text: loggedIn ? profile["username"] : catalog.i18nc("@label", "Please log in or create an account to\nenjoy all features of Ultimaker Cura.") + font: loggedIn ? UM.Theme.getFont("large_bold") : UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } + + Loader + { + id: accountOperations + anchors.horizontalCenter: parent.horizontalCenter + sourceComponent: loggedIn ? userOperations : generalOperations + } + + Component + { + id: userOperations + UserOperations { } + } + + Component + { + id: generalOperations + GeneralOperations { } + } +}
\ No newline at end of file diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml new file mode 100644 index 0000000000..d3bd6fd130 --- /dev/null +++ b/resources/qml/Account/AccountWidget.qml @@ -0,0 +1,76 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Button +{ + id: accountWidget + property var profile: Cura.API.account.userProfile + property var loggedIn: Cura.API.account.isLoggedIn + + implicitHeight: UM.Theme.getSize("main_window_header").height + implicitWidth: UM.Theme.getSize("main_window_header").height + + background: AvatarImage + { + id: avatar + + width: Math.round(0.8 * accountWidget.width) + height: Math.round(0.8 * accountWidget.height) + anchors.verticalCenter: accountWidget.verticalCenter + anchors.horizontalCenter: accountWidget.horizontalCenter + + source: + { + if(loggedIn) + { + if(profile["profile_image_url"]) + { + return profile["profile_image_url"] + } + return UM.Theme.getImage("avatar_no_user") + } + return UM.Theme.getImage("avatar_no_user") + } + outlineColor: loggedIn ? UM.Theme.getColor("account_widget_outline_active") : UM.Theme.getColor("lining") + } + + onClicked: popup.opened ? popup.close() : popup.open() + + Popup + { + id: popup + + y: parent.height + UM.Theme.getSize("default_arrow").height + x: parent.width - width + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + opacity: opened ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + + contentItem: AccountDetails + { + id: panel + profile: Cura.API.account.userProfile + loggedIn: Cura.API.account.isLoggedIn + profileImage: Cura.API.account.profileImageUrl + } + + background: UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + borderColor: UM.Theme.getColor("lining") + borderWidth: UM.Theme.getSize("default_lining").width + + target: Qt.point(width - (accountWidget.width / 2), -10) + + arrowSize: UM.Theme.getSize("default_arrow").width + } + } +} diff --git a/resources/qml/Account/AvatarImage.qml b/resources/qml/Account/AvatarImage.qml new file mode 100644 index 0000000000..b76aff6990 --- /dev/null +++ b/resources/qml/Account/AvatarImage.qml @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtGraphicalEffects 1.0 + +import UM 1.4 as UM + +Item +{ + // This item shows the provided image while applying a round mask to it. + // It also shows a round border around it. The color is defined by the outlineColor property. + + id: avatar + + property alias source: profileImage.source + property alias outlineColor: profileImageOutline.color + + Image + { + id: profileImage + anchors.fill: parent + source: UM.Theme.getImage("avatar_default") + fillMode: Image.PreserveAspectCrop + visible: false + mipmap: true + } + + Rectangle + { + id: profileImageMask + anchors.fill: parent + radius: width + } + + OpacityMask + { + anchors.fill: parent + source: profileImage + maskSource: profileImageMask + cached: true + } + + UM.RecolorImage + { + id: profileImageOutline + anchors.centerIn: parent + // Make it a bit bigger than it has to, otherwise it sometimes shows a white border. + width: parent.width + 2 + height: parent.height + 2 + source: UM.Theme.getIcon("circle_outline") + sourceSize: Qt.size(parent.width, parent.height) + color: UM.Theme.getColor("account_widget_ouline_active") + } +}
\ No newline at end of file diff --git a/resources/qml/Account/GeneralOperations.qml b/resources/qml/Account/GeneralOperations.qml new file mode 100644 index 0000000000..666a254cd1 --- /dev/null +++ b/resources/qml/Account/GeneralOperations.qml @@ -0,0 +1,31 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Row +{ + spacing: UM.Theme.getSize("default_margin").width + + Cura.SecondaryButton + { + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + text: catalog.i18nc("@button", "Create account") + onClicked: Qt.openUrlExternally(CuraApplication.ultimakerCloudAccountRootUrl + "/app/create") + fixedWidthMode: true + } + + Cura.PrimaryButton + { + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + text: catalog.i18nc("@button", "Login") + onClicked: Cura.API.account.login() + fixedWidthMode: true + } +}
\ No newline at end of file diff --git a/resources/qml/Account/UserOperations.qml b/resources/qml/Account/UserOperations.qml new file mode 100644 index 0000000000..56c2dc416f --- /dev/null +++ b/resources/qml/Account/UserOperations.qml @@ -0,0 +1,31 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.4 as UM +import Cura 1.1 as Cura + +Row +{ + spacing: UM.Theme.getSize("default_margin").width + + Cura.SecondaryButton + { + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + text: catalog.i18nc("@button", "Manage account") + onClicked: Qt.openUrlExternally(CuraApplication.ultimakerCloudAccountRootUrl) + fixedWidthMode: true + } + + Cura.PrimaryButton + { + width: UM.Theme.getSize("account_button").width + height: UM.Theme.getSize("account_button").height + text: catalog.i18nc("@button", "Logout") + onClicked: Cura.API.account.logout() + fixedWidthMode: true + } +}
\ No newline at end of file diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml new file mode 100644 index 0000000000..6406e83efe --- /dev/null +++ b/resources/qml/ActionButton.qml @@ -0,0 +1,144 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtGraphicalEffects 1.0 // For the dropshadow + +import UM 1.1 as UM +import Cura 1.0 as Cura + + +Button +{ + id: button + property bool isIconOnRightSide: false + + property alias iconSource: buttonIconLeft.source + property alias textFont: buttonText.font + property alias cornerRadius: backgroundRect.radius + property alias tooltip: tooltip.tooltipText + property alias cornerSide: backgroundRect.cornerSide + + property color color: UM.Theme.getColor("primary") + property color hoverColor: UM.Theme.getColor("primary_hover") + property color disabledColor: color + property color textColor: UM.Theme.getColor("button_text") + property color textHoverColor: textColor + property color textDisabledColor: textColor + property color outlineColor: color + property color outlineHoverColor: hoverColor + property color outlineDisabledColor: outlineColor + property alias shadowColor: shadow.color + property alias shadowEnabled: shadow.visible + property alias busy: busyIndicator.visible + + property alias toolTipContentAlignment: tooltip.contentAlignment + + // This property is used to indicate whether the button has a fixed width or the width would depend on the contents + // Be careful when using fixedWidthMode, the translated texts can be too long that they won't fit. In any case, + // we elide the text to the right so the text will be cut off with the three dots at the end. + property var fixedWidthMode: false + + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + height: UM.Theme.getSize("action_button").height + hoverEnabled: true + + contentItem: Row + { + spacing: UM.Theme.getSize("narrow_margin").width + //Left side icon. Only displayed if !isIconOnRightSide. + UM.RecolorImage + { + id: buttonIconLeft + source: "" + height: UM.Theme.getSize("action_button_icon").height + width: visible ? height : 0 + sourceSize.width: width + sourceSize.height: height + color: button.enabled ? (button.hovered ? button.textHoverColor : button.textColor) : button.textDisabledColor + visible: source != "" && !button.isIconOnRightSide + anchors.verticalCenter: parent.verticalCenter + } + + Label + { + id: buttonText + text: button.text + color: button.enabled ? (button.hovered ? button.textHoverColor : button.textColor): button.textDisabledColor + font: UM.Theme.getFont("medium") + visible: text != "" + renderType: Text.NativeRendering + anchors.verticalCenter: parent.verticalCenter + width: fixedWidthMode ? button.width - button.leftPadding - button.rightPadding : undefined + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideRight + } + + //Right side icon. Only displayed if isIconOnRightSide. + UM.RecolorImage + { + id: buttonIconRight + source: buttonIconLeft.source + height: UM.Theme.getSize("action_button_icon").height + width: visible ? height : 0 + sourceSize.width: width + sourceSize.height: height + color: buttonIconLeft.color + visible: source != "" && button.isIconOnRightSide + anchors.verticalCenter: buttonIconLeft.verticalCenter + } + } + + background: Cura.RoundedRectangle + { + id: backgroundRect + cornerSide: Cura.RoundedRectangle.Direction.All + color: button.enabled ? (button.hovered ? button.hoverColor : button.color) : button.disabledColor + radius: UM.Theme.getSize("action_button_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: button.enabled ? (button.hovered ? button.outlineHoverColor : button.outlineColor) : button.outlineDisabledColor + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: backgroundRect + source: backgroundRect + verticalOffset: 2 + visible: false + // Should always be drawn behind the background. + z: backgroundRect.z - 1 + } + + Cura.ToolTip + { + id: tooltip + visible: button.hovered + } + + BusyIndicator + { + id: busyIndicator + + anchors.centerIn: parent + + width: height + height: parent.height + + visible: false + + RotationAnimator + { + target: busyIndicator.contentItem + running: busyIndicator.visible && busyIndicator.running + from: 0 + to: 360 + loops: Animation.Infinite + duration: 2500 + } + } +}
\ No newline at end of file diff --git a/resources/qml/ActionPanel/ActionPanelWidget.qml b/resources/qml/ActionPanel/ActionPanelWidget.qml new file mode 100644 index 0000000000..1d9ee95548 --- /dev/null +++ b/resources/qml/ActionPanel/ActionPanelWidget.qml @@ -0,0 +1,56 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// This element hold all the elements needed for the user to trigger the slicing process, and later +// to get information about the printing times, material consumption and the output process (such as +// saving to a file, printing over network, ... +Rectangle +{ + id: actionPanelWidget + + width: UM.Theme.getSize("action_panel_widget").width + height: childrenRect.height + 2 * UM.Theme.getSize("thick_margin").height + + color: UM.Theme.getColor("main_background") + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + z: 10 + + property bool outputAvailable: UM.Backend.state == UM.Backend.Done || UM.Backend.state == UM.Backend.Disabled + + Loader + { + id: loader + anchors + { + top: parent.top + topMargin: UM.Theme.getSize("thick_margin").height + left: parent.left + leftMargin: UM.Theme.getSize("thick_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("thick_margin").width + } + sourceComponent: outputAvailable ? outputProcessWidget : sliceProcessWidget + } + + Component + { + id: sliceProcessWidget + SliceProcessWidget { } + } + + Component + { + id: outputProcessWidget + OutputProcessWidget { } + } +}
\ No newline at end of file diff --git a/resources/qml/ActionPanel/OutputDevicesActionButton.qml b/resources/qml/ActionPanel/OutputDevicesActionButton.qml new file mode 100644 index 0000000000..3bfaab0fc1 --- /dev/null +++ b/resources/qml/ActionPanel/OutputDevicesActionButton.qml @@ -0,0 +1,112 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Item +{ + id: widget + + function requestWriteToDevice() + { + UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice, PrintInformation.jobName, + { "filter_by_machine": true, "preferred_mimetypes": Cura.MachineManager.activeMachine.preferred_output_file_formats }); + } + + Cura.PrimaryButton + { + id: saveToButton + height: parent.height + fixedWidthMode: true + cornerSide: deviceSelectionMenu.visible ? Cura.RoundedRectangle.Direction.Left : Cura.RoundedRectangle.Direction.All + + anchors + { + top: parent.top + left: parent.left + right: deviceSelectionMenu.visible ? deviceSelectionMenu.left : parent.right + } + + tooltip: UM.OutputDeviceManager.activeDeviceDescription + + text: UM.OutputDeviceManager.activeDeviceShortDescription + + onClicked: + { + forceActiveFocus() + widget.requestWriteToDevice() + } + } + + Cura.ActionButton + { + id: deviceSelectionMenu + height: parent.height + + shadowEnabled: true + shadowColor: UM.Theme.getColor("primary_shadow") + cornerSide: Cura.RoundedRectangle.Direction.Right + + anchors + { + top: parent.top + right: parent.right + } + + leftPadding: UM.Theme.getSize("narrow_margin").width //Need more space than usual here for wide text. + rightPadding: UM.Theme.getSize("narrow_margin").width + iconSource: popup.opened ? UM.Theme.getIcon("arrow_top") : UM.Theme.getIcon("arrow_bottom") + color: UM.Theme.getColor("action_panel_secondary") + visible: (devicesModel.deviceCount > 1) + + onClicked: popup.opened ? popup.close() : popup.open() + + Popup + { + id: popup + padding: 0 + + y: -height + x: parent.width - width + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + contentItem: ColumnLayout + { + Repeater + { + model: devicesModel + + delegate: Cura.ActionButton + { + text: model.description + visible: model.id != UM.OutputDeviceManager.activeDevice // Don't show the active device in the list + color: "transparent" + cornerRadius: 0 + hoverColor: UM.Theme.getColor("primary") + Layout.fillWidth: true + onClicked: + { + UM.OutputDeviceManager.setActiveDevice(model.id) + popup.close() + } + } + } + } + + background: Rectangle + { + opacity: visible ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + color: UM.Theme.getColor("action_panel_secondary") + } + } + } + + UM.OutputDevicesModel { id: devicesModel } +}
\ No newline at end of file diff --git a/resources/qml/ActionPanel/OutputProcessWidget.qml b/resources/qml/ActionPanel/OutputProcessWidget.qml new file mode 100644 index 0000000000..63974d7f34 --- /dev/null +++ b/resources/qml/ActionPanel/OutputProcessWidget.qml @@ -0,0 +1,135 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 + +import UM 1.1 as UM +import Cura 1.0 as Cura + + +// This element contains all the elements the user needs to visualize the data +// that is gather after the slicing process, such as printint time, material usage, ... +// There are also two buttons: one to previsualize the output layers, and the other to +// select what to do with it (such as print over network, save to file, ...) +Column +{ + id: widget + + spacing: UM.Theme.getSize("thin_margin").height + property bool preSlicedData: PrintInformation.preSliced + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Item + { + id: information + width: parent.width + height: childrenRect.height + + PrintInformationWidget + { + id: printInformationPanel + visible: !preSlicedData + anchors.right: parent.right + } + + Column + { + id: timeAndCostsInformation + spacing: UM.Theme.getSize("thin_margin").height + + anchors + { + left: parent.left + right: parent.right + } + + Cura.IconWithText + { + id: estimatedTime + width: parent.width + + text: preSlicedData ? catalog.i18nc("@label", "No time estimation available") : PrintInformation.currentPrintTime.getDisplayString(UM.DurationFormat.Long) + source: UM.Theme.getIcon("clock") + font: UM.Theme.getFont("medium_bold") + } + + Cura.IconWithText + { + id: estimatedCosts + width: parent.width + + property var printMaterialLengths: PrintInformation.materialLengths + property var printMaterialWeights: PrintInformation.materialWeights + + text: + { + if (preSlicedData) + { + return catalog.i18nc("@label", "No cost estimation available") + } + var totalLengths = 0 + var totalWeights = 0 + if (printMaterialLengths) + { + for(var index = 0; index < printMaterialLengths.length; index++) + { + if(printMaterialLengths[index] > 0) + { + totalLengths += printMaterialLengths[index] + totalWeights += Math.round(printMaterialWeights[index]) + } + } + } + return totalWeights + "g · " + totalLengths.toFixed(2) + "m" + } + source: UM.Theme.getIcon("spool") + } + } + } + + Item + { + id: buttonRow + anchors.right: parent.right + anchors.left: parent.left + height: UM.Theme.getSize("action_button").height + + Cura.SecondaryButton + { + id: previewStageShortcut + + anchors + { + left: parent.left + right: outputDevicesButton.left + rightMargin: UM.Theme.getSize("default_margin").width + } + + height: UM.Theme.getSize("action_button").height + text: catalog.i18nc("@button", "Preview") + tooltip: text + fixedWidthMode: true + + toolTipContentAlignment: Cura.ToolTip.ContentAlignment.AlignLeft + + onClicked: UM.Controller.setActiveStage("PreviewStage") + visible: UM.Controller.activeStage != null && UM.Controller.activeStage.stageId != "PreviewStage" + } + + Cura.OutputDevicesActionButton + { + id: outputDevicesButton + + anchors.right: parent.right + width: previewStageShortcut.visible ? UM.Theme.getSize("action_button").width : parent.width + height: UM.Theme.getSize("action_button").height + } + } +}
\ No newline at end of file diff --git a/resources/qml/ActionPanel/PrintInformationWidget.qml b/resources/qml/ActionPanel/PrintInformationWidget.qml new file mode 100644 index 0000000000..2e108b05d7 --- /dev/null +++ b/resources/qml/ActionPanel/PrintInformationWidget.qml @@ -0,0 +1,58 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +UM.RecolorImage +{ + id: widget + + source: UM.Theme.getIcon("info") + width: visible ? UM.Theme.getSize("section_icon").width : 0 + height: UM.Theme.getSize("section_icon").height + + color: UM.Theme.getColor("icon") + + MouseArea + { + anchors.fill: parent + hoverEnabled: true + onEntered: popup.open() + onExited: popup.close() + } + + Popup + { + id: popup + + y: -(height + UM.Theme.getSize("default_arrow").height + UM.Theme.getSize("thin_margin").height) + x: parent.width - width + UM.Theme.getSize("thin_margin").width + + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + + opacity: opened ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: 100 } } + + contentItem: PrintJobInformation + { + id: printJobInformation + width: UM.Theme.getSize("action_panel_information_widget").width + } + + background: UM.PointingRectangle + { + color: UM.Theme.getColor("tool_panel_background") + borderColor: UM.Theme.getColor("lining") + borderWidth: UM.Theme.getSize("default_lining").width + + target: Qt.point(width - (widget.width / 2) - UM.Theme.getSize("thin_margin").width, + height + UM.Theme.getSize("default_arrow").height - UM.Theme.getSize("thin_margin").height) + + arrowSize: UM.Theme.getSize("default_arrow").width + } + } +}
\ No newline at end of file diff --git a/resources/qml/ActionPanel/PrintJobInformation.qml b/resources/qml/ActionPanel/PrintJobInformation.qml new file mode 100644 index 0000000000..8bd5d5a0d3 --- /dev/null +++ b/resources/qml/ActionPanel/PrintJobInformation.qml @@ -0,0 +1,159 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Column +{ + id: base + spacing: UM.Theme.getSize("default_margin").width + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Column + { + id: timeSpecification + width: parent.width + topPadding: UM.Theme.getSize("default_margin").height + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "Time specification").toUpperCase() + color: UM.Theme.getColor("primary") + font: UM.Theme.getFont("default_bold") + renderType: Text.NativeRendering + } + + Label + { + property var printDuration: PrintInformation.currentPrintTime + + text: + { + // All the time information for the different features is achieved + var printTime = PrintInformation.getFeaturePrintTimes() + var totalSeconds = parseInt(printDuration.getDisplayString(UM.DurationFormat.Seconds)) + + // A message is created and displayed when the user hover the time label + var text = "<table width=\"100%\">" + for(var feature in printTime) + { + if(!printTime[feature].isTotalDurationZero) + { + text += "<tr><td>" + feature + ":</td>" + + "<td align=\"right\" valign=\"bottom\"> %1</td>".arg(printTime[feature].getDisplayString(UM.DurationFormat.ISO8601).slice(0,-3)) + + "<td align=\"right\" valign=\"bottom\"> %1%</td>".arg(Math.round(100 * parseInt(printTime[feature].getDisplayString(UM.DurationFormat.Seconds)) / totalSeconds)) + + "</tr>" + } + } + text += "</table>" + return text + } + width: parent.width - 2 * UM.Theme.getSize("default_margin").width + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + textFormat: Text.RichText + } + } + + Column + { + id: materialSpecification + width: parent.width + bottomPadding: UM.Theme.getSize("default_margin").height + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + + Label + { + text: catalog.i18nc("@label", "Material specification").toUpperCase() + color: UM.Theme.getColor("primary") + font: UM.Theme.getFont("default_bold") + renderType: Text.NativeRendering + } + + Label + { + property var printMaterialLengths: PrintInformation.materialLengths + property var printMaterialWeights: PrintInformation.materialWeights + property var printMaterialCosts: PrintInformation.materialCosts + property var printMaterialNames: PrintInformation.materialNames + + function formatRow(items) + { + var rowHTML = "<tr>" + for(var item = 0; item < items.length; item++) + { + if (item == 0) + { + rowHTML += "<td valign=\"bottom\">%1</td>".arg(items[item]) + } + else + { + rowHTML += "<td align=\"right\" valign=\"bottom\"> %1</td>".arg(items[item]) + } + } + rowHTML += "</tr>" + return rowHTML + } + + text: + { + var lengths = [] + var weights = [] + var costs = [] + var names = [] + if(printMaterialLengths) + { + for(var index = 0; index < printMaterialLengths.length; index++) + { + if(printMaterialLengths[index] > 0) + { + names.push(printMaterialNames[index]) + lengths.push(printMaterialLengths[index].toFixed(2)) + weights.push(String(Math.round(printMaterialWeights[index]))) + var cost = printMaterialCosts[index] == undefined ? 0 : printMaterialCosts[index].toFixed(2) + costs.push(cost) + } + } + } + if(lengths.length == 0) + { + lengths = ["0.00"] + weights = ["0"] + costs = ["0.00"] + } + + var text = "<table width=\"100%\">" + for(var index = 0; index < lengths.length; index++) + { + text += formatRow([ + "%1:".arg(names[index]), + catalog.i18nc("@label m for meter", "%1m").arg(lengths[index]), + catalog.i18nc("@label g for grams", "%1g").arg(weights[index]), + "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(costs[index]), + ]) + } + text += "</table>" + + return text + } + width: parent.width - 2 * UM.Theme.getSize("default_margin").width + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + textFormat: Text.RichText + } + } +}
\ No newline at end of file diff --git a/resources/qml/ActionPanel/SliceProcessWidget.qml b/resources/qml/ActionPanel/SliceProcessWidget.qml new file mode 100644 index 0000000000..21d6fac2d8 --- /dev/null +++ b/resources/qml/ActionPanel/SliceProcessWidget.qml @@ -0,0 +1,174 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 +import QtQuick.Layouts 1.3 +import QtQuick.Controls 1.4 as Controls1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + + +// This element contains all the elements the user needs to create a printjob from the +// model(s) that is(are) on the buildplate. Mainly the button to start/stop the slicing +// process and a progress bar to see the progress of the process. +Column +{ + id: widget + + spacing: UM.Theme.getSize("thin_margin").height + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + property real progress: UM.Backend.progress + property int backendState: UM.Backend.state + + function sliceOrStopSlicing() + { + if (widget.backendState == UM.Backend.NotStarted) + { + CuraApplication.backend.forceSlice() + } + else + { + CuraApplication.backend.stopSlicing() + } + } + + Label + { + id: autoSlicingLabel + width: parent.width + visible: progressBar.visible + + text: catalog.i18nc("@label:PrintjobStatus", "Slicing...") + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + } + + Cura.IconWithText + { + id: unableToSliceMessage + width: parent.width + visible: widget.backendState == UM.Backend.Error + + text: catalog.i18nc("@label:PrintjobStatus", "Unable to Slice") + source: UM.Theme.getIcon("warning") + iconColor: UM.Theme.getColor("warning") + } + + // Progress bar, only visible when the backend is in the process of slice the printjob + ProgressBar + { + id: progressBar + width: parent.width + height: UM.Theme.getSize("progressbar").height + value: progress + indeterminate: widget.backendState == UM.Backend.NotStarted + visible: (widget.backendState == UM.Backend.Processing || (prepareButtons.autoSlice && widget.backendState == UM.Backend.NotStarted)) + + background: Rectangle + { + anchors.fill: parent + radius: UM.Theme.getSize("progressbar_radius").width + color: UM.Theme.getColor("progressbar_background") + } + + contentItem: Item + { + anchors.fill: parent + Rectangle + { + width: progressBar.visualPosition * parent.width + height: parent.height + radius: UM.Theme.getSize("progressbar_radius").width + color: UM.Theme.getColor("progressbar_control") + } + } + } + + Item + { + id: prepareButtons + // Get the current value from the preferences + property bool autoSlice: UM.Preferences.getValue("general/auto_slice") + // Disable the slice process when + + width: parent.width + height: UM.Theme.getSize("action_button").height + visible: !autoSlice + Cura.PrimaryButton + { + id: sliceButton + fixedWidthMode: true + + height: parent.height + + anchors.right: parent.right + anchors.left: parent.left + + text: catalog.i18nc("@button", "Slice") + tooltip: catalog.i18nc("@label", "Start the slicing process") + enabled: widget.backendState != UM.Backend.Error + visible: widget.backendState == UM.Backend.NotStarted || widget.backendState == UM.Backend.Error + onClicked: sliceOrStopSlicing() + } + + Cura.SecondaryButton + { + id: cancelButton + fixedWidthMode: true + height: parent.height + anchors.left: parent.left + + anchors.right: parent.right + text: catalog.i18nc("@button", "Cancel") + enabled: sliceButton.enabled + visible: !sliceButton.visible + onClicked: sliceOrStopSlicing() + } + } + + + // React when the user changes the preference of having the auto slice enabled + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "general/auto_slice") + { + return; + } + + var autoSlice = UM.Preferences.getValue("general/auto_slice") + if(prepareButtons.autoSlice != autoSlice) + { + prepareButtons.autoSlice = autoSlice + if(autoSlice) + { + CuraApplication.backend.forceSlice() + } + } + } + } + + // Shortcut for "slice/stop" + Controls1.Action + { + shortcut: "Ctrl+P" + onTriggered: + { + if (sliceButton.enabled) + { + sliceOrStopSlicing() + } + } + } +} diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index bd7b15a1c7..a1077f5fb7 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2015 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. pragma Singleton @@ -23,8 +23,6 @@ Item property alias viewLeftSideCamera: viewLeftSideCameraAction; property alias viewRightSideCamera: viewRightSideCameraAction; - property alias expandSidebar: expandSidebarAction; - property alias deleteSelection: deleteSelectionAction; property alias centerSelection: centerSelectionAction; property alias multiplySelection: multiplySelectionAction; @@ -58,7 +56,6 @@ Item property alias preferences: preferencesAction; - property alias showEngineLog: showEngineLogAction; property alias showProfileFolder: showProfileFolderAction; property alias documentation: documentationAction; property alias reportBug: reportBugAction; @@ -70,7 +67,7 @@ Item property alias browsePackages: browsePackagesAction - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} Action { @@ -400,14 +397,6 @@ Item Action { - id: showEngineLogAction; - text: catalog.i18nc("@action:inmenu menubar:help","Show Engine &Log..."); - iconName: "view-list-text"; - shortcut: StandardKey.WhatsThis; - } - - Action - { id: showProfileFolderAction; text: catalog.i18nc("@action:inmenu menubar:help","Show Configuration Folder"); } @@ -426,11 +415,4 @@ Item text: catalog.i18nc("@action:menu", "&Marketplace") iconName: "plugins_browse" } - - Action - { - id: expandSidebarAction; - text: catalog.i18nc("@action:inmenu menubar:view","Expand/Collapse Sidebar"); - shortcut: "Ctrl+E"; - } } diff --git a/resources/qml/BorderGroup.qml b/resources/qml/BorderGroup.qml new file mode 100644 index 0000000000..38ad9fadff --- /dev/null +++ b/resources/qml/BorderGroup.qml @@ -0,0 +1,10 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.0 + +QtObject +{ + property real width: 0 + property color color: "black" +} diff --git a/resources/qml/CheckBoxWithTooltip.qml b/resources/qml/CheckBoxWithTooltip.qml new file mode 100644 index 0000000000..403efb4d7b --- /dev/null +++ b/resources/qml/CheckBoxWithTooltip.qml @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.3 as UM + +CheckBox +{ + id: checkbox + hoverEnabled: true + + property alias tooltip: tooltip.text + + indicator: Rectangle + { + implicitWidth: UM.Theme.getSize("checkbox").width + implicitHeight: UM.Theme.getSize("checkbox").height + x: 0 + anchors.verticalCenter: parent.verticalCenter + color: UM.Theme.getColor("main_background") + radius: UM.Theme.getSize("checkbox_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: checkbox.hovered ? UM.Theme.getColor("checkbox_border_hover") : UM.Theme.getColor("checkbox_border") + + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: Math.round(parent.width / 2.5) + height: Math.round(parent.height / 2.5) + sourceSize.height: width + color: UM.Theme.getColor("checkbox_mark") + source: UM.Theme.getIcon("check") + opacity: checkbox.checked + Behavior on opacity { NumberAnimation { duration: 100; } } + } + } + + contentItem: Label + { + anchors + { + left: checkbox.indicator.right + leftMargin: UM.Theme.getSize("narrow_margin").width + } + text: checkbox.text + color: UM.Theme.getColor("checkbox_text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + ToolTip + { + id: tooltip + text: "" + delay: 500 + visible: text != "" && checkbox.hovered + } +} diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml index 029149f1d0..a522e3ffa0 100644 --- a/resources/qml/Cura.qml +++ b/resources/qml/Cura.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -6,53 +6,42 @@ import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4 import QtQuick.Layouts 1.1 import QtQuick.Dialogs 1.2 +import QtGraphicalEffects 1.0 import UM 1.3 as UM import Cura 1.1 as Cura +import "Dialogs" import "Menus" +import "MainWindow" UM.MainWindow { id: base - //: Cura application window title - title: catalog.i18nc("@title:window","Ultimaker Cura"); - viewportRect: Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0) - property bool showPrintMonitor: false + // Cura application window title + title: catalog.i18nc("@title:window", "Ultimaker Cura") backgroundColor: UM.Theme.getColor("viewport_background") - // This connection is here to support legacy printer output devices that use the showPrintMonitor signal on Application to switch to the monitor stage - // It should be phased out in newer plugin versions. - Connections + + UM.I18nCatalog { - target: CuraApplication - onShowPrintMonitor: { - if (show) { - UM.Controller.setActiveStage("MonitorStage") - } else { - UM.Controller.setActiveStage("PrepareStage") - } - } + id: catalog + name: "cura" } - onWidthChanged: + function showTooltip(item, position, text) { - // If slidebar is collapsed then it should be invisible - // otherwise after the main_window resize the sidebar will be fully re-drawn - if (sidebar.collapsed){ - if (sidebar.visible == true){ - sidebar.visible = false - sidebar.initialWidth = 0 - } - } - else{ - if (sidebar.visible == false){ - sidebar.visible = true - sidebar.initialWidth = UM.Theme.getSize("sidebar").width - } - } + tooltip.text = text; + position = item.mapToItem(backgroundItem, position.x - UM.Theme.getSize("default_arrow").width, position.y); + tooltip.show(position); + } + + function hideTooltip() + { + tooltip.hide(); } + Component.onCompleted: { CuraApplication.setMinimumWindowSize(UM.Theme.getSize("window_minimum_size")) @@ -72,12 +61,12 @@ UM.MainWindow Item { - id: backgroundItem; - anchors.fill: parent; - UM.I18nCatalog{id: catalog; name:"cura"} + id: backgroundItem + anchors.fill: parent signal hasMesh(string name) //this signal sends the filebase name so it can be used for the JobSpecs.qml - function getMeshName(path){ + function getMeshName(path) + { //takes the path the complete path of the meshname and returns only the filebase var fileName = path.slice(path.lastIndexOf("/") + 1) var fileBase = fileName.slice(0, fileName.indexOf(".")) @@ -85,253 +74,97 @@ UM.MainWindow } //DeleteSelection on the keypress backspace event - Keys.onPressed: { + Keys.onPressed: + { if (event.key == Qt.Key_Backspace) { Cura.Actions.deleteSelection.trigger() } } - UM.ApplicationMenu + ApplicationMenu { - id: menu + id: applicationMenu window: base + } - Menu + Item + { + id: headerBackground + anchors { - id: fileMenu - title: catalog.i18nc("@title:menu menubar:toplevel","&File"); - MenuItem - { - id: newProjectMenu - action: Cura.Actions.newProject; - } - - MenuItem - { - id: openMenu - action: Cura.Actions.open; - } - - RecentFilesMenu { } + top: applicationMenu.bottom + left: parent.left + right: parent.right + } + height: stageMenu.source != "" ? Math.round(mainWindowHeader.height + stageMenu.height / 2) : mainWindowHeader.height - MenuItem + LinearGradient + { + anchors.fill: parent + start: Qt.point(0, 0) + end: Qt.point(parent.width, 0) + gradient: Gradient { - id: saveWorkspaceMenu - text: catalog.i18nc("@title:menu menubar:file","&Save...") - onTriggered: + GradientStop { - var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml" }; - if(UM.Preferences.getValue("cura/dialog_on_project_save")) - { - saveWorkspaceDialog.args = args; - saveWorkspaceDialog.open() - } - else - { - UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) - } + position: 0.0 + color: UM.Theme.getColor("main_window_header_background") } - } - - MenuSeparator { } - - MenuItem - { - id: saveAsMenu - text: catalog.i18nc("@title:menu menubar:file", "&Export...") - onTriggered: + GradientStop { - var localDeviceId = "local_file"; - UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); - } - } - - MenuItem - { - id: exportSelectionMenu - text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection..."); - enabled: UM.Selection.hasSelection; - iconName: "document-save-as"; - onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}); - } - - MenuSeparator { } - - MenuItem - { - id: reloadAllMenu - action: Cura.Actions.reloadAll; - } - - MenuSeparator { } - - MenuItem { action: Cura.Actions.quit; } - } - - Menu - { - title: catalog.i18nc("@title:menu menubar:toplevel","&Edit"); - - MenuItem { action: Cura.Actions.undo; } - MenuItem { action: Cura.Actions.redo; } - MenuSeparator { } - MenuItem { action: Cura.Actions.selectAll; } - MenuItem { action: Cura.Actions.arrangeAll; } - MenuItem { action: Cura.Actions.deleteSelection; } - MenuItem { action: Cura.Actions.deleteAll; } - MenuItem { action: Cura.Actions.resetAllTranslation; } - MenuItem { action: Cura.Actions.resetAll; } - MenuSeparator { } - MenuItem { action: Cura.Actions.groupObjects;} - MenuItem { action: Cura.Actions.mergeObjects;} - MenuItem { action: Cura.Actions.unGroupObjects;} - } - - ViewMenu { title: catalog.i18nc("@title:menu", "&View") } - - Menu - { - id: settingsMenu - title: catalog.i18nc("@title:menu", "&Settings") - - PrinterMenu { title: catalog.i18nc("@title:menu menubar:settings", "&Printer") } - - Instantiator - { - model: Cura.ExtrudersModel { simpleNames: true } - Menu { - title: model.name - - NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.hasVariants; extruderIndex: index } - MaterialMenu { title: catalog.i18nc("@title:menu", "&Material"); visible: Cura.MachineManager.hasMaterials; extruderIndex: index } - - MenuSeparator - { - visible: Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials - } - - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Set as Active Extruder") - onTriggered: Cura.MachineManager.setExtruderIndex(model.index) - } - - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Enable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) - visible: !Cura.MachineManager.getExtruder(model.index).isEnabled - } - - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Disable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false) - visible: Cura.MachineManager.getExtruder(model.index).isEnabled - enabled: Cura.MachineManager.numberExtrudersEnabled > 1 - } - + position: 0.5 + color: UM.Theme.getColor("main_window_header_background_gradient") } - onObjectAdded: settingsMenu.insertItem(index, object) - onObjectRemoved: settingsMenu.removeItem(object) - } - - // TODO Only show in dev mode. Remove check when feature ready - BuildplateMenu { title: catalog.i18nc("@title:menu", "&Build plate"); visible: CuraSDKVersion == "dev" ? Cura.MachineManager.hasVariantBuildplates : false } - ProfileMenu { title: catalog.i18nc("@title:settings", "&Profile"); } - - MenuSeparator { } - - MenuItem { action: Cura.Actions.configureSettingVisibility } - } - - Menu - { - id: extension_menu - title: catalog.i18nc("@title:menu menubar:toplevel","E&xtensions"); - - Instantiator - { - id: extensions - model: UM.ExtensionModel { } - - Menu + GradientStop { - id: sub_menu - title: model.name; - visible: actions != null - enabled: actions != null - Instantiator - { - model: actions - MenuItem - { - text: model.text - onTriggered: extensions.model.subMenuTriggered(name, model.text) - } - onObjectAdded: sub_menu.insertItem(index, object) - onObjectRemoved: sub_menu.removeItem(object) - } + position: 1.0 + color: UM.Theme.getColor("main_window_header_background") } - - onObjectAdded: extension_menu.insertItem(index, object) - onObjectRemoved: extension_menu.removeItem(object) } } - Menu + // This is a placehoder for adding a pattern in the header + Image { - id: plugin_menu - title: catalog.i18nc("@title:menu menubar:toplevel", "&Marketplace") - - MenuItem { action: Cura.Actions.browsePackages } - } - - Menu - { - id: preferencesMenu - title: catalog.i18nc("@title:menu menubar:toplevel","P&references"); - - MenuItem { action: Cura.Actions.preferences; } - } - - Menu - { - id: helpMenu - title: catalog.i18nc("@title:menu menubar:toplevel","&Help"); - - MenuItem { action: Cura.Actions.showProfileFolder; } - MenuItem { action: Cura.Actions.documentation; } - MenuItem { action: Cura.Actions.reportBug; } - MenuSeparator { } - MenuItem { action: Cura.Actions.about; } + id: backgroundPattern + anchors.fill: parent + fillMode: Image.Tile + source: UM.Theme.getImage("header_pattern") + horizontalAlignment: Image.AlignLeft + verticalAlignment: Image.AlignTop } } - UM.SettingPropertyProvider + MainWindowHeader { - id: machineExtruderCount - - containerStack: Cura.MachineManager.activeMachine - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 + id: mainWindowHeader + anchors + { + left: parent.left + right: parent.right + top: applicationMenu.bottom + } } Item { - id: contentItem; + id: contentItem - y: menu.height - width: parent.width; - height: parent.height - menu.height; + anchors + { + top: mainWindowHeader.bottom + bottom: parent.bottom + left: parent.left + right: parent.right + } - Keys.forwardTo: menu + Keys.forwardTo: applicationMenu DropArea { - anchors.fill: parent; + // The drop area is here to handle files being dropped onto Cura. + anchors.fill: parent onDropped: { if (drop.urls.length > 0) @@ -359,178 +192,194 @@ UM.MainWindow } } - JobSpecs + Toolbar { - id: jobSpecs + // The toolbar is the left bar that is populated by all the tools (which are dynamicly populated by + // plugins) + id: toolbar + + property int mouseX: base.mouseX + property int mouseY: base.mouseY + anchors { - bottom: parent.bottom; - right: sidebar.left; - bottomMargin: UM.Theme.getSize("default_margin").height; - rightMargin: UM.Theme.getSize("default_margin").width; + verticalCenter: parent.verticalCenter + left: parent.left } + visible: CuraApplication.platformActivity && !PrintInformation.preSliced } - Button + ObjectsList { - id: openFileButton; - text: catalog.i18nc("@action:button","Open File"); - iconSource: UM.Theme.getIcon("load") - style: UM.Theme.styles.tool_button - tooltip: "" + id: objectsList + visible: UM.Preferences.getValue("cura/use_multi_build_plate") anchors { - top: topbar.bottom; - topMargin: UM.Theme.getSize("default_margin").height; - left: parent.left; + bottom: viewOrientationControls.top + left: toolbar.right + margins: UM.Theme.getSize("default_margin").width } - action: Cura.Actions.open; } - Toolbar + JobSpecs { - id: toolbar; + id: jobSpecs + visible: CuraApplication.platformActivity + anchors + { + left: parent.left + bottom: viewOrientationControls.top + margins: UM.Theme.getSize("default_margin").width + bottomMargin: UM.Theme.getSize("thin_margin").width + } + } - property int mouseX: base.mouseX - property int mouseY: base.mouseY + ViewOrientationControls + { + id: viewOrientationControls - anchors { - top: openFileButton.bottom; - topMargin: UM.Theme.getSize("window_margin").height; - left: parent.left; + anchors + { + left: parent.left + bottom: parent.bottom + margins: UM.Theme.getSize("default_margin").width } } - ObjectsList + Cura.ActionPanelWidget { - id: objectsList; - visible: UM.Preferences.getValue("cura/use_multi_build_plate"); - anchors + id: actionPanelWidget + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.rightMargin: UM.Theme.getSize("thick_margin").width + anchors.bottomMargin: UM.Theme.getSize("thick_margin").height + + /* + Show this panel only if there is something on the build plate, and there is NOT an opaque item in front of the build plate. + This cannot be solved by Z indexing! If you want to try solving this, please increase this counter when you're done: + Number of people having tried to fix this by z-indexing: 2 + The problem arises from the following render order requirements: + - The stage menu must be rendered above the stage main. + - The stage main must be rendered above the action panel (because the monitor page must be rendered above the action panel). + - The action panel must be rendered above the expandable components drop-down. + However since the expandable components drop-downs are child elements of the stage menu, + they can't be rendered lower than elements that are lower than the stage menu. + Therefore we opted to forego the second requirement and hide the action panel instead when something obscures it (except the expandable components). + We assume that QQuickRectangles are always opaque and any other item is not. + */ + visible: CuraApplication.platformActivity && (main.item == null || !qmlTypeOf(main.item, "QQuickRectangle")) + } + + Item + { + id: additionalComponents + width: childrenRect.width + anchors.right: actionPanelWidget.left + anchors.rightMargin: UM.Theme.getSize("default_margin").width + anchors.bottom: actionPanelWidget.bottom + anchors.bottomMargin: UM.Theme.getSize("thick_margin").height * 2 + visible: actionPanelWidget.visible + Row { - bottom: parent.bottom; - left: parent.left; + id: additionalComponentsRow + anchors.verticalCenter: parent.verticalCenter + spacing: UM.Theme.getSize("default_margin").width } + } + Component.onCompleted: contentItem.addAdditionalComponents() + + Connections + { + target: CuraApplication + onAdditionalComponentsChanged: contentItem.addAdditionalComponents("saveButton") } - Topbar + function addAdditionalComponents() { - id: topbar - anchors.left: parent.left - anchors.right: parent.right - anchors.top: parent.top + for (var component in CuraApplication.additionalComponents["saveButton"]) + { + CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow + } } Loader { + // A stage can control this area. If nothing is set, it will therefore show the 3D view. id: main anchors { - top: topbar.bottom - bottom: parent.bottom + // Align to the top of the stageMenu since the stageMenu may not exist + top: stageMenu.source ? stageMenu.verticalCenter : parent.top left: parent.left - right: sidebar.left - } - - MouseArea - { - visible: UM.Controller.activeStage.mainComponent != "" - anchors.fill: parent - acceptedButtons: Qt.AllButtons - onWheel: wheel.accepted = true + right: parent.right + bottom: parent.bottom } - source: UM.Controller.activeStage.mainComponent + source: UM.Controller.activeStage != null ? UM.Controller.activeStage.mainComponent : "" } Loader { - id: sidebar - - property bool collapsed: false; - property var initialWidth: UM.Theme.getSize("sidebar").width; - - function callExpandOrCollapse() { - if (collapsed) { - sidebar.visible = true; - sidebar.initialWidth = UM.Theme.getSize("sidebar").width; - viewportRect = Qt.rect(0, 0, (base.width - sidebar.width) / base.width, 1.0); - expandSidebarAnimation.start(); - } else { - viewportRect = Qt.rect(0, 0, 1, 1.0); - collapseSidebarAnimation.start(); - } - collapsed = !collapsed; - UM.Preferences.setValue("cura/sidebar_collapsed", collapsed); - } + // The stage menu is, as the name implies, a menu that is defined by the active stage. + // Note that this menu does not need to be set at all! It's perfectly acceptable to have a stage + // without this menu! + id: stageMenu anchors { - top: topbar.top - bottom: parent.bottom - } - - width: initialWidth - x: base.width - sidebar.width - source: UM.Controller.activeStage.sidebarComponent - - NumberAnimation { - id: collapseSidebarAnimation - target: sidebar - properties: "x" - to: base.width - duration: 100 + left: parent.left + right: parent.right + top: parent.top } - NumberAnimation { - id: expandSidebarAnimation - target: sidebar - properties: "x" - to: base.width - sidebar.width - duration: 100 - } + height: UM.Theme.getSize("stage_menu").height + source: UM.Controller.activeStage != null ? UM.Controller.activeStage.stageMenuComponent : "" - Component.onCompleted: + // HACK: This is to ensure that the parent never gets set to null, as this wreaks havoc on the focus. + function onParentDestroyed() { - var sidebar_collapsed = UM.Preferences.getValue("cura/sidebar_collapsed"); - - if (sidebar_collapsed) - { - sidebar.collapsed = true; - viewportRect = Qt.rect(0, 0, 1, 1.0) - collapseSidebarAnimation.start(); - } + printSetupSelector.parent = stageMenu + printSetupSelector.visible = false } + property Item oldParent: null - MouseArea + // The printSetupSelector is defined here so that the setting list doesn't need to get re-instantiated + // Every time the stage is changed. + property var printSetupSelector: Cura.PrintSetupSelector { - visible: UM.Controller.activeStage.sidebarComponent != "" - anchors.fill: parent - acceptedButtons: Qt.AllButtons - onWheel: wheel.accepted = true + width: UM.Theme.getSize("print_setup_widget").width + height: UM.Theme.getSize("stage_menu").height + headerCornerSide: RoundedRectangle.Direction.Right + onParentChanged: + { + if(stageMenu.oldParent !=null) + { + stageMenu.oldParent.Component.destruction.disconnect(stageMenu.onParentDestroyed) + } + stageMenu.oldParent = parent + visible = parent != stageMenu + parent.Component.destruction.connect(stageMenu.onParentDestroyed) + } } } - UM.MessageStack { anchors { horizontalCenter: parent.horizontalCenter - horizontalCenterOffset: -(Math.round(UM.Theme.getSize("sidebar").width / 2)) - top: parent.verticalCenter; - bottom: parent.bottom; + top: parent.verticalCenter + bottom: parent.bottom bottomMargin: UM.Theme.getSize("default_margin").height } } } - } - // Expand or collapse sidebar - Connections - { - target: Cura.Actions.expandSidebar - onTriggered: sidebar.callExpandOrCollapse() + PrintSetupTooltip + { + id: tooltip + } } UM.PreferencesDialog @@ -552,9 +401,6 @@ UM.MainWindow insertPage(4, catalog.i18nc("@title:tab", "Profiles"), Qt.resolvedUrl("Preferences/ProfilesPage.qml")); - // Remove plug-ins page because we will use the shiny new plugin browser: - removePage(5); - //Force refresh setPage(0); } @@ -567,13 +413,6 @@ UM.MainWindow } } - WorkspaceSummaryDialog - { - id: saveWorkspaceDialog - property var args - onYes: UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) - } - Connections { target: Cura.Actions.preferences @@ -586,33 +425,6 @@ UM.MainWindow onShowPreferencesWindow: preferences.visible = true } - MessageDialog - { - id: newProjectDialog - modality: Qt.ApplicationModal - title: catalog.i18nc("@title:window", "New project") - text: catalog.i18nc("@info:question", "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings.") - standardButtons: StandardButton.Yes | StandardButton.No - icon: StandardIcon.Question - onYes: - { - CuraApplication.deleteAll(); - Cura.Actions.resetProfile.trigger(); - } - } - - Connections - { - target: Cura.Actions.newProject - onTriggered: - { - if(Printer.platformActivity || Cura.MachineManager.hasUserSettings) - { - newProjectDialog.visible = true - } - } - } - Connections { target: Cura.Actions.addProfile @@ -670,19 +482,6 @@ UM.MainWindow } } - UM.ExtensionModel { - id: curaExtensions - } - - // show the plugin browser dialog - Connections - { - target: Cura.Actions.browsePackages - onTriggered: { - curaExtensions.callExtensionMethod("Toolbox", "browsePackages") - } - } - Timer { id: createProfileTimer @@ -703,7 +502,8 @@ UM.MainWindow } } - ContextMenu { + ContextMenu + { id: contextMenu } @@ -870,7 +670,8 @@ UM.MainWindow modality: Qt.ApplicationModal } - MessageDialog { + MessageDialog + { id: infoMultipleFilesWithGcodeDialog title: catalog.i18nc("@title:window", "Open File(s)") icon: StandardIcon.Information @@ -914,11 +715,6 @@ UM.MainWindow } } - EngineLog - { - id: engineLog; - } - Connections { target: Cura.Actions.showProfileFolder @@ -1067,4 +863,21 @@ UM.MainWindow } } } + + /** + * Function to check whether a QML object has a certain type. + * Taken from StackOverflow: https://stackoverflow.com/a/28384228 and + * adapted to our code style. + * Licensed under CC BY-SA 3.0. + * \param obj The QtObject to get the name of. + * \param class_name (str) The name of the class to check against. Has to be + * the QtObject class name, not the QML entity name. + */ + function qmlTypeOf(obj, class_name) + { + //className plus "(" is the class instance without modification. + //className plus "_QML" is the class instance with user-defined properties. + var str = obj.toString(); + return str.indexOf(class_name + "(") == 0 || str.indexOf(class_name + "_QML") == 0; + } } diff --git a/resources/qml/Dialogs/AboutDialog.qml b/resources/qml/Dialogs/AboutDialog.qml new file mode 100644 index 0000000000..ac115a0e5f --- /dev/null +++ b/resources/qml/Dialogs/AboutDialog.qml @@ -0,0 +1,168 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Window 2.1 + +import UM 1.1 as UM + +UM.Dialog +{ + id: base + + //: About dialog title + title: catalog.i18nc("@title:window","About Cura") + + minimumWidth: 500 * screenScaleFactor + minimumHeight: 650 * screenScaleFactor + width: minimumWidth + height: minimumHeight + + Rectangle + { + width: parent.width + 2 * margin // margin from Dialog.qml + height: version.y + version.height + margin + + anchors.top: parent.top + anchors.topMargin: - margin + anchors.horizontalCenter: parent.horizontalCenter + + color: UM.Theme.getColor("viewport_background") + } + + Image + { + id: logo + width: (base.minimumWidth * 0.85) | 0 + height: (width * (UM.Theme.getSize("logo").height / UM.Theme.getSize("logo").width)) | 0 + + source: UM.Theme.getImage("logo_about") + + anchors.top: parent.top + anchors.topMargin: ((base.minimumWidth - width) / 2) | 0 + anchors.horizontalCenter: parent.horizontalCenter + + UM.I18nCatalog{id: catalog; name: "cura"} + } + + Label + { + id: version + + text: catalog.i18nc("@label","version: %1").arg(UM.Application.version) + font: UM.Theme.getFont("large_bold") + color: UM.Theme.getColor("text") + anchors.right : logo.right + anchors.top: logo.bottom + anchors.topMargin: (UM.Theme.getSize("default_margin").height / 2) | 0 + } + + Label + { + id: description + width: parent.width + + //: About dialog application description + text: catalog.i18nc("@label","End-to-end solution for fused filament 3D printing.") + font: UM.Theme.getFont("system") + wrapMode: Text.WordWrap + anchors.top: version.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + } + + Label + { + id: creditsNotes + width: parent.width + + //: About dialog application author note + text: catalog.i18nc("@info:credit","Cura is developed by Ultimaker B.V. in cooperation with the community.\nCura proudly uses the following open source projects:") + font: UM.Theme.getFont("system") + wrapMode: Text.WordWrap + anchors.top: description.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + } + + ScrollView + { + id: credits + anchors.top: creditsNotes.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + + width: parent.width + height: base.height - y - (2 * UM.Theme.getSize("default_margin").height + closeButton.height) + + ListView + { + id: projectsList + + width: parent.width + + delegate: Row + { + Label + { + text: "<a href='%1' title='%2'>%2</a>".arg(model.url).arg(model.name) + width: (projectsList.width * 0.25) | 0 + elide: Text.ElideRight + onLinkActivated: Qt.openUrlExternally(link) + } + Label + { + text: model.description + elide: Text.ElideRight + width: (projectsList.width * 0.6) | 0 + } + Label + { + text: model.license + elide: Text.ElideRight + width: (projectsList.width * 0.15) | 0 + } + } + model: ListModel + { + id: projectsModel + } + Component.onCompleted: + { + projectsModel.append({ name: "Cura", description: catalog.i18nc("@label", "Graphical user interface"), license: "LGPLv3", url: "https://github.com/Ultimaker/Cura" }); + projectsModel.append({ name: "Uranium", description: catalog.i18nc("@label", "Application framework"), license: "LGPLv3", url: "https://github.com/Ultimaker/Uranium" }); + projectsModel.append({ name: "CuraEngine", description: catalog.i18nc("@label", "G-code generator"), license: "AGPLv3", url: "https://github.com/Ultimaker/CuraEngine" }); + projectsModel.append({ name: "libArcus", description: catalog.i18nc("@label", "Interprocess communication library"), license: "LGPLv3", url: "https://github.com/Ultimaker/libArcus" }); + + projectsModel.append({ name: "Python", description: catalog.i18nc("@label", "Programming language"), license: "Python", url: "http://python.org/" }); + projectsModel.append({ name: "Qt5", description: catalog.i18nc("@label", "GUI framework"), license: "LGPLv3", url: "https://www.qt.io/" }); + projectsModel.append({ name: "PyQt", description: catalog.i18nc("@label", "GUI framework bindings"), license: "GPL", url: "https://riverbankcomputing.com/software/pyqt" }); + projectsModel.append({ name: "SIP", description: catalog.i18nc("@label", "C/C++ Binding library"), license: "GPL", url: "https://riverbankcomputing.com/software/sip" }); + projectsModel.append({ name: "Protobuf", description: catalog.i18nc("@label", "Data interchange format"), license: "BSD", url: "https://developers.google.com/protocol-buffers" }); + projectsModel.append({ name: "SciPy", description: catalog.i18nc("@label", "Support library for scientific computing"), license: "BSD-new", url: "https://www.scipy.org/" }); + projectsModel.append({ name: "NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" }); + projectsModel.append({ name: "NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" }); + projectsModel.append({ name: "Shapely", description: catalog.i18nc("@label", "Support library for handling planar objects"), license: "BSD", url: "https://github.com/Toblerity/Shapely" }); + projectsModel.append({ name: "Trimesh", description: catalog.i18nc("@label", "Support library for handling triangular meshes"), license: "MIT", url: "https://trimsh.org" }); + projectsModel.append({ name: "NetworkX", description: catalog.i18nc("@label", "Support library for analysis of complex networks"), license: "3-clause BSD", url: "https://networkx.github.io/" }); + projectsModel.append({ name: "libSavitar", description: catalog.i18nc("@label", "Support library for handling 3MF files"), license: "LGPLv3", url: "https://github.com/ultimaker/libsavitar" }); + projectsModel.append({ name: "libCharon", description: catalog.i18nc("@label", "Support library for file metadata and streaming"), license: "LGPLv3", url: "https://github.com/ultimaker/libcharon" }); + projectsModel.append({ name: "PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" }); + projectsModel.append({ name: "python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" }); + projectsModel.append({ name: "Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" }); + projectsModel.append({ name: "Requests", description: catalog.i18nc("@Label", "Python HTTP library"), license: "GPL", url: "http://docs.python-requests.org" }); + + projectsModel.append({ name: "Noto Sans", description: catalog.i18nc("@label", "Font"), license: "Apache 2.0", url: "https://www.google.com/get/noto/" }); + projectsModel.append({ name: "Font-Awesome-SVG-PNG", description: catalog.i18nc("@label", "SVG icons"), license: "SIL OFL 1.1", url: "https://github.com/encharm/Font-Awesome-SVG-PNG" }); + projectsModel.append({ name: "AppImageKit", description: catalog.i18nc("@label", "Linux cross-distribution application deployment"), license: "MIT", url: "https://github.com/AppImage/AppImageKit" }); + } + } + } + + rightButtons: Button + { + //: Close about dialog button + id: closeButton + text: catalog.i18nc("@action:button","Close"); + + onClicked: base.visible = false; + } +} diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/Dialogs/AddMachineDialog.qml index 0df8b891d9..f00359869c 100644 --- a/resources/qml/AddMachineDialog.qml +++ b/resources/qml/Dialogs/AddMachineDialog.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -73,7 +73,7 @@ UM.Dialog { top: parent.top left: parent.left - topMargin: UM.Theme.getSize("default_margin") + topMargin: UM.Theme.getSize("default_margin").height } text: catalog.i18nc("@title:tab", "Add a printer to Cura") @@ -156,7 +156,6 @@ UM.Dialog anchors.rightMargin: UM.Theme.getSize("default_margin").width width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width sourceSize.height: width color: palette.windowText source: base.activeCategory == section ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_right") @@ -170,7 +169,7 @@ UM.Dialog if (machineList.model.getItem(machineList.currentIndex).section != section) { // Find the first machine from this section - for(var i = 0; i < machineList.model.rowCount(); i++) + for(var i = 0; i < machineList.model.count; i++) { var item = machineList.model.getItem(i); if (item.section == section) @@ -213,28 +212,6 @@ UM.Dialog PropertyChanges { target: machineButton; opacity: 0; height: 0; } } - - transitions: - [ - Transition - { - to: "collapsed"; - SequentialAnimation - { - NumberAnimation { property: "opacity"; duration: 75; } - NumberAnimation { property: "height"; duration: 75; } - } - }, - Transition - { - from: "collapsed"; - SequentialAnimation - { - NumberAnimation { property: "height"; duration: 75; } - NumberAnimation { property: "opacity"; duration: 75; } - } - } - ] } } } @@ -298,7 +275,6 @@ UM.Dialog id: machineName text: getMachineName() width: Math.floor(parent.width * 0.75) - implicitWidth: UM.Theme.getSize("standard_list_input").width maximumLength: 40 //validator: Cura.MachineNameValidator { } //TODO: Gives a segfault in PyQt5.6. For now, we must use a signal on text changed. validator: RegExpValidator diff --git a/resources/qml/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml index 6b1856723b..6b1856723b 100644 --- a/resources/qml/AskOpenAsProjectOrModelsDialog.qml +++ b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml diff --git a/resources/qml/DiscardOrKeepProfileChangesDialog.qml b/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml index afa9fda0bd..afa9fda0bd 100644 --- a/resources/qml/DiscardOrKeepProfileChangesDialog.qml +++ b/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml diff --git a/resources/qml/OpenFilesIncludingProjectsDialog.qml b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml index 3dcd4b6236..3dcd4b6236 100644 --- a/resources/qml/OpenFilesIncludingProjectsDialog.qml +++ b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml diff --git a/resources/qml/WorkspaceSummaryDialog.qml b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml index 1b3a7aac55..35630bd19b 100644 --- a/resources/qml/WorkspaceSummaryDialog.qml +++ b/resources/qml/Dialogs/WorkspaceSummaryDialog.qml @@ -11,6 +11,7 @@ import Cura 1.0 as Cura UM.Dialog { + id: base title: catalog.i18nc("@title:window", "Save Project") minimumWidth: 500 * screenScaleFactor @@ -49,7 +50,7 @@ UM.Dialog UM.SettingDefinitionsModel { id: definitionsModel - containerId: Cura.MachineManager.activeDefinitionId + containerId: base.visible ? Cura.MachineManager.activeDefinitionId: "" showAll: true exclude: ["command_line_settings"] showAncestors: true diff --git a/resources/qml/EngineLog.qml b/resources/qml/EngineLog.qml deleted file mode 100644 index 965587b59e..0000000000 --- a/resources/qml/EngineLog.qml +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.1 as UM - -UM.Dialog -{ - id: dialog; - - //: Engine Log dialog title - title: catalog.i18nc("@title:window","Engine Log"); - - modality: Qt.NonModal; - - TextArea - { - id: textArea - anchors.fill: parent; - - Timer - { - id: updateTimer; - interval: 1000; - running: false; - repeat: true; - onTriggered: textArea.text = CuraApplication.getEngineLog(); - } - UM.I18nCatalog{id: catalog; name:"cura"} - } - - rightButtons: Button - { - //: Close engine log button - text: catalog.i18nc("@action:button","Close"); - onClicked: dialog.visible = false; - } - - onVisibleChanged: - { - if(visible) - { - textArea.text = CuraApplication.getEngineLog(); - updateTimer.start(); - } else - { - updateTimer.stop(); - } - } -} diff --git a/resources/qml/ExpandableComponent.qml b/resources/qml/ExpandableComponent.qml new file mode 100644 index 0000000000..025c63d754 --- /dev/null +++ b/resources/qml/ExpandableComponent.qml @@ -0,0 +1,262 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +import QtGraphicalEffects 1.0 // For the dropshadow + +// The expandable component has 2 major sub components: +// * The headerItem; Always visible and should hold some info about what happens if the component is expanded +// * The contentItem; The content that needs to be shown if the component is expanded. +Item +{ + id: base + + // Enumeration with the different possible alignments of the content with respect of the headerItem + enum ContentAlignment + { + AlignLeft, + AlignRight + } + + // The headerItem holds the QML item that is always displayed. + property alias headerItem: headerItemLoader.sourceComponent + + // The contentItem holds the QML item that is shown when the "open" button is pressed + property alias contentItem: content.contentItem + + property color contentBackgroundColor: UM.Theme.getColor("action_button") + + property color headerBackgroundColor: UM.Theme.getColor("action_button") + property color headerActiveColor: UM.Theme.getColor("secondary") + property color headerHoverColor: UM.Theme.getColor("action_button_hovered") + + property alias enabled: mouseArea.enabled + + // Text to show when this component is disabled + property alias disabledText: disabledLabel.text + + // Defines the alignment of the content with respect of the headerItem, by default to the right + property int contentAlignment: ExpandableComponent.ContentAlignment.AlignRight + + // How much spacing is needed around the contentItem + property alias contentPadding: content.padding + + // Adds a title to the content item + property alias contentHeaderTitle: contentHeader.headerTitle + + // How much spacing is needed for the contentItem by Y coordinate + property var contentSpacingY: UM.Theme.getSize("narrow_margin").width + + // How much padding is needed around the header & button + property alias headerPadding: background.padding + + // What icon should be displayed on the right. + property alias iconSource: collapseButton.source + + property alias iconColor: collapseButton.color + + // The icon size (it's always drawn as a square) + property alias iconSize: collapseButton.height + + // Is the "drawer" open? + property alias expanded: contentContainer.visible + + // What should the radius of the header be. This is also influenced by the headerCornerSide + property alias headerRadius: background.radius + + // On what side should the header corners be shown? 1 is down, 2 is left, 3 is up and 4 is right. + property alias headerCornerSide: background.cornerSide + + property alias headerShadowColor: shadow.color + + property alias enableHeaderShadow: shadow.visible + + property int shadowOffset: 2 + + function toggleContent() + { + contentContainer.visible = !expanded + } + + // Add this binding since the background color is not updated otherwise + Binding + { + target: background + property: "color" + value: + { + return base.enabled ? (expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") + } + } + + // The panel needs to close when it becomes disabled + Connections + { + target: base + onEnabledChanged: + { + if (!base.enabled && expanded) + { + toggleContent() + } + } + } + + implicitHeight: 100 * screenScaleFactor + implicitWidth: 400 * screenScaleFactor + + RoundedRectangle + { + id: background + property real padding: UM.Theme.getSize("default_margin").width + + color: base.enabled ? (base.expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") + anchors.fill: parent + + Label + { + id: disabledLabel + visible: !base.enabled + anchors.fill: parent + leftPadding: background.padding + rightPadding: background.padding + text: "" + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + color: UM.Theme.getColor("text") + wrapMode: Text.WordWrap + } + + Item + { + anchors.fill: parent + visible: base.enabled + + Loader + { + id: headerItemLoader + anchors + { + left: parent.left + right: collapseButton.visible ? collapseButton.left : parent.right + top: parent.top + bottom: parent.bottom + margins: background.padding + } + } + + UM.RecolorImage + { + id: collapseButton + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + margins: background.padding + } + source: UM.Theme.getIcon("pencil") + visible: source != "" + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + color: UM.Theme.getColor("small_button_text") + } + } + + MouseArea + { + id: mouseArea + anchors.fill: parent + onClicked: toggleContent() + hoverEnabled: true + onEntered: background.color = headerHoverColor + onExited: background.color = base.enabled ? (base.expanded ? headerActiveColor : headerBackgroundColor) : UM.Theme.getColor("disabled") + } + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: background + source: background + verticalOffset: base.shadowOffset + visible: true + color: UM.Theme.getColor("action_button_shadow") + // Should always be drawn behind the background. + z: background.z - 1 + } + + Cura.RoundedRectangle + { + id: contentContainer + + visible: false + width: childrenRect.width + height: childrenRect.height + + // Ensure that the content is located directly below the headerItem + y: background.height + base.shadowOffset + base.contentSpacingY + + // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. + // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. + x: contentAlignment == ExpandableComponent.ContentAlignment.AlignRight ? -width + collapseButton.width + headerItemLoader.width + 3 * background.padding : 0 + + cornerSide: Cura.RoundedRectangle.Direction.All + color: contentBackgroundColor + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + + ExpandableComponentHeader + { + id: contentHeader + headerTitle: "" + anchors + { + top: parent.top + right: parent.right + left: parent.left + } + + } + + Control + { + id: content + + anchors.top: contentHeader.bottom + padding: UM.Theme.getSize("default_margin").width + + contentItem: Item {} + + onContentItemChanged: + { + // Since we want the size of the content to be set by the size of the content, + // we need to do it like this. + content.width = contentItem.width + 2 * content.padding + content.height = contentItem.height + 2 * content.padding + } + } + } + + // DO NOT MOVE UP IN THE CODE: This connection has to be here, after the definition of the content item. + // Apparently the order in which these are handled matters and so the height is correctly updated if this is here. + Connections + { + // Since it could be that the content is dynamically populated, we should also take these changes into account. + target: content.contentItem + onWidthChanged: content.width = content.contentItem.width + 2 * content.padding + onHeightChanged: + { + content.height = content.contentItem.height + 2 * content.padding + contentContainer.height = contentHeader.height + content.height + } + } +} diff --git a/resources/qml/ExpandableComponentHeader.qml b/resources/qml/ExpandableComponentHeader.qml new file mode 100644 index 0000000000..94066340e3 --- /dev/null +++ b/resources/qml/ExpandableComponentHeader.qml @@ -0,0 +1,68 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +// Header of the popup +Cura.RoundedRectangle +{ + id: header + + property alias headerTitle: headerLabel.text + + height: UM.Theme.getSize("expandable_component_content_header").height + color: UM.Theme.getColor("secondary") + cornerSide: Cura.RoundedRectangle.Direction.Up + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + + Label + { + id: headerLabel + text: "" + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + color: UM.Theme.getColor("small_button_text") + height: parent.height + + anchors + { + topMargin: UM.Theme.getSize("default_margin").height + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").height + } + } + + Button + { + id: closeButton + width: UM.Theme.getSize("message_close").width + height: UM.Theme.getSize("message_close").height + hoverEnabled: true + + anchors + { + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + + contentItem: UM.RecolorImage + { + anchors.fill: parent + sourceSize.width: width + color: closeButton.hovered ? UM.Theme.getColor("small_button_text_hover") : UM.Theme.getColor("small_button_text") + source: UM.Theme.getIcon("cross1") + } + + background: Item {} + + onClicked: toggleContent() // Will hide the popup item + } +}
\ No newline at end of file diff --git a/resources/qml/ExpandablePopup.qml b/resources/qml/ExpandablePopup.qml new file mode 100644 index 0000000000..2d2665373e --- /dev/null +++ b/resources/qml/ExpandablePopup.qml @@ -0,0 +1,250 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +import QtGraphicalEffects 1.0 // For the dropshadow + +// The expandable component has 2 major sub components: +// * The headerItem; Always visible and should hold some info about what happens if the component is expanded +// * The contentItem; The content that needs to be shown if the component is expanded. +Item +{ + id: base + + // Enumeration with the different possible alignments of the content with respect of the headerItem + enum ContentAlignment + { + AlignLeft, + AlignRight + } + + // The headerItem holds the QML item that is always displayed. + property alias headerItem: headerItemLoader.sourceComponent + + // The contentItem holds the QML item that is shown when the "open" button is pressed + property alias contentItem: content.contentItem + + property color contentBackgroundColor: UM.Theme.getColor("action_button") + + property color headerBackgroundColor: UM.Theme.getColor("action_button") + property color headerActiveColor: UM.Theme.getColor("secondary") + property color headerHoverColor: UM.Theme.getColor("action_button_hovered") + + property alias enabled: mouseArea.enabled + + // Text to show when this component is disabled + property alias disabledText: disabledLabel.text + + // Defines the alignment of the content with respect of the headerItem, by default to the right + property int contentAlignment: ExpandablePopup.ContentAlignment.AlignRight + + // How much spacing is needed around the contentItem + property alias contentPadding: content.padding + + // How much padding is needed around the header & button + property alias headerPadding: background.padding + + // What icon should be displayed on the right. + property alias iconSource: collapseButton.source + + property alias iconColor: collapseButton.color + + // The icon size (it's always drawn as a square) + property alias iconSize: collapseButton.height + + // Is the "drawer" open? + readonly property alias expanded: content.visible + + property alias expandedHighlightColor: expandedHighlight.color + + // What should the radius of the header be. This is also influenced by the headerCornerSide + property alias headerRadius: background.radius + + // On what side should the header corners be shown? 1 is down, 2 is left, 3 is up and 4 is right. + property alias headerCornerSide: background.cornerSide + + // Change the contentItem close behaviour + property alias contentClosePolicy : content.closePolicy + + property alias headerShadowColor: shadow.color + + property alias enableHeaderShadow: shadow.visible + + property int shadowOffset: 2 + + function toggleContent() + { + if (content.visible) + { + content.close() + } + else + { + content.open() + } + } + + // Add this binding since the background color is not updated otherwise + Binding + { + target: background + property: "color" + value: base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") + } + + // The panel needs to close when it becomes disabled + Connections + { + target: base + onEnabledChanged: + { + if (!base.enabled && expanded) + { + toggleContent() + } + } + } + + implicitHeight: 100 * screenScaleFactor + implicitWidth: 400 * screenScaleFactor + + RoundedRectangle + { + id: background + property real padding: UM.Theme.getSize("default_margin").width + + color: base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") + anchors.fill: parent + + Label + { + id: disabledLabel + visible: !base.enabled + leftPadding: background.padding + text: "" + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + color: UM.Theme.getColor("text") + height: parent.height + } + + Item + { + anchors.fill: parent + visible: base.enabled + + Loader + { + id: headerItemLoader + anchors + { + left: parent.left + right: collapseButton.visible ? collapseButton.left : parent.right + top: parent.top + bottom: parent.bottom + margins: background.padding + } + } + + // A highlight that is shown when the content is expanded + Rectangle + { + id: expandedHighlight + width: parent.width + height: UM.Theme.getSize("thick_lining").height + color: UM.Theme.getColor("primary") + visible: expanded + anchors.bottom: parent.bottom + } + + UM.RecolorImage + { + id: collapseButton + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + margins: background.padding + } + source: expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + visible: source != "" + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + color: UM.Theme.getColor("small_button_text") + } + } + + MouseArea + { + id: mouseArea + anchors.fill: parent + onClicked: toggleContent() + hoverEnabled: true + onEntered: background.color = headerHoverColor + onExited: background.color = base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") + } + } + + DropShadow + { + id: shadow + // Don't blur the shadow + radius: 0 + anchors.fill: background + source: background + verticalOffset: base.shadowOffset + visible: true + color: UM.Theme.getColor("action_button_shadow") + // Should always be drawn behind the background. + z: background.z - 1 + } + + Popup + { + id: content + + // Ensure that the content is located directly below the headerItem + y: background.height + base.shadowOffset + + // Make the content aligned with the rest, using the property contentAlignment to decide whether is right or left. + // In case of right alignment, the 3x padding is due to left, right and padding between the button & text. + x: contentAlignment == ExpandablePopup.ContentAlignment.AlignRight ? -width + collapseButton.width + headerItemLoader.width + 3 * background.padding : 0 + padding: UM.Theme.getSize("default_margin").width + closePolicy: Popup.CloseOnPressOutsideParent + + background: Cura.RoundedRectangle + { + cornerSide: Cura.RoundedRectangle.Direction.Down + color: contentBackgroundColor + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + radius: UM.Theme.getSize("default_radius").width + } + + contentItem: Item {} + + onContentItemChanged: + { + // Since we want the size of the content to be set by the size of the content, + // we need to do it like this. + content.width = contentItem.width + 2 * content.padding + content.height = contentItem.height + 2 * content.padding + } + } + + // DO NOT MOVE UP IN THE CODE: This connection has to be here, after the definition of the content item. + // Apparently the order in which these are handled matters and so the height is correctly updated if this is here. + Connections + { + // Since it could be that the content is dynamically populated, we should also take these changes into account. + target: content.contentItem + onWidthChanged: content.width = content.contentItem.width + 2 * content.padding + onHeightChanged: content.height = content.contentItem.height + 2 * content.padding + } +} diff --git a/resources/qml/ExtruderButton.qml b/resources/qml/ExtruderButton.qml index 2c1b80047e..feb399d528 100644 --- a/resources/qml/ExtruderButton.qml +++ b/resources/qml/ExtruderButton.qml @@ -2,80 +2,32 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 -import QtQuick.Controls 1.1 +import QtQuick.Controls 2.0 import UM 1.2 as UM import Cura 1.0 as Cura -Button +Cura.ToolbarButton { id: base - property var extruder; + property var extruder text: catalog.i18ncp("@label %1 is filled in with the name of an extruder", "Print Selected Model with %1", "Print Selected Models with %1", UM.Selection.selectionCount).arg(extruder.name) - style: UM.Theme.styles.tool_button; - iconSource: UM.Theme.getIcon("extruder_button") - checked: Cura.ExtruderManager.selectedObjectExtruders.indexOf(extruder.id) != -1 enabled: UM.Selection.hasSelection && extruder.stack.isEnabled - property color customColor: base.hovered ? UM.Theme.getColor("button_hover") : UM.Theme.getColor("button"); - - Rectangle - { - anchors.fill: parent - anchors.margins: UM.Theme.getSize("default_lining").width; - - color: "transparent" - - border.width: base.checked ? UM.Theme.getSize("default_lining").width : 0; - border.color: UM.Theme.getColor("button_text") - } - - Item + toolItem: ExtruderIcon { - anchors.centerIn: parent - width: UM.Theme.getSize("default_margin").width - height: UM.Theme.getSize("default_margin").height - - Label - { - anchors.centerIn: parent; - text: index + 1; - color: parent.enabled ? UM.Theme.getColor("button_text") : UM.Theme.getColor("button_disabled_text") - font: UM.Theme.getFont("default_bold"); - } - } - - // Material colour circle - // Only draw the filling colour of the material inside the SVG border. - Rectangle - { - anchors - { - right: parent.right - top: parent.top - rightMargin: UM.Theme.getSize("extruder_button_material_margin").width - topMargin: UM.Theme.getSize("extruder_button_material_margin").height - } - - color: model.color - - width: UM.Theme.getSize("extruder_button_material").width - height: UM.Theme.getSize("extruder_button_material").height - radius: Math.round(width / 2) - - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("extruder_button_material_border") - - opacity: !base.enabled ? 0.2 : 1.0 + materialColor: extruder.color + extruderEnabled: extruder.stack.isEnabled + property int index: extruder.index } onClicked: { forceActiveFocus() //First grab focus, so all the text fields are updated - CuraActions.setExtruderForSelection(extruder.id); + CuraActions.setExtruderForSelection(extruder.id) } } diff --git a/resources/qml/ExtruderIcon.qml b/resources/qml/ExtruderIcon.qml new file mode 100644 index 0000000000..015ebea52e --- /dev/null +++ b/resources/qml/ExtruderIcon.qml @@ -0,0 +1,72 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.1 +import UM 1.2 as UM + +Item +{ + id: extruderIconItem + + implicitWidth: UM.Theme.getSize("extruder_icon").width + implicitHeight: UM.Theme.getSize("extruder_icon").height + + property bool checked: true + property color materialColor + property alias textColor: extruderNumberText.color + property bool extruderEnabled: true + + UM.RecolorImage + { + id: mainIcon + anchors.fill: parent + + source: UM.Theme.getIcon("extruder_button") + color: extruderEnabled ? materialColor: UM.Theme.getColor("disabled") + } + + Rectangle + { + id: extruderNumberCircle + + width: height + height: Math.round(parent.height / 2) + radius: Math.round(width / 2) + color: UM.Theme.getColor("toolbar_background") + + anchors + { + horizontalCenter: parent.horizontalCenter + top: parent.top + // The circle needs to be slightly off center (so it sits in the middle of the square bit of the icon) + topMargin: (parent.height - height) / 2 - 0.1 * parent.height + } + + Label + { + id: extruderNumberText + anchors.centerIn: parent + text: index + 1 + font: UM.Theme.getFont("small") + color: UM.Theme.getColor("text") + width: contentWidth + height: contentHeight + visible: extruderEnabled + renderType: Text.NativeRendering + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + UM.RecolorImage + { + id: disabledIcon + anchors.fill: parent + anchors.margins: UM.Theme.getSize("thick_lining").width + sourceSize.height: width + source: UM.Theme.getIcon("cross1") + visible: !extruderEnabled + color: UM.Theme.getColor("text") + } + } +}
\ No newline at end of file diff --git a/resources/qml/IconWithText.qml b/resources/qml/IconWithText.qml new file mode 100644 index 0000000000..24b6dc7fe2 --- /dev/null +++ b/resources/qml/IconWithText.qml @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +// Reusable component that holds an (re-colorable) icon on the left with some text on the right. +// This component is also designed to be used with layouts. It will use the width of the text + icon as preferred width +// It sets the icon size + half of the content as its minium width (in which case it will elide the text) +Item +{ + property alias source: icon.source + property alias iconSize: icon.width + property alias iconColor: icon.color + property alias color: label.color + property alias text: label.text + property alias font: label.font + property real margin: UM.Theme.getSize("narrow_margin").width + + // These properties can be used in combination with layouts. + readonly property real contentWidth: icon.width + margin + label.contentWidth + readonly property real minContentWidth: Math.round(icon.width + margin + 0.5 * label.contentWidth) + + Layout.minimumWidth: minContentWidth + Layout.preferredWidth: contentWidth + Layout.fillHeight: true + Layout.fillWidth: true + + implicitWidth: icon.width + 100 + implicitHeight: icon.height + + UM.RecolorImage + { + id: icon + width: UM.Theme.getSize("section_icon").width + height: width + + color: UM.Theme.getColor("icon") + + anchors + { + left: parent.left + verticalCenter: parent.verticalCenter + } + } + + Label + { + id: label + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + anchors + { + left: icon.right + right: parent.right + top: parent.top + bottom: parent.bottom + rightMargin: 0 + margins: margin + } + } +}
\ No newline at end of file diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml index 1a5b604886..144616c22d 100644 --- a/resources/qml/JobSpecs.qml +++ b/resources/qml/JobSpecs.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -9,141 +9,145 @@ import QtQuick.Layouts 1.1 import UM 1.1 as UM import Cura 1.0 as Cura -Item { +Item +{ id: base property bool activity: CuraApplication.platformActivity property string fileBaseName: PrintInformation.baseName - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog + { + id: catalog + name: "cura" + } + width: childrenRect.width height: childrenRect.height - onActivityChanged: { - if (activity == false) { + onActivityChanged: + { + if (!activity) + { //When there is no mesh in the buildplate; the printJobTextField is set to an empty string so it doesn't set an empty string as a jobName (which is later used for saving the file) - PrintInformation.baseName = '' + PrintInformation.baseName = "" } } - Rectangle + Item { id: jobNameRow anchors.top: parent.top - anchors.right: parent.right + anchors.left: parent.left height: UM.Theme.getSize("jobspecs_line").height - visible: base.activity - Item + Button { - width: parent.width - height: parent.height + id: printJobPencilIcon + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + width: UM.Theme.getSize("save_button_specs_icons").width + height: UM.Theme.getSize("save_button_specs_icons").height - Button + onClicked: { - id: printJobPencilIcon - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - width: UM.Theme.getSize("save_button_specs_icons").width - height: UM.Theme.getSize("save_button_specs_icons").height + printJobTextfield.selectAll() + printJobTextfield.focus = true + } - onClicked: - { - printJobTextfield.selectAll(); - printJobTextfield.focus = true; - } - style: ButtonStyle + style: ButtonStyle + { + background: Item { - background: Item + UM.RecolorImage { - UM.RecolorImage - { - width: UM.Theme.getSize("save_button_specs_icons").width; - height: UM.Theme.getSize("save_button_specs_icons").height; - sourceSize.width: width; - sourceSize.height: width; - color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene"); - source: UM.Theme.getIcon("pencil"); - } + width: UM.Theme.getSize("save_button_specs_icons").width + height: UM.Theme.getSize("save_button_specs_icons").height + sourceSize.width: width + sourceSize.height: width + color: control.hovered ? UM.Theme.getColor("text_scene_hover") : UM.Theme.getColor("text_scene") + source: UM.Theme.getIcon("pencil") } } } + } + + TextField + { + id: printJobTextfield + anchors.left: printJobPencilIcon.right + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + height: UM.Theme.getSize("jobspecs_line").height + width: Math.max(__contentWidth + UM.Theme.getSize("default_margin").width, 50) + maximumLength: 120 + text: PrintInformation.jobName + horizontalAlignment: TextInput.AlignLeft + + onEditingFinished: + { + var new_name = text == "" ? catalog.i18nc("@text Print job name", "Untitled") : text + PrintInformation.setJobName(new_name, true) + printJobTextfield.focus = false + } + + validator: RegExpValidator { + regExp: /^[^\\\/\*\?\|\[\]]*$/ + } - TextField + style: TextFieldStyle { - id: printJobTextfield - anchors.right: printJobPencilIcon.left - anchors.rightMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - height: UM.Theme.getSize("jobspecs_line").height - width: Math.max(__contentWidth + UM.Theme.getSize("default_margin").width, 50) - maximumLength: 120 - property int unremovableSpacing: 5 - text: PrintInformation.jobName - horizontalAlignment: TextInput.AlignRight - onEditingFinished: { - var new_name = text == "" ? catalog.i18nc("@text Print job name", "Untitled") : text; - PrintInformation.setJobName(new_name, true); - printJobTextfield.focus = false; - } - validator: RegExpValidator { - regExp: /^[^\\\/\*\?\|\[\]]*$/ - } - style: TextFieldStyle{ - textColor: UM.Theme.getColor("text_scene"); - font: UM.Theme.getFont("default_bold"); - background: Rectangle { - opacity: 0 - border.width: 0 - } + textColor: UM.Theme.getColor("text_scene") + font: UM.Theme.getFont("default") + background: Rectangle + { + opacity: 0 + border.width: 0 } } } } - Row { - id: additionalComponentsRow - anchors.top: jobNameRow.bottom - anchors.right: parent.right - } - Label { id: boundingSpec anchors.top: jobNameRow.bottom - anchors.right: additionalComponentsRow.left - anchors.rightMargin: - { - if (additionalComponentsRow.width > 0) - { - return UM.Theme.getSize("default_margin").width - } - else - { - return 0; - } - } + anchors.left: parent.left + height: UM.Theme.getSize("jobspecs_line").height verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("text_scene") text: CuraApplication.getSceneBoundingBoxString } - Component.onCompleted: { + Row + { + id: additionalComponentsRow + anchors.top: boundingSpec.top + anchors.bottom: boundingSpec.bottom + anchors.left: boundingSpec.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + } + + Component.onCompleted: + { base.addAdditionalComponents("jobSpecsButton") } - Connections { + Connections + { target: CuraApplication onAdditionalComponentsChanged: base.addAdditionalComponents("jobSpecsButton") } - function addAdditionalComponents (areaId) { - if(areaId == "jobSpecsButton") { - for (var component in CuraApplication.additionalComponents["jobSpecsButton"]) { + function addAdditionalComponents(areaId) + { + if (areaId == "jobSpecsButton") + { + for (var component in CuraApplication.additionalComponents["jobSpecsButton"]) + { CuraApplication.additionalComponents["jobSpecsButton"][component].parent = additionalComponentsRow } } } - } diff --git a/resources/qml/MachineSelection.qml b/resources/qml/MachineSelection.qml deleted file mode 100644 index 7a8a6b476b..0000000000 --- a/resources/qml/MachineSelection.qml +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.2 as UM -import Cura 1.0 as Cura -import "Menus" - -ToolButton -{ - id: base - property bool isNetworkPrinter: Cura.MachineManager.activeMachineNetworkKey != "" - property bool printerConnected: Cura.MachineManager.printerConnected - property var printerStatus: Cura.MachineManager.printerConnected ? "connected" : "disconnected" - text: isNetworkPrinter ? Cura.MachineManager.activeMachineNetworkGroupName : Cura.MachineManager.activeMachineName - - tooltip: Cura.MachineManager.activeMachineName - - style: ButtonStyle - { - background: Rectangle - { - color: - { - if (control.pressed) { - return UM.Theme.getColor("sidebar_header_active"); - } - else if (control.hovered) { - return UM.Theme.getColor("sidebar_header_hover"); - } - else { - return UM.Theme.getColor("sidebar_header_bar"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - - UM.RecolorImage - { - id: downArrow - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.getColor("text_emphasis") - source: UM.Theme.getIcon("arrow_bottom") - } - - PrinterStatusIcon - { - id: printerStatusIcon - visible: printerConnected || isNetworkPrinter - status: printerStatus - anchors - { - verticalCenter: parent.verticalCenter - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - } - } - - Label - { - id: sidebarComboBoxLabel - color: UM.Theme.getColor("sidebar_header_text_active") - text: control.text; - elide: Text.ElideRight; - anchors.left: printerStatusIcon.visible ? printerStatusIcon.right : parent.left; - anchors.leftMargin: printerStatusIcon.visible ? UM.Theme.getSize("sidebar_lining").width : UM.Theme.getSize("sidebar_margin").width - anchors.right: downArrow.left; - anchors.rightMargin: control.rightMargin; - anchors.verticalCenter: parent.verticalCenter; - font: UM.Theme.getFont("medium_bold") - } - } - label: Label {} - } - - menu: PrinterMenu { } -} diff --git a/resources/qml/MainWindow/ApplicationMenu.qml b/resources/qml/MainWindow/ApplicationMenu.qml new file mode 100644 index 0000000000..a694b8e403 --- /dev/null +++ b/resources/qml/MainWindow/ApplicationMenu.qml @@ -0,0 +1,163 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.2 + +import UM 1.3 as UM +import Cura 1.1 as Cura + +import "../Menus" +import "../Dialogs" + +Item +{ + id: menu + width: applicationMenu.width + height: applicationMenu.height + property alias window: applicationMenu.window + + UM.ApplicationMenu + { + id: applicationMenu + + FileMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&File") } + + Menu + { + title: catalog.i18nc("@title:menu menubar:toplevel", "&Edit") + + MenuItem { action: Cura.Actions.undo } + MenuItem { action: Cura.Actions.redo } + MenuSeparator { } + MenuItem { action: Cura.Actions.selectAll } + MenuItem { action: Cura.Actions.arrangeAll } + MenuItem { action: Cura.Actions.deleteSelection } + MenuItem { action: Cura.Actions.deleteAll } + MenuItem { action: Cura.Actions.resetAllTranslation } + MenuItem { action: Cura.Actions.resetAll } + MenuSeparator { } + MenuItem { action: Cura.Actions.groupObjects } + MenuItem { action: Cura.Actions.mergeObjects } + MenuItem { action: Cura.Actions.unGroupObjects } + } + + ViewMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&View") } + + SettingsMenu { title: catalog.i18nc("@title:menu menubar:toplevel", "&Settings") } + + Menu + { + id: extensionMenu + title: catalog.i18nc("@title:menu menubar:toplevel", "E&xtensions") + + Instantiator + { + id: extensions + model: UM.ExtensionModel { } + + Menu + { + id: sub_menu + title: model.name; + visible: actions != null + enabled: actions != null + Instantiator + { + model: actions + MenuItem + { + text: model.text + onTriggered: extensions.model.subMenuTriggered(name, model.text) + } + onObjectAdded: sub_menu.insertItem(index, object) + onObjectRemoved: sub_menu.removeItem(object) + } + } + + onObjectAdded: extensionMenu.insertItem(index, object) + onObjectRemoved: extensionMenu.removeItem(object) + } + } + + Menu + { + id: preferencesMenu + title: catalog.i18nc("@title:menu menubar:toplevel", "P&references") + + MenuItem { action: Cura.Actions.preferences } + } + + Menu + { + id: helpMenu + title: catalog.i18nc("@title:menu menubar:toplevel", "&Help") + + MenuItem { action: Cura.Actions.showProfileFolder } + MenuItem { action: Cura.Actions.documentation } + MenuItem { action: Cura.Actions.reportBug } + MenuSeparator { } + MenuItem { action: Cura.Actions.about } + } + } + + // ############################################################################################### + // Definition of other components that are linked to the menus + // ############################################################################################### + + WorkspaceSummaryDialog + { + id: saveWorkspaceDialog + property var args + onYes: UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) + } + + MessageDialog + { + id: newProjectDialog + modality: Qt.ApplicationModal + title: catalog.i18nc("@title:window", "New project") + text: catalog.i18nc("@info:question", "Are you sure you want to start a new project? This will clear the build plate and any unsaved settings.") + standardButtons: StandardButton.Yes | StandardButton.No + icon: StandardIcon.Question + onYes: + { + CuraApplication.deleteAll(); + Cura.Actions.resetProfile.trigger(); + } + } + + UM.ExtensionModel + { + id: curaExtensions + } + + // ############################################################################################### + // Definition of all the connections + // ############################################################################################### + + Connections + { + target: Cura.Actions.newProject + onTriggered: + { + if(Printer.platformActivity || Cura.MachineManager.hasUserSettings) + { + newProjectDialog.visible = true + } + } + } + + // show the plugin browser dialog + Connections + { + target: Cura.Actions.browsePackages + onTriggered: + { + curaExtensions.callExtensionMethod("Toolbox", "browsePackages") + } + } +}
\ No newline at end of file diff --git a/resources/qml/MainWindow/MainWindowHeader.qml b/resources/qml/MainWindow/MainWindowHeader.qml new file mode 100644 index 0000000000..3e296ead40 --- /dev/null +++ b/resources/qml/MainWindow/MainWindowHeader.qml @@ -0,0 +1,129 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 as Controls2 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.1 + +import UM 1.4 as UM +import Cura 1.0 as Cura +import QtGraphicalEffects 1.0 + +import "../Account" + +Item +{ + id: base + + implicitHeight: UM.Theme.getSize("main_window_header").height + implicitWidth: UM.Theme.getSize("main_window_header").width + + Image + { + id: logo + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.verticalCenter: parent.verticalCenter + + source: UM.Theme.getImage("logo") + width: UM.Theme.getSize("logo").width + height: UM.Theme.getSize("logo").height + + sourceSize.width: width + sourceSize.height: height + } + + Row + { + id: stagesListContainer + spacing: Math.round(UM.Theme.getSize("default_margin").width / 2) + + anchors + { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.verticalCenter + leftMargin: UM.Theme.getSize("default_margin").width + } + + // The main window header is dynamically filled with all available stages + Repeater + { + id: stagesHeader + + model: UM.StageModel { } + + delegate: Button + { + text: model.name.toUpperCase() + checkable: true + checked: UM.Controller.activeStage !== null && model.id == UM.Controller.activeStage.stageId + + anchors.verticalCenter: parent.verticalCenter + exclusiveGroup: mainWindowHeaderMenuGroup + style: UM.Theme.styles.main_window_header_tab + height: UM.Theme.getSize("main_window_header_button").height + iconSource: model.stage.iconSource + + property color overlayColor: "transparent" + property string overlayIconSource: "" + + // This is a trick to assure the activeStage is correctly changed. It doesn't work propertly if done in the onClicked (see CURA-6028) + MouseArea + { + anchors.fill: parent + onClicked: UM.Controller.setActiveStage(model.id) + } + } + } + + ExclusiveGroup { id: mainWindowHeaderMenuGroup } + } + + // Shortcut button to quick access the Toolbox + Controls2.Button + { + id: marketplaceButton + text: catalog.i18nc("@action:button", "Marketplace") + height: Math.round(0.5 * UM.Theme.getSize("main_window_header").height) + onClicked: Cura.Actions.browsePackages.trigger() + + hoverEnabled: true + + background: Rectangle + { + radius: UM.Theme.getSize("action_button_radius").width + color: marketplaceButton.hovered ? UM.Theme.getColor("primary_text") : UM.Theme.getColor("main_window_header_background") + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("primary_text") + } + + contentItem: Label + { + id: label + text: marketplaceButton.text + font: UM.Theme.getFont("default") + color: marketplaceButton.hovered ? UM.Theme.getColor("main_window_header_background") : UM.Theme.getColor("primary_text") + width: contentWidth + verticalAlignment: Text.AlignVCenter + renderType: Text.NativeRendering + } + + anchors + { + right: accountWidget.left + rightMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + } + + AccountWidget + { + id: accountWidget + anchors + { + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + } + } +} diff --git a/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml new file mode 100644 index 0000000000..18409dd43a --- /dev/null +++ b/resources/qml/Menus/ConfigurationMenu/AutoConfiguration.qml @@ -0,0 +1,39 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Item +{ + width: parent.width + height: childrenRect.height + + Label + { + id: header + text: catalog.i18nc("@header", "Configurations") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("small_button_text") + height: contentHeight + renderType: Text.NativeRendering + + anchors + { + left: parent.left + right: parent.right + } + } + + ConfigurationListView + { + anchors.top: header.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").width + width: parent.width + + outputDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + } +}
\ No newline at end of file diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml index 942dd81d9c..058c1ff4c2 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationItem.qml @@ -7,51 +7,153 @@ import QtQuick.Controls 2.0 import UM 1.2 as UM import Cura 1.0 as Cura -Rectangle +Button { id: configurationItem property var configuration: null - property var selected: false - signal activateConfiguration() + hoverEnabled: isValidMaterial - height: childrenRect.height - border.width: UM.Theme.getSize("default_lining").width - border.color: updateBorderColor() - color: selected ? UM.Theme.getColor("configuration_item_active") : UM.Theme.getColor("configuration_item") - property var textColor: selected ? UM.Theme.getColor("configuration_item_text_active") : UM.Theme.getColor("configuration_item_text") + property bool isValidMaterial: + { + var extruderConfigurations = configuration.extruderConfigurations + + for (var index in extruderConfigurations) + { + var name = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : "" + + if (name == "" || name == "Unknown") + { + return false + } + } + return true + } - function updateBorderColor() + background: Rectangle { - border.color = selected ? UM.Theme.getColor("configuration_item_border_active") : UM.Theme.getColor("configuration_item_border") + color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") + border.color: parent.checked ? UM.Theme.getColor("primary") : UM.Theme.getColor("lining") + border.width: UM.Theme.getSize("default_lining").width + radius: UM.Theme.getSize("default_radius").width } - Column + contentItem: Column { id: contentColumn width: parent.width padding: UM.Theme.getSize("default_margin").width - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) + spacing: UM.Theme.getSize("narrow_margin").height Row { id: extruderRow - width: parent.width - 2 * parent.padding + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("wide_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width + } height: childrenRect.height - spacing: UM.Theme.getSize("default_margin").width Repeater { id: repeater - height: childrenRect.height model: configuration.extruderConfigurations + delegate: PrintCoreConfiguration { width: Math.round(parent.width / 2) printCoreConfiguration: modelData - mainColor: textColor + visible: configurationItem.isValidMaterial + } + } + + // Unknown material + Item + { + id: unknownMaterial + height: unknownMaterialMessage.height + UM.Theme.getSize("thin_margin").width / 2 + width: parent.width + + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("thin_margin").width / 2 + + visible: !configurationItem.isValidMaterial + + UM.RecolorImage + { + id: icon + anchors.verticalCenter: unknownMaterialMessage.verticalCenter + + source: UM.Theme.getIcon("warning") + color: UM.Theme.getColor("warning") + width: UM.Theme.getSize("section_icon").width + height: width + } + + Label + { + id: unknownMaterialMessage + text: + { + var extruderConfigurations = configuration.extruderConfigurations + var unknownMaterials = [] + for (var index in extruderConfigurations) + { + var name = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : "" + if (name == "" || name == "Unknown") + { + var materialType = extruderConfigurations[index].material.type + if (extruderConfigurations[index].material.type == "") + { + materialType = "Unknown" + } + + var brand = extruderConfigurations[index].material.brand + if (brand == "") + { + brand = "Unknown" + } + + name = materialType + " (" + brand + ")" + unknownMaterials.push(name) + } + } + + unknownMaterials = "<b>" + unknownMaterials + "</b>" + var draftResult = catalog.i18nc("@label", "This configuration is not available because %1 is not recognized. Please visit %2 to download the correct material profile."); + var result = draftResult.arg(unknownMaterials).arg("<a href=' '>" + catalog.i18nc("@label","Marketplace") + "</a> ") + + return result + } + width: extruderRow.width + + anchors.left: icon.right + anchors.right: unknownMaterial.right + anchors.leftMargin: UM.Theme.getSize("wide_margin").height + anchors.top: unknownMaterial.top + + wrapMode: Text.WordWrap + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + linkColor: UM.Theme.getColor("text_link") + + onLinkActivated: + { + Cura.Actions.browsePackages.trigger() + } + } + + MouseArea + { + anchors.fill: parent + cursorShape: unknownMaterialMessage.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor + acceptedButtons: Qt.NoButton } } } @@ -62,63 +164,38 @@ Rectangle id: separator visible: buildplateInformation.visible - width: parent.width - 2 * parent.padding - height: visible ? Math.round(UM.Theme.getSize("sidebar_lining_thin").height / 2) : 0 - color: textColor + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("wide_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width + } + height: visible ? Math.round(UM.Theme.getSize("default_lining").height / 2) : 0 + color: UM.Theme.getColor("lining") } Item { id: buildplateInformation - width: parent.width - 2 * parent.padding - height: childrenRect.height - visible: configuration.buildplateConfiguration != "" - UM.RecolorImage { - id: buildplateIcon - anchors.left: parent.left - width: UM.Theme.getSize("topbar_button_icon").width - height: UM.Theme.getSize("topbar_button_icon").height - sourceSize.width: width - sourceSize.height: height - source: UM.Theme.getIcon("buildplate") - color: textColor - } - - Label + anchors { - id: buildplateLabel - anchors.left: buildplateIcon.right - anchors.verticalCenter: buildplateIcon.verticalCenter - anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").height / 2) - text: configuration.buildplateConfiguration - renderType: Text.NativeRendering - color: textColor + left: parent.left + leftMargin: UM.Theme.getSize("wide_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width } - } - } + height: childrenRect.height + visible: configuration.buildplateConfiguration != "" && false //Buildplate is disabled as long as we have no printers that properly support buildplate swapping (so we can't test). - MouseArea - { - id: mouse - anchors.fill: parent - onClicked: activateConfiguration() - cursorShape: Qt.PointingHandCursor - hoverEnabled: true - onEntered: - { - parent.border.color = UM.Theme.getColor("configuration_item_border_hover") - if (configurationItem.selected == false) - { - configurationItem.color = UM.Theme.getColor("sidebar_lining") - } - } - onExited: - { - updateBorderColor() - if (configurationItem.selected == false) + // Show the type of buildplate. The first letter is capitalized + Cura.IconWithText { - configurationItem.color = UM.Theme.getColor("configuration_item") + id: buildplateLabel + source: UM.Theme.getIcon("buildplate") + text: configuration.buildplateConfiguration.charAt(0).toUpperCase() + configuration.buildplateConfiguration.substr(1) + anchors.left: parent.left } } } @@ -126,24 +203,22 @@ Rectangle Connections { target: Cura.MachineManager - onCurrentConfigurationChanged: { - configurationItem.selected = Cura.MachineManager.matchesConfiguration(configuration) - updateBorderColor() + onCurrentConfigurationChanged: + { + configurationItem.checked = Cura.MachineManager.matchesConfiguration(configuration) } } Component.onCompleted: { - configurationItem.selected = Cura.MachineManager.matchesConfiguration(configuration) - updateBorderColor() + configurationItem.checked = Cura.MachineManager.matchesConfiguration(configuration) } - onVisibleChanged: + onClicked: { - if(visible) + if(isValidMaterial) { - // I cannot trigger function updateBorderColor() after visibility change - color = selected ? UM.Theme.getColor("configuration_item_active") : UM.Theme.getColor("configuration_item") + Cura.MachineManager.applyRemoteConfiguration(configuration); } } -}
\ No newline at end of file +} diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml index 7aaf87b4df..15d882fdf5 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml @@ -2,85 +2,121 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 +import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura -Column +Item { id: base property var outputDevice: null - property var computedHeight: container.height + configurationListHeading.height + 3 * padding - height: childrenRect.height + 2 * padding - padding: UM.Theme.getSize("default_margin").width - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) + height: childrenRect.height function forceModelUpdate() { - // FIXME For now the model should be removed and then created again, otherwise changes in the printer don't automatically update the UI + // FIXME For now the model has to be removed and then created again, otherwise changes in the printer don't automatically update the UI configurationList.model = [] - if(outputDevice) + if (outputDevice) { configurationList.model = outputDevice.uniqueConfigurations } } - Label + // This component will appear when there are no configurations (e.g. when losing connection or when they are being loaded) + Item { - id: configurationListHeading - text: catalog.i18nc("@label:header configurations", "Available configurations") - font: UM.Theme.getFont("large") - width: parent.width - 2 * parent.padding - color: UM.Theme.getColor("configuration_item_text") - } + width: parent.width + visible: configurationList.model.length == 0 + height: label.height + UM.Theme.getSize("wide_margin").height + anchors.top: parent.top + anchors.topMargin: UM.Theme.getSize("default_margin").height - Component - { - id: sectionHeading - Rectangle + UM.RecolorImage { - height: childrenRect.height + UM.Theme.getSize("default_margin").height - Label - { - text: section - font: UM.Theme.getFont("default_bold") - color: UM.Theme.getColor("configuration_item_text") - } + id: icon + + anchors.left: parent.left + anchors.verticalCenter: label.verticalCenter + + source: UM.Theme.getIcon("warning") + color: UM.Theme.getColor("warning") + width: UM.Theme.getSize("section_icon").width + height: width + } + + Label + { + id: label + anchors.left: icon.right + anchors.right: parent.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + // There are two cases that we want to diferenciate, one is when Cura is loading the configurations and the + // other when the connection was lost + text: Cura.MachineManager.printerConnected ? + catalog.i18nc("@label", "Loading available configurations from the printer...") : + catalog.i18nc("@label", "The configurations are not available because the printer is disconnected.") + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("default") + renderType: Text.NativeRendering + wrapMode: Text.WordWrap } } ScrollView { id: container - width: parent.width - parent.padding - height: Math.min(configurationList.contentHeight, 350 * screenScaleFactor) + width: parent.width + readonly property int maximumHeight: 350 * screenScaleFactor + height: Math.round(Math.min(configurationList.height, maximumHeight)) + contentHeight: configurationList.height + clip: true - style: UM.Theme.styles.scrollview - __wheelAreaScrollSpeed: 75 // Scroll three lines in one scroll event + ScrollBar.vertical.policy: (configurationList.height > maximumHeight) ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff //The AsNeeded policy also hides it when the cursor is away, and we don't want that. + ScrollBar.vertical.background: Rectangle + { + implicitWidth: UM.Theme.getSize("scrollbar").width + radius: width / 2 + color: UM.Theme.getColor("scrollbar_background") + } + ScrollBar.vertical.contentItem: Rectangle + { + implicitWidth: UM.Theme.getSize("scrollbar").width + radius: width / 2 + color: UM.Theme.getColor(parent.pressed ? "scrollbar_handle_down" : parent.hovered ? "scrollbar_handle_hover" : "scrollbar_handle") + } + + ButtonGroup + { + buttons: configurationList.children + } ListView { id: configurationList - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) - width: container.width - contentHeight: childrenRect.height + spacing: UM.Theme.getSize("narrow_margin").height + width: container.width - ((height > container.maximumHeight) ? container.ScrollBar.vertical.background.width : 0) //Make room for scroll bar if there is any. + height: childrenRect.height section.property: "modelData.printerType" section.criteria: ViewSection.FullString - section.delegate: sectionHeading + section.delegate: Item + { + height: printerTypeLabel.height + UM.Theme.getSize("wide_margin").height //Causes a default margin above the label and a default margin below the label. + Cura.PrinterTypeLabel + { + id: printerTypeLabel + text: Cura.MachineManager.getAbbreviatedMachineName(section) + anchors.verticalCenter: parent.verticalCenter //One default margin above and one below. + } + } model: (outputDevice != null) ? outputDevice.uniqueConfigurations : [] + delegate: ConfigurationItem { - width: parent.width - UM.Theme.getSize("default_margin").width + width: parent.width configuration: modelData - onActivateConfiguration: - { - switchPopupState() - Cura.MachineManager.applyRemoteConfiguration(configuration) - } } } } @@ -102,4 +138,4 @@ Column forceModelUpdate() } } -}
\ No newline at end of file +} diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml new file mode 100644 index 0000000000..1e3b48b1df --- /dev/null +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationMenu.qml @@ -0,0 +1,292 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +/** + * Menu that allows you to select the configuration of the current printer, such + * as the nozzle sizes and materials in each extruder. + */ +Cura.ExpandablePopup +{ + id: base + + property var extrudersModel: CuraApplication.getExtrudersModel() + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + enum ConfigurationMethod + { + Auto, + Custom + } + + contentPadding: UM.Theme.getSize("default_lining").width + enabled: Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants || Cura.MachineManager.hasVariantBuildplates; //Only let it drop down if there is any configuration that you could change. + + headerItem: Item + { + // Horizontal list that shows the extruders and their materials + ListView + { + id: extrudersList + + orientation: ListView.Horizontal + anchors.fill: parent + model: extrudersModel + visible: Cura.MachineManager.hasMaterials + + delegate: Item + { + height: parent.height + width: Math.round(ListView.view.width / extrudersModel.count) + + // Extruder icon. Shows extruder index and has the same color as the active material. + Cura.ExtruderIcon + { + id: extruderIcon + materialColor: model.color + extruderEnabled: model.enabled + height: parent.height + width: height + } + + // Label for the brand of the material + Label + { + id: typeAndBrandNameLabel + + text: model.material_brand + " " + model.material + elide: Text.ElideRight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + top: extruderIcon.top + left: extruderIcon.right + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + } + } + // Label that shows the name of the variant + Label + { + id: variantLabel + + visible: Cura.MachineManager.hasVariants + + text: model.variant + elide: Text.ElideRight + font: UM.Theme.getFont("default_bold") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + anchors + { + left: extruderIcon.right + leftMargin: UM.Theme.getSize("default_margin").width + top: typeAndBrandNameLabel.bottom + } + } + } + } + + //Placeholder text if there is a configuration to select but no materials (so we can't show the materials per extruder). + Label + { + text: catalog.i18nc("@label", "Select configuration") + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + + visible: !Cura.MachineManager.hasMaterials && (Cura.MachineManager.hasVariants || Cura.MachineManager.hasVariantBuildplates) + + anchors + { + left: parent.left + leftMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + } + } + + contentItem: Column + { + id: popupItem + width: UM.Theme.getSize("configuration_selector").width + height: implicitHeight // Required because ExpandableComponent will try to use this to determine the size of the background of the pop-up. + padding: UM.Theme.getSize("default_margin").height + spacing: UM.Theme.getSize("default_margin").height + + property bool is_connected: false // If current machine is connected to a printer. Only evaluated upon making popup visible. + property int configuration_method: ConfigurationMenu.ConfigurationMethod.Custom // Type of configuration being used. Only evaluated upon making popup visible. + property int manual_selected_method: -1 // It stores the configuration method selected by the user. By default the selected method is + + onVisibleChanged: + { + is_connected = Cura.MachineManager.activeMachineHasRemoteConnection && Cura.MachineManager.printerConnected && Cura.MachineManager.printerOutputDevices[0].uniqueConfigurations.length > 0 //Re-evaluate. + + // If the printer is not connected or does not have configurations, we switch always to the custom mode. If is connected instead, the auto mode + // or the previous state is selected + configuration_method = is_connected ? (manual_selected_method == -1 ? ConfigurationMenu.ConfigurationMethod.Auto : manual_selected_method) : ConfigurationMenu.ConfigurationMethod.Custom + } + + Item + { + width: parent.width - 2 * parent.padding + height: + { + var height = 0 + if (autoConfiguration.visible) + { + height += autoConfiguration.height + } + if (customConfiguration.visible) + { + height += customConfiguration.height + } + return height + } + + AutoConfiguration + { + id: autoConfiguration + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Auto + } + + CustomConfiguration + { + id: customConfiguration + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Custom + } + } + + Item + { + height: visible ? childrenRect.height: 0 + anchors.right: parent.right + anchors.rightMargin: UM.Theme.getSize("default_margin").width + width: childrenRect.width + UM.Theme.getSize("default_margin").width + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Custom + UM.RecolorImage + { + id: externalLinkIcon + anchors.left: parent.left + anchors.leftMargin: UM.Theme.getSize("default_margin").width + height: materialInfoLabel.height + width: height + sourceSize.height: width + color: UM.Theme.getColor("text_link") + source: UM.Theme.getIcon("external_link") + } + + Label + { + id: materialInfoLabel + wrapMode: Text.WordWrap + text: catalog.i18nc("@label", "See the material compatibility chart") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_link") + linkColor: UM.Theme.getColor("text_link") + anchors.left: externalLinkIcon.right + anchors.leftMargin: UM.Theme.getSize("narrow_margin").width + renderType: Text.NativeRendering + + MouseArea + { + anchors.fill: parent + hoverEnabled: true + onClicked: + { + // open the material URL with web browser + var url = "https://ultimaker.com/incoming-links/cura/material-compatibilty" + Qt.openUrlExternally(url) + } + onEntered: + { + materialInfoLabel.font.underline = true + } + onExited: + { + materialInfoLabel.font.underline = false + } + } + } + } + + Rectangle + { + id: separator + visible: buttonBar.visible + x: -parent.padding + + width: parent.width + height: UM.Theme.getSize("default_lining").height + + color: UM.Theme.getColor("lining") + } + + //Allow switching between custom and auto. + Item + { + id: buttonBar + visible: popupItem.is_connected //Switching only makes sense if the "auto" part is possible. + + width: parent.width - 2 * parent.padding + height: childrenRect.height + + Cura.SecondaryButton + { + id: goToCustom + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Auto + text: catalog.i18nc("@label", "Custom") + + anchors.right: parent.right + + iconSource: UM.Theme.getIcon("arrow_right") + isIconOnRightSide: true + + onClicked: + { + popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Custom + popupItem.manual_selected_method = popupItem.configuration_method + } + } + + Cura.SecondaryButton + { + id: goToAuto + visible: popupItem.configuration_method == ConfigurationMenu.ConfigurationMethod.Custom + text: catalog.i18nc("@label", "Configurations") + + iconSource: UM.Theme.getIcon("arrow_left") + + onClicked: + { + popupItem.configuration_method = ConfigurationMenu.ConfigurationMethod.Auto + popupItem.manual_selected_method = popupItem.configuration_method + } + } + } + } + + Connections + { + target: Cura.MachineManager + onGlobalContainerChanged: popupItem.manual_selected_method = -1 // When switching printers, reset the value of the manual selected method + } +} diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationSelection.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationSelection.qml deleted file mode 100644 index d7ee2c68ee..0000000000 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationSelection.qml +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 -import QtQuick.Controls.Styles 1.4 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - id: configurationSelector - property var connectedDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - property var panelWidth: control.width - - function switchPopupState() - { - popup.visible ? popup.close() : popup.open() - } - - SyncButton - { - id: syncButton - onClicked: switchPopupState() - outputDevice: connectedDevice - } - - Popup - { - // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property - id: popup - clip: true - closePolicy: Popup.CloseOnPressOutsideParent - y: configurationSelector.height - UM.Theme.getSize("default_lining").height - x: configurationSelector.width - width - width: panelWidth - visible: false - padding: UM.Theme.getSize("default_lining").width - transformOrigin: Popup.Top - contentItem: ConfigurationListView - { - id: configList - width: panelWidth - 2 * popup.padding - outputDevice: connectedDevice - } - background: Rectangle - { - color: UM.Theme.getColor("setting_control") - border.color: UM.Theme.getColor("setting_control_border") - } - exit: Transition - { - // This applies a default NumberAnimation to any changes a state change makes to x or y properties - NumberAnimation { property: "visible"; duration: 75; } - } - enter: Transition - { - // This applies a default NumberAnimation to any changes a state change makes to x or y properties - NumberAnimation { property: "visible"; duration: 75; } - } - onClosed: visible = false - onOpened: visible = true - } -}
\ No newline at end of file diff --git a/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml new file mode 100644 index 0000000000..5cecda4e5c --- /dev/null +++ b/resources/qml/Menus/ConfigurationMenu/CustomConfiguration.qml @@ -0,0 +1,293 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.6 +import QtQuick.Controls 2.0 +import QtQuick.Controls 1.1 as OldControls + +import Cura 1.0 as Cura +import UM 1.3 as UM + +Item +{ + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + width: parent.width + height: childrenRect.height + + Label + { + id: header + text: catalog.i18nc("@header", "Custom") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("small_button_text") + height: contentHeight + renderType: Text.NativeRendering + + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + } + + //Printer type selector. + Item + { + id: printerTypeSelectorRow + visible: + { + return Cura.MachineManager.printerOutputDevices.length >= 1 //If connected... + && Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount != null //...and we have configuration information... + && Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount.length > 1; //...and there is more than one type of printer in the configuration list. + } + height: visible ? childrenRect.height : 0 + + anchors + { + left: parent.left + right: parent.right + top: header.bottom + topMargin: visible ? UM.Theme.getSize("default_margin").height : 0 + } + + Label + { + text: catalog.i18nc("@label", "Printer") + width: Math.round(parent.width * 0.3) - UM.Theme.getSize("default_margin").width + height: contentHeight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + anchors.verticalCenter: printerTypeSelector.verticalCenter + anchors.left: parent.left + } + + OldControls.ToolButton + { + id: printerTypeSelector + text: Cura.MachineManager.activeMachineDefinitionName + tooltip: Cura.MachineManager.activeMachineDefinitionName + height: UM.Theme.getSize("print_setup_big_item").height + width: Math.round(parent.width * 0.7) + UM.Theme.getSize("default_margin").width + anchors.right: parent.right + style: UM.Theme.styles.print_setup_header_button + + menu: Cura.PrinterTypeMenu { } + } + } + + UM.TabRow + { + id: tabBar + anchors.top: printerTypeSelectorRow.bottom + anchors.topMargin: UM.Theme.getSize("default_margin").height + visible: extrudersModel.count > 1 + + Repeater + { + id: repeater + model: extrudersModel + delegate: UM.TabRowButton + { + contentItem: Item + { + Cura.ExtruderIcon + { + anchors.horizontalCenter: parent.horizontalCenter + materialColor: model.color + extruderEnabled: model.enabled + width: parent.height + height: parent.height + } + } + onClicked: + { + Cura.ExtruderManager.setActiveExtruderIndex(tabBar.currentIndex) + } + } + } + + //When active extruder changes for some other reason, switch tabs. + //Don't directly link currentIndex to Cura.ExtruderManager.activeExtruderIndex! + //This causes a segfault in Qt 5.11. Something with VisualItemModel removing index -1. We have to use setCurrentIndex instead. + Connections + { + target: Cura.ExtruderManager + onActiveExtruderChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex); + } + } + + //When the model of the extruders is rebuilt, the list of extruders is briefly emptied and rebuilt. + //This causes the currentIndex of the tab to be in an invalid position which resets it to 0. + //Therefore we need to change it back to what it was: The active extruder index. + Connections + { + target: repeater.model + onModelChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex) + } + } + } + + Rectangle + { + width: parent.width + height: childrenRect.height + anchors.top: tabBar.bottom + + radius: tabBar.visible ? UM.Theme.getSize("default_radius").width : 0 + border.width: tabBar.visible ? UM.Theme.getSize("default_lining").width : 0 + border.color: UM.Theme.getColor("lining") + color: UM.Theme.getColor("main_background") + + //Remove rounding and lining at the top. + Rectangle + { + width: parent.width + height: parent.radius + anchors.top: parent.top + color: UM.Theme.getColor("lining") + visible: tabBar.visible + Rectangle + { + anchors + { + left: parent.left + leftMargin: parent.parent.border.width + right: parent.right + rightMargin: parent.parent.border.width + top: parent.top + } + height: parent.parent.radius + color: parent.parent.color + } + } + + Column + { + id: selectors + padding: UM.Theme.getSize("default_margin").width + spacing: UM.Theme.getSize("default_margin").height + + property var model: extrudersModel.items[tabBar.currentIndex] + + readonly property real paddedWidth: parent.width - padding * 2 + property real textWidth: Math.round(paddedWidth * 0.3) + property real controlWidth: paddedWidth - textWidth + + Row + { + height: UM.Theme.getSize("print_setup_item").height + visible: extrudersModel.count > 1 // If there is only one extruder, there is no point to enable/disable that. + + Label + { + text: catalog.i18nc("@label", "Enabled") + verticalAlignment: Text.AlignVCenter + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: parent.height + width: selectors.textWidth + renderType: Text.NativeRendering + } + + OldControls.CheckBox + { + checked: Cura.MachineManager.activeStack != null ? Cura.MachineManager.activeStack.isEnabled : false + enabled: !checked || Cura.MachineManager.numberExtrudersEnabled > 1 //Disable if it's the last enabled extruder. + height: UM.Theme.getSize("setting_control").height + style: UM.Theme.styles.checkbox + + /* Use a MouseArea to process the click on this checkbox. + This is necessary because actually clicking the checkbox + causes the "checked" property to be overwritten. After + it's been overwritten, the original link that made it + depend on the active extruder stack is broken. */ + MouseArea + { + anchors.fill: parent + onClicked: Cura.MachineManager.setExtruderEnabled(Cura.ExtruderManager.activeExtruderIndex, !parent.checked) + enabled: parent.enabled + } + } + } + + Row + { + height: UM.Theme.getSize("print_setup_big_item").height + visible: Cura.MachineManager.hasMaterials + + Label + { + text: catalog.i18nc("@label", "Material") + verticalAlignment: Text.AlignVCenter + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: parent.height + width: selectors.textWidth + renderType: Text.NativeRendering + } + + OldControls.ToolButton + { + id: materialSelection + + property bool valueError: Cura.MachineManager.activeStack != null ? Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeStack.material.id, "compatible", "") != "True" : true + property bool valueWarning: !Cura.MachineManager.isActiveQualitySupported + + text: Cura.MachineManager.activeStack != null ? Cura.MachineManager.activeStack.material.name : "" + tooltip: text + + height: UM.Theme.getSize("print_setup_big_item").height + width: selectors.controlWidth + + style: UM.Theme.styles.print_setup_header_button + activeFocusOnPress: true + menu: Cura.MaterialMenu + { + extruderIndex: Cura.ExtruderManager.activeExtruderIndex + } + } + } + + Row + { + height: UM.Theme.getSize("print_setup_big_item").height + visible: Cura.MachineManager.hasVariants + + Label + { + text: Cura.MachineManager.activeDefinitionVariantsName + verticalAlignment: Text.AlignVCenter + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + height: parent.height + width: selectors.textWidth + renderType: Text.NativeRendering + } + + OldControls.ToolButton + { + id: variantSelection + text: Cura.MachineManager.activeVariantName + tooltip: Cura.MachineManager.activeVariantName + + height: UM.Theme.getSize("print_setup_big_item").height + width: selectors.controlWidth + style: UM.Theme.styles.print_setup_header_button + activeFocusOnPress: true; + + menu: Cura.NozzleMenu { extruderIndex: Cura.ExtruderManager.activeExtruderIndex } + } + } + } + } +} diff --git a/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml b/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml index 97b5bee745..db6a97aa65 100644 --- a/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml +++ b/resources/qml/Menus/ConfigurationMenu/PrintCoreConfiguration.qml @@ -5,87 +5,50 @@ import QtQuick 2.7 import QtQuick.Controls 2.0 import UM 1.2 as UM +import Cura 1.0 as Cura - -Column +Row { id: extruderInfo property var printCoreConfiguration - property var mainColor: "black" - spacing: Math.round(UM.Theme.getSize("default_margin").height / 2) - height: childrenRect.height + height: information.height + spacing: UM.Theme.getSize("default_margin").width - Item + //Extruder icon. + Cura.ExtruderIcon { - id: extruder - width: parent.width - height: childrenRect.height + materialColor: printCoreConfiguration.material.color + anchors.verticalCenter: parent.verticalCenter + extruderEnabled: printCoreConfiguration.material.brand !== "" && printCoreConfiguration.hotendID !== "" + } + Column + { + id: information Label { - id: extruderLabel - text: catalog.i18nc("@label:extruder label", "Extruder") + text: printCoreConfiguration.material.brand ? printCoreConfiguration.material.brand : " " //Use space so that the height is still correct. renderType: Text.NativeRendering elide: Text.ElideRight - anchors.left: parent.left font: UM.Theme.getFont("default") - color: mainColor + color: UM.Theme.getColor("text_inactive") } - - // Rounded item to show the extruder number - Item + Label { - id: extruderIconItem - anchors.verticalCenter: extruderLabel.verticalCenter - anchors.left: extruderLabel.right - anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - - width: UM.Theme.getSize("section_icon").width - height: UM.Theme.getSize("section_icon").height - - UM.RecolorImage { - id: mainCircle - anchors.fill: parent - - anchors.centerIn: parent - sourceSize.width: parent.width - sourceSize.height: parent.height - source: UM.Theme.getIcon("extruder_button") - color: mainColor - } - - Label - { - id: extruderNumberText - anchors.centerIn: parent - text: printCoreConfiguration.position + 1 - renderType: Text.NativeRendering - font: UM.Theme.getFont("default") - color: mainColor - } + text: printCoreConfiguration.material.brand ? printCoreConfiguration.material.name : " " //Use space so that the height is still correct. + renderType: Text.NativeRendering + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + } + Label + { + text: printCoreConfiguration.hotendID ? printCoreConfiguration.hotendID : " " //Use space so that the height is still correct. + renderType: Text.NativeRendering + elide: Text.ElideRight + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text_inactive") } - } - - Label - { - id: materialLabel - text: printCoreConfiguration.material.name - renderType: Text.NativeRendering - elide: Text.ElideRight - width: parent.width - font: UM.Theme.getFont("default_bold") - color: mainColor - } - - Label - { - id: printCoreTypeLabel - text: printCoreConfiguration.hotendID - renderType: Text.NativeRendering - elide: Text.ElideRight - width: parent.width - font: UM.Theme.getFont("default") - color: mainColor } } diff --git a/resources/qml/Menus/ConfigurationMenu/SyncButton.qml b/resources/qml/Menus/ConfigurationMenu/SyncButton.qml deleted file mode 100644 index 3099d684c1..0000000000 --- a/resources/qml/Menus/ConfigurationMenu/SyncButton.qml +++ /dev/null @@ -1,102 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Button -{ - id: base - property var outputDevice: null - property var matched: updateOnSync() - text: matched == true ? catalog.i18nc("@label:extruder label", "Yes") : catalog.i18nc("@label:extruder label", "No") - width: parent.width - height: parent.height - - function updateOnSync() - { - if (outputDevice != undefined) - { - for (var index in outputDevice.uniqueConfigurations) - { - var configuration = outputDevice.uniqueConfigurations[index] - if (Cura.MachineManager.matchesConfiguration(configuration)) - { - base.matched = true; - return; - } - } - } - base.matched = false; - } - - style: ButtonStyle - { - background: Rectangle - { - color: - { - if(control.pressed) - { - return UM.Theme.getColor("sidebar_header_active"); - } - else if(control.hovered) - { - return UM.Theme.getColor("sidebar_header_hover"); - } - else - { - return UM.Theme.getColor("sidebar_header_bar"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - - UM.RecolorImage - { - id: downArrow - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("default_margin").width - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height - color: UM.Theme.getColor("text_emphasis") - source: UM.Theme.getIcon("arrow_bottom") - } - UM.RecolorImage - { - id: sidebarComboBoxLabel - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter; - - width: UM.Theme.getSize("printer_sync_icon").width - height: UM.Theme.getSize("printer_sync_icon").height - - color: control.matched ? UM.Theme.getColor("printer_config_matched") : UM.Theme.getColor("printer_config_mismatch") - source: UM.Theme.getIcon("tab_status_connected") - sourceSize.width: width - sourceSize.height: height - } - } - label: Label {} - } - - Connections - { - target: outputDevice - onUniqueConfigurationsChanged: updateOnSync() - } - - Connections - { - target: Cura.MachineManager - onCurrentConfigurationChanged: updateOnSync() - onOutputDevicesChanged: updateOnSync() - } -}
\ No newline at end of file diff --git a/resources/qml/Menus/ContextMenu.qml b/resources/qml/Menus/ContextMenu.qml index 1ea402d815..cb10d50ce8 100644 --- a/resources/qml/Menus/ContextMenu.qml +++ b/resources/qml/Menus/ContextMenu.qml @@ -27,7 +27,7 @@ Menu MenuItem { id: extruderHeader; text: catalog.i18ncp("@label", "Print Selected Model With:", "Print Selected Models With:", UM.Selection.selectionCount); enabled: false; visible: base.shouldShowExtruders } Instantiator { - model: Cura.ExtrudersModel { id: extrudersModel } + model: CuraApplication.getExtrudersModel() MenuItem { text: "%1: %2 - %3".arg(model.name).arg(model.material).arg(model.variant) visible: base.shouldShowExtruders diff --git a/resources/qml/Menus/FileMenu.qml b/resources/qml/Menus/FileMenu.qml new file mode 100644 index 0000000000..955ac89693 --- /dev/null +++ b/resources/qml/Menus/FileMenu.qml @@ -0,0 +1,81 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Menu +{ + id: base + title: catalog.i18nc("@title:menu menubar:toplevel", "&File") + + MenuItem + { + id: newProjectMenu + action: Cura.Actions.newProject + } + + MenuItem + { + id: openMenu + action: Cura.Actions.open + } + + RecentFilesMenu { } + + MenuItem + { + id: saveWorkspaceMenu + text: catalog.i18nc("@title:menu menubar:file", "&Save...") + onTriggered: + { + var args = { "filter_by_machine": false, "file_type": "workspace", "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml" }; + if(UM.Preferences.getValue("cura/dialog_on_project_save")) + { + saveWorkspaceDialog.args = args + saveWorkspaceDialog.open() + } + else + { + UM.OutputDeviceManager.requestWriteToDevice("local_file", PrintInformation.jobName, args) + } + } + } + + MenuSeparator { } + + MenuItem + { + id: saveAsMenu + text: catalog.i18nc("@title:menu menubar:file", "&Export...") + onTriggered: + { + var localDeviceId = "local_file" + UM.OutputDeviceManager.requestWriteToDevice(localDeviceId, PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}) + } + } + + MenuItem + { + id: exportSelectionMenu + text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...") + enabled: UM.Selection.hasSelection + iconName: "document-save-as" + onTriggered: UM.OutputDeviceManager.requestWriteSelectionToDevice("local_file", PrintInformation.jobName, { "filter_by_machine": false, "preferred_mimetypes": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml"}) + } + + MenuSeparator { } + + MenuItem + { + id: reloadAllMenu + action: Cura.Actions.reloadAll + } + + MenuSeparator { } + + MenuItem { action: Cura.Actions.quit } +}
\ No newline at end of file diff --git a/resources/qml/Menus/LocalPrinterMenu.qml b/resources/qml/Menus/LocalPrinterMenu.qml index 0bdd4f33b9..4da1de2abf 100644 --- a/resources/qml/Menus/LocalPrinterMenu.qml +++ b/resources/qml/Menus/LocalPrinterMenu.qml @@ -7,16 +7,18 @@ import QtQuick.Controls 1.4 import UM 1.2 as UM import Cura 1.0 as Cura -Instantiator { - model: UM.ContainerStacksModel { - filter: {"type": "machine", "um_network_key": null} - } - MenuItem { - text: model.name; - checkable: true; +Instantiator +{ + model: Cura.GlobalStacksModel {} + + MenuItem + { + text: model.name + checkable: true checked: Cura.MachineManager.activeMachineId == model.id - exclusiveGroup: group; - onTriggered: Cura.MachineManager.setActiveMachine(model.id); + exclusiveGroup: group + visible: !model.hasRemoteConnection + onTriggered: Cura.MachineManager.setActiveMachine(model.id) } onObjectAdded: menu.insertItem(index, object) onObjectRemoved: menu.removeItem(object) diff --git a/resources/qml/Menus/NetworkPrinterMenu.qml b/resources/qml/Menus/NetworkPrinterMenu.qml index 07a22202e4..41f3054e92 100644 --- a/resources/qml/Menus/NetworkPrinterMenu.qml +++ b/resources/qml/Menus/NetworkPrinterMenu.qml @@ -7,18 +7,25 @@ import QtQuick.Controls 1.4 import UM 1.2 as UM import Cura 1.0 as Cura -Instantiator { - model: UM.ContainerStacksModel { - filter: {"type": "machine", "um_network_key": "*", "hidden": "False"} - } - MenuItem { - // TODO: Use printer_group icon when it's a cluster. Not use it for now since it doesn't look as expected -// iconSource: UM.Theme.getIcon("printer_single") - text: model.metadata["connect_group_name"] - checkable: true; - checked: Cura.MachineManager.activeMachineNetworkGroupName == model.metadata["connect_group_name"] - exclusiveGroup: group; - onTriggered: Cura.MachineManager.setActiveMachine(model.id); +Instantiator +{ + model: Cura.GlobalStacksModel {} + MenuItem + { + property string connectGroupName: + { + if("connect_group_name" in model.metadata) + { + return model.metadata["connect_group_name"] + } + return "" + } + text: connectGroupName + checkable: true + visible: model.hasRemoteConnection + checked: Cura.MachineManager.activeMachineNetworkGroupName == connectGroupName + exclusiveGroup: group + onTriggered: Cura.MachineManager.setActiveMachine(model.id) } onObjectAdded: menu.insertItem(index, object) onObjectRemoved: menu.removeItem(object) diff --git a/resources/qml/Menus/PrinterStatusIcon.qml b/resources/qml/Menus/PrinterStatusIcon.qml deleted file mode 100644 index 6ff6b07af8..0000000000 --- a/resources/qml/Menus/PrinterStatusIcon.qml +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - property var status: "disconnected" - width: childrenRect.width - height: childrenRect.height - UM.RecolorImage - { - id: statusIcon - width: UM.Theme.getSize("printer_status_icon").width - height: UM.Theme.getSize("printer_status_icon").height - sourceSize.width: width - sourceSize.height: width - color: UM.Theme.getColor("tab_status_" + parent.status) - source: UM.Theme.getIcon(parent.status) - } -} - - - diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml index ffd3c556b6..68260f2502 100644 --- a/resources/qml/Menus/ProfileMenu.qml +++ b/resources/qml/Menus/ProfileMenu.qml @@ -17,24 +17,27 @@ Menu MenuItem { - text: (model.layer_height != "") ? model.name + " - " + model.layer_height + model.layer_height_unit : model.name + text: + { + var full_text = (model.layer_height != "") ? model.name + " - " + model.layer_height + model.layer_height_unit : model.name + full_text += model.is_experimental ? " - " + catalog.i18nc("@label", "Experimental") : "" + return full_text + } checkable: true checked: Cura.MachineManager.activeQualityOrQualityChangesName == model.name exclusiveGroup: group - onTriggered: { - Cura.MachineManager.setQualityGroup(model.quality_group) - } + onTriggered: Cura.MachineManager.setQualityGroup(model.quality_group) visible: model.available } - onObjectAdded: menu.insertItem(index, object); - onObjectRemoved: menu.removeItem(object); + onObjectAdded: menu.insertItem(index, object) + onObjectRemoved: menu.removeItem(object) } MenuSeparator { id: customSeparator - visible: Cura.CustomQualityProfilesDropDownMenuModel.rowCount > 0 + visible: Cura.CustomQualityProfilesDropDownMenuModel.count > 0 } Instantiator @@ -45,7 +48,7 @@ Menu Connections { target: Cura.CustomQualityProfilesDropDownMenuModel - onModelReset: customSeparator.visible = Cura.CustomQualityProfilesDropDownMenuModel.rowCount() > 0 + onModelReset: customSeparator.visible = Cura.CustomQualityProfilesDropDownMenuModel.count > 0 } MenuItem @@ -59,12 +62,12 @@ Menu onObjectAdded: { - customSeparator.visible = model.rowCount() > 0; + customSeparator.visible = model.count > 0; menu.insertItem(index, object); } onObjectRemoved: { - customSeparator.visible = model.rowCount() > 0; + customSeparator.visible = model.count > 0; menu.removeItem(object); } } diff --git a/resources/qml/Menus/RecentFilesMenu.qml b/resources/qml/Menus/RecentFilesMenu.qml index 12f53fb517..0f1f67b6fa 100644 --- a/resources/qml/Menus/RecentFilesMenu.qml +++ b/resources/qml/Menus/RecentFilesMenu.qml @@ -7,6 +7,8 @@ import QtQuick.Controls 1.1 import UM 1.3 as UM import Cura 1.0 as Cura +import "../Dialogs" + Menu { id: menu diff --git a/resources/qml/Menus/SettingsMenu.qml b/resources/qml/Menus/SettingsMenu.qml new file mode 100644 index 0000000000..4ea3a4d71a --- /dev/null +++ b/resources/qml/Menus/SettingsMenu.qml @@ -0,0 +1,70 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Menu +{ + id: base + title: catalog.i18nc("@title:menu menubar:toplevel", "&Settings") + + PrinterMenu { title: catalog.i18nc("@title:menu menubar:settings", "&Printer") } + + Instantiator + { + model: Cura.MachineManager.activeMachine.extruderList + + Menu + { + title: modelData.name + + NozzleMenu { title: Cura.MachineManager.activeDefinitionVariantsName; visible: Cura.MachineManager.hasVariants; extruderIndex: index } + MaterialMenu { title: catalog.i18nc("@title:menu", "&Material"); visible: Cura.MachineManager.hasMaterials; extruderIndex: index } + + MenuSeparator + { + visible: Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials + } + + MenuItem + { + text: catalog.i18nc("@action:inmenu", "Set as Active Extruder") + onTriggered: Cura.MachineManager.setExtruderIndex(model.index) + } + + MenuItem + { + text: catalog.i18nc("@action:inmenu", "Enable Extruder") + onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) + visible: !Cura.MachineManager.getExtruder(model.index).isEnabled + } + + MenuItem + { + text: catalog.i18nc("@action:inmenu", "Disable Extruder") + onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false) + visible: Cura.MachineManager.getExtruder(model.index).isEnabled + enabled: Cura.MachineManager.numberExtrudersEnabled > 1 + } + + } + onObjectAdded: base.insertItem(index, object) + onObjectRemoved: base.removeItem(object) + } + + // TODO Only show in dev mode. Remove check when feature ready + BuildplateMenu + { + title: catalog.i18nc("@title:menu", "&Build plate") + visible: CuraSDKVersion == "dev" && Cura.MachineManager.hasVariantBuildplates + } + ProfileMenu { title: catalog.i18nc("@title:settings", "&Profile") } + + MenuSeparator { } + + MenuItem { action: Cura.Actions.configureSettingVisibility } +}
\ No newline at end of file diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml index 12d4ffd7dd..217975c803 100644 --- a/resources/qml/Menus/ViewMenu.qml +++ b/resources/qml/Menus/ViewMenu.qml @@ -11,32 +11,10 @@ Menu { title: catalog.i18nc("@title:menu menubar:toplevel", "&View") id: base + enabled: !PrintInformation.preSliced property var multiBuildPlateModel: CuraApplication.getMultiBuildPlateModel() - // main views - Instantiator - { - model: UM.ViewModel{} - MenuItem - { - text: model.name - checkable: true - checked: model.active - exclusiveGroup: group - onTriggered: UM.Controller.setActiveView(model.id) - enabled: !PrintInformation.preSliced - } - onObjectAdded: base.insertItem(index, object) - onObjectRemoved: base.removeItem(object) - } - ExclusiveGroup - { - id: group - } - - MenuSeparator {} - Menu { title: catalog.i18nc("@action:inmenu menubar:view","&Camera position"); @@ -82,12 +60,6 @@ Menu MenuItem { - action: Cura.Actions.expandSidebar - } - - MenuSeparator {} - MenuItem - { action: Cura.Actions.toggleFullScreen } } diff --git a/resources/qml/MonitorButton.qml b/resources/qml/MonitorButton.qml index aa40de11e4..99640b1059 100644 --- a/resources/qml/MonitorButton.qml +++ b/resources/qml/MonitorButton.qml @@ -13,9 +13,9 @@ import Cura 1.0 as Cura Item { id: base; - UM.I18nCatalog { id: catalog; name:"cura"} + UM.I18nCatalog { id: catalog; name: "cura"} - height: childrenRect.height + UM.Theme.getSize("sidebar_margin").height + height: childrenRect.height + UM.Theme.getSize("thick_margin").height property bool printerConnected: Cura.MachineManager.printerConnected property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands @@ -162,13 +162,13 @@ Item Label { id: statusLabel - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width + width: parent.width - 2 * UM.Theme.getSize("thick_margin").width anchors.top: parent.top anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width + anchors.leftMargin: UM.Theme.getSize("thick_margin").width color: base.statusColor - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") text: statusText } @@ -179,7 +179,7 @@ Item anchors.right: progressBar.right color: base.statusColor - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") text: Math.round(progress) + "%" visible: showProgress } @@ -224,12 +224,12 @@ Item property string backgroundColor: UM.Theme.getColor("progressbar_background"); property string controlColor: base.statusColor; - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width; + width: parent.width - 2 * UM.Theme.getSize("thick_margin").width; height: UM.Theme.getSize("progressbar").height; anchors.top: statusLabel.bottom; - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 4); + anchors.topMargin: Math.round(UM.Theme.getSize("thick_margin").height / 4); anchors.left: parent.left; - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width; + anchors.leftMargin: UM.Theme.getSize("thick_margin").width; } Row @@ -237,9 +237,9 @@ Item id: buttonsRow height: abortButton.height anchors.top: progressBar.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height + anchors.topMargin: UM.Theme.getSize("thick_margin").height anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width + anchors.rightMargin: UM.Theme.getSize("thick_margin").width spacing: UM.Theme.getSize("default_margin").width Row @@ -309,7 +309,7 @@ Item } } - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button } Button @@ -325,7 +325,7 @@ Item text: catalog.i18nc("@label", "Abort Print") onClicked: confirmationDialog.visible = true - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button } MessageDialog diff --git a/resources/qml/MonitorSidebar.qml b/resources/qml/MonitorSidebar.qml deleted file mode 100644 index 80bd5c1a2e..0000000000 --- a/resources/qml/MonitorSidebar.qml +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 -import QtQuick.Layouts 1.3 - -import UM 1.2 as UM -import Cura 1.0 as Cura -import "Menus" -import "Menus/ConfigurationMenu" - -Rectangle -{ - id: base - - property int currentModeIndex - property bool hideSettings: PrintInformation.preSliced - property bool hideView: Cura.MachineManager.activeMachineName == "" - - // Is there an output device for this printer? - property bool isNetworkPrinter: Cura.MachineManager.activeMachineNetworkKey != "" - property bool printerConnected: Cura.MachineManager.printerConnected - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - - property variant printDuration: PrintInformation.currentPrintTime - property variant printMaterialLengths: PrintInformation.materialLengths - property variant printMaterialWeights: PrintInformation.materialWeights - property variant printMaterialCosts: PrintInformation.materialCosts - property variant printMaterialNames: PrintInformation.materialNames - - color: UM.Theme.getColor("sidebar") - UM.I18nCatalog { id: catalog; name:"cura"} - - Timer { - id: tooltipDelayTimer - interval: 500 - repeat: false - property var item - property string text - - onTriggered: - { - base.showTooltip(base, {x: 0, y: item.y}, text); - } - } - - function showTooltip(item, position, text) - { - tooltip.text = text; - position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y); - tooltip.show(position); - } - - function hideTooltip() - { - tooltip.hide(); - } - - function strPadLeft(string, pad, length) { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - function getPrettyTime(time) - { - var hours = Math.floor(time / 3600) - time -= hours * 3600 - var minutes = Math.floor(time / 60); - time -= minutes * 60 - var seconds = Math.floor(time); - - var finalTime = strPadLeft(hours, "0", 2) + ':' + strPadLeft(minutes,'0',2)+ ':' + strPadLeft(seconds,'0',2); - return finalTime; - } - - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.AllButtons - - onWheel: - { - wheel.accepted = true; - } - } - - MachineSelection - { - id: machineSelection - width: base.width - configSelection.width - separator.width - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.left: parent.left - } - - Rectangle - { - id: separator - visible: configSelection.visible - width: visible ? Math.round(UM.Theme.getSize("sidebar_lining_thin").height / 2) : 0 - height: UM.Theme.getSize("sidebar_header").height - color: UM.Theme.getColor("sidebar_lining_thin") - anchors.left: machineSelection.right - } - - ConfigurationSelection - { - id: configSelection - visible: isNetworkPrinter && printerConnected - width: visible ? Math.round(base.width * 0.15) : 0 - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.right: parent.right - panelWidth: base.width - } - - Loader - { - id: controlItem - anchors.bottom: footerSeparator.top - anchors.top: machineSelection.bottom - anchors.left: base.left - anchors.right: base.right - sourceComponent: - { - if(connectedPrinter != null) - { - if(connectedPrinter.controlItem != null) - { - return connectedPrinter.controlItem - } - } - return null - } - } - - Loader - { - anchors.bottom: footerSeparator.top - anchors.top: machineSelection.bottom - anchors.left: base.left - anchors.right: base.right - source: - { - if(controlItem.sourceComponent == null) - { - return "PrintMonitor.qml" - } - else - { - return "" - } - } - } - - Rectangle - { - id: footerSeparator - width: parent.width - height: UM.Theme.getSize("sidebar_lining").height - color: UM.Theme.getColor("sidebar_lining") - anchors.bottom: monitorButton.top - anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height - } - - // MonitorButton is actually the bottom footer panel. - MonitorButton - { - id: monitorButton - implicitWidth: base.width - anchors.bottom: parent.bottom - } - - SidebarTooltip - { - id: tooltip - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStack: Cura.MachineManager.activeMachine - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: machineHeatedBed - - containerStack: Cura.MachineManager.activeMachine - key: "machine_heated_bed" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - // Make the ConfigurationSelector react when the global container changes, otherwise if Cura is not connected to the printer, - // switching printers make no reaction - Connections - { - target: Cura.MachineManager - onGlobalContainerChanged: - { - base.isNetworkPrinter = Cura.MachineManager.activeMachineNetworkKey != "" - base.printerConnected = Cura.MachineManager.printerOutputDevices.length != 0 - } - } -} diff --git a/resources/qml/ObjectsList.qml b/resources/qml/ObjectsList.qml index 8c8eaa16ae..fd5175fce2 100644 --- a/resources/qml/ObjectsList.qml +++ b/resources/qml/ObjectsList.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -55,7 +55,6 @@ Rectangle { width: control.width height: control.height - sourceSize.width: width sourceSize.height: width color: UM.Theme.getColor("setting_control_text") source: collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom") @@ -225,7 +224,7 @@ Rectangle { id: arrangeAllBuildPlatesButton; text: catalog.i18nc("@action:button","Arrange to all build plates"); - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button height: UM.Theme.getSize("objects_menu_button").height; tooltip: ''; anchors @@ -245,7 +244,7 @@ Rectangle { id: arrangeBuildPlateButton; text: catalog.i18nc("@action:button","Arrange current build plate"); - style: UM.Theme.styles.sidebar_action_button + style: UM.Theme.styles.print_setup_action_button height: UM.Theme.getSize("objects_menu_button").height; tooltip: ''; anchors diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index bba2cf764a..0dd6c6313a 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.1 @@ -134,7 +134,7 @@ UM.PreferencesPage UM.PluginsModel { id: plugins } //: Language selection label - UM.I18nCatalog{id: catalog; name:"cura"} + UM.I18nCatalog{id: catalog; name: "cura"} Label { @@ -151,7 +151,6 @@ UM.PreferencesPage { id: languageLabel text: catalog.i18nc("@label","Language:") - anchors.verticalCenter: languageComboBox.verticalCenter } ComboBox @@ -219,7 +218,6 @@ UM.PreferencesPage { id: currencyLabel text: catalog.i18nc("@label","Currency:") - anchors.verticalCenter: currencyField.verticalCenter } TextField @@ -233,7 +231,6 @@ UM.PreferencesPage { id: themeLabel text: catalog.i18nc("@label","Theme:") - anchors.verticalCenter: themeComboBox.verticalCenter } ComboBox @@ -749,6 +746,11 @@ UM.PreferencesPage target: UM.Preferences onPreferenceChanged: { + if (preference !== "info/send_slice_info") + { + return; + } + sendDataCheckbox.checked = boolCheck(UM.Preferences.getValue("info/send_slice_info")) } } diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index 4dc5465dc6..f9c1a9b0a0 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2016 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -21,8 +21,10 @@ UM.ManagementPage function activeMachineIndex() { - for(var i = 0; i < model.rowCount(); i++) { - if (model.getItem(i).id == Cura.MachineManager.activeMachineId) { + for(var i = 0; i < model.count; i++) + { + if (model.getItem(i).id == Cura.MachineManager.activeMachineId) + { return i; } } @@ -47,7 +49,7 @@ UM.ManagementPage { text: catalog.i18nc("@action:button", "Remove"); iconName: "list-remove"; - enabled: base.currentItem != null && model.rowCount() > 1 + enabled: base.currentItem != null && model.count > 1 onClicked: confirmDialog.open(); }, Button @@ -68,7 +70,7 @@ UM.ManagementPage { id: machineName text: base.currentItem && base.currentItem.name ? base.currentItem.name : "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") width: parent.width elide: Text.ElideRight } @@ -89,7 +91,7 @@ UM.ManagementPage Item { - width: childrenRect.width + 2 * screenScaleFactor + width: Math.round(childrenRect.width + 2 * screenScaleFactor) height: childrenRect.height Button { @@ -124,132 +126,15 @@ UM.ManagementPage } } - Grid - { - id: machineInfo - - anchors.top: machineActions.visible ? machineActions.bottom : machineActions.anchors.top - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.left: parent.left - anchors.right: parent.right - spacing: UM.Theme.getSize("default_margin").height - rowSpacing: UM.Theme.getSize("default_lining").height - columns: 2 - - visible: base.currentItem - - property bool printerConnected: Cura.MachineManager.printerConnected - property var connectedPrinter: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property var printJob: connectedPrinter != null ? connectedPrinter.activePrintJob: null - Label - { - text: catalog.i18nc("@label", "Printer type:") - visible: base.currentItem && "definition_name" in base.currentItem.metadata - } - Label - { - text: (base.currentItem && "definition_name" in base.currentItem.metadata) ? base.currentItem.metadata.definition_name : "" - } - Label - { - text: catalog.i18nc("@label", "Connection:") - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId - } - Label - { - width: (parent.width * 0.7) | 0 - text: machineInfo.printerConnected ? machineInfo.connectedPrinter.connectionText : catalog.i18nc("@info:status", "The printer is not connected.") - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId - wrapMode: Text.WordWrap - } - Label - { - text: catalog.i18nc("@label", "State:") - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId && machineInfo.printerAcceptsCommands - } - Label { - width: (parent.width * 0.7) | 0 - text: - { - if(!machineInfo.printerConnected || !machineInfo.printerAcceptsCommands) { - return ""; - } - - if (machineInfo.printJob == null) - { - return catalog.i18nc("@label:MonitorStatus", "Waiting for a printjob"); - } - - switch(machineInfo.printJob.state) - { - case "printing": - return catalog.i18nc("@label:MonitorStatus", "Printing..."); - case "paused": - return catalog.i18nc("@label:MonitorStatus", "Paused"); - case "pre_print": - return catalog.i18nc("@label:MonitorStatus", "Preparing..."); - case "wait_cleanup": - return catalog.i18nc("@label:MonitorStatus", "Waiting for someone to clear the build plate"); - case "error": - return printerOutputDevice.errorText; - case "maintenance": - return catalog.i18nc("@label:MonitorStatus", "In maintenance. Please check the printer"); - case "abort": // note sure if this jobState actually occurs in the wild - return catalog.i18nc("@label:MonitorStatus", "Aborting print..."); - - } - return "" - } - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId && machineInfo.printerAcceptsCommands - wrapMode: Text.WordWrap - } - } - - Column { - id: additionalComponentsColumn - anchors.left: parent.left - anchors.right: parent.right - anchors.top: machineInfo.visible ? machineInfo.bottom : machineInfo.anchors.top - anchors.topMargin: UM.Theme.getSize("default_margin").width - - spacing: UM.Theme.getSize("default_margin").width - visible: base.currentItem && base.currentItem.id == Cura.MachineManager.activeMachineId - - Component.onCompleted: - { - for (var component in CuraApplication.additionalComponents["machinesDetailPane"]) { - CuraApplication.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn - } - } - } - - Component.onCompleted: { - addAdditionalComponents("machinesDetailPane") - } - - Connections { - target: CuraApplication - onAdditionalComponentsChanged: addAdditionalComponents - } - - function addAdditionalComponents (areaId) { - if(areaId == "machinesDetailPane") { - for (var component in CuraApplication.additionalComponents["machinesDetailPane"]) { - CuraApplication.additionalComponents["machinesDetailPane"][component].parent = additionalComponentsColumn - } - } - } - UM.I18nCatalog { id: catalog; name: "cura"; } UM.ConfirmRemoveDialog { - id: confirmDialog; - object: base.currentItem && base.currentItem.name ? base.currentItem.name : ""; + id: confirmDialog + object: base.currentItem && base.currentItem.name ? base.currentItem.name : "" onYes: { - Cura.MachineManager.removeMachine(base.currentItem.id); + Cura.MachineManager.removeMachine(base.currentItem.id) if(!base.currentItem) { objectList.currentIndex = activeMachineIndex() diff --git a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml index c8f391dfb0..8db8e99d44 100644 --- a/resources/qml/Preferences/Materials/MaterialsBrandSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsBrandSection.qml @@ -1,5 +1,5 @@ // Copyright (c) 2018 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 1.4 @@ -10,7 +10,7 @@ import QtQuick.Dialogs 1.2 import UM 1.2 as UM import Cura 1.0 as Cura -Rectangle +Item { id: brand_section @@ -55,7 +55,8 @@ Rectangle text: "" implicitWidth: UM.Theme.getSize("favorites_button").width implicitHeight: UM.Theme.getSize("favorites_button").height - UM.RecolorImage { + UM.RecolorImage + { anchors { verticalCenter: parent.verticalCenter @@ -63,18 +64,12 @@ Rectangle } width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height color: "black" source: brand_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") } style: ButtonStyle { - background: Rectangle - { - anchors.fill: parent - color: "transparent" - } + background: Item { } } } } @@ -144,6 +139,11 @@ Rectangle target: UM.Preferences onPreferenceChanged: { + if (preference !== "cura/expanded_types" && preference !== "cura/expanded_brands") + { + return; + } + expanded = materialList.expandedBrands.indexOf(sectionName) > -1 } } diff --git a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml index 92970f40e2..eb4a63250f 100644 --- a/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml +++ b/resources/qml/Preferences/Materials/MaterialsDetailsPanel.qml @@ -65,7 +65,7 @@ Item Label { text: materialProperties.name - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") } } diff --git a/resources/qml/Preferences/Materials/MaterialsList.qml b/resources/qml/Preferences/Materials/MaterialsList.qml index 00bead9650..61f92db84c 100644 --- a/resources/qml/Preferences/Materials/MaterialsList.qml +++ b/resources/qml/Preferences/Materials/MaterialsList.qml @@ -57,7 +57,7 @@ Item var currentItemId = base.currentItem == null ? "" : base.currentItem.root_material_id search_root_id = currentItemId } - for (var material_idx = 0; material_idx < genericMaterialsModel.rowCount(); material_idx++) + for (var material_idx = 0; material_idx < genericMaterialsModel.count; material_idx++) { var material = genericMaterialsModel.getItem(material_idx) if (material.root_material_id == search_root_id) @@ -72,15 +72,15 @@ Item return true } } - for (var brand_idx = 0; brand_idx < materialsModel.rowCount(); brand_idx++) + for (var brand_idx = 0; brand_idx < materialsModel.count; brand_idx++) { var brand = materialsModel.getItem(brand_idx) var types_model = brand.material_types - for (var type_idx = 0; type_idx < types_model.rowCount(); type_idx++) + for (var type_idx = 0; type_idx < types_model.count; type_idx++) { var type = types_model.getItem(type_idx) var colors_model = type.colors - for (var material_idx = 0; material_idx < colors_model.rowCount(); material_idx++) + for (var material_idx = 0; material_idx < colors_model.count; material_idx++) { var material = colors_model.getItem(material_idx) if (material.root_material_id == search_root_id) diff --git a/resources/qml/Preferences/Materials/MaterialsPage.qml b/resources/qml/Preferences/Materials/MaterialsPage.qml index a00a2340cd..9118f16b4d 100644 --- a/resources/qml/Preferences/Materials/MaterialsPage.qml +++ b/resources/qml/Preferences/Materials/MaterialsPage.qml @@ -83,7 +83,7 @@ Item { text: catalog.i18nc("@action:button", "Activate") iconName: "list-activate" - enabled: !isCurrentItemActivated + enabled: !isCurrentItemActivated && Cura.MachineManager.hasMaterials onClicked: { forceActiveFocus() diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml index a5af17f47a..2f4847103b 100644 --- a/resources/qml/Preferences/Materials/MaterialsSlot.qml +++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml @@ -1,5 +1,5 @@ // Copyright (c) 2018 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 1.4 @@ -15,7 +15,7 @@ Rectangle id: materialSlot property var material: null property var hovered: false - property var is_favorite: material != null ? material.is_favorite : false + property var is_favorite: material != null && material.is_favorite height: UM.Theme.getSize("favorites_row").height width: parent.width @@ -70,24 +70,20 @@ Rectangle } onClicked: { - if (materialSlot.is_favorite) { + if (materialSlot.is_favorite) + { base.materialManager.removeFavorite(material.root_material_id) - materialSlot.is_favorite = false return } base.materialManager.addFavorite(material.root_material_id) - materialSlot.is_favorite = true return } style: ButtonStyle { - background: Rectangle - { - anchors.fill: parent - color: "transparent" - } + background: Item { } } - UM.RecolorImage { + UM.RecolorImage + { anchors { verticalCenter: favorite_button.verticalCenter @@ -95,8 +91,6 @@ Rectangle } width: UM.Theme.getSize("favorites_button_icon").width height: UM.Theme.getSize("favorites_button_icon").height - sourceSize.width: width - sourceSize.height: height color: { if (favorite_button.hovered) diff --git a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml index f62fc4ee16..b5054591c0 100644 --- a/resources/qml/Preferences/Materials/MaterialsTypeSection.qml +++ b/resources/qml/Preferences/Materials/MaterialsTypeSection.qml @@ -10,7 +10,7 @@ import QtQuick.Dialogs 1.2 import UM 1.2 as UM import Cura 1.0 as Cura -Rectangle +Item { id: material_type_section property var materialType @@ -74,8 +74,6 @@ Rectangle } width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height color: "black" source: material_type_section.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") } @@ -132,6 +130,11 @@ Rectangle target: UM.Preferences onPreferenceChanged: { + if (preference !== "cura/expanded_types" && preference !== "cura/expanded_brands") + { + return; + } + expanded = materialList.expandedTypes.indexOf(materialType.brand + "_" + materialType.name) > -1 } } diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index ba0c2848a5..f23a04d800 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -16,7 +16,7 @@ Item property QtObject qualityManager: CuraApplication.getQualityManager() property var resetEnabled: false // Keep PreferencesDialog happy - property var extrudersModel: Cura.ExtrudersModel {} + property var extrudersModel: CuraApplication.getExtrudersModel() UM.I18nCatalog { id: catalog; name: "cura"; } @@ -188,21 +188,27 @@ Item Connections { target: qualitiesModel - onItemsChanged: { + onItemsChanged: + { var toSelectItemName = base.currentItem == null ? "" : base.currentItem.name; - if (newQualityNameToSelect != "") { + if (newQualityNameToSelect != "") + { toSelectItemName = newQualityNameToSelect; } var newIdx = -1; // Default to nothing if nothing can be found - if (toSelectItemName != "") { + if (toSelectItemName != "") + { // Select the required quality name if given - for (var idx = 0; idx < qualitiesModel.rowCount(); ++idx) { + for (var idx = 0; idx < qualitiesModel.count; ++idx) + { var item = qualitiesModel.getItem(idx); - if (item.name == toSelectItemName) { + if (item.name == toSelectItemName) + { // Switch to the newly created profile if needed newIdx = idx; - if (base.toActivateNewQuality) { + if (base.toActivateNewQuality) + { // Activate this custom quality if required Cura.MachineManager.setQualityChangesGroup(item.quality_changes_group); } @@ -370,6 +376,7 @@ Item width: true ? (parent.width * 0.4) | 0 : parent.width frameVisible: true + clip: true ListView { @@ -382,9 +389,11 @@ Item var selectedItemName = Cura.MachineManager.activeQualityOrQualityChangesName; // Select the required quality name if given - for (var idx = 0; idx < qualitiesModel.rowCount(); idx++) { + for (var idx = 0; idx < qualitiesModel.count; idx++) + { var item = qualitiesModel.getItem(idx); - if (item.name == selectedItemName) { + if (item.name == selectedItemName) + { currentIndex = idx; break; } @@ -400,7 +409,7 @@ Item { anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_lining").width - text: section == "true" ? catalog.i18nc("@label", "Protected profiles") : catalog.i18nc("@label", "Custom profiles") + text: section == "true" ? catalog.i18nc("@label", "Default profiles") : catalog.i18nc("@label", "Custom profiles") font.bold: true } } @@ -463,7 +472,7 @@ Item Label { text: base.currentItemName - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") } } diff --git a/resources/qml/Preferences/SettingVisibilityPage.qml b/resources/qml/Preferences/SettingVisibilityPage.qml index 8896d0611e..3f7571a170 100644 --- a/resources/qml/Preferences/SettingVisibilityPage.qml +++ b/resources/qml/Preferences/SettingVisibilityPage.qml @@ -25,11 +25,7 @@ UM.PreferencesPage function reset() { - UM.Preferences.resetPreference("general/visible_settings") - - // After calling this function update Setting visibility preset combobox. - // Reset should set default setting preset ("Basic") - visibilityPreset.currentIndex = 1 + settingVisibilityPresetsModel.setActivePreset("basic") } resetEnabled: true; @@ -54,7 +50,7 @@ UM.PreferencesPage { return Qt.Unchecked } - else if(definitionsModel.visibleCount == definitionsModel.rowCount(null)) + else if(definitionsModel.visibleCount == definitionsModel.count) { return Qt.Checked } @@ -115,21 +111,22 @@ UM.PreferencesPage currentIndex: { + var idx = -1; for(var i = 0; i < settingVisibilityPresetsModel.items.length; ++i) { - if(settingVisibilityPresetsModel.items[i].id == settingVisibilityPresetsModel.activePreset) + if(settingVisibilityPresetsModel.items[i].presetId == settingVisibilityPresetsModel.activePreset) { - currentIndex = i; - return; + idx = i; + break; } } - return -1 + return idx; } onActivated: { - var preset_id = settingVisibilityPresetsModel.items[index].id; - settingVisibilityPresetsModel.setActivePreset(preset_id); + var preset_id = settingVisibilityPresetsModel.items[index].presetId + settingVisibilityPresetsModel.setActivePreset(preset_id) } } diff --git a/resources/qml/PrepareSidebar.qml b/resources/qml/PrepareSidebar.qml deleted file mode 100644 index fe0fb033f7..0000000000 --- a/resources/qml/PrepareSidebar.qml +++ /dev/null @@ -1,616 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 -import QtQuick.Layouts 1.3 - -import UM 1.2 as UM -import Cura 1.0 as Cura -import "Menus" -import "Menus/ConfigurationMenu" - -Rectangle -{ - id: base - - property int currentModeIndex: -1 - property bool hideSettings: PrintInformation.preSliced - property bool hideView: Cura.MachineManager.activeMachineName == "" - - // Is there an output device for this printer? - property bool isNetworkPrinter: Cura.MachineManager.activeMachineNetworkKey != "" - property bool printerConnected: Cura.MachineManager.printerConnected - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null - - property variant printDuration: PrintInformation.currentPrintTime - property variant printMaterialLengths: PrintInformation.materialLengths - property variant printMaterialWeights: PrintInformation.materialWeights - property variant printMaterialCosts: PrintInformation.materialCosts - property variant printMaterialNames: PrintInformation.materialNames - - color: UM.Theme.getColor("sidebar") - UM.I18nCatalog { id: catalog; name:"cura"} - - Timer { - id: tooltipDelayTimer - interval: 500 - repeat: false - property var item - property string text - - onTriggered: - { - base.showTooltip(base, {x: 0, y: item.y}, text); - } - } - - function showTooltip(item, position, text) - { - tooltip.text = text; - position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y); - tooltip.show(position); - } - - function hideTooltip() - { - tooltip.hide(); - } - - function strPadLeft(string, pad, length) { - return (new Array(length + 1).join(pad) + string).slice(-length); - } - - function getPrettyTime(time) - { - var hours = Math.floor(time / 3600) - time -= hours * 3600 - var minutes = Math.floor(time / 60); - time -= minutes * 60 - var seconds = Math.floor(time); - - var finalTime = strPadLeft(hours, "0", 2) + ':' + strPadLeft(minutes,'0',2)+ ':' + strPadLeft(seconds,'0',2); - return finalTime; - } - - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.AllButtons - - onWheel: - { - wheel.accepted = true; - } - } - - MachineSelection - { - id: machineSelection - width: base.width - configSelection.width - separator.width - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.left: parent.left - } - - Rectangle - { - id: separator - visible: configSelection.visible - width: visible ? Math.round(UM.Theme.getSize("sidebar_lining_thin").height / 2) : 0 - height: UM.Theme.getSize("sidebar_header").height - color: UM.Theme.getColor("sidebar_lining_thin") - anchors.left: machineSelection.right - } - - ConfigurationSelection - { - id: configSelection - visible: isNetworkPrinter && printerConnected - width: visible ? Math.round(base.width * 0.15) : 0 - height: UM.Theme.getSize("sidebar_header").height - anchors.top: base.top - anchors.right: parent.right - panelWidth: base.width - } - - SidebarHeader { - id: header - width: parent.width - visible: !hideSettings && (machineExtruderCount.properties.value > 1 || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariants) - anchors.top: machineSelection.bottom - - onShowTooltip: base.showTooltip(item, location, text) - onHideTooltip: base.hideTooltip() - } - - Rectangle { - id: headerSeparator - width: parent.width - visible: settingsModeSelection.visible && header.visible - height: visible ? UM.Theme.getSize("sidebar_lining").height : 0 - color: UM.Theme.getColor("sidebar_lining") - anchors.top: header.bottom - anchors.topMargin: visible ? UM.Theme.getSize("sidebar_margin").height : 0 - } - - onCurrentModeIndexChanged: - { - UM.Preferences.setValue("cura/active_mode", currentModeIndex); - if(modesListModel.count > base.currentModeIndex) - { - sidebarContents.replace(modesListModel.get(base.currentModeIndex).item, { "replace": true }) - } - } - - Label - { - id: settingsModeLabel - text: !hideSettings ? catalog.i18nc("@label:listbox", "Print Setup") : catalog.i18nc("@label:listbox", "Print Setup disabled\nG-code files cannot be modified") - renderType: Text.NativeRendering - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.top: hideSettings ? machineSelection.bottom : headerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - width: Math.round(parent.width * 0.45) - font: UM.Theme.getFont("large") - color: UM.Theme.getColor("text") - visible: !hideView - } - - // Settings mode selection toggle - Rectangle - { - id: settingsModeSelection - color: "transparent" - - width: Math.round(parent.width * 0.55) - height: UM.Theme.getSize("sidebar_header_mode_toggle").height - - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.top: - { - if (settingsModeLabel.contentWidth >= parent.width - width - UM.Theme.getSize("sidebar_margin").width * 2) - { - return settingsModeLabel.bottom; - } - else - { - return headerSeparator.bottom; - } - } - - visible: !hideSettings && !hideView - - Component - { - id: wizardDelegate - - Button - { - id: control - - height: settingsModeSelection.height - width: Math.round(parent.width / 2) - - anchors.left: parent.left - anchors.leftMargin: model.index * Math.round(settingsModeSelection.width / 2) - anchors.verticalCenter: parent.verticalCenter - - ButtonGroup.group: modeMenuGroup - - checkable: true - checked: base.currentModeIndex == index - onClicked: base.currentModeIndex = index - - onHoveredChanged: - { - if (hovered) - { - tooltipDelayTimer.item = settingsModeSelection - tooltipDelayTimer.text = model.tooltipText - tooltipDelayTimer.start() - } - else - { - tooltipDelayTimer.stop() - base.hideTooltip() - } - } - - background: Rectangle - { - border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width - border.color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_border") : control.hovered ? UM.Theme.getColor("action_button_hovered_border"): UM.Theme.getColor("action_button_border") - - // for some reason, QtQuick decided to use the color of the background property as text color for the contentItem, so here it is - color: (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active") : control.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") - } - - contentItem: Label - { - text: model.text - font: UM.Theme.getFont("default") - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - renderType: Text.NativeRendering - elide: Text.ElideRight - color: - { - if(control.pressed) - { - return UM.Theme.getColor("action_button_active_text"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_text"); - } - return UM.Theme.getColor("action_button_text"); - } - } - } - } - - ButtonGroup - { - id: modeMenuGroup - } - - ListView - { - id: modesList - model: modesListModel - delegate: wizardDelegate - anchors.top: parent.top - anchors.left: parent.left - width: parent.width - } - } - - StackView - { - id: sidebarContents - - anchors.bottom: footerSeparator.top - anchors.top: settingsModeSelection.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.left: base.left - anchors.right: base.right - visible: !hideSettings - - replaceEnter: Transition { - PropertyAnimation { - property: "opacity" - from: 0 - to:1 - duration: 100 - } - } - - replaceExit: Transition { - PropertyAnimation { - property: "opacity" - from: 1 - to:0 - duration: 100 - } - } - } - - Loader - { - anchors.bottom: footerSeparator.top - anchors.top: headerSeparator.bottom - anchors.left: base.left - anchors.right: base.right - source: "SidebarContents.qml" - } - - Rectangle - { - id: footerSeparator - width: parent.width - height: UM.Theme.getSize("sidebar_lining").height - color: UM.Theme.getColor("sidebar_lining") - anchors.bottom: printSpecs.top - anchors.bottomMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 2 + UM.Theme.getSize("progressbar").height + UM.Theme.getFont("default_bold").pixelSize) - } - - Item - { - id: printSpecs - anchors.left: parent.left - anchors.bottom: parent.bottom - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height - height: timeDetails.height + costSpec.height - width: base.width - (saveButton.buttonRowWidth + UM.Theme.getSize("sidebar_margin").width) - clip: true - - Label - { - id: timeDetails - anchors.left: parent.left - anchors.bottom: costSpec.top - font: UM.Theme.getFont("large") - color: UM.Theme.getColor("text_subtext") - text: (!base.printDuration || !base.printDuration.valid) ? catalog.i18nc("@label Hours and minutes", "00h 00min") : base.printDuration.getDisplayString(UM.DurationFormat.Short) - renderType: Text.NativeRendering - - MouseArea - { - id: timeDetailsMouseArea - anchors.fill: parent - hoverEnabled: true - - onEntered: - { - if(base.printDuration.valid && !base.printDuration.isTotalDurationZero) - { - // All the time information for the different features is achieved - var print_time = PrintInformation.getFeaturePrintTimes(); - var total_seconds = parseInt(base.printDuration.getDisplayString(UM.DurationFormat.Seconds)) - - // A message is created and displayed when the user hover the time label - var tooltip_html = "<b>%1</b><br/><table width=\"100%\">".arg(catalog.i18nc("@tooltip", "Time specification")); - for(var feature in print_time) - { - if(!print_time[feature].isTotalDurationZero) - { - tooltip_html += "<tr><td>" + feature + ":</td>" + - "<td align=\"right\" valign=\"bottom\"> %1</td>".arg(print_time[feature].getDisplayString(UM.DurationFormat.ISO8601).slice(0,-3)) + - "<td align=\"right\" valign=\"bottom\"> %1%</td>".arg(Math.round(100 * parseInt(print_time[feature].getDisplayString(UM.DurationFormat.Seconds)) / total_seconds)) + - "</td></tr>"; - } - } - tooltip_html += "</table>"; - - base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), tooltip_html); - } - } - onExited: - { - base.hideTooltip(); - } - } - } - - Label - { - function formatRow(items) - { - var row_html = "<tr>"; - for(var item = 0; item < items.length; item++) - { - if (item == 0) - { - row_html += "<td valign=\"bottom\">%1</td>".arg(items[item]); - } - else - { - row_html += "<td align=\"right\" valign=\"bottom\"> %1</td>".arg(items[item]); - } - } - row_html += "</tr>"; - return row_html; - } - - function getSpecsData() - { - var lengths = []; - var total_length = 0; - var weights = []; - var total_weight = 0; - var costs = []; - var total_cost = 0; - var some_costs_known = false; - var names = []; - if(base.printMaterialLengths) - { - for(var index = 0; index < base.printMaterialLengths.length; index++) - { - if(base.printMaterialLengths[index] > 0) - { - names.push(base.printMaterialNames[index]); - lengths.push(base.printMaterialLengths[index].toFixed(2)); - weights.push(String(Math.round(base.printMaterialWeights[index]))); - var cost = base.printMaterialCosts[index] == undefined ? 0 : base.printMaterialCosts[index].toFixed(2); - costs.push(cost); - if(cost > 0) - { - some_costs_known = true; - } - - total_length += base.printMaterialLengths[index]; - total_weight += base.printMaterialWeights[index]; - total_cost += base.printMaterialCosts[index]; - } - } - } - if(lengths.length == 0) - { - lengths = ["0.00"]; - weights = ["0"]; - costs = ["0.00"]; - } - - var tooltip_html = "<b>%1</b><br/><table width=\"100%\">".arg(catalog.i18nc("@label", "Cost specification")); - for(var index = 0; index < lengths.length; index++) - { - tooltip_html += formatRow([ - "%1:".arg(names[index]), - catalog.i18nc("@label m for meter", "%1m").arg(lengths[index]), - catalog.i18nc("@label g for grams", "%1g").arg(weights[index]), - "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(costs[index]), - ]); - } - if(lengths.length > 1) - { - tooltip_html += formatRow([ - catalog.i18nc("@label", "Total:"), - catalog.i18nc("@label m for meter", "%1m").arg(total_length.toFixed(2)), - catalog.i18nc("@label g for grams", "%1g").arg(Math.round(total_weight)), - "%1 %2".arg(UM.Preferences.getValue("cura/currency")).arg(total_cost.toFixed(2)), - ]); - } - tooltip_html += "</table>"; - tooltipText = tooltip_html; - - return tooltipText - } - - id: costSpec - anchors.left: parent.left - anchors.bottom: parent.bottom - font: UM.Theme.getFont("very_small") - renderType: Text.NativeRendering - color: UM.Theme.getColor("text_subtext") - elide: Text.ElideMiddle - width: parent.width - property string tooltipText - text: - { - var lengths = []; - var weights = []; - var costs = []; - var someCostsKnown = false; - if(base.printMaterialLengths) { - for(var index = 0; index < base.printMaterialLengths.length; index++) - { - if(base.printMaterialLengths[index] > 0) - { - lengths.push(base.printMaterialLengths[index].toFixed(2)); - weights.push(String(Math.round(base.printMaterialWeights[index]))); - var cost = base.printMaterialCosts[index] == undefined ? 0 : base.printMaterialCosts[index].toFixed(2); - costs.push(cost); - if(cost > 0) - { - someCostsKnown = true; - } - } - } - } - if(lengths.length == 0) - { - lengths = ["0.00"]; - weights = ["0"]; - costs = ["0.00"]; - } - var result = lengths.join(" + ") + "m / ~ " + weights.join(" + ") + "g"; - if(someCostsKnown) - { - result += " / ~ " + costs.join(" + ") + " " + UM.Preferences.getValue("cura/currency"); - } - return result; - } - MouseArea - { - id: costSpecMouseArea - anchors.fill: parent - hoverEnabled: true - - onEntered: - { - - if(base.printDuration.valid && !base.printDuration.isTotalDurationZero) - { - var show_data = costSpec.getSpecsData() - - base.showTooltip(parent, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), show_data); - } - } - onExited: - { - base.hideTooltip(); - } - } - } - } - - // SaveButton is actually the bottom footer panel. - SaveButton - { - id: saveButton - implicitWidth: base.width - anchors.top: footerSeparator.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.bottom: parent.bottom - } - - SidebarTooltip - { - id: tooltip - } - - // Setting mode: Recommended or Custom - ListModel - { - id: modesListModel - } - - SidebarSimple - { - id: sidebarSimple - visible: false - - onShowTooltip: base.showTooltip(item, location, text) - onHideTooltip: base.hideTooltip() - } - - SidebarAdvanced - { - id: sidebarAdvanced - visible: false - - onShowTooltip: base.showTooltip(item, location, text) - onHideTooltip: base.hideTooltip() - } - - Component.onCompleted: - { - modesListModel.append({ - text: catalog.i18nc("@title:tab", "Recommended"), - tooltipText: catalog.i18nc("@tooltip", "<b>Recommended Print Setup</b><br/><br/>Print with the recommended settings for the selected printer, material and quality."), - item: sidebarSimple - }) - modesListModel.append({ - text: catalog.i18nc("@title:tab", "Custom"), - tooltipText: catalog.i18nc("@tooltip", "<b>Custom Print Setup</b><br/><br/>Print with finegrained control over every last bit of the slicing process."), - item: sidebarAdvanced - }) - - var index = Math.round(UM.Preferences.getValue("cura/active_mode")) - - if(index != null && !isNaN(index)) - { - currentModeIndex = index; - } - else - { - currentModeIndex = 0; - } - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStack: Cura.MachineManager.activeMachine - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: machineHeatedBed - - containerStack: Cura.MachineManager.activeMachine - key: "machine_heated_bed" - watchedProperties: [ "value" ] - storeIndex: 0 - } -} diff --git a/resources/qml/PrimaryButton.qml b/resources/qml/PrimaryButton.qml new file mode 100644 index 0000000000..fca63d2cdb --- /dev/null +++ b/resources/qml/PrimaryButton.qml @@ -0,0 +1,20 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 + +import UM 1.4 as UM +import Cura 1.1 as Cura + + +Cura.ActionButton +{ + shadowEnabled: true + shadowColor: enabled ? UM.Theme.getColor("primary_button_shadow"): UM.Theme.getColor("action_button_disabled_shadow") + color: UM.Theme.getColor("primary_button") + textColor: UM.Theme.getColor("primary_button_text") + outlineColor: "transparent" + disabledColor: UM.Theme.getColor("action_button_disabled") + textDisabledColor: UM.Theme.getColor("action_button_disabled_text") + hoverColor: UM.Theme.getColor("primary_button_hover") +}
\ No newline at end of file diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml index 12e95d1e89..d44acf0adb 100644 --- a/resources/qml/PrintMonitor.qml +++ b/resources/qml/PrintMonitor.qml @@ -11,136 +11,176 @@ import Cura 1.0 as Cura import "PrinterOutput" -Column + +Item { - id: printMonitor + id: base + UM.I18nCatalog { id: catalog; name: "cura"} + + function showTooltip(item, position, text) + { + tooltip.text = text; + position = item.mapToItem(base, position.x - UM.Theme.getSize("default_arrow").width, position.y); + tooltip.show(position); + } + + function hideTooltip() + { + tooltip.hide(); + } + + function strPadLeft(string, pad, length) { + return (new Array(length + 1).join(pad) + string).slice(-length); + } + + function getPrettyTime(time) + { + var hours = Math.floor(time / 3600) + time -= hours * 3600 + var minutes = Math.floor(time / 60); + time -= minutes * 60 + var seconds = Math.floor(time); + + var finalTime = strPadLeft(hours, "0", 2) + ":" + strPadLeft(minutes, "0", 2) + ":" + strPadLeft(seconds, "0", 2); + return finalTime; + } + property var connectedDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null property var activePrinter: connectedDevice != null ? connectedDevice.activePrinter : null property var activePrintJob: activePrinter != null ? activePrinter.activePrintJob: null - Cura.ExtrudersModel + PrintSetupTooltip { - id: extrudersModel - simpleNames: true + id: tooltip } - OutputDeviceHeader + Column { - outputDevice: connectedDevice - } + id: printMonitor - Rectangle - { - color: UM.Theme.getColor("sidebar_lining") - width: parent.width - height: childrenRect.height + anchors.fill: parent + + property var extrudersModel: CuraApplication.getExtrudersModel() - Flow + OutputDeviceHeader { - id: extrudersGrid - spacing: UM.Theme.getSize("sidebar_lining_thin").width + outputDevice: connectedDevice + } + + Rectangle + { + color: UM.Theme.getColor("wide_lining") width: parent.width + height: childrenRect.height - Repeater + Flow { - id: extrudersRepeater - model: activePrinter != null ? activePrinter.extruders : null + id: extrudersGrid + spacing: UM.Theme.getSize("thick_lining").width + width: parent.width - ExtruderBox + Repeater { - color: UM.Theme.getColor("sidebar") - width: index == machineExtruderCount.properties.value - 1 && index % 2 == 0 ? extrudersGrid.width : Math.round(extrudersGrid.width / 2 - UM.Theme.getSize("sidebar_lining_thin").width / 2) - extruderModel: modelData + id: extrudersRepeater + model: activePrinter != null ? activePrinter.extruders : null + + ExtruderBox + { + color: UM.Theme.getColor("main_background") + width: index == machineExtruderCount.properties.value - 1 && index % 2 == 0 ? extrudersGrid.width : Math.round(extrudersGrid.width / 2 - UM.Theme.getSize("thick_lining").width / 2) + extruderModel: modelData + } } } } - } - Rectangle - { - color: UM.Theme.getColor("sidebar_lining") - width: parent.width - height: UM.Theme.getSize("sidebar_lining_thin").width - } + Rectangle + { + color: UM.Theme.getColor("wide_lining") + width: parent.width + height: UM.Theme.getSize("thick_lining").width + } - HeatedBedBox - { - visible: { - if(activePrinter != null && activePrinter.bedTemperature != -1) + HeatedBedBox + { + visible: { - return true + if(activePrinter != null && activePrinter.bedTemperature != -1) + { + return true + } + return false } - return false + printerModel: activePrinter } - printerModel: activePrinter - } - UM.SettingPropertyProvider - { - id: bedTemperature - containerStack: Cura.MachineManager.activeMachine - key: "material_bed_temperature" - watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"] - storeIndex: 0 + UM.SettingPropertyProvider + { + id: bedTemperature + containerStack: Cura.MachineManager.activeMachine + key: "material_bed_temperature" + watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"] + storeIndex: 0 - property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None" - } + property var resolve: Cura.MachineManager.activeStack != Cura.MachineManager.activeMachine ? properties.resolve : "None" + } - UM.SettingPropertyProvider - { - id: machineExtruderCount - containerStack: Cura.MachineManager.activeMachine - key: "machine_extruder_count" - watchedProperties: ["value"] - } + UM.SettingPropertyProvider + { + id: machineExtruderCount + containerStack: Cura.MachineManager.activeMachine + key: "machine_extruder_count" + watchedProperties: ["value"] + } - ManualPrinterControl - { - printerModel: activePrinter - visible: activePrinter != null ? activePrinter.canControlManually : false - } + ManualPrinterControl + { + printerModel: activePrinter + visible: activePrinter != null ? activePrinter.canControlManually : false + } - MonitorSection - { - label: catalog.i18nc("@label", "Active print") - width: base.width - visible: activePrinter != null - } + MonitorSection + { + label: catalog.i18nc("@label", "Active print") + width: base.width + visible: activePrinter != null + } - MonitorItem - { - label: catalog.i18nc("@label", "Job Name") - value: activePrintJob != null ? activePrintJob.name : "" - width: base.width - visible: activePrinter != null - } + MonitorItem + { + label: catalog.i18nc("@label", "Job Name") + value: activePrintJob != null ? activePrintJob.name : "" + width: base.width + visible: activePrinter != null + } - MonitorItem - { - label: catalog.i18nc("@label", "Printing Time") - value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal) : "" - width: base.width - visible: activePrinter != null - } + MonitorItem + { + label: catalog.i18nc("@label", "Printing Time") + value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal) : "" + width: base.width + visible: activePrinter != null + } - MonitorItem - { - label: catalog.i18nc("@label", "Estimated time left") - value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal - activePrintJob.timeElapsed) : "" - visible: + MonitorItem { - if(activePrintJob == null) + label: catalog.i18nc("@label", "Estimated time left") + value: activePrintJob != null ? getPrettyTime(activePrintJob.timeTotal - activePrintJob.timeElapsed) : "" + visible: { - return false - } + if(activePrintJob == null) + { + return false + } - return (activePrintJob.state == "printing" || - activePrintJob.state == "resuming" || - activePrintJob.state == "pausing" || - activePrintJob.state == "paused") + return (activePrintJob.state == "printing" || + activePrintJob.state == "resuming" || + activePrintJob.state == "pausing" || + activePrintJob.state == "paused") + } + width: base.width } - width: base.width } -} +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml new file mode 100644 index 0000000000..98bb5c0405 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml @@ -0,0 +1,131 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 + +import UM 1.3 as UM +import Cura 1.0 as Cura + + +Item +{ + id: customPrintSetup + + property real padding: UM.Theme.getSize("default_margin").width + property bool multipleExtruders: extrudersModel.count > 1 + + property var extrudersModel: CuraApplication.getExtrudersModel() + + // Profile selector row + GlobalProfileSelector + { + id: globalProfileRow + anchors + { + top: parent.top + topMargin: parent.padding + left: parent.left + leftMargin: parent.padding + right: parent.right + rightMargin: parent.padding + } + } + + UM.TabRow + { + id: tabBar + + visible: multipleExtruders // The tab row is only visible when there are more than 1 extruder + + anchors + { + top: globalProfileRow.bottom + topMargin: UM.Theme.getSize("default_margin").height + left: parent.left + leftMargin: parent.padding + right: parent.right + rightMargin: parent.padding + } + + Repeater + { + id: repeater + model: extrudersModel + delegate: UM.TabRowButton + { + contentItem: Item + { + Cura.ExtruderIcon + { + anchors.horizontalCenter: parent.horizontalCenter + materialColor: model.color + extruderEnabled: model.enabled + } + } + onClicked: + { + Cura.ExtruderManager.setActiveExtruderIndex(tabBar.currentIndex) + } + } + } + + //When active extruder changes for some other reason, switch tabs. + //Don't directly link currentIndex to Cura.ExtruderManager.activeExtruderIndex! + //This causes a segfault in Qt 5.11. Something with VisualItemModel removing index -1. We have to use setCurrentIndex instead. + Connections + { + target: Cura.ExtruderManager + onActiveExtruderChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex); + } + } + + //When the model of the extruders is rebuilt, the list of extruders is briefly emptied and rebuilt. + //This causes the currentIndex of the tab to be in an invalid position which resets it to 0. + //Therefore we need to change it back to what it was: The active extruder index. + Connections + { + target: repeater.model + onModelChanged: + { + tabBar.setCurrentIndex(Cura.ExtruderManager.activeExtruderIndex) + } + } + } + + Rectangle + { + anchors + { + top: tabBar.visible ? tabBar.bottom : globalProfileRow.bottom + topMargin: -UM.Theme.getSize("default_lining").width + left: parent.left + leftMargin: parent.padding + right: parent.right + rightMargin: parent.padding + bottom: parent.bottom + } + z: tabBar.z - 1 + // Don't show the border when only one extruder + + border.color: tabBar.visible ? UM.Theme.getColor("lining") : "transparent" + border.width: UM.Theme.getSize("default_lining").width + + color: UM.Theme.getColor("main_background") + Cura.SettingView + { + anchors + { + fill: parent + topMargin: UM.Theme.getSize("default_margin").height + leftMargin: UM.Theme.getSize("default_margin").width + // Small space for the scrollbar + rightMargin: UM.Theme.getSize("narrow_margin").width + // Compensate for the negative margin in the parent + bottomMargin: UM.Theme.getSize("default_lining").width + } + } + } +} diff --git a/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml b/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml new file mode 100644 index 0000000000..32c07a52a6 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Custom/GlobalProfileSelector.qml @@ -0,0 +1,100 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Layouts 1.2 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: globalProfileRow + height: childrenRect.height + + Label + { + id: globalProfileLabel + anchors + { + top: parent.top + bottom: parent.bottom + left: parent.left + right: globalProfileSelection.left + } + text: catalog.i18nc("@label", "Profile") + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + verticalAlignment: Text.AlignVCenter + } + + ToolButton + { + id: globalProfileSelection + + text: generateActiveQualityText() + width: UM.Theme.getSize("print_setup_big_item").width + height: UM.Theme.getSize("print_setup_big_item").height + anchors + { + top: parent.top + right: parent.right + } + tooltip: Cura.MachineManager.activeQualityOrQualityChangesName + style: UM.Theme.styles.print_setup_header_button + activeFocusOnPress: true + menu: Cura.ProfileMenu { } + + function generateActiveQualityText() + { + var result = Cura.MachineManager.activeQualityOrQualityChangesName + if (Cura.MachineManager.isActiveQualityExperimental) + { + result += " (Experimental)" + } + + if (Cura.MachineManager.isActiveQualitySupported) + { + if (Cura.MachineManager.activeQualityLayerHeight > 0) + { + result += " <font color=\"" + UM.Theme.getColor("text_detail") + "\">" + result += " - " + result += Cura.MachineManager.activeQualityLayerHeight + "mm" + result += "</font>" + } + } + + return result + } + + UM.SimpleButton + { + id: customisedSettings + + visible: Cura.MachineManager.hasUserSettings + width: UM.Theme.getSize("print_setup_icon").width + height: UM.Theme.getSize("print_setup_icon").height + + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: Math.round(UM.Theme.getSize("setting_preferences_button_margin").width - UM.Theme.getSize("thick_margin").width) + + color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); + iconSource: UM.Theme.getIcon("star") + + onClicked: + { + forceActiveFocus(); + Cura.Actions.manageProfiles.trigger() + } + onEntered: + { + var content = catalog.i18nc("@tooltip","Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") + base.showTooltip(globalProfileRow, Qt.point(-UM.Theme.getSize("default_margin").width, 0), content) + } + onExited: base.hideTooltip() + } + } +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelector.qml b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml new file mode 100644 index 0000000000..48ac07679d --- /dev/null +++ b/resources/qml/PrintSetupSelector/PrintSetupSelector.qml @@ -0,0 +1,35 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.0 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +Cura.ExpandableComponent +{ + id: printSetupSelector + + property bool preSlicedData: PrintInformation.preSliced + + contentPadding: UM.Theme.getSize("default_lining").width + contentHeaderTitle: catalog.i18nc("@label", "Print settings") + enabled: !preSlicedData + disabledText: catalog.i18nc("@label shown when we load a Gcode file", "Print setup disabled. G code file can not be modified.") + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + headerItem: PrintSetupSelectorHeader {} + + property var extrudersModel: CuraApplication.getExtrudersModel() + + contentItem: PrintSetupSelectorContents {} + + onExpandedChanged: UM.Preferences.setValue("view/settings_visible", expanded) + Component.onCompleted: expanded = UM.Preferences.getValue("view/settings_visible") +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml new file mode 100644 index 0000000000..e5de8bfb7d --- /dev/null +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml @@ -0,0 +1,202 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +import "Recommended" +import "Custom" + +Item +{ + id: content + + width: UM.Theme.getSize("print_setup_widget").width - 2 * UM.Theme.getSize("default_margin").width + height: contents.height + buttonRow.height + + enum Mode + { + Recommended = 0, + Custom = 1 + } + + // Set the current mode index to the value that is stored in the preferences or Recommended mode otherwise. + property int currentModeIndex: + { + var index = Math.round(UM.Preferences.getValue("cura/active_mode")) + + if (index != null && !isNaN(index)) + { + return index + } + return PrintSetupSelectorContents.Mode.Recommended + } + onCurrentModeIndexChanged: UM.Preferences.setValue("cura/active_mode", currentModeIndex) + + Item + { + id: contents + // Use the visible property instead of checking the currentModeIndex. That creates a binding that + // evaluates the new height every time the visible property changes. + height: recommendedPrintSetup.visible ? recommendedPrintSetup.height : customPrintSetup.height + + anchors + { + top: parent.top + left: parent.left + right: parent.right + } + + RecommendedPrintSetup + { + id: recommendedPrintSetup + anchors + { + left: parent.left + right: parent.right + top: parent.top + } + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Recommended + } + + CustomPrintSetup + { + id: customPrintSetup + anchors + { + left: parent.left + right: parent.right + top: parent.top + } + height: UM.Preferences.getValue("view/settings_list_height") - UM.Theme.getSize("default_margin").height + Connections + { + target: UM.Preferences + onPreferenceChanged: + { + if (preference !== "view/settings_list_height" && preference !== "general/window_height" && preference !== "general/window_state") + { + return; + } + + customPrintSetup.height = + Math.min + ( + UM.Preferences.getValue("view/settings_list_height"), + base.height - (customPrintSetup.mapToItem(null, 0, 0).y + buttonRow.height + UM.Theme.getSize("default_margin").height) + ); + } + } + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom + } + } + + Rectangle + { + id: buttonsSeparator + + // The buttonsSeparator is inside the contents. This is to avoid a double line in the bottom + anchors.bottom: contents.bottom + width: parent.width + height: UM.Theme.getSize("default_lining").height + color: UM.Theme.getColor("lining") + } + + Item + { + id: buttonRow + property real padding: UM.Theme.getSize("default_margin").width + height: childrenRect.height + 2 * padding + + anchors + { + bottom: parent.bottom + left: parent.left + right: parent.right + } + + Cura.SecondaryButton + { + id: recommendedButton + anchors.top: parent.top + anchors.left: parent.left + anchors.margins: parent.padding + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Recommended") + iconSource: UM.Theme.getIcon("arrow_left") + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom + onClicked: currentModeIndex = PrintSetupSelectorContents.Mode.Recommended + } + + Cura.SecondaryButton + { + anchors.top: parent.top + anchors.right: parent.right + anchors.margins: UM.Theme.getSize("default_margin").width + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Custom") + iconSource: UM.Theme.getIcon("arrow_right") + isIconOnRightSide: true + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Recommended + onClicked: currentModeIndex = PrintSetupSelectorContents.Mode.Custom + } + + //Invisible area at the bottom with which you can resize the panel. + MouseArea + { + anchors + { + left: parent.left + right: parent.right + bottom: parent.bottom + top: recommendedButton.bottom + topMargin: UM.Theme.getSize("default_lining").height + } + cursorShape: Qt.SplitVCursor + visible: currentModeIndex == PrintSetupSelectorContents.Mode.Custom + drag + { + target: parent + axis: Drag.YAxis + } + onMouseYChanged: + { + if(drag.active) + { + // position of mouse relative to dropdown align vertical centre of mouse area to cursor + // v------------------------------v v------------v + var h = mouseY + buttonRow.y + content.y - height / 2 | 0; + if(h < 200 * screenScaleFactor) //Enforce a minimum size. + { + h = 200 * screenScaleFactor; + } + + //Absolute mouse Y position in the window, to prevent it from going outside the window. + var mouse_absolute_y = mapToGlobal(mouseX, mouseY).y - UM.Preferences.getValue("general/window_top"); + if(mouse_absolute_y > base.height) + { + h -= mouse_absolute_y - base.height; + } + + UM.Preferences.setValue("view/settings_list_height", h); + } + } + + UM.RecolorImage + { + width: parent.width * 0.05 + height: parent.height * 0.3 + + anchors.centerIn: parent + + source: UM.Theme.getIcon("grip_lines") + color: UM.Theme.getColor("lining") + } + } + } +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml new file mode 100644 index 0000000000..96b244d803 --- /dev/null +++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorHeader.qml @@ -0,0 +1,88 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.3 + +import UM 1.3 as UM +import Cura 1.0 as Cura + +RowLayout +{ + property string enabledText: catalog.i18nc("@label:Should be short", "On") + property string disabledText: catalog.i18nc("@label:Should be short", "Off") + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_layer_height") + text: + { + if (Cura.MachineManager.activeStack) + { + var text = Cura.MachineManager.activeQualityOrQualityChangesName + if (!Cura.MachineManager.hasNotSupportedQuality) + { + text += " " + layerHeight.properties.value + "mm" + text += Cura.MachineManager.isActiveQualityExperimental ? " - " + catalog.i18nc("@label", "Experimental") : "" + } + return text + } + return "" + } + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: layerHeight + containerStack: Cura.MachineManager.activeStack + key: "layer_height" + watchedProperties: ["value"] + } + } + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_infill") + text: Cura.MachineManager.activeStack ? parseInt(infillDensity.properties.value) + "%" : "0%" + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: infillDensity + containerStack: Cura.MachineManager.activeStack + key: "infill_sparse_density" + watchedProperties: ["value"] + } + } + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_support") + text: supportEnabled.properties.value == "True" ? enabledText : disabledText + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: supportEnabled + containerStack: Cura.MachineManager.activeMachine + key: "support_enable" + watchedProperties: ["value"] + } + } + + Cura.IconWithText + { + source: UM.Theme.getIcon("category_adhesion") + text: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" ? enabledText : disabledText + font: UM.Theme.getFont("medium") + + UM.SettingPropertyProvider + { + id: platformAdhesionType + containerStack: Cura.MachineManager.activeMachine + key: "adhesion_type" + watchedProperties: [ "value"] + } + } +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml new file mode 100644 index 0000000000..941199707c --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml @@ -0,0 +1,101 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Adhesion +// +Item +{ + id: enableAdhesionRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + + Cura.IconWithText + { + id: enableAdhesionRowTitle + anchors.top: parent.top + anchors.left: parent.left + source: UM.Theme.getIcon("category_adhesion") + text: catalog.i18nc("@label", "Adhesion") + font: UM.Theme.getFont("medium") + width: labelColumnWidth + } + + Item + { + id: enableAdhesionContainer + height: enableAdhesionCheckBox.height + + anchors + { + left: enableAdhesionRowTitle.right + right: parent.right + verticalCenter: enableAdhesionRowTitle.verticalCenter + } + + CheckBox + { + id: enableAdhesionCheckBox + anchors.verticalCenter: parent.verticalCenter + + property alias _hovered: adhesionMouseArea.containsMouse + + //: Setting enable printing build-plate adhesion helper checkbox + style: UM.Theme.styles.checkbox + enabled: recommendedPrintSetup.settingsEnabled + + visible: platformAdhesionType.properties.enabled == "True" + checked: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" + + MouseArea + { + id: adhesionMouseArea + anchors.fill: parent + hoverEnabled: true + + onClicked: + { + var adhesionType = "skirt" + if (!parent.checked) + { + // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft + platformAdhesionType.removeFromContainer(0) + adhesionType = platformAdhesionType.properties.value + if(adhesionType == "skirt" || adhesionType == "none") + { + // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim + adhesionType = "brim" + } + } + platformAdhesionType.setPropertyValue("value", adhesionType) + } + + onEntered: + { + base.showTooltip(enableAdhesionCheckBox, Qt.point(-enableAdhesionContainer.x - UM.Theme.getSize("thick_margin").width, 0), + catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")); + } + onExited: base.hideTooltip() + } + } + } + + UM.SettingPropertyProvider + { + id: platformAdhesionType + containerStack: Cura.MachineManager.activeMachine + removeUnusedValue: false //Doesn't work with settings that are resolved. + key: "adhesion_type" + watchedProperties: [ "value", "enabled" ] + storeIndex: 0 + } +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml new file mode 100644 index 0000000000..19f199fea6 --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedInfillDensitySelector.qml @@ -0,0 +1,255 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Infill +// +Item +{ + id: infillRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + + // Create a binding to update the icon when the infill density changes + Binding + { + target: infillRowTitle + property: "source" + value: + { + var density = parseInt(infillDensity.properties.value) + if (parseInt(infillSteps.properties.value) != 0) + { + return UM.Theme.getIcon("gradual") + } + if (density <= 0) + { + return UM.Theme.getIcon("hollow") + } + if (density < 40) + { + return UM.Theme.getIcon("sparse") + } + if (density < 90) + { + return UM.Theme.getIcon("dense") + } + return UM.Theme.getIcon("solid") + } + } + + // We use a binding to make sure that after manually setting infillSlider.value it is still bound to the property provider + Binding + { + target: infillSlider + property: "value" + value: parseInt(infillDensity.properties.value) + } + + // Here are the elements that are shown in the left column + Cura.IconWithText + { + id: infillRowTitle + anchors.top: parent.top + anchors.left: parent.left + source: UM.Theme.getIcon("category_infill") + text: catalog.i18nc("@label", "Infill") + " (%)" + font: UM.Theme.getFont("medium") + width: labelColumnWidth + } + + Item + { + id: infillSliderContainer + height: childrenRect.height + + anchors + { + left: infillRowTitle.right + right: parent.right + verticalCenter: infillRowTitle.verticalCenter + } + + Slider + { + id: infillSlider + + width: parent.width + height: UM.Theme.getSize("print_setup_slider_handle").height // The handle is the widest element of the slider + + minimumValue: 0 + maximumValue: 100 + stepSize: 1 + tickmarksEnabled: true + + // disable slider when gradual support is enabled + enabled: parseInt(infillSteps.properties.value) == 0 + + // set initial value from stack + value: parseInt(infillDensity.properties.value) + + style: SliderStyle + { + //Draw line + groove: Item + { + Rectangle + { + height: UM.Theme.getSize("print_setup_slider_groove").height + width: control.width - UM.Theme.getSize("print_setup_slider_handle").width + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + } + } + + handle: Rectangle + { + id: handleButton + color: control.enabled ? UM.Theme.getColor("primary") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width + implicitHeight: implicitWidth + radius: Math.round(implicitWidth / 2) + } + + tickmarks: Repeater + { + id: repeater + model: control.maximumValue / control.stepSize + 1 + + Rectangle + { + color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: UM.Theme.getSize("print_setup_slider_tickmarks").width + implicitHeight: UM.Theme.getSize("print_setup_slider_tickmarks").height + anchors.verticalCenter: parent.verticalCenter + + // Do not use Math.round otherwise the tickmarks won't be aligned + x: ((styleData.handleWidth / 2) - (implicitWidth / 2) + (index * ((repeater.width - styleData.handleWidth) / (repeater.count-1)))) + radius: Math.round(implicitWidth / 2) + visible: (index % 10) == 0 // Only show steps of 10% + + Label + { + text: index + font: UM.Theme.getFont("default") + visible: (index % 20) == 0 // Only show steps of 20% + anchors.horizontalCenter: parent.horizontalCenter + y: UM.Theme.getSize("thin_margin").height + renderType: Text.NativeRendering + color: UM.Theme.getColor("quality_slider_available") + } + } + } + } + + onValueChanged: + { + // Don't round the value if it's already the same + if (parseInt(infillDensity.properties.value) == infillSlider.value) + { + return + } + + // Round the slider value to the nearest multiple of 10 (simulate step size of 10) + var roundedSliderValue = Math.round(infillSlider.value / 10) * 10 + + // Update the slider value to represent the rounded value + infillSlider.value = roundedSliderValue + + // Update value only if the Recomended mode is Active, + // Otherwise if I change the value in the Custom mode the Recomended view will try to repeat + // same operation + var active_mode = UM.Preferences.getValue("cura/active_mode") + + if (active_mode == 0 || active_mode == "simple") + { + Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", roundedSliderValue) + Cura.MachineManager.resetSettingForAllExtruders("infill_line_distance") + } + } + } + } + + // Gradual Support Infill Checkbox + CheckBox + { + id: enableGradualInfillCheckBox + property alias _hovered: enableGradualInfillMouseArea.containsMouse + + anchors.top: infillSliderContainer.bottom + anchors.topMargin: UM.Theme.getSize("wide_margin").height + anchors.left: infillSliderContainer.left + + text: catalog.i18nc("@label", "Gradual infill") + style: UM.Theme.styles.checkbox + enabled: recommendedPrintSetup.settingsEnabled + visible: infillSteps.properties.enabled == "True" + checked: parseInt(infillSteps.properties.value) > 0 + + MouseArea + { + id: enableGradualInfillMouseArea + + anchors.fill: parent + hoverEnabled: true + enabled: true + + property var previousInfillDensity: parseInt(infillDensity.properties.value) + + onClicked: + { + // Set to 90% only when enabling gradual infill + var newInfillDensity; + if (parseInt(infillSteps.properties.value) == 0) + { + previousInfillDensity = parseInt(infillDensity.properties.value) + newInfillDensity = 90 + } else { + newInfillDensity = previousInfillDensity + } + Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", String(newInfillDensity)) + + var infill_steps_value = 0 + if (parseInt(infillSteps.properties.value) == 0) + { + infill_steps_value = 5 + } + + Cura.MachineManager.setSettingForAllExtruders("gradual_infill_steps", "value", infill_steps_value) + } + + onEntered: base.showTooltip(enableGradualInfillCheckBox, Qt.point(-infillSliderContainer.x - UM.Theme.getSize("thick_margin").width, 0), + catalog.i18nc("@label", "Gradual infill will gradually increase the amount of infill towards the top.")) + + onExited: base.hideTooltip() + } + } + + UM.SettingPropertyProvider + { + id: infillDensity + containerStackId: Cura.MachineManager.activeStackId + key: "infill_sparse_density" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: infillSteps + containerStackId: Cura.MachineManager.activeStackId + key: "gradual_infill_steps" + watchedProperties: ["value", "enabled"] + storeIndex: 0 + } +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml new file mode 100644 index 0000000000..44b3abf7cd --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml @@ -0,0 +1,86 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Item +{ + id: recommendedPrintSetup + + height: childrenRect.height + 2 * padding + + property Action configureSettings + + property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1 + property real padding: UM.Theme.getSize("thick_margin").width + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + Column + { + width: parent.width - 2 * parent.padding + spacing: UM.Theme.getSize("wide_margin").height + + anchors + { + left: parent.left + right: parent.right + top: parent.top + margins: parent.padding + } + + // TODO + property real firstColumnWidth: Math.round(width / 3) + + RecommendedQualityProfileSelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + + RecommendedInfillDensitySelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + + RecommendedSupportSelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + + RecommendedAdhesionSelector + { + width: parent.width + // TODO Create a reusable component with these properties to not define them separately for each component + labelColumnWidth: parent.firstColumnWidth + } + + RecommendedTroubleshootingGuides + { + width: parent.width + } + } + + UM.SettingPropertyProvider + { + id: extrudersEnabledCount + containerStack: Cura.MachineManager.activeMachine + key: "extruders_enabled_count" + watchedProperties: [ "value" ] + storeIndex: 0 + } +} diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml new file mode 100644 index 0000000000..801e76382b --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedQualityProfileSelector.qml @@ -0,0 +1,455 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Quality profile +// +Item +{ + id: qualityRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + property real settingsColumnWidth: width - labelColumnWidth + + Timer + { + id: qualitySliderChangeTimer + interval: 50 + running: false + repeat: false + onTriggered: + { + var item = Cura.QualityProfilesDropDownMenuModel.getItem(qualitySlider.value); + Cura.MachineManager.activeQualityGroup = item.quality_group; + } + } + + Component.onCompleted: qualityModel.update() + + Connections + { + target: Cura.QualityProfilesDropDownMenuModel + onItemsChanged: qualityModel.update() + } + + Connections { + target: base + onVisibleChanged: + { + // update needs to be called when the widgets are visible, otherwise the step width calculation + // will fail because the width of an invisible item is 0. + if (visible) + { + qualityModel.update(); + } + } + } + + ListModel + { + id: qualityModel + + property var totalTicks: 0 + property var availableTotalTicks: 0 + property var existingQualityProfile: 0 + + property var qualitySliderActiveIndex: 0 + property var qualitySliderStepWidth: 0 + property var qualitySliderAvailableMin: 0 + property var qualitySliderAvailableMax: 0 + property var qualitySliderMarginRight: 0 + + function update () + { + reset() + + var availableMin = -1 + var availableMax = -1 + + for (var i = 0; i < Cura.QualityProfilesDropDownMenuModel.rowCount(); i++) + { + var qualityItem = Cura.QualityProfilesDropDownMenuModel.getItem(i) + + // Add each quality item to the UI quality model + qualityModel.append(qualityItem) + + // Set selected value + if (Cura.MachineManager.activeQualityType == qualityItem.quality_type) + { + // set to -1 when switching to user created profile so all ticks are clickable + if (Cura.MachineManager.hasCustomQuality) + { + qualityModel.qualitySliderActiveIndex = -1 + } + else + { + qualityModel.qualitySliderActiveIndex = i + } + + qualityModel.existingQualityProfile = 1 + } + + // Set min available + if (qualityItem.available && availableMin == -1) + { + availableMin = i + } + + // Set max available + if (qualityItem.available) + { + availableMax = i + } + } + + // Set total available ticks for active slider part + if (availableMin != -1) + { + qualityModel.availableTotalTicks = availableMax - availableMin + 1 + } + + // Calculate slider values + calculateSliderStepWidth(qualityModel.totalTicks) + calculateSliderMargins(availableMin, availableMax, qualityModel.totalTicks) + + qualityModel.qualitySliderAvailableMin = availableMin + qualityModel.qualitySliderAvailableMax = availableMax + } + + function calculateSliderStepWidth (totalTicks) + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderStepWidth = totalTicks != 0 ? + ((settingsColumnWidth - UM.Theme.getSize("print_setup_slider_handle").width) / (totalTicks)) : 0 + } + + function calculateSliderMargins (availableMin, availableMax, totalTicks) + { + if (availableMin == -1 || (availableMin == 0 && availableMax == 0)) + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderMarginRight = settingsColumnWidth + } + else if (availableMin == availableMax) + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderMarginRight = (totalTicks - availableMin) * qualitySliderStepWidth + } + else + { + // Do not use Math.round otherwise the tickmarks won't be aligned + qualityModel.qualitySliderMarginRight = (totalTicks - availableMax) * qualitySliderStepWidth + } + } + + function reset () { + qualityModel.clear() + qualityModel.availableTotalTicks = 0 + qualityModel.existingQualityProfile = 0 + + // check, the ticks count cannot be less than zero + qualityModel.totalTicks = Math.max(0, Cura.QualityProfilesDropDownMenuModel.rowCount() - 1) + } + } + + // Here are the elements that are shown in the left column + Item + { + id: titleRow + width: labelColumnWidth + height: childrenRect.height + + Cura.IconWithText + { + id: qualityRowTitle + source: UM.Theme.getIcon("category_layer_height") + text: catalog.i18nc("@label", "Layer Height") + font: UM.Theme.getFont("medium") + anchors.left: parent.left + anchors.right: customisedSettings.left + } + + UM.SimpleButton + { + id: customisedSettings + + visible: Cura.SimpleModeSettingsManager.isProfileCustomized || Cura.MachineManager.hasCustomQuality + height: visible ? UM.Theme.getSize("print_setup_icon").height : 0 + width: height + anchors + { + right: parent.right + rightMargin: UM.Theme.getSize("default_margin").width + leftMargin: UM.Theme.getSize("default_margin").width + verticalCenter: parent.verticalCenter + } + + color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button") + iconSource: UM.Theme.getIcon("reset") + + onClicked: + { + // if the current profile is user-created, switch to a built-in quality + Cura.MachineManager.resetToUseDefaultQuality() + } + onEntered: + { + var tooltipContent = catalog.i18nc("@tooltip","You have modified some profile settings. If you want to change these go to custom mode.") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, 0), tooltipContent) + } + onExited: base.hideTooltip() + } + } + + // Show titles for the each quality slider ticks + Item + { + anchors.left: speedSlider.left + anchors.top: speedSlider.bottom + height: childrenRect.height + + Repeater + { + model: qualityModel + + Label + { + anchors.verticalCenter: parent.verticalCenter + anchors.top: parent.top + // The height has to be set manually, otherwise it's not automatically calculated in the repeater + height: UM.Theme.getSize("default_margin").height + color: (Cura.MachineManager.activeMachine != null && Cura.QualityProfilesDropDownMenuModel.getItem(index).available) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + text: + { + var result = "" + if(Cura.MachineManager.activeMachine != null) + { + result = Cura.QualityProfilesDropDownMenuModel.getItem(index).layer_height + + if(result == undefined) + { + result = ""; + } + else + { + result = Number(Math.round(result + "e+2") + "e-2"); //Round to 2 decimals. Javascript makes this difficult... + if (result == undefined || result != result) //Parse failure. + { + result = ""; + } + } + } + return result + } + + x: + { + // Make sure the text aligns correctly with each tick + if (qualityModel.totalTicks == 0) + { + // If there is only one tick, align it centrally + return Math.round(((settingsColumnWidth) - width) / 2) + } + else if (index == 0) + { + return Math.round(settingsColumnWidth / qualityModel.totalTicks) * index + } + else if (index == qualityModel.totalTicks) + { + return Math.round(settingsColumnWidth / qualityModel.totalTicks) * index - width + } + else + { + return Math.round((settingsColumnWidth / qualityModel.totalTicks) * index - (width / 2)) + } + } + font: UM.Theme.getFont("default") + } + } + } + + // Print speed slider + // Two sliders are created, one at the bottom with the unavailable qualities + // and the other at the top with the available quality profiles and so the handle to select them. + Item + { + id: speedSlider + height: childrenRect.height + + anchors + { + left: titleRow.right + right: parent.right + verticalCenter: titleRow.verticalCenter + } + + // Draw unavailable slider + Slider + { + id: unavailableSlider + + width: parent.width + height: qualitySlider.height // Same height as the slider that is on top + updateValueWhileDragging : false + tickmarksEnabled: true + + minimumValue: 0 + // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly + // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) + maximumValue: qualityModel.totalTicks + stepSize: 1 + + style: SliderStyle + { + //Draw Unvailable line + groove: Item + { + Rectangle + { + height: UM.Theme.getSize("print_setup_slider_groove").height + width: control.width - UM.Theme.getSize("print_setup_slider_handle").width + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + color: UM.Theme.getColor("quality_slider_unavailable") + } + } + + handle: Item {} + + tickmarks: Repeater + { + id: qualityRepeater + model: qualityModel.totalTicks > 0 ? qualityModel : 0 + + Rectangle + { + color: Cura.QualityProfilesDropDownMenuModel.getItem(index).available ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") + implicitWidth: UM.Theme.getSize("print_setup_slider_tickmarks").width + implicitHeight: UM.Theme.getSize("print_setup_slider_tickmarks").height + anchors.verticalCenter: parent.verticalCenter + + // Do not use Math.round otherwise the tickmarks won't be aligned + x: ((UM.Theme.getSize("print_setup_slider_handle").width / 2) - (implicitWidth / 2) + (qualityModel.qualitySliderStepWidth * index)) + radius: Math.round(implicitWidth / 2) + } + } + } + + // Create a mouse area on top of the unavailable profiles to show a specific tooltip + MouseArea + { + anchors.fill: parent + hoverEnabled: true + enabled: !Cura.MachineManager.hasCustomQuality + onEntered: + { + var tooltipContent = catalog.i18nc("@tooltip", "This quality profile is not available for your current material and nozzle configuration. Please change these to enable this quality profile") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, customisedSettings.height), tooltipContent) + } + onExited: base.hideTooltip() + } + } + + // Draw available slider + Slider + { + id: qualitySlider + + width: qualityModel.qualitySliderStepWidth * (qualityModel.availableTotalTicks - 1) + UM.Theme.getSize("print_setup_slider_handle").width + height: UM.Theme.getSize("print_setup_slider_handle").height // The handle is the widest element of the slider + enabled: qualityModel.totalTicks > 0 && !Cura.SimpleModeSettingsManager.isProfileCustomized + visible: qualityModel.availableTotalTicks > 0 + updateValueWhileDragging : false + + anchors + { + right: parent.right + rightMargin: qualityModel.qualitySliderMarginRight + } + + minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0 + // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly + // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) + maximumValue: qualityModel.qualitySliderAvailableMax >= 1 ? qualityModel.qualitySliderAvailableMax : 1 + stepSize: 1 + + value: qualityModel.qualitySliderActiveIndex + + style: SliderStyle + { + // Draw Available line + groove: Item + { + Rectangle + { + height: UM.Theme.getSize("print_setup_slider_groove").height + width: control.width - UM.Theme.getSize("print_setup_slider_handle").width + anchors.verticalCenter: parent.verticalCenter + + // Do not use Math.round otherwise the tickmarks won't be aligned + x: UM.Theme.getSize("print_setup_slider_handle").width / 2 + color: UM.Theme.getColor("quality_slider_available") + } + } + + handle: Rectangle + { + id: qualityhandleButton + color: UM.Theme.getColor("primary") + implicitWidth: UM.Theme.getSize("print_setup_slider_handle").width + implicitHeight: implicitWidth + radius: Math.round(implicitWidth / 2) + visible: !Cura.SimpleModeSettingsManager.isProfileCustomized && !Cura.MachineManager.hasCustomQuality && qualityModel.existingQualityProfile + } + } + + onValueChanged: + { + // only change if an active machine is set and the slider is visible at all. + if (Cura.MachineManager.activeMachine != null && visible) + { + // prevent updating during view initializing. Trigger only if the value changed by user + if (qualitySlider.value != qualityModel.qualitySliderActiveIndex && qualityModel.qualitySliderActiveIndex != -1) + { + // start updating with short delay + qualitySliderChangeTimer.start() + } + } + } + + // This mouse area is only used to capture the onHover state and don't propagate it to the unavailable mouse area + MouseArea + { + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.NoButton + enabled: !Cura.MachineManager.hasCustomQuality + } + } + + // This mouse area will only take the mouse events and show a tooltip when the profile in use is + // a user created profile + MouseArea + { + anchors.fill: parent + hoverEnabled: true + visible: Cura.MachineManager.hasCustomQuality + + onEntered: + { + var tooltipContent = catalog.i18nc("@tooltip", "A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab") + base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("thick_margin").width, customisedSettings.height), tooltipContent) + } + onExited: base.hideTooltip() + } + } +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml new file mode 100644 index 0000000000..0e834ac4df --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedSupportSelector.qml @@ -0,0 +1,206 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 + +import UM 1.2 as UM +import Cura 1.0 as Cura + + +// +// Enable support +// +Item +{ + id: enableSupportRow + height: childrenRect.height + + property real labelColumnWidth: Math.round(width / 3) + + Cura.IconWithText + { + id: enableSupportRowTitle + anchors.top: parent.top + anchors.left: parent.left + visible: enableSupportCheckBox.visible + source: UM.Theme.getIcon("category_support") + text: catalog.i18nc("@label", "Support") + font: UM.Theme.getFont("medium") + width: labelColumnWidth + } + + Item + { + id: enableSupportContainer + height: enableSupportCheckBox.height + + anchors + { + left: enableSupportRowTitle.right + right: parent.right + verticalCenter: enableSupportRowTitle.verticalCenter + } + + CheckBox + { + id: enableSupportCheckBox + anchors.verticalCenter: parent.verticalCenter + + property alias _hovered: enableSupportMouseArea.containsMouse + + style: UM.Theme.styles.checkbox + enabled: recommendedPrintSetup.settingsEnabled + + visible: supportEnabled.properties.enabled == "True" + checked: supportEnabled.properties.value == "True" + + MouseArea + { + id: enableSupportMouseArea + anchors.fill: parent + hoverEnabled: true + + onClicked: supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True") + + onEntered: + { + base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportContainer.x - UM.Theme.getSize("thick_margin").width, 0), + catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")) + } + onExited: base.hideTooltip() + } + } + + ComboBox + { + id: supportExtruderCombobox + + height: UM.Theme.getSize("print_setup_big_item").height + anchors + { + left: enableSupportCheckBox.right + right: parent.right + leftMargin: UM.Theme.getSize("thick_margin").width + rightMargin: UM.Theme.getSize("thick_margin").width + verticalCenter: parent.verticalCenter + } + + style: UM.Theme.styles.combobox_color + enabled: recommendedPrintSetup.settingsEnabled + visible: enableSupportCheckBox.visible && (supportEnabled.properties.value == "True") && (extrudersEnabledCount.properties.value > 1) + textRole: "text" // this solves that the combobox isn't populated in the first time Cura is started + + model: extruderModel + + property alias _hovered: supportExtruderMouseArea.containsMouse + property string color_override: "" // for manually setting values + property string color: // is evaluated automatically, but the first time is before extruderModel being filled + { + var current_extruder = extruderModel.get(currentIndex) + color_override = "" + if (current_extruder === undefined) return "" + return (current_extruder.color) ? current_extruder.color : "" + } + + currentIndex: + { + if (supportExtruderNr.properties == null) + { + return Cura.MachineManager.defaultExtruderPosition + } + else + { + var extruder = parseInt(supportExtruderNr.properties.value) + if ( extruder === -1) + { + return Cura.MachineManager.defaultExtruderPosition + } + return extruder; + } + } + + onActivated: supportExtruderNr.setPropertyValue("value", String(index)) + + MouseArea + { + id: supportExtruderMouseArea + anchors.fill: parent + hoverEnabled: true + enabled: recommendedPrintSetup.settingsEnabled + acceptedButtons: Qt.NoButton + onEntered: + { + base.showTooltip(supportExtruderCombobox, Qt.point(-enableSupportContainer.x - supportExtruderCombobox.x - UM.Theme.getSize("thick_margin").width, 0), + catalog.i18nc("@label", "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air.")); + } + onExited: base.hideTooltip() + + } + + function updateCurrentColor() + { + var current_extruder = extruderModel.get(currentIndex) + if (current_extruder !== undefined) + { + supportExtruderCombobox.color_override = current_extruder.color + } + } + } + } + + ListModel + { + id: extruderModel + Component.onCompleted: populateExtruderModel() + } + + //: Model used to populate the extrudelModel + property var extruders: CuraApplication.getExtrudersModel() + Connections + { + target: extruders + onModelChanged: populateExtruderModel() + } + + UM.SettingPropertyProvider + { + id: supportEnabled + containerStack: Cura.MachineManager.activeMachine + key: "support_enable" + watchedProperties: [ "value", "enabled", "description" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: supportExtruderNr + containerStack: Cura.MachineManager.activeMachine + key: "support_extruder_nr" + watchedProperties: [ "value" ] + storeIndex: 0 + } + + UM.SettingPropertyProvider + { + id: machineExtruderCount + containerStack: Cura.MachineManager.activeMachine + key: "machine_extruder_count" + watchedProperties: ["value"] + storeIndex: 0 + } + + function populateExtruderModel() + { + extruderModel.clear() + for (var extruderNumber = 0; extruderNumber < extruders.rowCount(); extruderNumber++) + { + extruderModel.append({ + text: extruders.getItem(extruderNumber).name, + color: extruders.getItem(extruderNumber).color + }) + } + supportExtruderCombobox.updateCurrentColor() + } +}
\ No newline at end of file diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedTroubleshootingGuides.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedTroubleshootingGuides.qml new file mode 100644 index 0000000000..e6706421bb --- /dev/null +++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedTroubleshootingGuides.qml @@ -0,0 +1,36 @@ +// Copyright (c) 2019 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
+import QtQuick 2.10
+import QtQuick.Controls 1.4
+import QtQuick.Controls.Styles 1.4
+
+import UM 1.2 as UM
+import Cura 1.0 as Cura
+
+
+Item
+{
+ id: tipsCell
+ anchors.top: adhesionCheckBox.visible ? adhesionCheckBox.bottom : (enableSupportCheckBox.visible ? supportExtruderCombobox.bottom : infillCellRight.bottom)
+ anchors.topMargin: Math.round(UM.Theme.getSize("default_margin").height * 2)
+ anchors.left: parent.left
+ width: parent.width
+ height: tipsText.contentHeight * tipsText.lineCount
+
+ Label
+ {
+ id: tipsText
+ anchors.left: parent.left
+ anchors.leftMargin: UM.Theme.getSize("default_margin").width
+ anchors.right: parent.right
+ anchors.rightMargin: UM.Theme.getSize("default_margin").width
+ anchors.top: parent.top
+ wrapMode: Text.WordWrap
+ text: catalog.i18nc("@label", "Need help improving your prints?<br>Read the <a href='%1'>Ultimaker Troubleshooting Guides</a>").arg("https://ultimaker.com/en/troubleshooting")
+ font: UM.Theme.getFont("default")
+ color: UM.Theme.getColor("text")
+ linkColor: UM.Theme.getColor("text_link")
+ onLinkActivated: Qt.openUrlExternally(link)
+ }
+}
\ No newline at end of file diff --git a/resources/qml/SidebarTooltip.qml b/resources/qml/PrintSetupTooltip.qml index 29199481f6..6b1538d849 100644 --- a/resources/qml/SidebarTooltip.qml +++ b/resources/qml/PrintSetupTooltip.qml @@ -2,9 +2,7 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 import UM 1.0 as UM @@ -36,14 +34,15 @@ UM.PointingRectangle { } } base.opacity = 1; - target = Qt.point(40 , position.y + Math.round(UM.Theme.getSize("tooltip_arrow_margins").height / 2)) + target = Qt.point(position.x + 1, position.y + Math.round(UM.Theme.getSize("tooltip_arrow_margins").height / 2)) } function hide() { base.opacity = 0; } - Label { + Label + { id: label; anchors { top: parent.top; @@ -57,5 +56,6 @@ UM.PointingRectangle { textFormat: Text.RichText font: UM.Theme.getFont("default"); color: UM.Theme.getColor("tooltip_text"); + renderType: Text.NativeRendering } } diff --git a/resources/qml/PrinterOutput/ExtruderBox.qml b/resources/qml/PrinterOutput/ExtruderBox.qml index f0abd4cd6c..a19c02b0dd 100644 --- a/resources/qml/PrinterOutput/ExtruderBox.qml +++ b/resources/qml/PrinterOutput/ExtruderBox.qml @@ -12,8 +12,10 @@ Item property alias color: background.color property var extruderModel property var position: index + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + implicitWidth: parent.width - implicitHeight: UM.Theme.getSize("sidebar_extruder_box").height + implicitHeight: UM.Theme.getSize("print_setup_extruder_box").height UM.SettingPropertyProvider { @@ -45,7 +47,7 @@ Item { id: extruderTargetTemperature text: Math.round(extruderModel.targetHotendTemperature) + "°C" - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default_bold") color: UM.Theme.getColor("text_inactive") anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").width @@ -78,7 +80,7 @@ Item id: extruderCurrentTemperature text: Math.round(extruderModel.hotendTemperature) + "°C" color: UM.Theme.getColor("text") - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") anchors.right: extruderTargetTemperature.left anchors.top: parent.top anchors.margins: UM.Theme.getSize("default_margin").width @@ -324,7 +326,7 @@ Item return UM.Theme.getColor("action_button_text"); } } - font: UM.Theme.getFont("action_button") + font: UM.Theme.getFont("medium") text: { if(extruderModel == null) diff --git a/resources/qml/PrinterOutput/HeatedBedBox.qml b/resources/qml/PrinterOutput/HeatedBedBox.qml index 9de66ad0be..77421c8aad 100644 --- a/resources/qml/PrinterOutput/HeatedBedBox.qml +++ b/resources/qml/PrinterOutput/HeatedBedBox.qml @@ -1,10 +1,10 @@ // Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 import UM 1.2 as UM import Cura 1.0 as Cura @@ -12,12 +12,13 @@ import Cura 1.0 as Cura Item { implicitWidth: parent.width - height: visible ? UM.Theme.getSize("sidebar_extruder_box").height : 0 + height: visible ? UM.Theme.getSize("print_setup_extruder_box").height : 0 property var printerModel + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null Rectangle { - color: UM.Theme.getColor("sidebar") + color: UM.Theme.getColor("main_background") anchors.fill: parent Label //Build plate label. @@ -34,7 +35,7 @@ Item { id: bedTargetTemperature text: printerModel != null ? printerModel.targetBedTemperature + "°C" : "" - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default_bold") color: UM.Theme.getColor("text_inactive") anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_margin").width @@ -66,7 +67,7 @@ Item { id: bedCurrentTemperature text: printerModel != null ? printerModel.bedTemperature + "°C" : "" - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") anchors.right: bedTargetTemperature.left anchors.top: parent.top @@ -114,7 +115,7 @@ Item { return false; //Can't preheat if not connected. } - if (!connectedPrinter.acceptsCommands) + if (connectedPrinter == null || !connectedPrinter.acceptsCommands) { return false; //Not allowed to do anything. } @@ -319,7 +320,7 @@ Item return UM.Theme.getColor("action_button_text"); } } - font: UM.Theme.getFont("action_button") + font: UM.Theme.getFont("medium") text: { if(printerModel == null) diff --git a/resources/qml/PrinterOutput/ManualPrinterControl.qml b/resources/qml/PrinterOutput/ManualPrinterControl.qml index 70961a2eb2..106ae7db03 100644 --- a/resources/qml/PrinterOutput/ManualPrinterControl.qml +++ b/resources/qml/PrinterOutput/ManualPrinterControl.qml @@ -1,103 +1,26 @@ // Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 -import UM 1.2 as UM +import UM 1.3 as UM import Cura 1.0 as Cura +import "." + + Item { - property var printerModel + property var printerModel: null property var activePrintJob: printerModel != null ? printerModel.activePrintJob : null + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + implicitWidth: parent.width implicitHeight: childrenRect.height - Component - { - id: monitorButtonStyle - - ButtonStyle - { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_border"); - } - else if(control.pressed) - { - return UM.Theme.getColor("action_button_active_border"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_border"); - } - return UM.Theme.getColor("action_button_border"); - } - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled"); - } - else if(control.pressed) - { - return UM.Theme.getColor("action_button_active"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered"); - } - return UM.Theme.getColor("action_button"); - } - Behavior on color - { - ColorAnimation - { - duration: 50 - } - } - } - - label: Item - { - UM.RecolorImage - { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: Math.floor(control.width / 2) - height: Math.floor(control.height / 2) - sourceSize.width: width - sourceSize.height: width - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_text"); - } - else if(control.pressed) - { - return UM.Theme.getColor("action_button_active_text"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_text"); - } - return UM.Theme.getColor("action_button_text"); - } - source: control.iconSource - } - } - } - } - Column { enabled: @@ -180,7 +103,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_top"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -197,7 +120,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_left"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -214,7 +137,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_right"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -231,7 +154,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("arrow_bottom"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -248,7 +171,7 @@ Item Layout.preferredWidth: width Layout.preferredHeight: height iconSource: UM.Theme.getIcon("home"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -278,7 +201,7 @@ Item Button { iconSource: UM.Theme.getIcon("arrow_top"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -291,7 +214,7 @@ Item Button { iconSource: UM.Theme.getIcon("home"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -304,7 +227,7 @@ Item Button { iconSource: UM.Theme.getIcon("arrow_bottom"); - style: monitorButtonStyle + style: UM.Theme.styles.monitor_button_style width: height height: UM.Theme.getSize("setting_control").height @@ -356,72 +279,7 @@ Item checked: distancesRow.currentDistance == model.value onClicked: distancesRow.currentDistance = model.value - style: ButtonStyle { - background: Rectangle { - border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_border"); - } - else if (control.checked || control.pressed) - { - return UM.Theme.getColor("action_button_active_border"); - } - else if(control.hovered) - { - return UM.Theme.getColor("action_button_hovered_border"); - } - return UM.Theme.getColor("action_button_border"); - } - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled"); - } - else if (control.checked || control.pressed) - { - return UM.Theme.getColor("action_button_active"); - } - else if (control.hovered) - { - return UM.Theme.getColor("action_button_hovered"); - } - return UM.Theme.getColor("action_button"); - } - Behavior on color { ColorAnimation { duration: 50; } } - Label { - anchors.left: parent.left - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - anchors.leftMargin: UM.Theme.getSize("default_lining").width * 2 - anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 - color: - { - if(!control.enabled) - { - return UM.Theme.getColor("action_button_disabled_text"); - } - else if (control.checked || control.pressed) - { - return UM.Theme.getColor("action_button_active_text"); - } - else if (control.hovered) - { - return UM.Theme.getColor("action_button_hovered_text"); - } - return UM.Theme.getColor("action_button_text"); - } - font: UM.Theme.getFont("default") - text: control.text - horizontalAlignment: Text.AlignHCenter - elide: Text.ElideMiddle - } - } - label: Item { } - } + style: UM.Theme.styles.monitor_checkable_button_style } } } @@ -462,7 +320,7 @@ Item if (printerModel == null) { return false // Can't send custom commands if not connected. } - if (!connectedPrinter.acceptsCommands) { + if (connectedPrinter == null || !connectedPrinter.acceptsCommands) { return false // Not allowed to do anything } if (connectedPrinter.jobState == "printing" || connectedPrinter.jobState == "pre_print" || connectedPrinter.jobState == "resuming" || connectedPrinter.jobState == "pausing" || connectedPrinter.jobState == "paused" || connectedPrinter.jobState == "error" || connectedPrinter.jobState == "offline") { @@ -551,4 +409,4 @@ Item } ExclusiveGroup { id: distanceGroup } } -}
\ No newline at end of file +} diff --git a/resources/qml/PrinterOutput/MonitorItem.qml b/resources/qml/PrinterOutput/MonitorItem.qml index cad8d2f7f3..a26ec20f64 100644 --- a/resources/qml/PrinterOutput/MonitorItem.qml +++ b/resources/qml/PrinterOutput/MonitorItem.qml @@ -15,6 +15,8 @@ Item property string value: "" height: childrenRect.height; + property var connectedPrinter: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + Row { height: UM.Theme.getSize("setting_control").height diff --git a/resources/qml/PrinterOutput/MonitorSection.qml b/resources/qml/PrinterOutput/MonitorSection.qml index 6ed762362d..1d9df777b6 100644 --- a/resources/qml/PrinterOutput/MonitorSection.qml +++ b/resources/qml/PrinterOutput/MonitorSection.qml @@ -1,10 +1,10 @@ // Copyright (c) 2017 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Layouts 1.3 import UM 1.2 as UM import Cura 1.0 as Cura @@ -13,7 +13,8 @@ Item { id: base property string label - height: childrenRect.height; + height: childrenRect.height + Rectangle { color: UM.Theme.getColor("setting_category") @@ -26,8 +27,8 @@ Item anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width text: label - font: UM.Theme.getFont("setting_category") + font: UM.Theme.getFont("default") color: UM.Theme.getColor("setting_category_text") } } -}
\ No newline at end of file +} diff --git a/resources/qml/PrinterOutput/OutputDeviceHeader.qml b/resources/qml/PrinterOutput/OutputDeviceHeader.qml index b5ed1b7b4e..47f855266b 100644 --- a/resources/qml/PrinterOutput/OutputDeviceHeader.qml +++ b/resources/qml/PrinterOutput/OutputDeviceHeader.qml @@ -31,7 +31,7 @@ Item Label { id: outputDeviceNameLabel - font: UM.Theme.getFont("large") + font: UM.Theme.getFont("large_bold") color: UM.Theme.getColor("text") anchors.left: parent.left anchors.top: parent.top @@ -43,10 +43,10 @@ Item { id: outputDeviceAddressLabel text: (outputDevice != null && outputDevice.address != null) ? outputDevice.address : "" - font: UM.Theme.getFont("small") + font: UM.Theme.getFont("default_bold") color: UM.Theme.getColor("text_inactive") - anchors.top: parent.top - anchors.right: parent.right + anchors.top: outputDeviceNameLabel.bottom + anchors.left: parent.left anchors.margins: UM.Theme.getSize("default_margin").width } @@ -54,7 +54,7 @@ Item { text: outputDevice != null ? "" : catalog.i18nc("@info:status", "The printer is not connected.") color: outputDevice != null && outputDevice.acceptsCommands ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text") - font: UM.Theme.getFont("very_small") + font: UM.Theme.getFont("default") wrapMode: Text.WordWrap anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_margin").width diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml new file mode 100644 index 0000000000..cd5e041606 --- /dev/null +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -0,0 +1,182 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Cura.ExpandablePopup +{ + id: machineSelector + + property bool isNetworkPrinter: Cura.MachineManager.activeMachineHasActiveNetworkConnection + property bool isCloudPrinter: Cura.MachineManager.activeMachineHasActiveCloudConnection + property bool isGroup: Cura.MachineManager.activeMachineIsGroup + + contentPadding: UM.Theme.getSize("default_lining").width + contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft + + UM.I18nCatalog + { + id: catalog + name: "cura" + } + + headerItem: Cura.IconWithText + { + text: + { + if (isNetworkPrinter && Cura.MachineManager.activeMachineNetworkGroupName != "") + { + return Cura.MachineManager.activeMachineNetworkGroupName + } + return Cura.MachineManager.activeMachineName + } + source: + { + if (isGroup) + { + return UM.Theme.getIcon("printer_group") + } + else if (isNetworkPrinter || isCloudPrinter) + { + return UM.Theme.getIcon("printer_single") + } + else + { + return "" + } + } + font: UM.Theme.getFont("medium") + iconColor: UM.Theme.getColor("machine_selector_printer_icon") + iconSize: source != "" ? UM.Theme.getSize("machine_selector_icon").width: 0 + + UM.RecolorImage + { + anchors + { + bottom: parent.bottom + left: parent.left + leftMargin: UM.Theme.getSize("thick_margin").width + } + + source: + { + if (isNetworkPrinter) + { + return UM.Theme.getIcon("printer_connected") + } + else if (isCloudPrinter) + { + return UM.Theme.getIcon("printer_cloud_connected") + } + else + { + return "" + } + } + + width: UM.Theme.getSize("printer_status_icon").width + height: UM.Theme.getSize("printer_status_icon").height + + color: UM.Theme.getColor("primary") + visible: isNetworkPrinter || isCloudPrinter + + // Make a themable circle in the background so we can change it in other themes + Rectangle + { + id: iconBackground + anchors.centerIn: parent + // Make it a bit bigger so there is an outline + width: parent.width + 2 * UM.Theme.getSize("default_lining").width + height: parent.height + 2 * UM.Theme.getSize("default_lining").height + radius: Math.round(width / 2) + color: UM.Theme.getColor("main_background") + z: parent.z - 1 + } + } + } + + contentItem: Item + { + id: popup + width: UM.Theme.getSize("machine_selector_widget_content").width + + ScrollView + { + id: scroll + width: parent.width + clip: true + leftPadding: UM.Theme.getSize("default_lining").width + rightPadding: UM.Theme.getSize("default_lining").width + + MachineSelectorList + { + // Can't use parent.width since the parent is the flickable component and not the ScrollView + width: scroll.width - scroll.leftPadding - scroll.rightPadding + property real maximumHeight: UM.Theme.getSize("machine_selector_widget_content").height - buttonRow.height + + // We use an extra property here, since we only want to to be informed about the content size changes. + onContentHeightChanged: + { + scroll.height = Math.min(contentHeight, maximumHeight) + popup.height = scroll.height + buttonRow.height + } + + Component.onCompleted: + { + scroll.height = Math.min(contentHeight, maximumHeight) + popup.height = scroll.height + buttonRow.height + } + + } + } + + Rectangle + { + id: separator + + anchors.top: scroll.bottom + width: parent.width + height: UM.Theme.getSize("default_lining").height + color: UM.Theme.getColor("lining") + } + + Row + { + id: buttonRow + + // The separator is inside the buttonRow. This is to avoid some weird behaviours with the scroll bar. + anchors.top: separator.top + anchors.horizontalCenter: parent.horizontalCenter + padding: UM.Theme.getSize("default_margin").width + spacing: UM.Theme.getSize("default_margin").width + + Cura.SecondaryButton + { + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Add printer") + onClicked: + { + toggleContent() + Cura.Actions.addMachine.trigger() + } + } + + Cura.SecondaryButton + { + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + text: catalog.i18nc("@button", "Manage printers") + onClicked: + { + toggleContent() + Cura.Actions.configureMachines.trigger() + } + } + } + } +} diff --git a/resources/qml/PrinterSelector/MachineSelectorButton.qml b/resources/qml/PrinterSelector/MachineSelectorButton.qml new file mode 100644 index 0000000000..39e63d27c3 --- /dev/null +++ b/resources/qml/PrinterSelector/MachineSelectorButton.qml @@ -0,0 +1,103 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM +import Cura 1.0 as Cura + +Button +{ + id: machineSelectorButton + + width: parent.width + height: UM.Theme.getSize("action_button").height + leftPadding: UM.Theme.getSize("thick_margin").width + rightPadding: UM.Theme.getSize("thick_margin").width + checkable: true + hoverEnabled: true + + property var outputDevice: null + property var printerTypesList: [] + + function updatePrinterTypesList() + { + printerTypesList = (checked && (outputDevice != null)) ? outputDevice.uniquePrinterTypes : [] + } + + contentItem: Item + { + width: machineSelectorButton.width - machineSelectorButton.leftPadding + height: UM.Theme.getSize("action_button").height + + Label + { + id: buttonText + anchors + { + left: parent.left + right: printerTypes.left + verticalCenter: parent.verticalCenter + } + text: machineSelectorButton.text + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("medium") + visible: text != "" + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + Row + { + id: printerTypes + width: childrenRect.width + + anchors + { + right: parent.right + verticalCenter: parent.verticalCenter + } + spacing: UM.Theme.getSize("narrow_margin").width + + Repeater + { + model: printerTypesList + delegate: Cura.PrinterTypeLabel + { + text: Cura.MachineManager.getAbbreviatedMachineName(modelData) + } + } + } + } + + background: Rectangle + { + id: backgroundRect + color: machineSelectorButton.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent" + radius: UM.Theme.getSize("action_button_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: machineSelectorButton.checked ? UM.Theme.getColor("primary") : "transparent" + } + + onClicked: + { + toggleContent() + Cura.MachineManager.setActiveMachine(model.id) + } + + Connections + { + target: outputDevice + onUniqueConfigurationsChanged: updatePrinterTypesList() + } + + Connections + { + target: Cura.MachineManager + onOutputDevicesChanged: updatePrinterTypesList() + } + + Component.onCompleted: updatePrinterTypesList() +} diff --git a/resources/qml/PrinterSelector/MachineSelectorList.qml b/resources/qml/PrinterSelector/MachineSelectorList.qml new file mode 100644 index 0000000000..5fd3515cd3 --- /dev/null +++ b/resources/qml/PrinterSelector/MachineSelectorList.qml @@ -0,0 +1,46 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +ListView +{ + id: listView + model: Cura.GlobalStacksModel {} + section.property: "hasRemoteConnection" + property real contentHeight: childrenRect.height + + section.delegate: Label + { + text: section == "true" ? catalog.i18nc("@label", "Connected printers") : catalog.i18nc("@label", "Preset printers") + width: parent.width + height: UM.Theme.getSize("action_button").height + leftPadding: UM.Theme.getSize("default_margin").width + renderType: Text.NativeRendering + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text_medium") + verticalAlignment: Text.AlignVCenter + } + + delegate: MachineSelectorButton + { + text: model.name + width: listView.width + outputDevice: Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null + + checked: + { + // If the machine has a remote connection + var result = Cura.MachineManager.activeMachineId == model.id + if (Cura.MachineManager.activeMachineHasRemoteConnection) + { + result |= Cura.MachineManager.activeMachineNetworkGroupName == model.metadata["connect_group_name"] + } + return result + } + } +} diff --git a/resources/qml/PrinterTypeLabel.qml b/resources/qml/PrinterTypeLabel.qml new file mode 100644 index 0000000000..cfc9e56513 --- /dev/null +++ b/resources/qml/PrinterTypeLabel.qml @@ -0,0 +1,35 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.1 + +import UM 1.1 as UM + +// This component creates a label with the abbreviated name of a printer, with a rectangle surrounding the label. +// It is created in a separated place in order to be reused whenever needed. +Item +{ + property alias text: printerTypeLabel.text + + width: UM.Theme.getSize("printer_type_label").width + height: UM.Theme.getSize("printer_type_label").height + + Rectangle + { + anchors.fill: parent + color: UM.Theme.getColor("printer_type_label_background") + radius: UM.Theme.getSize("checkbox_radius").width + } + + Label + { + id: printerTypeLabel + text: "CFFFP" // As an abbreviated name of the Custom FFF Printer + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + renderType: Text.NativeRendering + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + } +}
\ No newline at end of file diff --git a/resources/qml/RoundedRectangle.qml b/resources/qml/RoundedRectangle.qml new file mode 100644 index 0000000000..3ca05e2125 --- /dev/null +++ b/resources/qml/RoundedRectangle.qml @@ -0,0 +1,72 @@ +import QtQuick 2.7 + +import UM 1.2 as UM + +// The rounded rectangle works mostly like a regular rectangle, but provides the option to have rounded corners on only one side of the rectangle. +Item +{ + id: roundedRectangle + // As per the regular rectangle + property color color: "transparent" + + // As per regular rectangle + property int radius: UM.Theme.getSize("default_radius").width + + // On what side should the corners be shown 5 can be used if no radius is needed. + // 1 is down, 2 is left, 3 is up and 4 is right. + property int cornerSide: RoundedRectangle.Direction.None + + // Simple object to ensure that border.width and border.color work + property BorderGroup border: BorderGroup {} + + enum Direction + { + None = 0, + Down = 1, + Left = 2, + Up = 3, + Right = 4, + All = 5 + } + + Rectangle + { + id: background + anchors.fill: parent + radius: cornerSide != RoundedRectangle.Direction.None ? parent.radius : 0 + color: parent.color + border.width: parent.border.width + border.color: parent.border.color + } + + // The item that covers 2 of the corners to make them not rounded. + Rectangle + { + visible: cornerSide != RoundedRectangle.Direction.None && cornerSide != RoundedRectangle.Direction.All + height: cornerSide % 2 ? parent.radius: parent.height + width: cornerSide % 2 ? parent.width : parent.radius + color: parent.color + anchors + { + right: cornerSide == RoundedRectangle.Direction.Left ? parent.right: undefined + bottom: cornerSide == RoundedRectangle.Direction.Up ? parent.bottom: undefined + } + + border.width: parent.border.width + border.color: parent.border.color + + Rectangle + { + color: roundedRectangle.color + height: cornerSide % 2 ? roundedRectangle.border.width: roundedRectangle.height - 2 * roundedRectangle.border.width + width: cornerSide % 2 ? roundedRectangle.width - 2 * roundedRectangle.border.width: roundedRectangle.border.width + anchors + { + right: cornerSide == RoundedRectangle.Direction.Right ? parent.right : undefined + bottom: cornerSide == RoundedRectangle.Direction.Down ? parent.bottom: undefined + horizontalCenter: cornerSide % 2 ? parent.horizontalCenter: undefined + verticalCenter: cornerSide % 2 ? undefined: parent.verticalCenter + } + } + } +} diff --git a/resources/qml/SaveButton.qml b/resources/qml/SaveButton.qml deleted file mode 100644 index 2a0a523026..0000000000 --- a/resources/qml/SaveButton.qml +++ /dev/null @@ -1,409 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.1 as UM -import Cura 1.0 as Cura - -Item { - id: base; - UM.I18nCatalog { id: catalog; name:"cura"} - - property real progress: UM.Backend.progress - property int backendState: UM.Backend.state - property bool activity: CuraApplication.platformActivity - - property alias buttonRowWidth: saveRow.width - - property string fileBaseName - property string statusText: - { - if(!activity) - { - return catalog.i18nc("@label:PrintjobStatus", "Please load a 3D model"); - } - - if (base.backendState == "undefined") { - return "" - } - - switch(base.backendState) - { - case 1: - return catalog.i18nc("@label:PrintjobStatus", "Ready to slice"); - case 2: - return catalog.i18nc("@label:PrintjobStatus", "Slicing..."); - case 3: - return catalog.i18nc("@label:PrintjobStatus %1 is target operation","Ready to %1").arg(UM.OutputDeviceManager.activeDeviceShortDescription); - case 4: - return catalog.i18nc("@label:PrintjobStatus", "Unable to Slice"); - case 5: - return catalog.i18nc("@label:PrintjobStatus", "Slicing unavailable"); - default: - return ""; - } - } - - function sliceOrStopSlicing() { - try { - if ([1, 5].indexOf(base.backendState) != -1) { - CuraApplication.backend.forceSlice(); - } else { - CuraApplication.backend.stopSlicing(); - } - } catch (e) { - console.log('Could not start or stop slicing', e) - } - } - - Label { - id: statusLabel - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width - anchors.top: parent.top - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - - color: UM.Theme.getColor("text") - font: UM.Theme.getFont("default_bold") - text: statusText; - } - - Rectangle { - id: progressBar - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width - height: UM.Theme.getSize("progressbar").height - anchors.top: statusLabel.bottom - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 4) - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - radius: UM.Theme.getSize("progressbar_radius").width - color: UM.Theme.getColor("progressbar_background") - - Rectangle { - width: Math.max(parent.width * base.progress) - height: parent.height - color: UM.Theme.getColor("progressbar_control") - radius: UM.Theme.getSize("progressbar_radius").width - visible: (base.backendState != "undefined" && base.backendState == 2) ? true : false - } - } - - // Shortcut for "save as/print/..." - Action { - shortcut: "Ctrl+P" - onTriggered: - { - // only work when the button is enabled - if (saveToButton.enabled) { - saveToButton.clicked(); - } - // prepare button - if (prepareButton.enabled) { - sliceOrStopSlicing(); - } - } - } - - Item { - id: saveRow - width: { - // using childrenRect.width directly causes a binding loop, because setting the width affects the childrenRect - var children_width = UM.Theme.getSize("default_margin").width; - for (var index in children) - { - var child = children[index]; - if(child.visible) - { - children_width += child.width + child.anchors.rightMargin; - } - } - return Math.min(children_width, base.width - UM.Theme.getSize("sidebar_margin").width); - } - height: saveToButton.height - anchors.bottom: parent.bottom - anchors.bottomMargin: UM.Theme.getSize("sidebar_margin").height - anchors.right: parent.right - clip: true - - Row { - id: additionalComponentsRow - anchors.top: parent.top - anchors.right: saveToButton.visible ? saveToButton.left : (prepareButton.visible ? prepareButton.left : parent.right) - anchors.rightMargin: UM.Theme.getSize("default_margin").width - - spacing: UM.Theme.getSize("default_margin").width - } - - Component.onCompleted: { - saveRow.addAdditionalComponents("saveButton") - } - - Connections { - target: CuraApplication - onAdditionalComponentsChanged: saveRow.addAdditionalComponents("saveButton") - } - - function addAdditionalComponents (areaId) { - if(areaId == "saveButton") { - for (var component in CuraApplication.additionalComponents["saveButton"]) { - CuraApplication.additionalComponents["saveButton"][component].parent = additionalComponentsRow - } - } - } - - Connections { - target: UM.Preferences - onPreferenceChanged: - { - var autoSlice = UM.Preferences.getValue("general/auto_slice"); - prepareButton.autoSlice = autoSlice; - saveToButton.autoSlice = autoSlice; - } - } - - // Prepare button, only shows if auto_slice is off - Button { - id: prepareButton - - tooltip: [1, 5].indexOf(base.backendState) != -1 ? catalog.i18nc("@info:tooltip","Slice current printjob") : catalog.i18nc("@info:tooltip","Cancel slicing process") - // 1 = not started, 2 = Processing - enabled: base.backendState != "undefined" && ([1, 2].indexOf(base.backendState) != -1) && base.activity - visible: base.backendState != "undefined" && !autoSlice && ([1, 2, 4].indexOf(base.backendState) != -1) && base.activity - property bool autoSlice - height: UM.Theme.getSize("save_button_save_to_button").height - - anchors.top: parent.top - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - - // 1 = not started, 4 = error, 5 = disabled - text: [1, 4, 5].indexOf(base.backendState) != -1 ? catalog.i18nc("@label:Printjob", "Prepare") : catalog.i18nc("@label:Printjob", "Cancel") - onClicked: - { - sliceOrStopSlicing(); - } - - style: ButtonStyle { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("action_button_active_border"); - else if(control.hovered) - return UM.Theme.getColor("action_button_hovered_border"); - else - return UM.Theme.getColor("action_button_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("action_button_active"); - else if(control.hovered) - return UM.Theme.getColor("action_button_hovered"); - else - return UM.Theme.getColor("action_button"); - } - - Behavior on color { ColorAnimation { duration: 50; } } - - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) - - Label { - id: actualLabel - anchors.centerIn: parent - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("action_button_active_text"); - else if(control.hovered) - return UM.Theme.getColor("action_button_hovered_text"); - else - return UM.Theme.getColor("action_button_text"); - } - font: UM.Theme.getFont("action_button") - text: control.text; - } - } - label: Item { } - } - } - - Button { - id: saveToButton - - tooltip: UM.OutputDeviceManager.activeDeviceDescription; - // 3 = done, 5 = disabled - enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true - visible: base.backendState != "undefined" && autoSlice || ((base.backendState == 3 || base.backendState == 5) && base.activity == true) - property bool autoSlice - height: UM.Theme.getSize("save_button_save_to_button").height - - anchors.top: parent.top - anchors.right: deviceSelectionMenu.visible ? deviceSelectionMenu.left : parent.right - anchors.rightMargin: deviceSelectionMenu.visible ? -3 * UM.Theme.getSize("default_lining").width : UM.Theme.getSize("sidebar_margin").width - - text: UM.OutputDeviceManager.activeDeviceShortDescription - onClicked: - { - forceActiveFocus(); - UM.OutputDeviceManager.requestWriteToDevice(UM.OutputDeviceManager.activeDevice, PrintInformation.jobName, - { "filter_by_machine": true, "preferred_mimetypes": Cura.MachineManager.activeMachine.preferred_output_file_formats }); - } - - style: ButtonStyle { - background: Rectangle - { - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed_border"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered_border"); - else - return UM.Theme.getColor("print_button_ready_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered"); - else - return UM.Theme.getColor("print_button_ready"); - } - - Behavior on color { ColorAnimation { duration: 50; } } - - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) - - Label { - id: actualLabel - anchors.centerIn: parent - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_text"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_text"); - else - return UM.Theme.getColor("print_button_ready_text"); - } - font: UM.Theme.getFont("action_button") - text: control.text; - } - } - label: Item { } - } - } - - Button { - id: deviceSelectionMenu - tooltip: catalog.i18nc("@info:tooltip","Select the active output device"); - anchors.top: parent.top - anchors.right: parent.right - - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - width: UM.Theme.getSize("save_button_save_to_button").height - height: UM.Theme.getSize("save_button_save_to_button").height - // 3 = Done, 5 = Disabled - enabled: base.backendState != "undefined" && (base.backendState == 3 || base.backendState == 5) && base.activity == true - visible: base.backendState != "undefined" && (devicesModel.deviceCount > 1) && (base.backendState == 3 || base.backendState == 5) && base.activity == true - - - style: ButtonStyle { - background: Rectangle { - id: deviceSelectionIcon - border.width: UM.Theme.getSize("default_lining").width - border.color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_border"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed_border"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered_border"); - else - return UM.Theme.getColor("print_button_ready_border"); - } - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_pressed"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_hovered"); - else - return UM.Theme.getColor("print_button_ready"); - } - Behavior on color { ColorAnimation { duration: 50; } } - anchors.left: parent.left - anchors.leftMargin: Math.round(UM.Theme.getSize("save_button_text_margin").width / 2); - width: parent.height - height: parent.height - - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: height - color: - { - if(!control.enabled) - return UM.Theme.getColor("action_button_disabled_text"); - else if(control.pressed) - return UM.Theme.getColor("print_button_ready_text"); - else if(control.hovered) - return UM.Theme.getColor("print_button_ready_text"); - else - return UM.Theme.getColor("print_button_ready_text"); - } - source: UM.Theme.getIcon("arrow_bottom"); - } - } - label: Label{ } - } - - menu: Menu { - id: devicesMenu; - Instantiator { - model: devicesModel; - MenuItem { - text: model.description - checkable: true; - checked: model.id == UM.OutputDeviceManager.activeDevice; - exclusiveGroup: devicesMenuGroup; - onTriggered: { - UM.OutputDeviceManager.setActiveDevice(model.id); - } - } - onObjectAdded: devicesMenu.insertItem(index, object) - onObjectRemoved: devicesMenu.removeItem(object) - } - ExclusiveGroup { id: devicesMenuGroup; } - } - } - UM.OutputDevicesModel { id: devicesModel; } - } -} diff --git a/resources/qml/SecondaryButton.qml b/resources/qml/SecondaryButton.qml new file mode 100644 index 0000000000..f03d8acdfa --- /dev/null +++ b/resources/qml/SecondaryButton.qml @@ -0,0 +1,20 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 + +import UM 1.4 as UM +import Cura 1.1 as Cura + + +Cura.ActionButton +{ + shadowEnabled: true + shadowColor: enabled ? UM.Theme.getColor("secondary_button_shadow"): UM.Theme.getColor("action_button_disabled_shadow") + color: UM.Theme.getColor("secondary_button") + textColor: UM.Theme.getColor("secondary_button_text") + outlineColor: "transparent" + disabledColor: UM.Theme.getColor("action_button_disabled") + textDisabledColor: UM.Theme.getColor("action_button_disabled_text") + hoverColor: UM.Theme.getColor("secondary_button_hover") +}
\ No newline at end of file diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index e3202323eb..1e88867889 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -12,48 +12,39 @@ Button id: base anchors.left: parent.left anchors.right: parent.right - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width + // To avoid overlaping with the scrollBars + anchors.rightMargin: 2 * UM.Theme.getSize("thin_margin").width + hoverEnabled: true + background: Rectangle { id: backgroundRectangle implicitHeight: UM.Theme.getSize("section").height - color: { - if (base.color) { - return base.color; - } else if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled"); - } else if (base.hovered && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active"); - } else if (base.hovered) { - return UM.Theme.getColor("setting_category_hover"); - } else { - return UM.Theme.getColor("setting_category"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - Rectangle + color: { - id: backgroundLiningRectangle - height: UM.Theme.getSize("default_lining").height - width: parent.width - anchors.bottom: parent.bottom - color: { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_border"); - } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_border"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_border"); - } else if (base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_border"); - } else { - return UM.Theme.getColor("setting_category_border"); - } + if (base.color) + { + return base.color + } + else if (!base.enabled) + { + return UM.Theme.getColor("setting_category_disabled") + } + else if (base.hovered && base.checkable && base.checked) + { + return UM.Theme.getColor("setting_category_active_hover") + } + else if (base.pressed || (base.checkable && base.checked)) + { + return UM.Theme.getColor("setting_category_active") } + else if (base.hovered) + { + return UM.Theme.getColor("setting_category_hover") + } + return UM.Theme.getColor("setting_category") } + Behavior on color { ColorAnimation { duration: 50; } } } signal showTooltip(string text) @@ -65,40 +56,47 @@ Button property var focusItem: base - contentItem: Item { + contentItem: Item + { anchors.fill: parent - anchors.left: parent.left - Label { + Label + { id: settingNameLabel anchors { left: parent.left leftMargin: 2 * UM.Theme.getSize("default_margin").width + UM.Theme.getSize("section_icon").width - right: parent.right; - verticalCenter: parent.verticalCenter; + right: parent.right + verticalCenter: parent.verticalCenter } text: definition.label textFormat: Text.PlainText renderType: Text.NativeRendering - font: UM.Theme.getFont("setting_category") + font: UM.Theme.getFont("medium_bold") color: { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_text"); - } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_text"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_text"); - } else if (base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_text"); - } else { - return UM.Theme.getColor("setting_category_text"); + if (!base.enabled) + { + return UM.Theme.getColor("setting_category_disabled_text") + } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) + { + return UM.Theme.getColor("setting_category_active_hover_text") + } else if (base.pressed || (base.checkable && base.checked)) + { + return UM.Theme.getColor("setting_category_active_text") + } else if (base.hovered || base.activeFocus) + { + return UM.Theme.getColor("setting_category_hover_text") + } else + { + return UM.Theme.getColor("setting_category_text") } } fontSizeMode: Text.HorizontalFit minimumPointSize: 8 } + UM.RecolorImage { id: category_arrow @@ -107,22 +105,8 @@ Button anchors.rightMargin: UM.Theme.getSize("default_margin").width width: UM.Theme.getSize("standard_arrow").width height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width sourceSize.height: width - color: - { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_text"); - } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_text"); - } else if (base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_text"); - } else if (base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_text"); - } else { - return UM.Theme.getColor("setting_category_text"); - } - } + color: UM.Theme.getColor("setting_control_button") source: base.checked ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") } } @@ -132,24 +116,30 @@ Button id: icon anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.leftMargin: UM.Theme.getSize("thin_margin").width color: { - if (!base.enabled) { - return UM.Theme.getColor("setting_category_disabled_text"); - } else if((base.hovered || base.activeFocus) && base.checkable && base.checked) { - return UM.Theme.getColor("setting_category_active_hover_text"); - } else if(base.pressed || (base.checkable && base.checked)) { - return UM.Theme.getColor("setting_category_active_text"); - } else if(base.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_category_hover_text"); - } else { - return UM.Theme.getColor("setting_category_text"); + if (!base.enabled) + { + return UM.Theme.getColor("setting_category_disabled_text") + } + else if((base.hovered || base.activeFocus) && base.checkable && base.checked) + { + return UM.Theme.getColor("setting_category_active_hover_text") + } + else if(base.pressed || (base.checkable && base.checked)) + { + return UM.Theme.getColor("setting_category_active_text") } + else if(base.hovered || base.activeFocus) + { + return UM.Theme.getColor("setting_category_hover_text") + } + return UM.Theme.getColor("setting_category_text") } source: UM.Theme.getIcon(definition.icon) - width: UM.Theme.getSize("section_icon").width; - height: UM.Theme.getSize("section_icon").height; + width: UM.Theme.getSize("section_icon").width + height: UM.Theme.getSize("section_icon").height sourceSize.width: width + 15 * screenScaleFactor sourceSize.height: width + 15 * screenScaleFactor } @@ -159,31 +149,28 @@ Button onClicked: { - if (definition.expanded) { - settingDefinitionsModel.collapse(definition.key); - } else { - settingDefinitionsModel.expandRecursive(definition.key); + if (definition.expanded) + { + settingDefinitionsModel.collapse(definition.key) + } + else + { + settingDefinitionsModel.expandRecursive(definition.key) } //Set focus so that tab navigation continues from this point on. //NB: This must be set AFTER collapsing/expanding the category so that the scroll position is correct. - forceActiveFocus(); + forceActiveFocus() } onActiveFocusChanged: { - if(activeFocus) + if (activeFocus) { - base.focusReceived(); + base.focusReceived() } } - Keys.onTabPressed: - { - base.setActiveFocusToNextSetting(true) - } - Keys.onBacktabPressed: - { - base.setActiveFocusToNextSetting(false) - } + Keys.onTabPressed: base.setActiveFocusToNextSetting(true) + Keys.onBacktabPressed: base.setActiveFocusToNextSetting(false) UM.SimpleButton { @@ -193,9 +180,10 @@ Button height: Math.round(base.height * 0.6) width: Math.round(base.height * 0.6) - anchors { + anchors + { right: inheritButton.visible ? inheritButton.left : parent.right - // use 1.9 as the factor because there is a 0.1 difference between the settings and inheritance warning icons + // Use 1.9 as the factor because there is a 0.1 difference between the settings and inheritance warning icons rightMargin: inheritButton.visible ? Math.round(UM.Theme.getSize("default_margin").width / 2) : category_arrow.width + Math.round(UM.Theme.getSize("default_margin").width * 1.9) verticalCenter: parent.verticalCenter } @@ -204,9 +192,7 @@ Button hoverColor: UM.Theme.getColor("setting_control_button_hover") iconSource: UM.Theme.getIcon("settings") - onClicked: { - Cura.Actions.configureSettingVisibility.trigger(definition) - } + onClicked: Cura.Actions.configureSettingVisibility.trigger(definition) } UM.SimpleButton @@ -239,24 +225,18 @@ Button onClicked: { - settingDefinitionsModel.expandRecursive(definition.key); - base.checked = true; - base.showAllHiddenInheritedSettings(definition.key); + settingDefinitionsModel.expandRecursive(definition.key) + base.checked = true + base.showAllHiddenInheritedSettings(definition.key) } color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button_hover") iconSource: UM.Theme.getIcon("notice") - onEntered: - { - base.showTooltip(catalog.i18nc("@label","Some hidden settings use values different from their normal calculated value.\n\nClick to make these settings visible.")) - } + onEntered: base.showTooltip(catalog.i18nc("@label","Some hidden settings use values different from their normal calculated value.\n\nClick to make these settings visible.")) - onExited: - { - base.hideTooltip(); - } + onExited: base.hideTooltip() UM.I18nCatalog { id: catalog; name: "cura" } } diff --git a/resources/qml/Settings/SettingCheckBox.qml b/resources/qml/Settings/SettingCheckBox.qml index d37754d27c..0c7321d08a 100644 --- a/resources/qml/Settings/SettingCheckBox.qml +++ b/resources/qml/Settings/SettingCheckBox.qml @@ -28,37 +28,40 @@ SettingItem // 3: material -> user changed material in materials page // 4: variant // 5: machine - var value; - if ((base.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) { + var value + if ((base.resolve != "None") && (stackLevel != 0) && (stackLevel != 1)) + { // We have a resolve function. Indicates that the setting is not settable per extruder and that // we have to choose between the resolved value (default) and the global value // (if user has explicitly set this). - value = base.resolve; - } else { - value = propertyProvider.properties.value; + value = base.resolve + } + else + { + value = propertyProvider.properties.value } switch(value) { case "True": - return true; + return true case "False": - return false; + return false default: - return value; + return value } } Keys.onSpacePressed: { - forceActiveFocus(); - propertyProvider.setPropertyValue("value", !checked); + forceActiveFocus() + propertyProvider.setPropertyValue("value", !checked) } onClicked: { - forceActiveFocus(); - propertyProvider.setPropertyValue("value", !checked); + forceActiveFocus() + propertyProvider.setPropertyValue("value", !checked) } Keys.onTabPressed: @@ -72,9 +75,9 @@ SettingItem onActiveFocusChanged: { - if(activeFocus) + if (activeFocus) { - base.focusReceived(); + base.focusReceived() } } @@ -90,37 +93,38 @@ SettingItem color: { - if(!enabled) + if (!enabled) { return UM.Theme.getColor("setting_control_disabled") } - if(control.containsMouse || control.activeFocus) + if (control.containsMouse || control.activeFocus) { return UM.Theme.getColor("setting_control_highlight") } return UM.Theme.getColor("setting_control") } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { - if(!enabled) + if (!enabled) { return UM.Theme.getColor("setting_control_disabled_border") } - if(control.containsMouse || control.activeFocus) + if (control.containsMouse || control.activeFocus) { return UM.Theme.getColor("setting_control_border_highlight") } return UM.Theme.getColor("setting_control_border") } - UM.RecolorImage { + UM.RecolorImage + { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: Math.round(parent.width / 2.5) height: Math.round(parent.height / 2.5) - sourceSize.width: width sourceSize.height: width color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text"); source: UM.Theme.getIcon("check") diff --git a/resources/qml/Settings/SettingComboBox.qml b/resources/qml/Settings/SettingComboBox.qml index 76d458e427..a287e0c3ce 100644 --- a/resources/qml/Settings/SettingComboBox.qml +++ b/resources/qml/Settings/SettingComboBox.qml @@ -35,6 +35,7 @@ SettingItem return UM.Theme.getColor("setting_control") } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { @@ -62,7 +63,7 @@ SettingItem sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text") + color: UM.Theme.getColor("setting_control_button") } contentItem: Label diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml index a9427f863a..6d39192de7 100644 --- a/resources/qml/Settings/SettingExtruder.qml +++ b/resources/qml/Settings/SettingExtruder.qml @@ -17,10 +17,16 @@ SettingItem id: control anchors.fill: parent - model: Cura.ExtrudersModel + property var extrudersModel: CuraApplication.getExtrudersModel() + + model: extrudersModel + + Connections { - onModelChanged: { - control.color = getItem(control.currentIndex).color; + target: extrudersModel + onModelChanged: + { + control.color = extrudersModel.getItem(control.currentIndex).color } } @@ -104,7 +110,7 @@ SettingItem sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text"); + color: UM.Theme.getColor("setting_control_button"); } background: Rectangle @@ -113,14 +119,15 @@ SettingItem { if (!enabled) { - return UM.Theme.getColor("setting_control_disabled"); + return UM.Theme.getColor("setting_control_disabled") } if (control.hovered || base.activeFocus) { - return UM.Theme.getColor("setting_control_highlight"); + return UM.Theme.getColor("setting_control_highlight") } - return UM.Theme.getColor("setting_control"); + return UM.Theme.getColor("setting_control") } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { @@ -153,20 +160,18 @@ SettingItem elide: Text.ElideLeft verticalAlignment: Text.AlignVCenter - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.color } } @@ -219,20 +224,18 @@ SettingItem verticalAlignment: Text.AlignVCenter rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.model.getItem(index).color } } diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 785562cff5..4dd53f8663 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -10,10 +10,15 @@ import Cura 1.0 as Cura import "." -Item { - id: base; +Item +{ + id: base height: UM.Theme.getSize("section").height + anchors.left: parent.left + anchors.right: parent.right + // To avoid overlaping with the scrollBars + anchors.rightMargin: 2 * UM.Theme.getSize("thin_margin").width property alias contents: controlContainer.children property alias hovered: mouse.containsMouse @@ -43,25 +48,25 @@ Item { var affected_by = settingDefinitionsModel.getRequires(definition.key, "value") var affected_by_list = "" - for(var i in affected_by) + for (var i in affected_by) { affected_by_list += "<li>%1</li>\n".arg(affected_by[i].label) } var affects_list = "" - for(var i in affects) + for (var i in affects) { affects_list += "<li>%1</li>\n".arg(affects[i].label) } var tooltip = "<b>%1</b>\n<p>%2</p>".arg(definition.label).arg(definition.description) - if(affects_list != "") + if (affects_list != "") { tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label Header for list of settings.", "Affects")).arg(affects_list) } - if(affected_by_list != "") + if (affected_by_list != "") { tooltip += "<br/><b>%1</b>\n<ul>\n%2</ul>".arg(catalog.i18nc("@label Header for list of settings.", "Affected By")).arg(affected_by_list) } @@ -71,53 +76,57 @@ Item { MouseArea { - id: mouse; + id: mouse - anchors.fill: parent; + anchors.fill: parent - acceptedButtons: Qt.RightButton; + acceptedButtons: Qt.RightButton hoverEnabled: true; - onClicked: base.contextMenuRequested(); + onClicked: base.contextMenuRequested() - onEntered: { - hoverTimer.start(); + onEntered: + { + hoverTimer.start() } - onExited: { - if(controlContainer.item && controlContainer.item.hovered) { - return; + onExited: + { + if (controlContainer.item && controlContainer.item.hovered) + { + return } - hoverTimer.stop(); - base.hideTooltip(); + hoverTimer.stop() + base.hideTooltip() } - Timer { - id: hoverTimer; - interval: 500; - repeat: false; + Timer + { + id: hoverTimer + interval: 500 + repeat: false onTriggered: { - base.showTooltip(base.tooltipText); + base.showTooltip(base.tooltipText) } } Label { - id: label; + id: label - anchors.left: parent.left; - anchors.leftMargin: doDepthIndentation ? Math.round((UM.Theme.getSize("section_icon_column").width + 5) + ((definition.depth - 1) * UM.Theme.getSize("setting_control_depth_margin").width)) : 0 - anchors.right: settingControls.left; + anchors.left: parent.left + anchors.leftMargin: doDepthIndentation ? Math.round(UM.Theme.getSize("thin_margin").width + ((definition.depth - 1) * UM.Theme.getSize("setting_control_depth_margin").width)) : 0 + anchors.right: settingControls.left anchors.verticalCenter: parent.verticalCenter text: definition.label - elide: Text.ElideMiddle; + elide: Text.ElideMiddle renderType: Text.NativeRendering textFormat: Text.PlainText - color: UM.Theme.getColor("setting_control_text"); + color: UM.Theme.getColor("setting_control_text") opacity: (definition.visible) ? 1 : 0.5 // emphasize the setting if it has a value in the user or quality profile font: base.doQualityUserSettingEmphasis && base.stackLevel != undefined && base.stackLevel <= 1 ? UM.Theme.getFont("default_italic") : UM.Theme.getFont("default") @@ -128,11 +137,12 @@ Item { id: settingControls height: Math.round(parent.height / 2) - spacing: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) + spacing: Math.round(UM.Theme.getSize("thick_margin").height / 2) - anchors { + anchors + { right: controlContainer.left - rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) + rightMargin: Math.round(UM.Theme.getSize("thick_margin").width / 2) verticalCenter: parent.verticalCenter } @@ -150,112 +160,123 @@ Item { iconSource: UM.Theme.getIcon("link") - onEntered: { - hoverTimer.stop(); - var tooltipText = catalog.i18nc("@label", "This setting is always shared between all extruders. Changing it here will change the value for all extruders."); - if ((resolve != "None") && (stackLevel != 0)) { + onEntered: + { + hoverTimer.stop() + var tooltipText = catalog.i18nc("@label", "This setting is always shared between all extruders. Changing it here will change the value for all extruders.") + if ((resolve != "None") && (stackLevel != 0)) + { // We come here if a setting has a resolve and the setting is not manually edited. - tooltipText += " " + catalog.i18nc("@label", "The value is resolved from per-extruder values ") + "[" + Cura.ExtruderManager.getInstanceExtruderValues(definition.key) + "]."; + tooltipText += " " + catalog.i18nc("@label", "The value is resolved from per-extruder values ") + "[" + Cura.ExtruderManager.getInstanceExtruderValues(definition.key) + "]." } - base.showTooltip(tooltipText); + base.showTooltip(tooltipText) } - onExited: base.showTooltip(base.tooltipText); + onExited: base.showTooltip(base.tooltipText) } UM.SimpleButton { - id: revertButton; + id: revertButton visible: base.stackLevel == 0 && base.showRevertButton - height: parent.height; - width: height; + height: parent.height + width: height color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button_hover") iconSource: UM.Theme.getIcon("reset") - onClicked: { + onClicked: + { revertButton.focus = true - if (externalResetHandler) { + if (externalResetHandler) + { externalResetHandler(propertyProvider.key) - } else { + } + else + { Cura.MachineManager.clearUserSettingAllCurrentStacks(propertyProvider.key) } } - onEntered: { hoverTimer.stop(); base.showTooltip(catalog.i18nc("@label", "This setting has a value that is different from the profile.\n\nClick to restore the value of the profile.")) } - onExited: base.showTooltip(base.tooltipText); + onEntered: + { + hoverTimer.stop() + base.showTooltip(catalog.i18nc("@label", "This setting has a value that is different from the profile.\n\nClick to restore the value of the profile.")) + } + onExited: base.showTooltip(base.tooltipText) } UM.SimpleButton { // This button shows when the setting has an inherited function, but is overriden by profile. - id: inheritButton; + id: inheritButton // Inherit button needs to be visible if; // - User made changes that override any loaded settings // - This setting item uses inherit button at all // - The type of the value of any deeper container is an "object" (eg; is a function) visible: { - if(!base.showInheritButton) + if (!base.showInheritButton) { - return false; + return false } - if(!propertyProvider.properties.enabled) + if (!propertyProvider.properties.enabled) { // Note: This is not strictly necessary since a disabled setting is hidden anyway. // But this will cause the binding to be re-evaluated when the enabled property changes. - return false; + return false } // There are no settings with any warning. - if(Cura.SettingInheritanceManager.settingsWithInheritanceWarning.length == 0) + if (Cura.SettingInheritanceManager.settingsWithInheritanceWarning.length == 0) { - return false; + return false } // This setting has a resolve value, so an inheritance warning doesn't do anything. - if(resolve != "None") + if (resolve != "None") { return false } // If the setting does not have a limit_to_extruder property (or is -1), use the active stack. - if(globalPropertyProvider.properties.limit_to_extruder == null || String(globalPropertyProvider.properties.limit_to_extruder) == "-1") + if (globalPropertyProvider.properties.limit_to_extruder == null || String(globalPropertyProvider.properties.limit_to_extruder) == "-1") { - return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; + return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0 } // Setting does have a limit_to_extruder property, so use that one instead. if (definition.key === undefined) { // Observed when loading workspace, probably when SettingItems are removed. - return false; + return false } - return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, String(globalPropertyProvider.properties.limit_to_extruder)).indexOf(definition.key) >= 0; + return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, String(globalPropertyProvider.properties.limit_to_extruder)).indexOf(definition.key) >= 0 } - height: parent.height; - width: height; + height: parent.height + width: height - onClicked: { - focus = true; + onClicked: + { + focus = true // Get the most shallow function value (eg not a number) that we can find. var last_entry = propertyProvider.stackLevels[propertyProvider.stackLevels.length - 1] for (var i = 1; i < base.stackLevels.length; i++) { - var has_setting_function = typeof(propertyProvider.getPropertyValue("value", base.stackLevels[i])) == "object"; + var has_setting_function = typeof(propertyProvider.getPropertyValue("value", base.stackLevels[i])) == "object" if(has_setting_function) { last_entry = propertyProvider.stackLevels[i] - break; + break } } - if((last_entry == 4 || last_entry == 11) && base.stackLevel == 0 && base.stackLevels.length == 2) + if ((last_entry == 4 || last_entry == 11) && base.stackLevel == 0 && base.stackLevels.length == 2) { // Special case of the inherit reset. If only the definition (4th or 11th) container) and the first // entry (user container) are set, we can simply remove the container. @@ -276,23 +297,22 @@ Item { color: UM.Theme.getColor("setting_control_button") hoverColor: UM.Theme.getColor("setting_control_button_hover") - iconSource: UM.Theme.getIcon("formula"); + iconSource: UM.Theme.getIcon("formula") onEntered: { hoverTimer.stop(); base.showTooltip(catalog.i18nc("@label", "This setting is normally calculated, but it currently has an absolute value set.\n\nClick to restore the calculated value.")) } - onExited: base.showTooltip(base.tooltipText); + onExited: base.showTooltip(base.tooltipText) } } Item { - id: controlContainer; + id: controlContainer enabled: propertyProvider.isValueUsed - anchors.right: parent.right; - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.verticalCenter: parent.verticalCenter; - width: UM.Theme.getSize("setting_control").width; + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + width: UM.Theme.getSize("setting_control").width height: UM.Theme.getSize("setting_control").height } } diff --git a/resources/qml/Settings/SettingOptionalExtruder.qml b/resources/qml/Settings/SettingOptionalExtruder.qml index a3c1422b30..b73c7498ae 100644 --- a/resources/qml/Settings/SettingOptionalExtruder.qml +++ b/resources/qml/Settings/SettingOptionalExtruder.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2016 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 2.0 @@ -12,15 +12,24 @@ SettingItem id: base property var focusItem: control + // Somehow if we directory set control.model to CuraApplication.getExtrudersModelWithOptional() + // and in the Connections.onModelChanged use control.model as a reference, it will complain about + // non-existing properties such as "onModelChanged" and "getItem". I guess if we access the model + // via "control.model", it gives back a generic/abstract model instance. To avoid this, we add + // this extra property to keep the ExtrudersModel and use this in the rest of the code. + property var extrudersWithOptionalModel: CuraApplication.getExtrudersModelWithOptional() + contents: ComboBox { id: control anchors.fill: parent - model: Cura.ExtrudersModel + model: base.extrudersWithOptionalModel + + Connections { - onModelChanged: control.color = getItem(control.currentIndex).color - addOptionalExtruder: true + target: base.extrudersWithOptionalModel + onModelChanged: control.color = base.extrudersWithOptionalModel.getItem(control.currentIndex).color } textRole: "name" @@ -31,12 +40,15 @@ SettingItem { forceActiveFocus(); propertyProvider.setPropertyValue("value", model.getItem(index).index); - } else + } + else { if (propertyProvider.properties.value == -1) { - control.currentIndex = model.rowCount() - 1; // we know the last item is "Not overriden" - } else { + control.currentIndex = model.count - 1; // we know the last item is "Not overriden" + } + else + { control.currentIndex = propertyProvider.properties.value; // revert to the old value } } @@ -99,7 +111,7 @@ SettingItem sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text"); + color: UM.Theme.getColor("setting_control_button"); } background: Rectangle @@ -116,6 +128,7 @@ SettingItem } return UM.Theme.getColor("setting_control"); } + radius: UM.Theme.getSize("setting_control_radius").width border.width: UM.Theme.getSize("default_lining").width border.color: { @@ -148,20 +161,18 @@ SettingItem elide: Text.ElideRight verticalAlignment: Text.AlignVCenter - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.color } } @@ -215,20 +226,18 @@ SettingItem verticalAlignment: Text.AlignVCenter rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width - background: Rectangle + background: UM.RecolorImage { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(parent.height / 2) width: height - anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - - border.width: UM.Theme.getSize("default_lining").width - border.color: enabled ? UM.Theme.getColor("setting_control_border") : UM.Theme.getColor("setting_control_disabled_border") - radius: Math.round(width / 2) + anchors.rightMargin: UM.Theme.getSize("thin_margin").width + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: control.model.getItem(index).color } } diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml index 9ec9338316..770ef53900 100644 --- a/resources/qml/Settings/SettingTextField.qml +++ b/resources/qml/Settings/SettingTextField.qml @@ -32,6 +32,7 @@ SettingItem anchors.fill: parent + radius: UM.Theme.getSize("setting_control_radius").width border.width: Math.round(UM.Theme.getSize("default_lining").width) border.color: { @@ -81,10 +82,10 @@ SettingItem Rectangle { - anchors.fill: parent; - anchors.margins: Math.round(UM.Theme.getSize("default_lining").width); + anchors.fill: parent + anchors.margins: Math.round(UM.Theme.getSize("default_lining").width) color: UM.Theme.getColor("setting_control_highlight") - opacity: !control.hovered ? 0 : propertyProvider.properties.validationState == "ValidatorState.Valid" ? 1.0 : 0.35; + opacity: !control.hovered ? 0 : propertyProvider.properties.validationState == "ValidatorState.Valid" ? 1.0 : 0.35 } Label @@ -145,11 +146,11 @@ SettingItem } color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default"); + font: UM.Theme.getFont("default") - selectByMouse: true; + selectByMouse: true - maximumLength: (definition.type == "str" || definition.type == "[int]") ? -1 : 10; + maximumLength: (definition.type == "str" || definition.type == "[int]") ? -1 : 10 clip: true; //Hide any text that exceeds the width of the text box. validator: RegExpValidator { regExp: (definition.type == "[int]") ? /^\[?(\s*-?[0-9]{0,9}\s*,)*(\s*-?[0-9]{0,9})\s*\]?$/ : (definition.type == "int") ? /^-?[0-9]{0,10}$/ : (definition.type == "float") ? /^-?[0-9]{0,9}[.,]?[0-9]{0,3}$/ : /^.*$/ } // definition.type property from parent loader used to disallow fractional number entry @@ -158,7 +159,8 @@ SettingItem { target: input property: "text" - value: { + value: + { // Stacklevels // 0: user -> unsaved change // 1: quality changes -> saved change @@ -167,13 +169,15 @@ SettingItem // 4: variant // 5: machine_changes // 6: machine - if ((base.resolve != "None" && base.resolve) && (stackLevel != 0) && (stackLevel != 1)) { + if ((base.resolve != "None" && base.resolve) && (stackLevel != 0) && (stackLevel != 1)) + { // We have a resolve function. Indicates that the setting is not settable per extruder and that // we have to choose between the resolved value (default) and the global value // (if user has explicitly set this). - return base.resolve; - } else { - return propertyProvider.properties.value; + return base.resolve + } + else { + return propertyProvider.properties.value } } when: !input.activeFocus @@ -182,16 +186,17 @@ SettingItem MouseArea { id: mouseArea - anchors.fill: parent; + anchors.fill: parent cursorShape: Qt.IBeamCursor onPressed: { - if(!input.activeFocus) { - base.focusGainedByClick = true; - input.forceActiveFocus(); + if (!input.activeFocus) + { + base.focusGainedByClick = true + input.forceActiveFocus() } - mouse.accepted = false; + mouse.accepted = false } } } diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index da50b430ac..972cbcdbb1 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Uranium is released under the terms of the LGPLv3 or higher. +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 1.1 @@ -13,156 +13,28 @@ import "../Menus" Item { - id: base; + id: settingsView property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel() property Action configureSettings property bool findingSettings - signal showTooltip(Item item, point location, string text) - signal hideTooltip() - - Item - { - id: globalProfileRow - height: UM.Theme.getSize("sidebar_setup").height - visible: !sidebar.hideSettings - - anchors - { - top: parent.top - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width) - right: parent.right - rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width) - } - - Label - { - id: globalProfileLabel - text: catalog.i18nc("@label","Profile:") - textFormat: Text.PlainText - width: Math.round(parent.width * 0.45 - UM.Theme.getSize("sidebar_margin").width - 2) - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - verticalAlignment: Text.AlignVCenter - anchors.top: parent.top - anchors.bottom: parent.bottom - } - - ToolButton - { - id: globalProfileSelection - - text: generateActiveQualityText() - enabled: !header.currentExtruderVisible || header.currentExtruderIndex > -1 - width: Math.round(parent.width * 0.55) - height: UM.Theme.getSize("setting_control").height - anchors.left: globalProfileLabel.right - anchors.right: parent.right - tooltip: Cura.MachineManager.activeQualityOrQualityChangesName - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true - menu: ProfileMenu { } - - function generateActiveQualityText () { - var result = Cura.MachineManager.activeQualityOrQualityChangesName; - - if (Cura.MachineManager.isActiveQualitySupported) { - if (Cura.MachineManager.activeQualityLayerHeight > 0) { - result += " <font color=\"" + UM.Theme.getColor("text_detail") + "\">" - result += " - " - result += Cura.MachineManager.activeQualityLayerHeight + "mm" - result += "</font>" - } - } - - return result - } - - UM.SimpleButton - { - id: customisedSettings - - visible: Cura.MachineManager.hasUserSettings - height: Math.round(parent.height * 0.6) - width: Math.round(parent.height * 0.6) - - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: Math.round(UM.Theme.getSize("setting_preferences_button_margin").width - UM.Theme.getSize("sidebar_margin").width) - - color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); - iconSource: UM.Theme.getIcon("star"); - - onClicked: - { - forceActiveFocus(); - Cura.Actions.manageProfiles.trigger() - } - onEntered: - { - var content = catalog.i18nc("@tooltip","Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") - base.showTooltip(globalProfileRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), content) - } - onExited: base.hideTooltip() - } - } - } - - ToolButton - { - id: settingVisibilityMenu - - width: height - height: UM.Theme.getSize("setting_control").height - anchors - { - top: globalProfileRow.bottom - topMargin: UM.Theme.getSize("sidebar_margin").height - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - style: ButtonStyle - { - background: Item { - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.horizontalCenter: parent.horizontalCenter - width: UM.Theme.getSize("standard_arrow").width - height: UM.Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - color: control.enabled ? UM.Theme.getColor("setting_category_text") : UM.Theme.getColor("setting_category_disabled_text") - source: UM.Theme.getIcon("menu") - } - } - label: Label{} - } - menu: SettingVisibilityPresetsMenu - { - onShowAllSettings: - { - definitionsModel.setAllVisible(true); - filter.updateDefinitionModel(); - } - } - } Rectangle { id: filterContainer visible: true + radius: UM.Theme.getSize("setting_control_radius").width border.width: Math.round(UM.Theme.getSize("default_lining").width) border.color: { - if(hoverMouseArea.containsMouse || clearFilterButton.containsMouse) + if (hoverMouseArea.containsMouse || clearFilterButton.containsMouse) { - return UM.Theme.getColor("setting_control_border_highlight"); + return UM.Theme.getColor("setting_control_border_highlight") } else { - return UM.Theme.getColor("setting_control_border"); + return UM.Theme.getColor("setting_control_border") } } @@ -170,16 +42,12 @@ Item anchors { - top: globalProfileRow.bottom - topMargin: UM.Theme.getSize("sidebar_margin").height + top: parent.top left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width right: settingVisibilityMenu.left - rightMargin: Math.floor(UM.Theme.getSize("default_margin").width / 2) + rightMargin: UM.Theme.getSize("default_margin").width } - height: visible ? UM.Theme.getSize("setting_control").height : 0 - Behavior on height { NumberAnimation { duration: 100 } } - + height: UM.Theme.getSize("print_setup_big_item").height Timer { id: settingsSearchTimer @@ -191,19 +59,19 @@ Item TextField { - id: filter; + id: filter height: parent.height anchors.left: parent.left anchors.right: clearFilterButton.left - anchors.rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width) + anchors.rightMargin: Math.round(UM.Theme.getSize("thick_margin").width) - placeholderText: catalog.i18nc("@label:textbox", "Search...") + placeholderText: "<img align='middle' src='"+ UM.Theme.getIcon("search") +"'>" + "<div vertical-align=bottom>" + catalog.i18nc("@label:textbox", "search settings") style: TextFieldStyle { - textColor: UM.Theme.getColor("setting_control_text"); - placeholderTextColor: UM.Theme.getColor("setting_control_text") - font: UM.Theme.getFont("default"); + textColor: UM.Theme.getColor("setting_control_text") + placeholderTextColor: UM.Theme.getColor("setting_filter_field") + font: UM.Theme.getFont("default_italic") background: Item {} } @@ -217,38 +85,38 @@ Item onEditingFinished: { - definitionsModel.filter = {"i18n_label": "*" + text}; - findingSettings = (text.length > 0); - if(findingSettings != lastFindingSettings) + definitionsModel.filter = {"i18n_label": "*" + text} + findingSettings = (text.length > 0) + if (findingSettings != lastFindingSettings) { - updateDefinitionModel(); - lastFindingSettings = findingSettings; + updateDefinitionModel() + lastFindingSettings = findingSettings } } Keys.onEscapePressed: { - filter.text = ""; + filter.text = "" } function updateDefinitionModel() { - if(findingSettings) + if (findingSettings) { - expandedCategories = definitionsModel.expanded.slice(); - definitionsModel.expanded = [""]; // keep categories closed while to prevent render while making settings visible one by one - definitionsModel.showAncestors = true; - definitionsModel.showAll = true; - definitionsModel.expanded = ["*"]; + expandedCategories = definitionsModel.expanded.slice() + definitionsModel.expanded = [""] // keep categories closed while to prevent render while making settings visible one by one + definitionsModel.showAncestors = true + definitionsModel.showAll = true + definitionsModel.expanded = ["*"] } else { - if(expandedCategories) + if (expandedCategories) { - definitionsModel.expanded = expandedCategories; + definitionsModel.expanded = expandedCategories } - definitionsModel.showAncestors = false; - definitionsModel.showAll = false; + definitionsModel.showAncestors = false + definitionsModel.showAll = false } } } @@ -280,41 +148,93 @@ Item onClicked: { - filter.text = ""; - filter.forceActiveFocus(); + filter.text = "" + filter.forceActiveFocus() } } } + ToolButton + { + id: settingVisibilityMenu + + anchors + { + top: filterContainer.top + bottom: filterContainer.bottom + right: parent.right + rightMargin: UM.Theme.getSize("wide_margin").width + } + + style: ButtonStyle + { + background: Item + { + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: UM.Theme.getSize("standard_arrow").width + height: UM.Theme.getSize("standard_arrow").height + sourceSize.width: width + sourceSize.height: height + color: control.hovered ? UM.Theme.getColor("small_button_text_hover") : UM.Theme.getColor("small_button_text") + source: UM.Theme.getIcon("menu") + } + } + label: Label {} + } + + menu: SettingVisibilityPresetsMenu + { + onShowAllSettings: + { + definitionsModel.setAllVisible(true) + filter.updateDefinitionModel() + } + } + } + + // Mouse area that gathers the scroll events to not propagate it to the main view. + MouseArea + { + anchors.fill: scrollView + acceptedButtons: Qt.AllButtons + onWheel: wheel.accepted = true + } + ScrollView { - anchors.top: filterContainer.bottom; - anchors.bottom: parent.bottom; - anchors.right: parent.right; - anchors.left: parent.left; - anchors.topMargin: filterContainer.visible ? UM.Theme.getSize("sidebar_margin").height : 0 - Behavior on anchors.topMargin { NumberAnimation { duration: 100 } } + id: scrollView + anchors + { + top: filterContainer.bottom + topMargin: UM.Theme.getSize("default_margin").height + bottom: parent.bottom + right: parent.right + left: parent.left + } - style: UM.Theme.styles.scrollview; - flickableItem.flickableDirection: Flickable.VerticalFlick; - __wheelAreaScrollSpeed: 75; // Scroll three lines in one scroll event + style: UM.Theme.styles.scrollview + flickableItem.flickableDirection: Flickable.VerticalFlick + __wheelAreaScrollSpeed: 75 // Scroll three lines in one scroll event ListView { id: contents - spacing: Math.round(UM.Theme.getSize("default_lining").height); - cacheBuffer: 1000000; // Set a large cache to effectively just cache every list item. + spacing: UM.Theme.getSize("default_lining").height + cacheBuffer: 1000000 // Set a large cache to effectively just cache every list item. model: UM.SettingDefinitionsModel { - id: definitionsModel; + id: definitionsModel containerId: Cura.MachineManager.activeDefinitionId visibilityHandler: UM.SettingPreferenceVisibilityHandler { } exclude: ["machine_settings", "command_line_settings", "infill_mesh", "infill_mesh_order", "cutting_mesh", "support_mesh", "anti_overhang_mesh"] // TODO: infill_mesh settigns are excluded hardcoded, but should be based on the fact that settable_globally, settable_per_meshgroup and settable_per_extruder are false. expanded: CuraApplication.expandedCategories onExpandedChanged: { - if(!findingSettings) + if (!findingSettings) { // Do not change expandedCategories preference while filtering settings // because all categories are expanded while filtering @@ -330,7 +250,7 @@ Item { id: delegate - width: Math.round(UM.Theme.getSize("sidebar").width); + width: scrollView.width height: provider.properties.enabled == "True" ? UM.Theme.getSize("section").height : - contents.spacing Behavior on height { NumberAnimation { duration: 100 } } opacity: provider.properties.enabled == "True" ? 1 : 0 @@ -400,17 +320,17 @@ Item // machine gets changed. var activeMachineId = Cura.MachineManager.activeMachineId; - if(!model.settable_per_extruder) + if (!model.settable_per_extruder) { //Not settable per extruder or there only is global, so we must pick global. return activeMachineId; } - if(inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0) + if (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0) { //We have limit_to_extruder, so pick that stack. return Cura.ExtruderManager.extruderIds[String(inheritStackProvider.properties.limit_to_extruder)]; } - if(Cura.ExtruderManager.activeExtruderStackId) + if (Cura.ExtruderManager.activeExtruderStackId) { //We're on an extruder tab. Pick the current extruder. return Cura.ExtruderManager.activeExtruderStackId; @@ -451,7 +371,7 @@ Item contextMenu.provider = provider contextMenu.popup(); } - onShowTooltip: base.showTooltip(delegate, { x: -UM.Theme.getSize("default_arrow").width, y: Math.round(delegate.height / 2) }, text) + onShowTooltip: base.showTooltip(delegate, Qt.point(- settingsView.x - UM.Theme.getSize("default_margin").width, 0), text) onHideTooltip: base.hideTooltip() onShowAllHiddenInheritedSettings: { @@ -472,14 +392,14 @@ Item } onSetActiveFocusToNextSetting: { - if(forward == undefined || forward) + if (forward == undefined || forward) { contents.currentIndex = contents.indexWithFocus + 1; while(contents.currentItem && contents.currentItem.height <= 0) { contents.currentIndex++; } - if(contents.currentItem) + if (contents.currentItem) { contents.currentItem.item.focusItem.forceActiveFocus(); } @@ -491,7 +411,7 @@ Item { contents.currentIndex--; } - if(contents.currentItem) + if (contents.currentItem) { contents.currentItem.item.focusItem.forceActiveFocus(); } @@ -638,17 +558,6 @@ Item onTriggered: Cura.Actions.configureSettingVisibility.trigger(contextMenu); } - MenuSeparator {} - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Collapse All") - onTriggered: definitionsModel.collapseAll() - } - MenuItem - { - text: catalog.i18nc("@action:inmenu", "Expand All") - onTriggered: definitionsModel.expandRecursive() - } } UM.SettingPropertyProvider diff --git a/resources/qml/SidebarAdvanced.qml b/resources/qml/SidebarAdvanced.qml deleted file mode 100644 index ff5f545c80..0000000000 --- a/resources/qml/SidebarAdvanced.qml +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2015 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 2.0 - -import "Settings" - -SettingView { -} diff --git a/resources/qml/SidebarContents.qml b/resources/qml/SidebarContents.qml deleted file mode 100644 index 0b19bfe3c1..0000000000 --- a/resources/qml/SidebarContents.qml +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2016 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -StackView -{ - id: sidebarContents - - delegate: StackViewDelegate - { - function transitionFinished(properties) - { - properties.exitItem.opacity = 1 - } - - pushTransition: StackViewTransition - { - PropertyAnimation - { - target: enterItem - property: "opacity" - from: 0 - to: 1 - duration: 100 - } - PropertyAnimation - { - target: exitItem - property: "opacity" - from: 1 - to: 0 - duration: 100 - } - } - } -}
\ No newline at end of file diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml deleted file mode 100644 index 5fde199cd0..0000000000 --- a/resources/qml/SidebarHeader.qml +++ /dev/null @@ -1,617 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -import "Menus" - -Column -{ - id: base; - - property int currentExtruderIndex: Cura.ExtruderManager.activeExtruderIndex; - property bool currentExtruderVisible: extrudersList.visible; - property bool printerConnected: Cura.MachineManager.printerConnected - property bool hasManyPrinterTypes: - { - if (printerConnected) - { - if (Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount != null) - { - return Cura.MachineManager.printerOutputDevices[0].connectedPrintersTypeCount.length > 1; - } - } - return false; - } - property bool buildplateCompatibilityError: !Cura.MachineManager.variantBuildplateCompatible && !Cura.MachineManager.variantBuildplateUsable - property bool buildplateCompatibilityWarning: Cura.MachineManager.variantBuildplateUsable - - spacing: Math.round(UM.Theme.getSize("sidebar_margin").width * 0.9) - - signal showTooltip(Item item, point location, string text) - signal hideTooltip() - - Item - { - id: initialSeparator - anchors - { - left: parent.left - right: parent.right - } - visible: printerTypeSelectionRow.visible || buildplateRow.visible || extruderSelectionRow.visible - height: UM.Theme.getSize("default_lining").height - width: height - } - - // Printer Type Row - Item - { - id: printerTypeSelectionRow - height: UM.Theme.getSize("sidebar_setup").height - visible: printerConnected && hasManyPrinterTypes && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: configurationLabel - text: catalog.i18nc("@label", "Printer type"); - width: Math.round(parent.width * 0.4 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: printerTypeSelection - text: Cura.MachineManager.activeMachineDefinitionName - tooltip: Cura.MachineManager.activeMachineDefinitionName - height: UM.Theme.getSize("setting_control").height - width: Math.round(parent.width * 0.7) + UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - - menu: PrinterTypeMenu { } - } - } - - Rectangle { - id: headerSeparator - width: parent.width - visible: printerTypeSelectionRow.visible - height: visible ? UM.Theme.getSize("sidebar_lining").height : 0 - color: UM.Theme.getColor("sidebar_lining") - } - - // Extruder Row - Item - { - id: extruderSelectionRow - width: parent.width - height: Math.round(UM.Theme.getSize("sidebar_tabs").height * 2 / 3) - visible: machineExtruderCount.properties.value > 1 - - anchors - { - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width * 0.7) - right: parent.right - rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width * 0.7) - topMargin: UM.Theme.getSize("sidebar_margin").height - } - - ListView - { - id: extrudersList - property var index: 0 - - height: UM.Theme.getSize("sidebar_header_mode_tabs").height - width: Math.round(parent.width) - boundsBehavior: Flickable.StopAtBounds - - anchors - { - left: parent.left - leftMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - right: parent.right - rightMargin: Math.round(UM.Theme.getSize("default_margin").width / 2) - verticalCenter: parent.verticalCenter - } - - ExclusiveGroup { id: extruderMenuGroup; } - - orientation: ListView.Horizontal - - model: Cura.ExtrudersModel { id: extrudersModel; } - - Connections - { - target: Cura.MachineManager - onGlobalContainerChanged: forceActiveFocus() // Changing focus applies the currently-being-typed values so it can change the displayed setting values. - } - - delegate: Button - { - height: ListView.view.height - width: Math.round(ListView.view.width / extrudersModel.rowCount()) - - text: model.name - tooltip: model.name - exclusiveGroup: extruderMenuGroup - checked: base.currentExtruderIndex == index - - property bool extruder_enabled: true - - MouseArea - { - anchors.fill: parent - acceptedButtons: Qt.LeftButton | Qt.RightButton - onClicked: { - switch (mouse.button) { - case Qt.LeftButton: - extruder_enabled = Cura.MachineManager.getExtruder(model.index).isEnabled - if (extruder_enabled) - { - forceActiveFocus(); // Changing focus applies the currently-being-typed values so it can change the displayed setting values. - Cura.ExtruderManager.setActiveExtruderIndex(index); - } - break; - case Qt.RightButton: - extruder_enabled = Cura.MachineManager.getExtruder(model.index).isEnabled - extruderMenu.popup(); - break; - } - - } - } - - Menu - { - id: extruderMenu - - MenuItem { - text: catalog.i18nc("@action:inmenu", "Enable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, true) - visible: !extruder_enabled // using an intermediate variable prevents an empty popup that occured now and then - } - - MenuItem { - text: catalog.i18nc("@action:inmenu", "Disable Extruder") - onTriggered: Cura.MachineManager.setExtruderEnabled(model.index, false) - visible: extruder_enabled - enabled: Cura.MachineManager.numberExtrudersEnabled > 1 - } - } - - style: ButtonStyle - { - background: Item - { - function buttonBackgroundColor(index) - { - var extruder = Cura.MachineManager.getExtruder(index) - if (extruder.isEnabled) { - return (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active") : - control.hovered ? UM.Theme.getColor("action_button_hovered") : - UM.Theme.getColor("action_button") - } else { - return UM.Theme.getColor("action_button_disabled") - } - } - - function buttonBorderColor(index) - { - var extruder = Cura.MachineManager.getExtruder(index) - if (extruder.isEnabled) { - return (control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_border") : - control.hovered ? UM.Theme.getColor("action_button_hovered_border") : - UM.Theme.getColor("action_button_border") - } else { - return UM.Theme.getColor("action_button_disabled_border") - } - } - - function buttonColor(index) { - var extruder = Cura.MachineManager.getExtruder(index); - if (extruder.isEnabled) - { - return ( - control.checked || control.pressed) ? UM.Theme.getColor("action_button_active_text") : - control.hovered ? UM.Theme.getColor("action_button_hovered_text") : - UM.Theme.getColor("action_button_text"); - } else { - return UM.Theme.getColor("action_button_disabled_text"); - } - } - - Rectangle - { - anchors.fill: parent - border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width - border.color: buttonBorderColor(index) - color: buttonBackgroundColor(index) - Behavior on color { ColorAnimation { duration: 50; } } - } - - Item - { - id: extruderButtonFace - anchors.centerIn: parent - - width: { - var extruderTextWidth = extruderStaticText.visible ? extruderStaticText.width : 0; - var iconWidth = extruderIconItem.width; - return Math.round(extruderTextWidth + iconWidth + UM.Theme.getSize("default_margin").width / 2); - } - - // Static text "Extruder" - Label - { - id: extruderStaticText - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - - color: buttonColor(index) - - font: UM.Theme.getFont("large_nonbold") - text: catalog.i18nc("@label", "Extruder") - visible: width < (control.width - extruderIconItem.width - UM.Theme.getSize("default_margin").width) - elide: Text.ElideRight - } - - // Everything for the extruder icon - Item - { - id: extruderIconItem - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - - property var sizeToUse: - { - var minimumWidth = control.width < UM.Theme.getSize("button").width ? control.width : UM.Theme.getSize("button").width; - var minimumHeight = control.height < UM.Theme.getSize("button").height ? control.height : UM.Theme.getSize("button").height; - var minimumSize = minimumWidth < minimumHeight ? minimumWidth : minimumHeight; - minimumSize -= Math.round(UM.Theme.getSize("default_margin").width / 2); - return minimumSize; - } - - width: sizeToUse - height: sizeToUse - - UM.RecolorImage { - id: mainCircle - anchors.fill: parent - - sourceSize.width: parent.width - sourceSize.height: parent.width - source: UM.Theme.getIcon("extruder_button") - - color: extruderNumberText.color - } - - Label - { - id: extruderNumberText - anchors.centerIn: parent - text: index + 1; - color: buttonColor(index) - font: UM.Theme.getFont("default_bold") - } - - // Material colour circle - // Only draw the filling colour of the material inside the SVG border. - Rectangle - { - id: materialColorCircle - - anchors - { - right: parent.right - top: parent.top - rightMargin: Math.round(parent.sizeToUse * 0.01) - topMargin: Math.round(parent.sizeToUse * 0.05) - } - - color: model.color - - width: Math.round(parent.width * 0.35) - height: Math.round(parent.height * 0.35) - radius: Math.round(width / 2) - - border.width: 1 - border.color: UM.Theme.getColor("extruder_button_material_border") - - opacity: !control.checked ? 0.6 : 1.0 - } - } - } - } - label: Item {} - } - } - } - } - - Item - { - id: variantRowSpacer - height: Math.round(UM.Theme.getSize("sidebar_margin").height / 4) - width: height - visible: !extruderSelectionRow.visible && !initialSeparator.visible - } - - // Material Row - Item - { - id: materialRow - height: UM.Theme.getSize("sidebar_setup").height - visible: Cura.MachineManager.hasMaterials && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: materialLabel - text: catalog.i18nc("@label", "Material"); - width: Math.round(parent.width * 0.45 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: materialSelection - - property var activeExtruder: Cura.MachineManager.activeStack - property var hasActiveExtruder: activeExtruder != null - property var currentRootMaterialName: hasActiveExtruder ? activeExtruder.material.name : "" - - text: currentRootMaterialName - tooltip: currentRootMaterialName - visible: Cura.MachineManager.hasMaterials - enabled: !extrudersList.visible || base.currentExtruderIndex > -1 - height: UM.Theme.getSize("setting_control").height - width: Math.round(parent.width * 0.7) + UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - menu: MaterialMenu - { - extruderIndex: base.currentExtruderIndex - } - - property var valueError: !isMaterialSupported() - property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported - - function isMaterialSupported () - { - if (!hasActiveExtruder) - { - return false; - } - return Cura.ContainerManager.getContainerMetaDataEntry(activeExtruder.material.id, "compatible", "") == "True" - } - } - } - - //Variant row - Item - { - id: variantRow - height: UM.Theme.getSize("sidebar_setup").height - visible: Cura.MachineManager.hasVariants && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: variantLabel - text: Cura.MachineManager.activeDefinitionVariantsName; - width: Math.round(parent.width * 0.45 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: variantSelection - text: Cura.MachineManager.activeVariantName - tooltip: Cura.MachineManager.activeVariantName; - visible: Cura.MachineManager.hasVariants - - height: UM.Theme.getSize("setting_control").height - width: Math.round(parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width) - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - - menu: NozzleMenu { extruderIndex: base.currentExtruderIndex } - } - } - - Rectangle - { - id: buildplateSeparator - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - width: parent.width - 2 * UM.Theme.getSize("sidebar_margin").width - visible: buildplateRow.visible - height: visible ? UM.Theme.getSize("sidebar_lining_thin").height : 0 - color: UM.Theme.getColor("sidebar_lining") - } - - //Buildplate row - Item - { - id: buildplateRow - height: UM.Theme.getSize("sidebar_setup").height - // TODO Only show in dev mode. Remove check when feature ready - visible: CuraSDKVersion == "dev" ? Cura.MachineManager.hasVariantBuildplates && !sidebar.hideSettings : false - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - Label - { - id: buildplateLabel - text: catalog.i18nc("@label", "Build plate"); - width: Math.floor(parent.width * 0.45 - UM.Theme.getSize("default_margin").width) - height: parent.height - verticalAlignment: Text.AlignVCenter - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - } - - ToolButton - { - id: buildplateSelection - text: Cura.MachineManager.activeVariantBuildplateName - tooltip: Cura.MachineManager.activeVariantBuildplateName - visible: Cura.MachineManager.hasVariantBuildplates - - height: UM.Theme.getSize("setting_control").height - width: Math.floor(parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width) - anchors.right: parent.right - style: UM.Theme.styles.sidebar_header_button - activeFocusOnPress: true; - - menu: BuildplateMenu {} - - property var valueError: !Cura.MachineManager.variantBuildplateCompatible && !Cura.MachineManager.variantBuildplateUsable - property var valueWarning: Cura.MachineManager.variantBuildplateUsable - } - } - - // Material info row - Item - { - id: materialInfoRow - height: Math.round(UM.Theme.getSize("sidebar_setup").height / 2) - visible: (Cura.MachineManager.hasVariants || Cura.MachineManager.hasMaterials || Cura.MachineManager.hasVariantBuildplates) && !sidebar.hideSettings - - anchors - { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: parent.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - } - - // TODO This was added to replace the buildplate selector. Remove this component when the feature is ready - Label - { - id: materialCompatibilityLabel - y: -Math.round(UM.Theme.getSize("sidebar_margin").height / 3) - anchors.left: parent.left - width: parent.width - materialCompatibilityLink.width - text: catalog.i18nc("@label", "Use glue with this material combination") - font: UM.Theme.getFont("very_small") - color: UM.Theme.getColor("text") - visible: CuraSDKVersion == "dev" ? false : buildplateCompatibilityError || buildplateCompatibilityWarning - wrapMode: Text.WordWrap - opacity: 0.5 - } - - Item - { - id: materialCompatibilityLink - height: UM.Theme.getSize("sidebar_setup").height - anchors.right: parent.right - width: childrenRect.width + UM.Theme.getSize("default_margin").width - - UM.RecolorImage { - id: warningImage - anchors.right: materialInfoLabel.left - anchors.rightMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.Bottom - source: UM.Theme.getIcon("warning") - width: UM.Theme.getSize("section_icon").width - height: UM.Theme.getSize("section_icon").height - sourceSize.width: width - sourceSize.height: height - color: UM.Theme.getColor("material_compatibility_warning") - visible: !Cura.MachineManager.isCurrentSetupSupported || buildplateCompatibilityError || buildplateCompatibilityWarning - } - - Label { - id: materialInfoLabel - wrapMode: Text.WordWrap - text: "<a href='%1'>" + catalog.i18nc("@label", "Check compatibility") + "</a>" - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - linkColor: UM.Theme.getColor("text_link") - verticalAlignment: Text.AlignTop - anchors.top: parent.top - anchors.right: parent.right - anchors.bottom: parent.bottom - - MouseArea { - anchors.fill: parent - hoverEnabled: true - onClicked: { - // open the material URL with web browser - var url = "https://ultimaker.com/incoming-links/cura/material-compatibilty" - Qt.openUrlExternally(url); - } - onEntered: { - var content = catalog.i18nc("@tooltip", "Click to check the material compatibility on Ultimaker.com."); - base.showTooltip( - materialInfoRow, - Qt.point(-UM.Theme.getSize("sidebar_margin").width, 0), - catalog.i18nc("@tooltip", content) - ); - } - onExited: base.hideTooltip(); - } - } - } - } - - UM.SettingPropertyProvider - { - id: machineExtruderCount - - containerStack: Cura.MachineManager.activeMachine - key: "machine_extruder_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.I18nCatalog { id: catalog; name:"cura" } -} diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml deleted file mode 100644 index ddb42f44c6..0000000000 --- a/resources/qml/SidebarSimple.qml +++ /dev/null @@ -1,1168 +0,0 @@ -// Copyright (c) 2018 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.7 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtQuick.Layouts 1.3 - -import UM 1.2 as UM -import Cura 1.0 as Cura - -Item -{ - id: base - - signal showTooltip(Item item, point location, string text); - signal hideTooltip(); - - property Action configureSettings; - property variant minimumPrintTime: PrintInformation.minimumPrintTime; - property variant maximumPrintTime: PrintInformation.maximumPrintTime; - property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1 - Component.onCompleted: PrintInformation.enabled = true - Component.onDestruction: PrintInformation.enabled = false - UM.I18nCatalog { id: catalog; name: "cura" } - - ScrollView - { - visible: Cura.MachineManager.activeMachineName != "" // If no printers added then the view is invisible - anchors.fill: parent - style: UM.Theme.styles.scrollview - flickableItem.flickableDirection: Flickable.VerticalFlick - - Rectangle - { - width: childrenRect.width - height: childrenRect.height - color: UM.Theme.getColor("sidebar") - - // - // Quality profile - // - Item - { - id: qualityRow - - height: UM.Theme.getSize("sidebar_margin").height - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - - Timer - { - id: qualitySliderChangeTimer - interval: 50 - running: false - repeat: false - onTriggered: - { - var item = Cura.QualityProfilesDropDownMenuModel.getItem(qualitySlider.value); - Cura.MachineManager.activeQualityGroup = item.quality_group; - } - } - - Component.onCompleted: qualityModel.update() - - Connections - { - target: Cura.QualityProfilesDropDownMenuModel - onItemsChanged: qualityModel.update() - } - - Connections { - target: base - onVisibleChanged: - { - // update needs to be called when the widgets are visible, otherwise the step width calculation - // will fail because the width of an invisible item is 0. - if (visible) - { - qualityModel.update(); - } - } - } - - ListModel - { - id: qualityModel - - property var totalTicks: 0 - property var availableTotalTicks: 0 - property var existingQualityProfile: 0 - - property var qualitySliderActiveIndex: 0 - property var qualitySliderStepWidth: 0 - property var qualitySliderAvailableMin: 0 - property var qualitySliderAvailableMax: 0 - property var qualitySliderMarginRight: 0 - - function update () - { - reset() - - var availableMin = -1 - var availableMax = -1 - - for (var i = 0; i < Cura.QualityProfilesDropDownMenuModel.rowCount(); i++) - { - var qualityItem = Cura.QualityProfilesDropDownMenuModel.getItem(i) - - // Add each quality item to the UI quality model - qualityModel.append(qualityItem) - - // Set selected value - if (Cura.MachineManager.activeQualityType == qualityItem.quality_type) - { - // set to -1 when switching to user created profile so all ticks are clickable - if (Cura.SimpleModeSettingsManager.isProfileUserCreated) - { - qualityModel.qualitySliderActiveIndex = -1 - } - else - { - qualityModel.qualitySliderActiveIndex = i - } - - qualityModel.existingQualityProfile = 1 - } - - // Set min available - if (qualityItem.available && availableMin == -1) - { - availableMin = i - } - - // Set max available - if (qualityItem.available) - { - availableMax = i - } - } - - // Set total available ticks for active slider part - if (availableMin != -1) - { - qualityModel.availableTotalTicks = availableMax - availableMin + 1 - } - - // Calculate slider values - calculateSliderStepWidth(qualityModel.totalTicks) - calculateSliderMargins(availableMin, availableMax, qualityModel.totalTicks) - - qualityModel.qualitySliderAvailableMin = availableMin - qualityModel.qualitySliderAvailableMax = availableMax - } - - function calculateSliderStepWidth (totalTicks) - { - qualityModel.qualitySliderStepWidth = totalTicks != 0 ? Math.round((base.width * 0.55) / (totalTicks)) : 0 - } - - function calculateSliderMargins (availableMin, availableMax, totalTicks) - { - if (availableMin == -1 || (availableMin == 0 && availableMax == 0)) - { - qualityModel.qualitySliderMarginRight = Math.round(base.width * 0.55) - } - else if (availableMin == availableMax) - { - qualityModel.qualitySliderMarginRight = Math.round((totalTicks - availableMin) * qualitySliderStepWidth) - } - else - { - qualityModel.qualitySliderMarginRight = Math.round((totalTicks - availableMax) * qualitySliderStepWidth) - } - } - - function reset () { - qualityModel.clear() - qualityModel.availableTotalTicks = 0 - qualityModel.existingQualityProfile = 0 - - // check, the ticks count cannot be less than zero - qualityModel.totalTicks = Math.max(0, Cura.QualityProfilesDropDownMenuModel.rowCount() - 1) - } - } - - Label - { - id: qualityRowTitle - text: catalog.i18nc("@label", "Layer Height") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - } - - // Show titles for the each quality slider ticks - Item - { - y: -5; - anchors.left: speedSlider.left - Repeater - { - model: qualityModel - - Label - { - anchors.verticalCenter: parent.verticalCenter - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) - color: (Cura.MachineManager.activeMachine != null && Cura.QualityProfilesDropDownMenuModel.getItem(index).available) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - text: - { - var result = "" - if(Cura.MachineManager.activeMachine != null) - { - result = Cura.QualityProfilesDropDownMenuModel.getItem(index).layer_height - - if(result == undefined) - { - result = ""; - } - else - { - result = Number(Math.round(result + "e+2") + "e-2"); //Round to 2 decimals. Javascript makes this difficult... - if (result == undefined || result != result) //Parse failure. - { - result = ""; - } - } - } - return result - } - - x: - { - // Make sure the text aligns correctly with each tick - if (qualityModel.totalTicks == 0) - { - // If there is only one tick, align it centrally - return Math.round(((base.width * 0.55) - width) / 2) - } - else if (index == 0) - { - return Math.round(base.width * 0.55 / qualityModel.totalTicks) * index - } - else if (index == qualityModel.totalTicks) - { - return Math.round(base.width * 0.55 / qualityModel.totalTicks) * index - width - } - else - { - return Math.round((base.width * 0.55 / qualityModel.totalTicks) * index - (width / 2)) - } - } - } - } - } - - //Print speed slider - Item - { - id: speedSlider - width: Math.round(base.width * 0.55) - height: UM.Theme.getSize("sidebar_margin").height - anchors.right: parent.right - anchors.top: parent.top - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - - // This Item is used only for tooltip, for slider area which is unavailable - Item - { - function showTooltip (showTooltip) - { - if (showTooltip) - { - var content = catalog.i18nc("@tooltip", "This quality profile is not available for you current material and nozzle configuration. Please change these to enable this quality profile") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) - } - else - { - base.hideTooltip() - } - } - - id: unavailableLineToolTip - height: 20 * screenScaleFactor // hovered area height - z: parent.z + 1 // should be higher, otherwise the area can be hovered - x: 0 - anchors.verticalCenter: qualitySlider.verticalCenter - - Rectangle - { - id: leftArea - width: - { - if (qualityModel.availableTotalTicks == 0) - { - return qualityModel.qualitySliderStepWidth * qualityModel.totalTicks - } - return qualityModel.qualitySliderStepWidth * qualityModel.qualitySliderAvailableMin - 10 - } - height: parent.height - color: "transparent" - - MouseArea - { - anchors.fill: parent - hoverEnabled: true - enabled: Cura.SimpleModeSettingsManager.isProfileUserCreated == false - onEntered: unavailableLineToolTip.showTooltip(true) - onExited: unavailableLineToolTip.showTooltip(false) - } - } - - Rectangle - { - id: rightArea - width: - { - if(qualityModel.availableTotalTicks == 0) - return 0 - - return qualityModel.qualitySliderMarginRight - 10 - } - height: parent.height - color: "transparent" - x: - { - if (qualityModel.availableTotalTicks == 0) - { - return 0 - } - - var leftUnavailableArea = qualityModel.qualitySliderStepWidth * qualityModel.qualitySliderAvailableMin - var totalGap = qualityModel.qualitySliderStepWidth * (qualityModel.availableTotalTicks -1) + leftUnavailableArea + 10 - - return totalGap - } - - MouseArea - { - anchors.fill: parent - hoverEnabled: true - enabled: Cura.SimpleModeSettingsManager.isProfileUserCreated == false - onEntered: unavailableLineToolTip.showTooltip(true) - onExited: unavailableLineToolTip.showTooltip(false) - } - } - } - - // Draw Unavailable line - Rectangle - { - id: groovechildrect - width: Math.round(base.width * 0.55) - height: 2 * screenScaleFactor - color: UM.Theme.getColor("quality_slider_unavailable") - anchors.verticalCenter: qualitySlider.verticalCenter - x: 0 - } - - // Draw ticks - Repeater - { - id: qualityRepeater - model: qualityModel.totalTicks > 0 ? qualityModel : 0 - - Rectangle - { - anchors.verticalCenter: parent.verticalCenter - color: Cura.QualityProfilesDropDownMenuModel.getItem(index).available ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - width: 1 * screenScaleFactor - height: 6 * screenScaleFactor - y: 0 - x: Math.round(qualityModel.qualitySliderStepWidth * index) - } - } - - Slider - { - id: qualitySlider - height: UM.Theme.getSize("sidebar_margin").height - anchors.bottom: speedSlider.bottom - enabled: qualityModel.totalTicks > 0 && !Cura.SimpleModeSettingsManager.isProfileCustomized - visible: qualityModel.availableTotalTicks > 0 - updateValueWhileDragging : false - - minimumValue: qualityModel.qualitySliderAvailableMin >= 0 ? qualityModel.qualitySliderAvailableMin : 0 - // maximumValue must be greater than minimumValue to be able to see the handle. While the value is strictly - // speaking not always correct, it seems to have the correct behavior (switching from 0 available to 1 available) - maximumValue: qualityModel.qualitySliderAvailableMax >= 1 ? qualityModel.qualitySliderAvailableMax : 1 - stepSize: 1 - - value: qualityModel.qualitySliderActiveIndex - - width: qualityModel.qualitySliderStepWidth * (qualityModel.availableTotalTicks - 1) - - anchors.right: parent.right - anchors.rightMargin: qualityModel.qualitySliderMarginRight - - style: SliderStyle - { - //Draw Available line - groove: Rectangle - { - implicitHeight: 2 * screenScaleFactor - color: UM.Theme.getColor("quality_slider_available") - radius: Math.round(height / 2) - } - handle: Item - { - Rectangle - { - id: qualityhandleButton - anchors.centerIn: parent - color: UM.Theme.getColor("quality_slider_available") - implicitWidth: 10 * screenScaleFactor - implicitHeight: implicitWidth - radius: Math.round(implicitWidth / 2) - visible: !Cura.SimpleModeSettingsManager.isProfileCustomized && !Cura.SimpleModeSettingsManager.isProfileUserCreated && qualityModel.existingQualityProfile - } - } - } - - onValueChanged: - { - // only change if an active machine is set and the slider is visible at all. - if (Cura.MachineManager.activeMachine != null && visible) - { - // prevent updating during view initializing. Trigger only if the value changed by user - if (qualitySlider.value != qualityModel.qualitySliderActiveIndex && qualityModel.qualitySliderActiveIndex != -1) - { - // start updating with short delay - qualitySliderChangeTimer.start() - } - } - } - } - - MouseArea - { - id: speedSliderMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: Cura.SimpleModeSettingsManager.isProfileUserCreated - - onEntered: - { - var content = catalog.i18nc("@tooltip","A custom profile is currently active. To enable the quality slider, choose a default quality profile in Custom tab") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) - } - onExited: - { - base.hideTooltip(); - } - } - } - - Label - { - id: speedLabel - anchors.top: speedSlider.bottom - - anchors.left: parent.left - - text: catalog.i18nc("@label", "Print Speed") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - width: Math.round(UM.Theme.getSize("sidebar").width * 0.35) - elide: Text.ElideRight - } - - Label - { - anchors.bottom: speedLabel.bottom - anchors.left: speedSlider.left - - text: catalog.i18nc("@label", "Slower") - font: UM.Theme.getFont("default") - color: (qualityModel.availableTotalTicks > 1) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - horizontalAlignment: Text.AlignLeft - } - - Label - { - anchors.bottom: speedLabel.bottom - anchors.right: speedSlider.right - - text: catalog.i18nc("@label", "Faster") - font: UM.Theme.getFont("default") - color: (qualityModel.availableTotalTicks > 1) ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - horizontalAlignment: Text.AlignRight - } - - UM.SimpleButton - { - id: customisedSettings - - visible: Cura.SimpleModeSettingsManager.isProfileCustomized || Cura.SimpleModeSettingsManager.isProfileUserCreated - height: Math.round(speedSlider.height * 0.8) - width: Math.round(speedSlider.height * 0.8) - - anchors.verticalCenter: speedSlider.verticalCenter - anchors.right: speedSlider.left - anchors.rightMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - - color: hovered ? UM.Theme.getColor("setting_control_button_hover") : UM.Theme.getColor("setting_control_button"); - iconSource: UM.Theme.getIcon("reset"); - - onClicked: - { - // if the current profile is user-created, switch to a built-in quality - Cura.MachineManager.resetToUseDefaultQuality() - } - onEntered: - { - var content = catalog.i18nc("@tooltip","You have modified some profile settings. If you want to change these go to custom mode.") - base.showTooltip(qualityRow, Qt.point(-UM.Theme.getSize("sidebar_margin").width, customisedSettings.height), content) - } - onExited: base.hideTooltip() - } - } - - // - // Infill - // - Item - { - id: infillCellLeft - - anchors.top: qualityRow.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height * 2 - anchors.left: parent.left - - width: Math.round(UM.Theme.getSize("sidebar").width * .45) - UM.Theme.getSize("sidebar_margin").width - - Label - { - id: infillLabel - text: catalog.i18nc("@label", "Infill") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 1.7) - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - } - } - - Item - { - id: infillCellRight - - height: infillSlider.height + UM.Theme.getSize("sidebar_margin").height + enableGradualInfillCheckBox.visible * (enableGradualInfillCheckBox.height + UM.Theme.getSize("sidebar_margin").height) - width: Math.round(UM.Theme.getSize("sidebar").width * .55) - - anchors.left: infillCellLeft.right - anchors.top: infillCellLeft.top - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - - Label { - id: selectedInfillRateText - - //anchors.top: parent.top - anchors.left: infillSlider.left - anchors.leftMargin: Math.round((infillSlider.value / infillSlider.stepSize) * (infillSlider.width / (infillSlider.maximumValue / infillSlider.stepSize)) - 10 * screenScaleFactor) - anchors.right: parent.right - - text: parseInt(infillDensity.properties.value) + "%" - horizontalAlignment: Text.AlignLeft - - color: infillSlider.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - } - - // We use a binding to make sure that after manually setting infillSlider.value it is still bound to the property provider - Binding { - target: infillSlider - property: "value" - value: parseInt(infillDensity.properties.value) - } - - Slider - { - id: infillSlider - - anchors.top: selectedInfillRateText.bottom - anchors.left: parent.left - anchors.right: infillIcon.left - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - - height: UM.Theme.getSize("sidebar_margin").height - width: parseInt(infillCellRight.width - UM.Theme.getSize("sidebar_margin").width - style.handleWidth) - - minimumValue: 0 - maximumValue: 100 - stepSize: 1 - tickmarksEnabled: true - - // disable slider when gradual support is enabled - enabled: parseInt(infillSteps.properties.value) == 0 - - // set initial value from stack - value: parseInt(infillDensity.properties.value) - - onValueChanged: { - - // Don't round the value if it's already the same - if (parseInt(infillDensity.properties.value) == infillSlider.value) { - return - } - - // Round the slider value to the nearest multiple of 10 (simulate step size of 10) - var roundedSliderValue = Math.round(infillSlider.value / 10) * 10 - - // Update the slider value to represent the rounded value - infillSlider.value = roundedSliderValue - - // Update value only if the Recomended mode is Active, - // Otherwise if I change the value in the Custom mode the Recomended view will try to repeat - // same operation - var active_mode = UM.Preferences.getValue("cura/active_mode") - - if (active_mode == 0 || active_mode == "simple") - { - Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", roundedSliderValue) - Cura.MachineManager.resetSettingForAllExtruders("infill_line_distance") - } - } - - style: SliderStyle - { - groove: Rectangle { - id: groove - implicitWidth: 200 * screenScaleFactor - implicitHeight: 2 * screenScaleFactor - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - radius: 1 - } - - handle: Item { - Rectangle { - id: handleButton - anchors.centerIn: parent - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - implicitWidth: 10 * screenScaleFactor - implicitHeight: 10 * screenScaleFactor - radius: 10 * screenScaleFactor - } - } - - tickmarks: Repeater { - id: repeater - model: control.maximumValue / control.stepSize + 1 - - // check if a tick should be shown based on it's index and wether the infill density is a multiple of 10 (slider step size) - function shouldShowTick (index) { - if (index % 10 == 0) { - return true - } - return false - } - - Rectangle { - anchors.verticalCenter: parent.verticalCenter - color: control.enabled ? UM.Theme.getColor("quality_slider_available") : UM.Theme.getColor("quality_slider_unavailable") - width: 1 * screenScaleFactor - height: 6 * screenScaleFactor - y: 0 - x: Math.round(styleData.handleWidth / 2 + index * ((repeater.width - styleData.handleWidth) / (repeater.count-1))) - visible: shouldShowTick(index) - } - } - } - } - - Rectangle - { - id: infillIcon - - width: Math.round((parent.width / 5) - (UM.Theme.getSize("sidebar_margin").width)) - height: width - - anchors.right: parent.right - anchors.top: parent.top - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) - - // we loop over all density icons and only show the one that has the current density and steps - Repeater - { - id: infillIconList - model: infillModel - anchors.fill: parent - - function activeIndex () { - for (var i = 0; i < infillModel.count; i++) { - var density = Math.round(infillDensity.properties.value) - var steps = Math.round(infillSteps.properties.value) - var infillModelItem = infillModel.get(i) - - if (infillModelItem != "undefined" - && density >= infillModelItem.percentageMin - && density <= infillModelItem.percentageMax - && steps >= infillModelItem.stepsMin - && steps <= infillModelItem.stepsMax - ){ - return i - } - } - return -1 - } - - Rectangle - { - anchors.fill: parent - visible: infillIconList.activeIndex() == index - - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("quality_slider_unavailable") - - UM.RecolorImage { - anchors.fill: parent - anchors.margins: 2 * screenScaleFactor - sourceSize.width: width - sourceSize.height: width - source: UM.Theme.getIcon(model.icon) - color: UM.Theme.getColor("quality_slider_unavailable") - } - } - } - } - - // Gradual Support Infill Checkbox - CheckBox { - id: enableGradualInfillCheckBox - property alias _hovered: enableGradualInfillMouseArea.containsMouse - - anchors.top: infillSlider.bottom - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height / 2) // closer to slider since it belongs to the same category - anchors.left: infillCellRight.left - - style: UM.Theme.styles.checkbox - enabled: base.settingsEnabled - visible: infillSteps.properties.enabled == "True" - checked: parseInt(infillSteps.properties.value) > 0 - - MouseArea { - id: enableGradualInfillMouseArea - - anchors.fill: parent - hoverEnabled: true - enabled: true - - property var previousInfillDensity: parseInt(infillDensity.properties.value) - - onClicked: { - // Set to 90% only when enabling gradual infill - var newInfillDensity; - if (parseInt(infillSteps.properties.value) == 0) { - previousInfillDensity = parseInt(infillDensity.properties.value) - newInfillDensity = 90; - } else { - newInfillDensity = previousInfillDensity; - } - Cura.MachineManager.setSettingForAllExtruders("infill_sparse_density", "value", String(newInfillDensity)) - - var infill_steps_value = 0; - if (parseInt(infillSteps.properties.value) == 0) - infill_steps_value = 5; - - Cura.MachineManager.setSettingForAllExtruders("gradual_infill_steps", "value", infill_steps_value) - } - - onEntered: { - base.showTooltip(enableGradualInfillCheckBox, Qt.point(-infillCellRight.x, 0), - catalog.i18nc("@label", "Gradual infill will gradually increase the amount of infill towards the top.")) - } - - onExited: { - base.hideTooltip() - } - } - - Label { - id: gradualInfillLabel - height: parent.height - anchors.left: enableGradualInfillCheckBox.right - anchors.leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - verticalAlignment: Text.AlignVCenter; - text: catalog.i18nc("@label", "Enable gradual") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - } - } - - // Infill list model for mapping icon - ListModel - { - id: infillModel - Component.onCompleted: - { - infillModel.append({ - percentageMin: -1, - percentageMax: 0, - stepsMin: -1, - stepsMax: 0, - icon: "hollow" - }) - infillModel.append({ - percentageMin: 0, - percentageMax: 40, - stepsMin: -1, - stepsMax: 0, - icon: "sparse" - }) - infillModel.append({ - percentageMin: 40, - percentageMax: 89, - stepsMin: -1, - stepsMax: 0, - icon: "dense" - }) - infillModel.append({ - percentageMin: 90, - percentageMax: 9999999999, - stepsMin: -1, - stepsMax: 0, - icon: "solid" - }) - infillModel.append({ - percentageMin: 0, - percentageMax: 9999999999, - stepsMin: 1, - stepsMax: 9999999999, - icon: "gradual" - }) - } - } - } - - // - // Enable support - // - Label - { - id: enableSupportLabel - visible: enableSupportCheckBox.visible - - anchors.top: infillCellRight.bottom - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 1.5) - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.right: infillCellLeft.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.verticalCenter: enableSupportCheckBox.verticalCenter - - text: catalog.i18nc("@label", "Generate Support"); - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - elide: Text.ElideRight - } - - CheckBox - { - id: enableSupportCheckBox - property alias _hovered: enableSupportMouseArea.containsMouse - - anchors.top: enableSupportLabel.top - anchors.left: infillCellRight.left - - style: UM.Theme.styles.checkbox; - enabled: base.settingsEnabled - - visible: supportEnabled.properties.enabled == "True" - checked: supportEnabled.properties.value == "True"; - - MouseArea - { - id: enableSupportMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: true - onClicked: - { - // The value is a string "True" or "False" - supportEnabled.setPropertyValue("value", supportEnabled.properties.value != "True"); - } - onEntered: - { - base.showTooltip(enableSupportCheckBox, Qt.point(-enableSupportCheckBox.x, 0), - catalog.i18nc("@label", "Generate structures to support parts of the model which have overhangs. Without these structures, such parts would collapse during printing.")); - } - onExited: - { - base.hideTooltip(); - } - } - } - - ComboBox - { - id: supportExtruderCombobox - visible: enableSupportCheckBox.visible && (supportEnabled.properties.value == "True") && (extrudersEnabledCount.properties.value > 1) - model: extruderModel - - property string color_override: "" // for manually setting values - property string color: // is evaluated automatically, but the first time is before extruderModel being filled - { - var current_extruder = extruderModel.get(currentIndex); - color_override = ""; - if (current_extruder === undefined) return "" - return (current_extruder.color) ? current_extruder.color : ""; - } - - textRole: "text" // this solves that the combobox isn't populated in the first time Cura is started - - anchors.top: enableSupportCheckBox.top - //anchors.topMargin: ((supportEnabled.properties.value === "True") && (machineExtruderCount.properties.value > 1)) ? UM.Theme.getSize("sidebar_margin").height : 0 - anchors.left: enableSupportCheckBox.right - anchors.leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - - width: Math.round(UM.Theme.getSize("sidebar").width * .55) - Math.round(UM.Theme.getSize("sidebar_margin").width / 2) - enableSupportCheckBox.width - height: ((supportEnabled.properties.value == "True") && (machineExtruderCount.properties.value > 1)) ? UM.Theme.getSize("setting_control").height : 0 - - Behavior on height { NumberAnimation { duration: 100 } } - - style: UM.Theme.styles.combobox_color - enabled: base.settingsEnabled - property alias _hovered: supportExtruderMouseArea.containsMouse - - currentIndex: - { - if (supportExtruderNr.properties == null) - { - return Cura.MachineManager.defaultExtruderPosition; - } - else - { - var extruder = parseInt(supportExtruderNr.properties.value); - if ( extruder === -1) - { - return Cura.MachineManager.defaultExtruderPosition; - } - return extruder; - } - } - - onActivated: - { - // Send the extruder nr as a string. - supportExtruderNr.setPropertyValue("value", String(index)); - } - MouseArea - { - id: supportExtruderMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: base.settingsEnabled - acceptedButtons: Qt.NoButton - onEntered: - { - base.showTooltip(supportExtruderCombobox, Qt.point(-supportExtruderCombobox.x, 0), - catalog.i18nc("@label", "Select which extruder to use for support. This will build up supporting structures below the model to prevent the model from sagging or printing in mid air.")); - } - onExited: - { - base.hideTooltip(); - } - } - - function updateCurrentColor() - { - var current_extruder = extruderModel.get(currentIndex); - if (current_extruder !== undefined) { - supportExtruderCombobox.color_override = current_extruder.color; - } - } - - } - - Label - { - id: adhesionHelperLabel - visible: adhesionCheckBox.visible - - text: catalog.i18nc("@label", "Build Plate Adhesion") - font: UM.Theme.getFont("default") - color: UM.Theme.getColor("text") - elide: Text.ElideRight - - anchors { - left: parent.left - leftMargin: UM.Theme.getSize("sidebar_margin").width - right: infillCellLeft.right - rightMargin: UM.Theme.getSize("sidebar_margin").width - verticalCenter: adhesionCheckBox.verticalCenter - } - } - - CheckBox - { - id: adhesionCheckBox - property alias _hovered: adhesionMouseArea.containsMouse - - anchors.top: enableSupportCheckBox.bottom - anchors.topMargin: UM.Theme.getSize("sidebar_margin").height - anchors.left: infillCellRight.left - - //: Setting enable printing build-plate adhesion helper checkbox - style: UM.Theme.styles.checkbox; - enabled: base.settingsEnabled - - visible: platformAdhesionType.properties.enabled == "True" - checked: platformAdhesionType.properties.value != "skirt" && platformAdhesionType.properties.value != "none" - - MouseArea - { - id: adhesionMouseArea - anchors.fill: parent - hoverEnabled: true - enabled: base.settingsEnabled - onClicked: - { - var adhesionType = "skirt"; - if(!parent.checked) - { - // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft - platformAdhesionType.removeFromContainer(0); - adhesionType = platformAdhesionType.properties.value; - if(adhesionType == "skirt" || adhesionType == "none") - { - // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim - adhesionType = "brim"; - } - } - platformAdhesionType.setPropertyValue("value", adhesionType); - } - onEntered: - { - base.showTooltip(adhesionCheckBox, Qt.point(-adhesionCheckBox.x, 0), - catalog.i18nc("@label", "Enable printing a brim or raft. This will add a flat area around or under your object which is easy to cut off afterwards.")); - } - onExited: - { - base.hideTooltip(); - } - } - } - - ListModel - { - id: extruderModel - Component.onCompleted: populateExtruderModel() - } - - //: Model used to populate the extrudelModel - Cura.ExtrudersModel - { - id: extruders - onModelChanged: populateExtruderModel() - } - - Item - { - id: tipsCell - anchors.top: adhesionCheckBox.visible ? adhesionCheckBox.bottom : (enableSupportCheckBox.visible ? supportExtruderCombobox.bottom : infillCellRight.bottom) - anchors.topMargin: Math.round(UM.Theme.getSize("sidebar_margin").height * 2) - anchors.left: parent.left - width: parent.width - height: tipsText.contentHeight * tipsText.lineCount - - Label - { - id: tipsText - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("sidebar_margin").width - anchors.right: parent.right - anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width - anchors.top: parent.top - wrapMode: Text.WordWrap - text: catalog.i18nc("@label", "Need help improving your prints?<br>Read the <a href='%1'>Ultimaker Troubleshooting Guides</a>").arg("https://ultimaker.com/en/troubleshooting") - font: UM.Theme.getFont("default"); - color: UM.Theme.getColor("text"); - linkColor: UM.Theme.getColor("text_link") - onLinkActivated: Qt.openUrlExternally(link) - } - } - - UM.SettingPropertyProvider - { - id: infillExtruderNumber - containerStackId: Cura.MachineManager.activeStackId - key: "infill_extruder_nr" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: infillDensity - containerStackId: Cura.MachineManager.activeStackId - key: "infill_sparse_density" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: infillSteps - containerStackId: Cura.MachineManager.activeStackId - key: "gradual_infill_steps" - watchedProperties: ["value", "enabled"] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: platformAdhesionType - containerStack: Cura.MachineManager.activeMachine - removeUnusedValue: false //Doesn't work with settings that are resolved. - key: "adhesion_type" - watchedProperties: [ "value", "enabled" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: supportEnabled - containerStack: Cura.MachineManager.activeMachine - key: "support_enable" - watchedProperties: [ "value", "enabled", "description" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: extrudersEnabledCount - containerStack: Cura.MachineManager.activeMachine - key: "extruders_enabled_count" - watchedProperties: [ "value" ] - storeIndex: 0 - } - - UM.SettingPropertyProvider - { - id: supportExtruderNr - containerStack: Cura.MachineManager.activeMachine - key: "support_extruder_nr" - watchedProperties: [ "value" ] - storeIndex: 0 - } - } - } - - function populateExtruderModel() - { - extruderModel.clear(); - for(var extruderNumber = 0; extruderNumber < extruders.rowCount() ; extruderNumber++) - { - extruderModel.append({ - text: extruders.getItem(extruderNumber).name, - color: extruders.getItem(extruderNumber).color - }) - } - supportExtruderCombobox.updateCurrentColor(); - } -} diff --git a/resources/qml/ToolTip.qml b/resources/qml/ToolTip.qml new file mode 100644 index 0000000000..e82caf01b2 --- /dev/null +++ b/resources/qml/ToolTip.qml @@ -0,0 +1,63 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.0 as UM +import Cura 1.0 as Cura + +ToolTip +{ + enum ContentAlignment + { + AlignLeft, + AlignRight + } + + // Defines the alignment of the content, by default to the left + property int contentAlignment: Cura.ToolTip.ContentAlignment.AlignRight + + property alias tooltipText: tooltip.text + property var targetPoint: Qt.point(parent.x, y + Math.round(height/2)) + + id: tooltip + text: "" + delay: 500 + font: UM.Theme.getFont("default") + + // If the text is not set, just set the height to 0 to prevent it from showing + height: text != "" ? label.contentHeight + 2 * UM.Theme.getSize("thin_margin").width: 0 + + x: + { + if (contentAlignment == Cura.ToolTip.ContentAlignment.AlignLeft) + { + return (label.width + Math.round(UM.Theme.getSize("default_arrow").width * 1.2) + padding * 2) * -1 + } + return parent.width + Math.round(UM.Theme.getSize("default_arrow").width * 1.2 + padding) + } + + y: Math.round(parent.height / 2 - label.height / 2 ) - padding + + padding: UM.Theme.getSize("thin_margin").width + + background: UM.PointingRectangle + { + id: backgroundRect + color: UM.Theme.getColor("tooltip") + target: Qt.point(targetPoint.x - tooltip.x, targetPoint.y - tooltip.y) + arrowSize: UM.Theme.getSize("default_arrow").width + } + + contentItem: Label + { + id: label + text: tooltip.text + font: tooltip.font + wrapMode: Text.Wrap + textFormat: Text.RichText + color: UM.Theme.getColor("tooltip_text") + renderType: Text.NativeRendering + } +}
\ No newline at end of file diff --git a/resources/qml/Toolbar.qml b/resources/qml/Toolbar.qml index a04b3650df..33481b9183 100644 --- a/resources/qml/Toolbar.qml +++ b/resources/qml/Toolbar.qml @@ -2,96 +2,159 @@ // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.3 import UM 1.2 as UM import Cura 1.0 as Cura Item { - id: base; + id: base - width: buttons.width; + width: buttons.width height: buttons.height property int activeY - Column + Item { - id: buttons; + id: buttons + width: parent.visible ? toolButtons.width : 0 + height: childrenRect.height - anchors.bottom: parent.bottom - anchors.left: parent.left - spacing: UM.Theme.getSize("button_lining").width + Behavior on width { NumberAnimation { duration: 100 } } - Repeater + // Used to create a rounded rectangle behind the toolButtons + Rectangle { - id: repeat + anchors + { + fill: toolButtons + leftMargin: -radius - border.width + rightMargin: -border.width + topMargin: -border.width + bottomMargin: -border.width + } + radius: UM.Theme.getSize("default_radius").width + color: UM.Theme.getColor("lining") + } - model: UM.ToolModel { } - width: childrenRect.width - height: childrenRect.height - Button + Column + { + id: toolButtons + + anchors.top: parent.top + anchors.right: parent.right + spacing: UM.Theme.getSize("default_lining").height + + Repeater { - text: model.name + (model.shortcut ? (" (" + model.shortcut + ")") : "") - iconSource: (UM.Theme.getIcon(model.icon) != "") ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon - checkable: true - checked: model.active - enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled - style: UM.Theme.styles.tool_button - - onCheckedChanged: + id: repeat + + model: UM.ToolModel { id: toolsModel } + width: childrenRect.width + height: childrenRect.height + + delegate: ToolbarButton { - if (checked) + text: model.name + (model.shortcut ? (" (" + model.shortcut + ")") : "") + checkable: true + checked: model.active + enabled: model.enabled && UM.Selection.hasSelection && UM.Controller.toolsEnabled + + isTopElement: toolsModel.getItem(0).id == model.id + isBottomElement: toolsModel.getItem(toolsModel.count - 1).id == model.id + + toolItem: UM.RecolorImage { - base.activeY = y; + source: UM.Theme.getIcon(model.icon) != "" ? UM.Theme.getIcon(model.icon) : "file:///" + model.location + "/" + model.icon + color: UM.Theme.getColor("icon") + + sourceSize: UM.Theme.getSize("button_icon") } - } - //Workaround since using ToolButton's onClicked would break the binding of the checked property, instead - //just catch the click so we do not trigger that behaviour. - MouseArea - { - anchors.fill: parent; - onClicked: + onCheckedChanged: { - forceActiveFocus() //First grab focus, so all the text fields are updated - if(parent.checked) + if (checked) { - UM.Controller.setActiveTool(null); + base.activeY = y; } - else + } + + //Workaround since using ToolButton's onClicked would break the binding of the checked property, instead + //just catch the click so we do not trigger that behaviour. + MouseArea + { + anchors.fill: parent; + onClicked: { - UM.Controller.setActiveTool(model.id); + forceActiveFocus() //First grab focus, so all the text fields are updated + if(parent.checked) + { + UM.Controller.setActiveTool(null); + } + else + { + UM.Controller.setActiveTool(model.id); + } } } } } } - Item { height: UM.Theme.getSize("default_margin").height; width: UM.Theme.getSize("default_lining").width; visible: extruders.count > 0 } + // Used to create a rounded rectangle behind the extruderButtons + Rectangle + { + anchors + { + fill: extruderButtons + leftMargin: -radius - border.width + rightMargin: -border.width + topMargin: -border.width + bottomMargin: -border.width + } + radius: UM.Theme.getSize("default_radius").width + color: UM.Theme.getColor("lining") + visible: extrudersModel.items.length > 1 + } - Repeater + Column { - id: extruders - width: childrenRect.width - height: childrenRect.height - property var _model: Cura.ExtrudersModel { id: extrudersModel } - model: _model.items.length > 1 ? _model : 0 - ExtruderButton { extruder: model } + id: extruderButtons + + anchors.topMargin: UM.Theme.getSize("default_margin").height + anchors.top: toolButtons.bottom + anchors.right: parent.right + spacing: UM.Theme.getSize("default_lining").height + + Repeater + { + id: extruders + width: childrenRect.width + height: childrenRect.height + model: extrudersModel.items.length > 1 ? extrudersModel : 0 + + delegate: ExtruderButton + { + extruder: model + isTopElement: extrudersModel.getItem(0).id == model.id + isBottomElement: extrudersModel.getItem(extrudersModel.rowCount() - 1).id == model.id + } + } } } + property var extrudersModel: CuraApplication.getExtrudersModel() + UM.PointingRectangle { - id: panelBorder; + id: panelBorder - anchors.left: parent.right; - anchors.leftMargin: UM.Theme.getSize("default_margin").width; - anchors.top: base.top; + anchors.left: parent.right + anchors.leftMargin: UM.Theme.getSize("default_margin").width + anchors.top: base.top anchors.topMargin: base.activeY - z: buttons.z -1 + z: buttons.z - 1 target: Qt.point(parent.right, base.activeY + Math.round(UM.Theme.getSize("button").height/2)) arrowSize: UM.Theme.getSize("default_arrow").width @@ -100,14 +163,14 @@ Item { if (panel.item && panel.width > 0) { - return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width); + return Math.max(panel.width + 2 * UM.Theme.getSize("default_margin").width) } else { return 0; } } - height: panel.item ? panel.height + 2 * UM.Theme.getSize("default_margin").height : 0; + height: panel.item ? panel.height + 2 * UM.Theme.getSize("default_margin").height : 0 opacity: panel.item && panel.width > 0 ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } @@ -125,11 +188,11 @@ Item { id: panel - x: UM.Theme.getSize("default_margin").width; - y: UM.Theme.getSize("default_margin").height; + x: UM.Theme.getSize("default_margin").width + y: UM.Theme.getSize("default_margin").height source: UM.ActiveTool.valid ? UM.ActiveTool.activeToolPanel : "" - enabled: UM.Controller.toolsEnabled; + enabled: UM.Controller.toolsEnabled } } diff --git a/resources/qml/ToolbarButton.qml b/resources/qml/ToolbarButton.qml new file mode 100644 index 0000000000..b3f84bba1d --- /dev/null +++ b/resources/qml/ToolbarButton.qml @@ -0,0 +1,106 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Button +{ + id: base + + property alias toolItem: contentItemLoader.sourceComponent + + // These two properties indicate whether the toolbar button is at the top of the toolbar column or at the bottom. + // If it is somewhere in the middle, then both has to be false. If there is only one element in the column, then + // both properties have to be set to true. This is used to create a rounded corner. + property bool isTopElement: false + property bool isBottomElement: false + + hoverEnabled: true + + background: Rectangle + { + implicitWidth: UM.Theme.getSize("button").width + implicitHeight: UM.Theme.getSize("button").height + color: + { + if (base.checked && base.hovered) + { + return UM.Theme.getColor("toolbar_button_active_hover") + } + else if (base.checked) + { + return UM.Theme.getColor("toolbar_button_active") + } + else if(base.hovered) + { + return UM.Theme.getColor("toolbar_button_hover") + } + return UM.Theme.getColor("toolbar_background") + } + radius: UM.Theme.getSize("default_radius").width + + Rectangle + { + id: topSquare + anchors + { + left: parent.left + right: parent.right + top: parent.top + } + height: parent.radius + color: parent.color + visible: !base.isTopElement + } + + Rectangle + { + id: bottomSquare + anchors + { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: parent.radius + color: parent.color + visible: !base.isBottomElement + } + + Rectangle + { + id: leftSquare + anchors + { + left: parent.left + top: parent.top + bottom: parent.bottom + } + width: parent.radius + color: parent.color + } + } + + contentItem: Item + { + opacity: parent.enabled ? 1.0 : 0.2 + Loader + { + id: contentItemLoader + anchors.centerIn: parent + width: UM.Theme.getSize("button_icon").width + height: UM.Theme.getSize("button_icon").height + } + } + + Cura.ToolTip + { + id: tooltip + tooltipText: base.text + visible: base.hovered + } +} diff --git a/resources/qml/Topbar.qml b/resources/qml/Topbar.qml deleted file mode 100644 index 17819dbd27..0000000000 --- a/resources/qml/Topbar.qml +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. - -import QtQuick 2.2 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 -import QtQuick.Layouts 1.1 - -import UM 1.4 as UM -import Cura 1.0 as Cura -import "Menus" - -Rectangle -{ - id: base - anchors.left: parent.left - anchors.right: parent.right - height: UM.Theme.getSize("sidebar_header").height - color: UM.Controller.activeStage.stageId == "MonitorStage" ? UM.Theme.getColor("topbar_background_color_monitoring") : UM.Theme.getColor("topbar_background_color") - - property bool printerConnected: Cura.MachineManager.printerConnected - property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands - - property int rightMargin: UM.Theme.getSize("sidebar").width + UM.Theme.getSize("default_margin").width; - property int allItemsWidth: 0; - - function updateMarginsAndSizes() { - if (UM.Preferences.getValue("cura/sidebar_collapsed")) - { - rightMargin = UM.Theme.getSize("default_margin").width; - } - else - { - rightMargin = UM.Theme.getSize("sidebar").width + UM.Theme.getSize("default_margin").width; - } - allItemsWidth = ( - logo.width + UM.Theme.getSize("topbar_logo_right_margin").width + - UM.Theme.getSize("topbar_logo_right_margin").width + stagesMenuContainer.width + - UM.Theme.getSize("default_margin").width + viewModeButton.width + - rightMargin); - } - - UM.I18nCatalog - { - id: catalog - name:"cura" - } - - Image - { - id: logo - anchors.left: parent.left - anchors.leftMargin: UM.Theme.getSize("default_margin").width - anchors.verticalCenter: parent.verticalCenter - - source: UM.Theme.getImage("logo"); - width: UM.Theme.getSize("logo").width; - height: UM.Theme.getSize("logo").height; - - sourceSize.width: width; - sourceSize.height: height; - } - - Row - { - id: stagesMenuContainer - anchors.left: logo.right - anchors.leftMargin: UM.Theme.getSize("topbar_logo_right_margin").width - spacing: UM.Theme.getSize("default_margin").width - - // The topbar is dynamically filled with all available stages - Repeater - { - id: stagesMenu - - model: UM.StageModel{} - - delegate: Button - { - text: model.name - checkable: true - checked: model.active - exclusiveGroup: topbarMenuGroup - style: (model.stage.iconSource != "") ? UM.Theme.styles.topbar_header_tab_no_overlay : UM.Theme.styles.topbar_header_tab - height: UM.Theme.getSize("sidebar_header").height - onClicked: UM.Controller.setActiveStage(model.id) - iconSource: model.stage.iconSource - - property color overlayColor: "transparent" - property string overlayIconSource: "" - } - } - - ExclusiveGroup { id: topbarMenuGroup } - } - - // View orientation Item - Row - { - id: viewOrientationControl - height: 30 - - spacing: 2 - visible: UM.Controller.activeStage.stageId != "MonitorStage" - - anchors - { - verticalCenter: base.verticalCenter - right: viewModeButton.left - rightMargin: UM.Theme.getSize("default_margin").width - } - - // #1 3d view - Button - { - iconSource: UM.Theme.getIcon("view_3d") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked:UM.Controller.rotateView("3d", 0) - visible: base.width - allItemsWidth - 4 * this.width > 0 - } - - // #2 Front view - Button - { - iconSource: UM.Theme.getIcon("view_front") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("home", 0); - visible: base.width - allItemsWidth - 3 * this.width > 0 - } - - // #3 Top view - Button - { - iconSource: UM.Theme.getIcon("view_top") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("y", 90) - visible: base.width - allItemsWidth - 2 * this.width > 0 - } - - // #4 Left view - Button - { - iconSource: UM.Theme.getIcon("view_left") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("x", 90) - visible: base.width - allItemsWidth - 1 * this.width > 0 - } - - // #5 Right view - Button - { - iconSource: UM.Theme.getIcon("view_right") - style: UM.Theme.styles.small_tool_button - anchors.verticalCenter: viewOrientationControl.verticalCenter - onClicked: UM.Controller.rotateView("x", -90) - visible: base.width - allItemsWidth > 0 - } - } - - ComboBox - { - id: viewModeButton - - anchors { - verticalCenter: parent.verticalCenter - right: parent.right - rightMargin: rightMargin - } - - style: UM.Theme.styles.combobox - visible: UM.Controller.activeStage.stageId != "MonitorStage" - - model: UM.ViewModel { } - textRole: "name" - - // update the model's active index - function updateItemActiveFlags () { - currentIndex = getActiveIndex() - for (var i = 0; i < model.rowCount(); i++) { - model.getItem(i).active = (i == currentIndex) - } - } - - // get the index of the active model item on start - function getActiveIndex () { - for (var i = 0; i < model.rowCount(); i++) { - if (model.getItem(i).active) { - return i - } - } - return 0 - } - - // set the active index - function setActiveIndex (index) { - UM.Controller.setActiveView(index) - // the connection to UM.ActiveView will trigger update so there is no reason to call it manually here - } - - onCurrentIndexChanged: - { - if (model.getItem(currentIndex).id != undefined) - viewModeButton.setActiveIndex(model.getItem(currentIndex).id) - } - currentIndex: getActiveIndex() - - // watch the active view proxy for changes made from the menu item - Connections - { - target: UM.ActiveView - onActiveViewChanged: viewModeButton.updateItemActiveFlags() - } - } - - Loader - { - id: view_panel - - anchors.top: viewModeButton.bottom - anchors.topMargin: UM.Theme.getSize("default_margin").height - anchors.right: viewModeButton.right - - property var buttonTarget: Qt.point(viewModeButton.x + Math.round(viewModeButton.width / 2), viewModeButton.y + Math.round(viewModeButton.height / 2)) - - height: childrenRect.height - width: childrenRect.width - - source: UM.ActiveView.valid ? UM.ActiveView.activeViewPanel : ""; - } - - // Expand or collapse sidebar - Connections - { - target: Cura.Actions.expandSidebar - onTriggered: updateMarginsAndSizes() - } - - Component.onCompleted: - { - updateMarginsAndSizes(); - } - -} diff --git a/resources/qml/ViewOrientationButton.qml b/resources/qml/ViewOrientationButton.qml new file mode 100644 index 0000000000..5d72de9a8d --- /dev/null +++ b/resources/qml/ViewOrientationButton.qml @@ -0,0 +1,15 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 + +import UM 1.4 as UM + +UM.SimpleButton +{ + width: UM.Theme.getSize("small_button").width + height: UM.Theme.getSize("small_button").height + hoverColor: UM.Theme.getColor("small_button_text_hover") + color: UM.Theme.getColor("small_button_text") + iconMargin: UM.Theme.getSize("thick_lining").width +}
\ No newline at end of file diff --git a/resources/qml/ViewOrientationControls.qml b/resources/qml/ViewOrientationControls.qml new file mode 100644 index 0000000000..51ed6e3dcb --- /dev/null +++ b/resources/qml/ViewOrientationControls.qml @@ -0,0 +1,48 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.2 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 + +import UM 1.4 as UM + +// A row of buttons that control the view direction +Row +{ + id: viewOrientationControl + + spacing: UM.Theme.getSize("narrow_margin").width + height: childrenRect.height + width: childrenRect.width + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_3d") + onClicked: UM.Controller.rotateView("3d", 0) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_front") + onClicked: UM.Controller.rotateView("home", 0) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_top") + onClicked: UM.Controller.rotateView("y", 90) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_left") + onClicked: UM.Controller.rotateView("x", 90) + } + + ViewOrientationButton + { + iconSource: UM.Theme.getIcon("view_right") + onClicked: UM.Controller.rotateView("x", -90) + } +} diff --git a/resources/qml/ViewsSelector.qml b/resources/qml/ViewsSelector.qml new file mode 100644 index 0000000000..0e9be649db --- /dev/null +++ b/resources/qml/ViewsSelector.qml @@ -0,0 +1,133 @@ +// Copyright (c) 2018 Ultimaker B.V. +// Cura is released under the terms of the LGPLv3 or higher. + +import QtQuick 2.7 +import QtQuick.Controls 2.3 + +import UM 1.2 as UM +import Cura 1.0 as Cura + +Cura.ExpandablePopup +{ + id: viewSelector + + contentPadding: UM.Theme.getSize("default_lining").width + contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft + + property var viewModel: UM.ViewModel + { + onDataChanged: updateActiveView() + } + + property var activeView: null + + function updateActiveView() + { + for (var index in viewModel.items) + { + if (viewModel.items[index].active) + { + activeView = viewModel.items[index] + return + } + } + activeView = null + } + + Component.onCompleted: + { + if (activeView == null) + { + UM.Controller.setActiveView(viewModel.getItem(0).id) + } + } + + headerItem: Item + { + Label + { + id: title + text: catalog.i18nc("@label", "View types") + verticalAlignment: Text.AlignVCenter + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text_medium") + renderType: Text.NativeRendering + } + + Label + { + text: viewSelector.activeView ? viewSelector.activeView.name : "" + verticalAlignment: Text.AlignVCenter + anchors + { + left: title.right + leftMargin: UM.Theme.getSize("default_margin").width + right: parent.right + } + height: parent.height + elide: Text.ElideRight + font: UM.Theme.getFont("medium") + color: UM.Theme.getColor("text") + renderType: Text.NativeRendering + } + } + + contentItem: Column + { + id: viewSelectorPopup + width: viewSelector.width - 2 * viewSelector.contentPadding + + // For some reason the height/width of the column gets set to 0 if this is not set... + Component.onCompleted: + { + height = implicitHeight + width = viewSelector.width - 2 * viewSelector.contentPadding + } + + Repeater + { + id: viewsList + model: viewSelector.viewModel + + delegate: Button + { + id: viewsSelectorButton + text: model.name + width: parent.width - viewSelectorPopup.leftPadding - viewSelectorPopup.rightPadding + height: UM.Theme.getSize("action_button").height + leftPadding: UM.Theme.getSize("default_margin").width + rightPadding: UM.Theme.getSize("default_margin").width + checkable: true + checked: viewSelector.activeView != null ? viewSelector.activeView.id == id : false + + contentItem: Label + { + id: buttonText + text: viewsSelectorButton.text + color: UM.Theme.getColor("text") + font: UM.Theme.getFont("medium") + renderType: Text.NativeRendering + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle + { + id: backgroundRect + color: viewsSelectorButton.hovered ? UM.Theme.getColor("action_button_hovered") : "transparent" + radius: UM.Theme.getSize("action_button_radius").width + border.width: UM.Theme.getSize("default_lining").width + border.color: viewsSelectorButton.checked ? UM.Theme.getColor("primary") : "transparent" + } + + onClicked: + { + toggleContent() + UM.Controller.setActiveView(id) + } + } + } + } +}
\ No newline at end of file diff --git a/resources/qml/qmldir b/resources/qml/qmldir new file mode 100644 index 0000000000..62997cc27a --- /dev/null +++ b/resources/qml/qmldir @@ -0,0 +1,19 @@ +module Cura + +MachineSelector 1.0 MachineSelector.qml +CustomConfigurationSelector 1.0 CustomConfigurationSelector.qml +PrintSetupSelector 1.0 PrintSetupSelector.qml +ActionButton 1.0 ActionButton.qml +MaterialMenu 1.0 MaterialMenu.qml +NozzleMenu 1.0 NozzleMenu.qml +ActionPanelWidget 1.0 ActionPanelWidget.qml +IconWithText 1.0 IconWithText.qml +OutputDevicesActionButton 1.0 OutputDevicesActionButton.qml +ExpandableComponent 1.0 ExpandableComponent.qml +PrinterTypeLabel 1.0 PrinterTypeLabel.qml +ViewsSelector 1.0 ViewsSelector.qml +ToolbarButton 1.0 ToolbarButton.qml +SettingView 1.0 SettingView.qml +ProfileMenu 1.0 ProfileMenu.qml +CheckBoxWithTooltip 1.0 CheckBoxWithTooltip.qml +ToolTip 1.0 ToolTip.qml diff --git a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg index 1d406e4387..875812f950 100644 --- a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = abax_pri3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 material = generic_pla [values] diff --git a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg index 20d2c024aa..ed614faecd 100644 --- a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_pri3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg index 0a4d1f1c62..855335780e 100644 --- a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg index 6d0fdd40d2..55bfc6a755 100644 --- a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = abax_pri5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 material = generic_pla [values] diff --git a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg index 212c92e7d1..4d6abb7f78 100644 --- a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_pri5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg index 8a1338f28c..a23f1808a1 100644 --- a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_pri5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg index 71740ede84..bd099abec2 100644 --- a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = abax_titan [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 material = generic_pla [values] diff --git a/resources/quality/abax_titan/atitan_pla_high.inst.cfg b/resources/quality/abax_titan/atitan_pla_high.inst.cfg index 73cd31f3fd..49482953cf 100644 --- a/resources/quality/abax_titan/atitan_pla_high.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = abax_titan [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg index c356e197ce..65cfb075f0 100644 --- a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = abax_titan [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg index f5baa55029..47d6d80527 100644 --- a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_draft.inst.cfg @@ -4,10 +4,10 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_abs [values] diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg index bd613c6aad..5f8e38800c 100644 --- a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_high.inst.cfg @@ -4,10 +4,10 @@ name = High definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 2 +weight = 1 material = generic_abs [values] diff --git a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg index 7cff1db4d2..9fc17d2294 100644 --- a/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg +++ b/resources/quality/anycubic_4max/abs/anycubic_4max_abs_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 1 +weight = 0 material = generic_abs [values] diff --git a/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg index c0114e3d6c..3d3f9fdca6 100644 --- a/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg +++ b/resources/quality/anycubic_4max/anycubic_4max_draft.inst.cfg @@ -4,10 +4,10 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 global_quality = True [values] diff --git a/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg index 4a0993412a..f30a53af78 100644 --- a/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg +++ b/resources/quality/anycubic_4max/anycubic_4max_high.inst.cfg @@ -4,10 +4,10 @@ name = High definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 2 +weight = 1 global_quality = True [values] diff --git a/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg b/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg index eeb1d699e4..e687709bd2 100644 --- a/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg +++ b/resources/quality/anycubic_4max/anycubic_4max_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 1 +weight = 0 global_quality = True [values] diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg index 3cd0226bd4..69c5b4684c 100644 --- a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_draft.inst.cfg @@ -4,10 +4,10 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_hips [values] diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg index ff5c6bee2f..7fcdbf065e 100644 --- a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_high.inst.cfg @@ -4,10 +4,10 @@ name = High definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 2 +weight = 1 material = generic_hips [values] diff --git a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg index c4701ae246..dd1babf627 100644 --- a/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg +++ b/resources/quality/anycubic_4max/hips/anycubic_4max_hips_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 1 +weight = 0 material = generic_hips [values] diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg index 5e0c3e204a..84b11721de 100644 --- a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_draft.inst.cfg @@ -4,10 +4,10 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_petg [values] diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg index 57a89c4ec2..90277985bb 100644 --- a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_high.inst.cfg @@ -4,10 +4,10 @@ name = High definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 2 +weight = 1 material = generic_petg [values] diff --git a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg index 14a4607ceb..3ce5342684 100644 --- a/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg +++ b/resources/quality/anycubic_4max/petg/anycubic_4max_petg_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 1 +weight = 0 material = generic_petg [values] diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg index eae9e3b5ef..9fce900fc2 100644 --- a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_draft.inst.cfg @@ -4,10 +4,10 @@ name = Draft definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_pla [values] diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg index c856fc66a7..5bc075d316 100644 --- a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_high.inst.cfg @@ -4,10 +4,10 @@ name = High definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 2 +weight = 1 material = generic_pla [values] diff --git a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg index be33bfe53a..50fd145fd2 100644 --- a/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg +++ b/resources/quality/anycubic_4max/pla/anycubic_4max_pla_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = anycubic_4max [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 1 +weight = 0 material = generic_pla [values] diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg index bb47f68574..dddc657296 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg @@ -4,10 +4,11 @@ name = Draft definition = anycubic_i3_mega [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 +global_quality = True [values] acceleration_enabled = True diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg index a3ae98deba..87ec96ed96 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg @@ -4,10 +4,11 @@ name = High definition = anycubic_i3_mega [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 2 +weight = 1 +global_quality = True [values] acceleration_enabled = True diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg index 13846b9702..526cb9bc5e 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg @@ -4,10 +4,11 @@ name = Normal definition = anycubic_i3_mega [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 1 +weight = 0 +global_quality = True [values] acceleration_enabled = True diff --git a/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg index 10c8bc553f..c5ccd5a864 100644 --- a/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg index b09ceb8872..b2a5811bfa 100644 --- a/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg index c2425a6d86..8c727d9bd3 100644 --- a/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_BVOH_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg index 038fd02fff..07f6404f62 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg index e9512e30f8..df42b0ee3b 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg index fb6ec6c89f..dca42bc4c0 100644 --- a/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_Innoflex60_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg index 572e83d4b3..a5099b36b8 100644 --- a/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg index f4a45dd43a..cad98cba5c 100644 --- a/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg index d927ab0851..dcf7974c4c 100644 --- a/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PET_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg index fc877df05d..4eec6d3d4f 100644 --- a/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg index 586133a500..a94bfab748 100644 --- a/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg index e84b2eaa87..83fe257b96 100644 --- a/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg index f661e58b6d..06e337be77 100644 --- a/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg index 31b9c094df..e2f002343e 100644 --- a/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg index 8c3ca85124..0e026befb2 100644 --- a/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg index a1d80774a1..2638a06d89 100644 --- a/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -1 diff --git a/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg index 465ea6090a..89b6720617 100644 --- a/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg index e872561b90..68c9f5102b 100644 --- a/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg +++ b/resources/quality/builder_premium/bp_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = builder_premium_small [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg index 5626ed58de..fd1a1ece09 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg index f74918ef4f..909a23edeb 100644 --- a/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.25_abs_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_abs variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg index d4dd85b09d..b66931ef40 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg index ab72092035..d29b3acf65 100644 --- a/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.4_abs_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_abs variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg index d15efb770f..dc910c5e06 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg index 7467da765f..2792261dd6 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg index caa6b71a4a..498afd9772 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg index 9eea2177a8..66b467de07 100644 --- a/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg +++ b/resources/quality/cartesio/abs/cartesio_0.8_abs_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_abs variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg index 17f2acd8d1..d030257fb0 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg index 8215eb2f50..c606e778b6 100644 --- a/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg +++ b/resources/quality/cartesio/arnitel/cartesio_0.4_arnitel2045_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = dsm_arnitel2045_175 variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg index f92fc49981..77a1c7312c 100644 --- a/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg index 1681e83279..8f9d28bbac 100644 --- a/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg index 95d1f3b37e..9faeef3b42 100644 --- a/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg index 6bb348282e..3dae1d45d7 100644 --- a/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg +++ b/resources/quality/cartesio/cartesio_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg index 3e212b2446..61000f0912 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg index 0cf82847a0..4d4cf5e37d 100644 --- a/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.25_hips_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_hips variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg index a9664cf9d1..76071d46bc 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg index 8101fb6dd8..304f38e105 100644 --- a/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.4_hips_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_hips variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg index f009383ad8..5aaede062d 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg index 1adbbb0fb9..75a4b94541 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg index d3e6df227f..391c87f28c 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg index 0b019d555f..415951f4ee 100644 --- a/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg +++ b/resources/quality/cartesio/hips/cartesio_0.8_hips_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_hips variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg index 9eb5d5c4e9..f75dd933a6 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg index e0100d37ec..e95037c242 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.25_nylon_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_nylon variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg index d4b261b99f..4896d60aca 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg index 7d899ae927..803cb2b849 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.4_nylon_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_nylon variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg index 21e6d357b0..7217d3524d 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg index 15128584e1..8a7b46a817 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg index 1d78bd0f1d..41dd55cfce 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg index 95be159ff2..75cd29e4a3 100644 --- a/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg +++ b/resources/quality/cartesio/nylon/cartesio_0.8_nylon_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_nylon variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg index c45194e18b..66c425078d 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg index 248517d769..eea872ed0f 100644 --- a/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.25_pc_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pc variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg index 8c46693c91..12327636a7 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg index a0b71f1f0a..70c4f68135 100644 --- a/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.4_pc_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pc variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg index 04f01db6ba..cd4f112370 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg index 53e21ec4d0..9fae8bfe23 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg index 0b2b9dcb26..bebffc072b 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg index 173ad406f3..40c47b24a1 100644 --- a/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg +++ b/resources/quality/cartesio/pc/cartesio_0.8_pc_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pc variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg index 9dc7adfc88..3b6e326495 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg index 019af9d905..17efcfc1ce 100644 --- a/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.25_petg_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_petg variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg index 93388787e6..9c6840d5ba 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg index ed17ccce31..9fe00be066 100644 --- a/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.4_petg_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_petg variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg index 754c55caf5..6da3d2100a 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg index 81b1de32a2..c6d45d5faa 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg index 86e93c8a32..4a06499b5f 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg index 08f918f59b..2ab3fe3340 100644 --- a/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg +++ b/resources/quality/cartesio/petg/cartesio_0.8_petg_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_petg variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg index 4841f9f368..7d19528283 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg index 3ba36f9436..994f9b886a 100644 --- a/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.25_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg index 7c785a750a..f8227cfcd9 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg index b24394daf0..385b79e368 100644 --- a/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.4_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg index 6443f2d526..b99a972195 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg index 51a93f76d9..31fd7ddb8a 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg index 2f72d9d158..c93923e70a 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg index 431f7c0fff..98e2a9bbbb 100644 --- a/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg +++ b/resources/quality/cartesio/pla/cartesio_0.8_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg index fe21c17e22..444ac7bbc4 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg index 6525991986..0b03607e34 100644 --- a/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.25_pva_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pva variant = 0.25mm thermoplastic extruder diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg index cdf8f8cae7..b08e0d2671 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg index e7267735e4..32ce160df1 100644 --- a/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.4_pva_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pva variant = 0.4mm thermoplastic extruder diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg index fc35e14fc6..a6fdd82b5c 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg index 0e1b8b1241..496ecc085d 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = 4 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg index 249cf6485e..e440fdfe3f 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg index a6c0a89fcc..c1ad10abe1 100644 --- a/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg +++ b/resources/quality/cartesio/pva/cartesio_0.8_pva_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = cartesio [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pva variant = 0.8mm thermoplastic extruder diff --git a/resources/quality/coarse.inst.cfg b/resources/quality/coarse.inst.cfg index e9b8156a70..3f5e3f47ce 100644 --- a/resources/quality/coarse.inst.cfg +++ b/resources/quality/coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg index a302f5b513..89c5c957f6 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg index b26eb1d910..5b24e6edcf 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg index 9ec56f696a..c9bc62a72a 100644 --- a/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_discoeasy200_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_global_fast.inst.cfg b/resources/quality/dagoma/dagoma_global_fast.inst.cfg index 28569387f2..a37d3fb579 100644 --- a/resources/quality/dagoma/dagoma_global_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_global_fine.inst.cfg b/resources/quality/dagoma/dagoma_global_fine.inst.cfg index 1f7d577c1b..4815dc44cd 100644 --- a/resources/quality/dagoma/dagoma_global_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_global_standard.inst.cfg b/resources/quality/dagoma/dagoma_global_standard.inst.cfg index 167062c1d7..5be7fb75c9 100644 --- a/resources/quality/dagoma/dagoma_global_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_global_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_discoeasy200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg index d87c913eb6..99a1f9e61b 100644 --- a/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_magis [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg index d046726e0e..12e7f2c62f 100644 --- a/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_magis [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg index 39961ea93b..62054acb4e 100644 --- a/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_magis_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_magis [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg index efdf2f7d32..ea024726ac 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = dagoma_neva [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg index 50915db112..a69798ff2e 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = dagoma_neva [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg b/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg index ed67800eac..fd92ed4416 100644 --- a/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg +++ b/resources/quality/dagoma/dagoma_neva_pla_standard.inst.cfg @@ -4,7 +4,7 @@ name = Standard definition = dagoma_neva [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg index f540400575..9ac0791b7d 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg index 2214813913..43d6bfb778 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg index c196209553..7116247ca3 100644 --- a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 material = generic_abs [values] diff --git a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg index 332e1890c6..9b968e1a47 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg index 674174c0bd..68846ce68b 100644 --- a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast (beta) definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg index f8887810d5..6f63b0f5b4 100755 --- a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg index 99030a084b..2d76f87d66 100755 --- a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg index d6d853466a..6495b09042 100755 --- a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg index a3bafadeec..7bd4591064 100755 --- a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg index 84c6e66f61..a13d029c1a 100755 --- a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg index c4f884486e..d5387f3014 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg index 714d4e3517..b41eb9d81f 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg index 774b8969c0..ceaeb4667e 100644 --- a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 material = generic_pla [values] diff --git a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg index 58470ed650..ba82feb97d 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg index 9c00877c24..f312c27233 100644 --- a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/draft.inst.cfg b/resources/quality/draft.inst.cfg index ac1d9ec52f..9fe798dfd4 100644 --- a/resources/quality/draft.inst.cfg +++ b/resources/quality/draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/extra_coarse.inst.cfg b/resources/quality/extra_coarse.inst.cfg index 2a1a203d22..1a9ade143d 100644 --- a/resources/quality/extra_coarse.inst.cfg +++ b/resources/quality/extra_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/extra_fast.inst.cfg b/resources/quality/extra_fast.inst.cfg index da890f1653..1fcc9bc42d 100644 --- a/resources/quality/extra_fast.inst.cfg +++ b/resources/quality/extra_fast.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg index 95e8b93b36..ddcdc0632d 100644 --- a/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_fast.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Fast Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg index baedf0ed2b..66faed5084 100644 --- a/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_high.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = High Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg index 58933486ee..2bd980889b 100644 --- a/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_abs_normal.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Normal Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg index 00f0737227..cec7056ff1 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast Quality definition = fabtotum [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg index bd7f32c9ba..d5a893c408 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = High Quality definition = fabtotum [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg index 6a450e7ffe..7fe1b8b8f3 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal Quality definition = fabtotum [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg index afac0b0884..5ebe5bbdc2 100644 --- a/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_fast.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Fast Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg index 89dc6d9b33..5d5b582b82 100644 --- a/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_high.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = High Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg index e5496a13d4..1c510293a1 100644 --- a/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_pla_normal.inst.cfg @@ -4,7 +4,7 @@ definition = fabtotum name = Normal Quality [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg index 7917c92514..21a0c9bc09 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_fast.inst.cfg @@ -5,7 +5,7 @@ name = Fast Quality [metadata] type = quality -setting_version = 5 +setting_version = 7 material = generic_tpu quality_type = fast weight = -1 diff --git a/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg index 1c31967d79..dd27372a07 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_high.inst.cfg @@ -5,7 +5,7 @@ name = High Quality [metadata] type = quality -setting_version = 5 +setting_version = 7 material = generic_tpu quality_type = high weight = 1 diff --git a/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg index 0a3821f953..b7eefeeeeb 100644 --- a/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_tpu_normal.inst.cfg @@ -5,7 +5,7 @@ name = Normal Quality [metadata] type = quality -setting_version = 5 +setting_version = 7 material = generic_tpu quality_type = normal weight = 0 diff --git a/resources/quality/fast.inst.cfg b/resources/quality/fast.inst.cfg index 7568c42e8f..d92eeb3ed2 100644 --- a/resources/quality/fast.inst.cfg +++ b/resources/quality/fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg index 7fd2ab2296..7ea63ba7f9 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_normal.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Normal Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 +global_quality = True [values] layer_height = 0.2 @@ -64,7 +65,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg index 30a99ef243..95182aad2d 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Thick Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = course weight = -2 +global_quality = True [values] layer_height = 0.28 @@ -64,7 +65,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg index decafac241..05e9a84bb4 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_thin.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Thin Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 +global_quality = True [values] layer_height = 0.16 @@ -64,7 +65,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg index a74bdfdd78..fd986e6c1f 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_dual_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_dual_very_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Dual Very Thick Layers definition = gmax15plus_dual [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra_course weight = -3 +global_quality = True [values] layer_height = 0.32 @@ -63,7 +64,6 @@ ooze_shield_enabled = True prime_tower_enable = False prime_tower_position_x = 350 prime_tower_position_y = 350 -prime_tower_min_volume = 18 switch_extruder_retraction_amount = 6 switch_extruder_retraction_speeds = 60 diff --git a/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg index ddf5a4c491..fa50fcee4c 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_normal.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_normal.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Normal Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = -1 +weight = 0 +global_quality = True [values] layer_height = 0.2 @@ -57,3 +58,5 @@ top_thickness = 1 bottom_layers = 2 wall_line_count = 2 z_seam_corner = z_seam_corner_none + + diff --git a/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg index e6cb2b5854..e5fd46edbc 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Thick Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = course weight = -2 +global_quality = True [values] layer_height = 0.28 @@ -56,4 +57,4 @@ top_layers = 3 top_thickness = 1 bottom_layers = 2 wall_line_count = 2 -z_seam_corner = z_seam_corner_none +z_seam_corner = z_seam_corner_none
\ No newline at end of file diff --git a/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg index d119539d32..cc19a478e5 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_thin.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_thin.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Thin Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 +global_quality = True [values] layer_height = 0.16 @@ -56,4 +57,4 @@ top_layers = 5 top_thickness = 1 bottom_layers = 3 wall_line_count = 2 -z_seam_corner = z_seam_corner_none +z_seam_corner = z_seam_corner_none
\ No newline at end of file diff --git a/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg b/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg index 884029a4ae..0c2661b3fd 100644 --- a/resources/quality/gmax15plus/gmax15plus_pla_very_thick.inst.cfg +++ b/resources/quality/gmax15plus/gmax15plus_global_very_thick.inst.cfg @@ -4,10 +4,11 @@ name = gMax 1.5+ Very Thick Layers definition = gmax15plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra_course weight = -3 +global_quality = True [values] layer_height = 0.32 @@ -55,4 +56,4 @@ top_layers = 3 top_thickness = 1 bottom_layers = 2 wall_line_count = 2 -z_seam_corner = z_seam_corner_none +z_seam_corner = z_seam_corner_none
\ No newline at end of file diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 1b687bf5e4..8d306c9de4 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg index 6a50e24678..a9138ec70b 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg index 2c8a43874a..227072b3a1 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg index 264c95c933..a8bcd8d4b0 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg index dfdfc2458c..7dd26b4f70 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg index 68eec0c753..055e804c9c 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg index 46f81d0c1a..7909892c18 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg index f614b7cc3c..979158fdcf 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg index 5525899ea7..8cc3108d0e 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg index 28b4307cea..5620ac43f8 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg index 52a8594505..4c6d81e643 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg index bf3d409050..3eb99a52ea 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg @@ -4,7 +4,7 @@ name = UltraFine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultrahigh weight = 2 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg index 676ea84825..4a044228c0 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg @@ -4,7 +4,7 @@ name = UltraFine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultrahigh weight = 2 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg index 819501c727..62fe55a619 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg index 0f312aa62d..f808d5657f 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg index 25d0e65d74..c09bbed35e 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_normal.inst.cfg @@ -4,7 +4,7 @@ name = Medium definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg index ebe5ab620c..27bfbbaf58 100644 --- a/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/imade3d_jellybox_ultrafine.inst.cfg @@ -4,7 +4,7 @@ name = UltraFine definition = imade3d_jellybox [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultrahigh weight = 2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg index edba5e79ce..bda943ccb3 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg index 899af00b78..17a61de974 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg index 9b7ae123df..310d93a32a 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg index 96888821e3..4d738769b4 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg index c8f27f6a8f..55593d7bc2 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg index a121d921cc..a270353100 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg index 211da57f0c..9efb3ccb63 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg index 5879a76012..8c41234af8 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg index 0b437327d8..957d009be3 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg index ca5ac5bd0e..546572b2a6 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_beta [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg index cd6ee5356e..743cc19a20 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg index 345fdc2f0d..ece0fa19c7 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg index bafc8f0016..71338c8c5f 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg index c8aa72def2..60066b5f28 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_low.inst.cfg @@ -4,7 +4,7 @@ name = Low definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg index 62c43104e1..42ded06db1 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = kemiq_q2_gama [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg index 5bb967b78a..6e430754cf 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg index 30641b863a..71af7efca1 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg index 746b579c70..adc8128e6f 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg index e4ab115bc5..c66aec810e 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg index d8a7607c5c..9d8d46e5ca 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg index 44cad5a198..058fb2fa3c 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg index 995074f330..6cbd615d48 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg b/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg index 373908b2bd..5c4dfe8a86 100644 --- a/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/abs/malyan_m200_abs_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_abs [values] diff --git a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg index e53aa86a94..dd99af5356 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg index 4379d9fdcb..20ea357fba 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg index a9a5720e14..5d6e1ed7b7 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg index 96b982e86a..c573ba3eb2 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg index 0550efd603..9e9181b195 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg index 9a0454fc75..54cec5c3f0 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg index 76eaa3463f..d8aded3c63 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg index 42c670920f..84a5bd316a 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 global_quality = True [values] diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg index 96144c193f..6aad899773 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg index f390034a1f..05917d9769 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg index 693c6efc08..e2fe95f8d8 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg index 09c5c2b14d..387a051d64 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg index 0faec6b357..f659c78f80 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg index 988082f783..9e19c78b35 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg index 4eb84672e7..5ae85d1eef 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg b/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg index 2f33760afa..627f70badb 100644 --- a/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/petg/malyan_m200_petg_verydraft.inst.cfg @@ -4,8 +4,8 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_petg diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg index 9a26d1b2a1..7f970601b7 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg index ef4d002ce3..b4f5ea7388 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg index 6ff347a7cc..7bc3141980 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg index b6aa938b94..c7eb38439c 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg index 8a4b63691f..ce0604c7cc 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg index 98a8363c85..5ef6b1027d 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg index 5a334bd9c1..2a24855305 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg b/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg index 7d96a9f56d..24c6c205fa 100644 --- a/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg +++ b/resources/quality/malyan_m200/pla/malyan_m200_pla_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = malyan_m200 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_pla [values] diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg index ef579a567e..7364bdaa36 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg index 33296bf677..fd1e5b9a6a 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg index e282847f14..836be1bad9 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg index 2979f574a4..30672cda4a 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg index 2d4d3c7461..1ef32bd44c 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg index ed43dec3ae..9a2c26b034 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg index eb556fe862..d4bf86569b 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg index 279f58d64f..b0f626bdaf 100644 --- a/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/abs/monoprice_select_mini_v2_abs_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_abs [values] diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg index 1d81d7535e..6e3de45b42 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg index 6a5a041244..db7a7f891f 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg index 65925a1ea4..145c1a2fd2 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg index 0ac150c117..3b264639ad 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg index b02910cf12..030d82ec0f 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg index 46434555ad..a075cd54a1 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg index dfb4942b29..6846f451b1 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg index 79d9c8abb9..adee263981 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 global_quality = True [values] diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg index 4d7d1cd848..fd1cb1969e 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg index 1a18df9651..350ecb9e6c 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg index ac0ca29caa..661690da24 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg index 32c5e33f0d..b056628016 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg index 26f260f861..5fe909d1b8 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg index b5bcc7d455..e423d179e0 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg index 6fc41e34b6..6e3dc051de 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg index 8f568d3948..ca6bd27c56 100644 --- a/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/nylon/monoprice_select_mini_v2_nylon_verydraft.inst.cfg @@ -4,8 +4,8 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_nylon diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg index 76b210eba1..e33d685f11 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg index 53a099f42d..e348f871b2 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg index 1a6193fbaf..311c7b23f8 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg index 72e94d1828..4c6f55d812 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg index 13914d07e7..13e57bf86a 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg index d02a793b25..c2e07310d1 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg index 41b3821727..41bc8a8431 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg index 23b72a3a3b..50b10e3078 100644 --- a/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pc/monoprice_select_mini_v2_pc_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_pc [values] diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg index c2c8889127..107dfc3d24 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg index 881311d395..6e55583184 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg index f9f1e169cb..f809902f60 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_high.inst.cfg @@ -4,7 +4,7 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg index 026279f012..770a51e1dd 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg index 3ff71bf416..e2116bdd85 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg index 5524ec59ea..ce902318f8 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg index 99d1da45c7..6b5d2604d0 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg index 99874f0571..b777e97444 100644 --- a/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/petg/monoprice_select_mini_v2_petg_verydraft.inst.cfg @@ -4,8 +4,8 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -4 +weight = -3 material = generic_petg diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg index a64020a89e..f1080c776c 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg index 994d6ff0fd..7b7525f007 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg index 9f64ce57f0..d0bfe599a4 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_high.inst.cfg @@ -4,8 +4,8 @@ name = Finer definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 material = generic_pla diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg index afbc03d5af..07b08619d1 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg index ec30cfe2b9..74a03b7cbc 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_superdraft.inst.cfg @@ -4,7 +4,7 @@ name = Lowest Quality Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -5 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg index 916285385d..fc3ec719d0 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_thickerdraft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = thickerdraft weight = -3 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg index 5d627b6d35..316c4a2d17 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_ultra.inst.cfg @@ -4,7 +4,7 @@ name = Ultra Fine definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = ultra weight = 2 diff --git a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg index 9f22fb3692..fbbefb9937 100644 --- a/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/pla/monoprice_select_mini_v2_pla_verydraft.inst.cfg @@ -4,7 +4,7 @@ name = Low Detail Draft definition = monoprice_select_mini_v2 [metadata] -setting_version = 5 +setting_version = 7 type = quality material = generic_pla weight = 0 diff --git a/resources/quality/normal.inst.cfg b/resources/quality/normal.inst.cfg index f32c87bc60..b8828f07e0 100644 --- a/resources/quality/normal.inst.cfg +++ b/resources/quality/normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = fdmprinter [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg new file mode 100644 index 0000000000..933f731dbd --- /dev/null +++ b/resources/quality/nwa3d_a5/nwa3d_a5_best.inst.cfg @@ -0,0 +1,131 @@ +[general] +version = 4 +name = Best Quality +definition = nwa3d_a5 + +[metadata] +setting_version = 6 +type = quality +quality_type = best +weight = 1 +global_quality = True + +[values] +layer_height = 0.08 +initial_layer_height = 0.25 +line_width = 0.4 +initial_layer_line_width = 100 +wall_thickness = 0.8 +outer_wall_wipe_distance = 0.2 +top_surface_skin_layers = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +bottom_pattern_initial_layer = lines +outer_wall_inset = 0 +optimize_wall_printing_order = false +outer_before_inner_walls = false +alternate_extra_wall = false +compensate_wall_overlaps = true +compensate_outer_wall_overlaps = true +compensate_inner_wall_overlaps = true +minimum_wall_flow = 0 +fill_gaps_between_walls = everywhere +filter_out_tiny_gaps = true +print_thin_walls = true +horizontal_expansion = 0 +ignore_small_z_gaps = true +extra_skin_wall_count = 1 +enable_ironing = false +infill_density = 20 +connect_infill_lines = false +infill_line_multiplier = 1 +extra_infill_wall_count = 0 +infill_overlap_percentage = 10 +skin_overlap_percentage = 5 +infill_wipe_distance = 0.1 +gradual_infill_steps = 0 +infill_before_walls = false +infill_support = false +maximum_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_printing_temperature = 220 +initial_printing_temperature = 220 +final_printing_temperature = 220 +default_build_plate_temperature = 0 +build_plate_temperature = 0 +flow = 100 +enable_retraction = true +retract_at_layer_change = false +retraction_distance = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_minimum_travel = 0.8 +maximum_retraction_count = 90 +minimum_extrusion_distance_window = 5 +limit_support_retractions = true +nozzle_switch_retraction_distance = 16 +nozzle_switch_retraction_speed = 20 +print_speed = 30 +travel_speed = 150 +initial_layer_speed = 10 +initial_layer_travel_speed = 50 +maximum_z_speed = 0 +number_of_slower_layers = 2 +equalize_filament_flow = false +enable_acceleration_control = false +top_surface_skin_acceleration = 3000 +enable_jerk_control = false +combing_mode = off +retract_before_outer_wall = false +z_hop_when_retracted = false +enable_print_cooling = true +fan_speed = 100 +initial_fan_speed = 0 +regular_fan_speed_at_height = 0.25 +regular_fan_speed_at_layer = 2 +lift_head = false +generate_support = true +support_placement = everywhere +support_overhang_angle = 50 +support_pattern = grid +support_wall_line_count = 0 +connect_support_lines = false +support_density = 20 +support_infill_line_direction = 0 +enable_support_brim = true +support_brim_line_count = 5 +support_z_distance = 0.18 +support_x_y_distance = 0.7 +minimum_support_x_y_distance = 0.2 +support_stair_step_height = 0.3 +support_stair_step_maximum_width = 5.0 +support_join_distance = 2.0 +support_horizontal_expansion = 0.2 +gradual_support_infill_steps = 0 +enable_support_roof = true +enable_support_floor = false +support_roof_thickness = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +fan_speed_override = false +use_towers = true +tower_diameter = 3 +tower_roof_angle = 65 +build_plate_adhesion_type = skirt +skirt_line_count = 2 +skirt_distance = 3 +union_overlapping_volumes = true +remove_all_holes = false +extensive_stiching = false +keep_disconnected_faces = false +merge_meshes_overlap = 0.15 +remove_mesh_intersection = false + + + + + diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg new file mode 100644 index 0000000000..167bfb5dad --- /dev/null +++ b/resources/quality/nwa3d_a5/nwa3d_a5_fast.inst.cfg @@ -0,0 +1,125 @@ +[general] +version = 4 +name = Fast Quality +definition = nwa3d_a5 + +[metadata] +setting_version = 6 +type = quality +quality_type = fast +weight = -1 +global_quality = True + +[values] +layer_height = 0.25 +initial_layer_height = 0.25 +line_width = 0.4 +initial_layer_line_width = 100 +wall_thickness = 0.8 +outer_wall_wipe_distance = 0.2 +top_surface_skin_layers = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +bottom_pattern_initial_layer = lines +outer_wall_inset = 0 +optimize_wall_printing_order = false +outer_before_inner_walls = false +alternate_extra_wall = false +compensate_wall_overlaps = true +compensate_outer_wall_overlaps = true +compensate_inner_wall_overlaps = true +minimum_wall_flow = 0 +fill_gaps_between_walls = everywhere +filter_out_tiny_gaps = true +print_thin_walls = true +horizontal_expansion = 0 +ignore_small_z_gaps = true +extra_skin_wall_count = 1 +enable_ironing = false +infill_density = 15 +connect_infill_lines = false +infill_line_multiplier = 1 +extra_infill_wall_count = 0 +infill_overlap_percentage = 10 +skin_overlap_percentage = 5 +infill_wipe_distance = 0.1 +gradual_infill_steps = 0 +infill_before_walls = false +infill_support = false +maximum_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_printing_temperature = 220 +initial_printing_temperature = 220 +final_printing_temperature = 220 +default_build_plate_temperature = 0 +build_plate_temperature = 0 +flow = 100 +enable_retraction = true +retract_at_layer_change = false +retraction_distance = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_minimum_travel = 0.8 +maximum_retraction_count = 90 +minimum_extrusion_distance_window = 5 +limit_support_retractions = true +nozzle_switch_retraction_distance = 16 +nozzle_switch_retraction_speed = 20 +print_speed = 60 +travel_speed = 150 +initial_layer_speed = 10 +initial_layer_travel_speed = 50 +maximum_z_speed = 0 +number_of_slower_layers = 2 +equalize_filament_flow = false +enable_acceleration_control = false +enable_jerk_control = false +combing_mode = off +retract_before_outer_wall = false +z_hop_when_retracted = false +enable_print_cooling = true +fan_speed = 100 +initial_fan_speed = 0 +regular_fan_speed_at_height = 0.5 +regular_fan_speed_at_layer = 2 +lift_head = false +generate_support = true +support_placement = everywhere +support_overhang_angle = 50 +support_pattern = grid +support_wall_line_count = 0 +connect_support_lines = false +support_density = 15 +support_infill_line_direction = 0 +enable_support_brim = true +support_brim_line_count = 5 +support_z_distance = 0.3 +support_x_y_distance = 0.7 +minimum_support_x_y_distance = 0.2 +support_stair_step_height = 0.3 +support_stair_step_maximum_width = 5.0 +support_join_distance = 2.0 +support_horizontal_expansion = 0.2 +gradual_support_infill_steps = 0 +enable_support_roof = true +enable_support_floor = false +support_roof_thickness = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +fan_speed_override = false +use_towers = true +tower_diameter = 3 +tower_roof_angle = 65 +build_plate_adhesion_type = skirt +skirt_line_count = 2 +skirt_distance = 3 +union_overlapping_volumes = true +remove_all_holes = false +extensive_stiching = false +keep_disconnected_faces = false +merged_meshes_overlap = 0.15 +remove_mesh_intersection = false diff --git a/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg b/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg new file mode 100644 index 0000000000..30bcbed244 --- /dev/null +++ b/resources/quality/nwa3d_a5/nwa3d_a5_normal.inst.cfg @@ -0,0 +1,125 @@ +[general] +version = 4 +name = Normal Quality +definition = nwa3d_a5 + +[metadata] +setting_version = 6 +type = quality +quality_type = normal +weight = 0 +global_quality = True + +[values] +layer_height = 0.15 +initial_layer_height = 0.25 +line_width = 0.4 +initial_layer_line_width = 100 +wall_thickness = 0.8 +outer_wall_wipe_distance = 0.2 +top_surface_skin_layers = 1 +top_bottom_thickness = 0.6 +top_thickness = 0.8 +top_layers = 5 +bottom_thickness = 0.6 +bottom_layers = 3 +top_bottom_pattern = lines +bottom_pattern_initial_layer = lines +outer_wall_inset = 0 +optimize_wall_printing_order = false +outer_before_inner_walls = false +alternate_extra_wall = false +compensate_wall_overlaps = true +compensate_outer_wall_overlaps = true +compensate_inner_wall_overlaps = true +minimum_wall_flow = 0 +fill_gaps_between_walls = everywhere +filter_out_tiny_gaps = true +print_thin_walls = true +horizontal_expansion = 0 +ignore_small_z_gaps = true +extra_skin_wall_count = 1 +enable_ironing = false +infill_density = 20 +connect_infill_lines = false +infill_line_multiplier = 1 +extra_infill_wall_count = 0 +infill_overlap_percentage = 10 +skin_overlap_percentage = 5 +infill_wipe_distance = 0.1 +gradual_infill_steps = 0 +infill_before_walls = false +infill_support = false +maximum_skin_angle_for_expansion = 90 +material_diameter = 1.75 +default_printing_temperature = 220 +initial_printing_temperature = 220 +final_printing_temperature = 220 +default_build_plate_temperature = 0 +build_plate_temperature = 0 +flow = 100 +enable_retraction = true +retract_at_layer_change = false +retraction_distance = 5 +retraction_speed = 45 +retraction_extra_prime_amount = 0 +retraction_minimum_travel = 0.8 +maximum_retraction_count = 90 +minimum_extrusion_distance_window = 5 +limit_support_retractions = true +nozzle_switch_retraction_distance = 16 +nozzle_switch_retraction_speed = 20 +print_speed = 50 +travel_speed = 150 +initial_layer_speed = 10 +initial_layer_travel_speed = 50 +maximum_z_speed = 0 +number_of_slower_layers = 2 +equalize_filament_flow = false +enable_acceleration_control = false +enable_jerk_control = false +combing_mode = off +retract_before_outer_wall = false +z_hop_when_retracted = false +enable_print_cooling = true +fan_speed = 100 +initial_fan_speed = 0 +regular_fan_speed_at_height = 0.25 +regular_fan_speed_at_layer = 2 +lift_head = false +generate_support = true +support_placement = everywhere +support_overhang_angle = 50 +support_pattern = grid +support_wall_line_count = 0 +connect_support_lines = false +support_density = 20 +support_infill_line_direction = 0 +enable_support_brim = true +support_brim_line_count = 5 +support_z_distance = 0.2 +support_x_y_distance = 0.7 +minimum_support_x_y_distance = 0.2 +support_stair_step_height = 0.3 +support_stair_step_maximum_width = 5.0 +support_join_distance = 2.0 +support_horizontal_expansion = 0.2 +gradual_support_infill_steps = 0 +enable_support_roof = true +enable_support_floor = false +support_roof_thickness = 0.45 +support_roof_density = 45 +support_roof_pattern = lines +fan_speed_override = false +use_towers = true +tower_diameter = 3 +tower_roof_angle = 65 +build_plate_adhesion_type = skirt +skirt_line_count = 2 +skirt_distance = 3 +union_overlapping_volumes = true +remove_all_holes = false +extensive_stiching = false +keep_disconnected_faces = false +merged_meshes_overlap = 0.15 +remove_mesh_intersection = false diff --git a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg index ac4f9ee81d..dab819cc38 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_coarse.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = peopoly_moai [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = 3 diff --git a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg index 2d21b1f7e0..feb005e39c 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_draft.inst.cfg @@ -4,10 +4,10 @@ name = Draft definition = peopoly_moai [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 4 +weight = -2 [values] layer_height = 0.1 diff --git a/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg index 796c2cff3c..46bd8f4a63 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_extra_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra High definition = peopoly_moai [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra_high weight = 0 diff --git a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg index b36163d9f1..2b951c6e4e 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = peopoly_moai [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg index cf67591ab2..b965862a16 100644 --- a/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg +++ b/resources/quality/peopoly_moai/peopoly_moai_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = peopoly_moai [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 [values] layer_height = 0.06 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg index be83533e0b..250c3bd1d5 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = tevo_blackwidow [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg index 5ca8a6e4ef..0dff2b94ca 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg @@ -4,7 +4,7 @@ name = High definition = tevo_blackwidow [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg index f542952fab..e5b9290cad 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = tevo_blackwidow [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg b/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg index 8b066f139f..1a09737baa 100644 --- a/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg +++ b/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg @@ -5,7 +5,7 @@ definition = tizyx_k25 [metadata]
quality_type = normal
-setting_version = 5
+setting_version = 7
type = quality
global_quality = True
@@ -13,17 +13,15 @@ global_quality = True adhesion_type = skirt
skirt_line_count = 2
skirt_gap = 2
-cool_fan_speed_0 = 100
fill_outline_gaps = True
-infill_angles = [0,90 ]
infill_sparse_density = 15
material_diameter = 1.75
retraction_amount = 2.5
retraction_min_travel = 2
retraction_speed = 30
-skin_angles = [0,90]
speed_print = 60
speed_topbottom = 50
speed_wall_0 = 40
top_layers = 4
wall_line_count = 2
+cool_min_layer_time = 11
diff --git a/resources/quality/ultimaker2/um2_draft.inst.cfg b/resources/quality/ultimaker2/um2_draft.inst.cfg index 8c34d2c09d..121f6f0404 100644 --- a/resources/quality/ultimaker2/um2_draft.inst.cfg +++ b/resources/quality/ultimaker2/um2_draft.inst.cfg @@ -4,7 +4,7 @@ name = Draft definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2/um2_fast.inst.cfg b/resources/quality/ultimaker2/um2_fast.inst.cfg index 084ed05f92..8dc9b56082 100644 --- a/resources/quality/ultimaker2/um2_fast.inst.cfg +++ b/resources/quality/ultimaker2/um2_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2/um2_high.inst.cfg b/resources/quality/ultimaker2/um2_high.inst.cfg index 83bb6bb972..5bb17480b6 100644 --- a/resources/quality/ultimaker2/um2_high.inst.cfg +++ b/resources/quality/ultimaker2/um2_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2/um2_normal.inst.cfg b/resources/quality/ultimaker2/um2_normal.inst.cfg index febee8581f..1235fe27db 100644 --- a/resources/quality/ultimaker2/um2_normal.inst.cfg +++ b/resources/quality/ultimaker2/um2_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg index ff830ae660..059a58e699 100644 --- a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg index 94ea62a7ca..59a714708f 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg index 03de437ee2..daf244cc5d 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg index 836d866eab..1bb29fdf5c 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg index de55623c0f..910933b73e 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg index c96260d52f..8be245a49e 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg index 886daf58e2..dc9e0bfd87 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg index b727acc510..31f14b6d5a 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg index 20e217315b..2dc95a860b 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg index 853a87c751..a995cc8c57 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg index 6d3ef94b9d..491f041130 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg index 7b39ce966a..057eb1d657 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg index eca5070eb9..aa6662ba58 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = -1 +weight = 1 material = generic_cpe variant = 0.25 mm diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg index 1e181e23d1..01763c1e2c 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg index 9ffb8a05bb..298cbb2068 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg index ee7101f2ec..5be1ac399d 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg index d2de84eae6..55f167a046 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg index 581dc0368d..ba99eaacc2 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg index 7549c0081d..73ef52e511 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg index b1e5552562..2fc95502e7 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg index 616f13f110..89ce35628e 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg index d28dc76af8..94c542e793 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg index 1c4fa746ad..98abf00ebf 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg index e40d6efc58..2091a22f80 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg index a10cb4030c..9cfbefa641 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse Quality definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -4 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg index 5645bbee0b..1f4f9af746 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft Quality definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg index d9afc804ba..7d4483d9ff 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse Quality definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -3 diff --git a/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg index 7fd6d54c87..29e649ffe0 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg index ade183d14a..12f449fbd1 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg index 76c7b8163c..908d0e42ab 100644 --- a/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg index 2cab693c74..176e8b1e13 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg index f61a29a35a..a4a380f615 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg index 341dc7422f..74251f21a6 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg index 63bc156e15..f0ad7bf95a 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg index 8aea23fb50..ce9f0f5c53 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg index 28ccd6ffcf..d197511fc6 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg index f868313ba9..33dfe9f029 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg index c30d849553..42a7225914 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg index 08b60eeb20..f3f1cba3c4 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg index dbc36f0c25..4ae2ba1e59 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg index 18f299b64d..23aa742baf 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg index 9ebb46c4d3..4ca6511cce 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg index 47f84fe790..3f87070307 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg index 2c857435c5..251541d530 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg index 6450d9fe56..0cc384c87f 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg index 91c990712e..7ac3e3a6be 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg index 4266bcd46b..a6073c15de 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg index b995c92922..afe476adec 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg index a9e4917fa2..9f70dc9605 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg index 2fec539e2f..1dffcbf795 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg index 2bba1be3d4..eac5de0f53 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg @@ -4,10 +4,10 @@ name = Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast -weight = -2 +weight = -1 material = generic_pp variant = 0.8 mm diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg index 15f7577bdb..9ec9c819f4 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fast definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = -3 +weight = -2 material = generic_pp variant = 0.8 mm diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg index e0c016abee..91cba55809 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg index 127f281913..a9c9765bcd 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg index c39ea9cec3..4fcdc9579c 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg index 5139a1fea8..fc56bc41e5 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg index 4e81b4f39e..c2a687a4d6 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg index 04dc2ec79b..8194d1a510 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg index e08fa27dc9..fb8212a4a0 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pc variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg index 8dbca3cd05..39416d4bb1 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg index 6e9bbdce27..e6b10560c3 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pp variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg index 768864bfef..c83d3a1f49 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 8877912a33..150be3bdcd 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index 926cfd6995..f9d1110512 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index 9ceab110e9..40229c1307 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -17,6 +17,7 @@ machine_nozzle_cool_down_speed = 0.8 machine_nozzle_heat_up_speed = 1.5 material_standby_temperature = 100 material_print_temperature = =default_material_print_temperature - 5 +material_print_temperature_layer_0 = =material_print_temperature + 15 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 prime_tower_enable = False diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index e5b699c35f..df13a81211 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -14,6 +14,7 @@ variant = AA 0.4 [values] machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 +material_print_temperature_layer_0 = =material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg index df7f0fdf02..d102abe5ee 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg index cf330dc984..57ec919e46 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg index 705c9c4105..c5782aa9bc 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index 4e94789a6b..37801626bd 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index d93915d721..4bf87820fb 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index 082152c50f..cbb3085d85 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index 889b94e001..ed87e6d4ed 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index 1891a274c8..1a15755577 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index e4cfdb67fc..2cba7b1ccf 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index cec4b950cf..e927a79c10 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index 892083b264..d9a7649123 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 2e4b8f8dcc..0139970339 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index 9b271c47cd..094a7c0ff5 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index 16c0b6febb..8bb0002b84 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index 17661efbb8..f7c733c212 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 96acf403a5..e6ac6a7cb6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index f9159b5fca..e50cd7fc02 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index d175e99ad6..5f837fce0e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index 557a449022..ccba414b57 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index 16626dc544..e4cbb6ed35 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index 7f50a2a6f0..96d1a3436a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index 507afc5526..a7d5fa0586 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index 05febab06d..bb6b6cb06c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg index 4efa5199cb..6ca1e6fe3e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg index ad03df5d86..e34a8ba625 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg index d8d51dd716..d363667af7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg index 9959a39457..4efb7d9e78 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg index 5c68557e9b..d461a3187e 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg index 90556ea487..b451c22489 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index 9b9dca3a16..0a3bd45c38 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index e6233a8184..42adf63e8c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index e725615854..a5804ad2e1 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg index e71ea07531..051b5bba36 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg index 39aa103631..dcbe8ca1b0 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg index 3a08643086..1a0c746b20 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg index 73df9637f7..add4025786 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg index d59bfe7cea..654447e5dc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg index 368317019f..86d145cf39 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg index 170643275c..243bf8f437 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg index 5b3cb52f18..78362aa1d8 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg index fff96ba9fc..44f254b613 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg index e9b0873716..be1245b58a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg index 7518acc7f0..9d15b69dbc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg index 040632efec..d2b22cd418 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg index 5b81532977..4e9c8c9376 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg index 317b89ea85..69661c91b6 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft -weight = -2 +weight = -4 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg index 2fd6bd7609..1fefa5a141 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -1 +weight = -3 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg index 9b861030d8..d8133eee5f 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg index 42a499f22c..35b675fd10 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg index d1f3937244..fed141f8e9 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg index 19496565bc..a6fe2c9e8e 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg index aeee3b4e09..bd2a09c3cc 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg index fcd4fcd999..68765f839b 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg index 3f679870fd..2224917fc1 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg index 17dbd1faf9..e4b3355579 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg index 624496a9ec..026372156c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg index 90b5103f20..d30a6db38c 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg index a9fab40d4e..28fffe945a 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg index e2ced0a364..35bc994931 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg index 7010d292b2..a99a0abdf5 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg index 325609362f..4fd5c14f5d 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg index a0507299fb..6d80217cd5 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg index 086f811b36..8068af6f22 100644 --- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg index 28556ca7bf..090baba2c8 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg index 9ad5499f18..47a82e01a3 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg index e616214704..a8d0e494cb 100644 --- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg index a421203220..936406fce6 100644 --- a/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg index 2ecf7526a2..14b214da5a 100644 --- a/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg index ce5497bd39..b9c2c19d8c 100644 --- a/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg index afadda378a..ab9127f26d 100644 --- a/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg index f88f5df85f..36d9f932f1 100644 --- a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg index df626dc724..3eaf8191a2 100644 --- a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg index 34f3a2a901..2ebfb1e2c7 100644 --- a/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Coarse Quality definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = coarse weight = -3 diff --git a/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg index ed8c0ddb97..b246ba12ea 100644 --- a/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Draft Quality definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg index 1ad10ac4db..da8c6a9b39 100644 --- a/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Extra_Coarse_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse Quality definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extra coarse weight = -4 diff --git a/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg index 6c83239164..db03a7f18c 100644 --- a/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg index 19752f07bf..ec1b593f7e 100644 --- a/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg index a7dedc9b88..9b39c97682 100644 --- a/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_original/umo_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_original [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg index f2e05b08e8..1b46116686 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg index 2068ed51c0..0beec0fba4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -12,6 +12,7 @@ material = generic_cpe variant = AA 0.25 [values] +retraction_combing_max_distance = 50 retraction_extrusion_window = 0.5 speed_infill = =math.ceil(speed_print * 40 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg index 3a8ed8e773..7623872d07 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg index 55d53c6c71..e09ea57792 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pc variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg index a06f2158fe..e284ac277a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg index c925845dc1..a8c5f08448 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg @@ -4,12 +4,13 @@ name = Fine - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 material = generic_pp variant = AA 0.25 +is_experimental = True [values] acceleration_enabled = True diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg index e9628225bc..27c9c1d63e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg index b86c61b3a2..5d2e8767ba 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg index f3c099724a..7e5fcc0ab6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg index 8d016a2ee4..829939b2a6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg index 6ce623b66e..a6a51aca4c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg index 254afbc109..b49dbd674d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg index 39bedce77f..6d4f7206f3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg index c87d590650..e590a56028 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg index 421fcdf095..aa32861ddb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -29,7 +29,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg index 536c6c97b8..26edd2d8a7 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -29,7 +29,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg index 77182c21e1..e200c3b078 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -31,7 +31,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg index d779baf315..dc665ae114 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -31,7 +31,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg index c51e5652e1..311c335a86 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -15,6 +15,7 @@ variant = AA 0.4 material_print_temperature = =default_material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 skin_overlap = 20 speed_print = 60 speed_layer_0 = =math.ceil(speed_print * 20 / 60) @@ -24,5 +25,5 @@ speed_wall_0 = =math.ceil(speed_wall * 35 / 45) wall_thickness = 1 -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg index b80d3ccf22..02122a40fa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -16,11 +16,12 @@ cool_min_speed = 7 material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 60 speed_layer_0 = =math.ceil(speed_print * 20 / 60) speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 40 / 60) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60)
\ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg index c90eedaec3..54ab48e88d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -18,10 +18,11 @@ machine_nozzle_heat_up_speed = 1.5 material_print_temperature = =default_material_print_temperature - 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 50 speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 40 / 50)
\ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg index e098b0ffb4..be9b43b1b8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -16,10 +16,11 @@ machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 55 speed_layer_0 = =math.ceil(speed_print * 20 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 45 / 55)
\ No newline at end of file diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg index 991ad30a5a..03fe4f4b8a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg index 695ce2c8fb..bd078f7e4d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg index e55867efe5..45506f4152 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg index 41e28c51d5..c159402e3f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg index 5d03e1c980..f6713fd4e9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg index b630ab6232..fbc5328d80 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg index 1c080c3b47..d6e002c7f1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg index 79ce686da5..0f708b16db 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg index c7a4864328..ca4ef6bd9b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg index 42048fa297..56cb57cb08 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg index b7ad8bd5c4..44b643d529 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg index 911fa9a0a8..aa737dc1ea 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg index 68558bcf93..d008bb37fc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg index 1145d1900f..b0c00f2c07 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg index c0b094f0a2..835c53eaef 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg index 280e5c4bfb..8be35d2ae2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg index 304c170b55..460fd73afa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg index cd5c598d4f..3488756cb6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg index 2522c0f20f..dc2b844d90 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg index 9b4ab52543..ec93e5ec23 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg index 35cf66a93b..eff47b9c20 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg index 4357d765df..62e543977c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg index c8d64f9dcb..6222dcdc7b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg index c7fa604e89..2bf17429fa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg index 187023d3c0..7d7f4b2aaa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg index 81cb27f060..6d78d9d027 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg index 46e3483a6a..c02317792c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -30,7 +30,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg index 5c235b656a..57be60501c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -30,7 +30,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg index 326a730fe4..44235b30eb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -32,7 +32,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg index d40b2db90e..a0b5af8679 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPEP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -32,7 +32,7 @@ material_print_temperature_layer_0 = =material_print_temperature multiple_mesh_overlap = 0 prime_tower_enable = True prime_tower_wipe_enabled = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_extrusion_window = 1 retraction_hop = 0.2 retraction_hop_enabled = False diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg index c812066e0c..fdd8bd6d39 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -16,6 +16,7 @@ buildplate = Aluminum material_print_temperature = =default_material_print_temperature + 10 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 skin_overlap = 20 speed_print = 60 speed_layer_0 = 20 @@ -25,7 +26,7 @@ speed_wall_0 = =math.ceil(speed_wall * 35 / 45) wall_thickness = 1 -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) prime_tower_purge_volume = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg index ef634316da..e40a6422db 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 @@ -17,13 +17,14 @@ cool_min_speed = 7 material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 60 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 40 / 60) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 50 / 60) prime_tower_purge_volume = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg index cda97e6ab3..68d0d77fdb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 @@ -19,12 +19,13 @@ machine_nozzle_heat_up_speed = 1.5 material_print_temperature = =default_material_print_temperature - 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 50 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 40 / 50) prime_tower_purge_volume = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg index 5a75f3b6e3..563aa27b70 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_CPE_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 @@ -17,12 +17,13 @@ machine_nozzle_cool_down_speed = 0.85 machine_nozzle_heat_up_speed = 1.5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 +retraction_combing_max_distance = 50 speed_print = 55 speed_layer_0 = 20 speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) -infill_pattern = zigzag +infill_pattern = triangles speed_infill = =math.ceil(speed_print * 45 / 55) prime_tower_purge_volume = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg index f05ecddc25..ddaef82dcc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg index 6103519f1c..5c85a32af0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg index 130afb8c91..dbeed2dfe9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg index 9e1bf394d4..3694db3f76 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PC_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg index 6124dff257..f50c38f892 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg index 2791e9f5d5..8f07b2a6a9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg index f78b4048fb..440d8cbfe6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_aluminum_PP_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg index 911fc6e78e..56a16595e8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg index 0fcdac4a85..77c0031feb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg index e3346bbd1d..5a4ee5c515 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_ABS_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg index e78006689b..a1c4479973 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 @@ -22,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 10 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg index c6d0962157..3bde53d593 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 @@ -22,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 5 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg index b80f773594..159c909ba5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 material = generic_cpe_plus variant = AA 0.8 +is_experimental = True [values] brim_width = 14 @@ -22,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 7 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg index 532aacabf7..af016c06da 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -17,6 +17,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg index 55b9ae8315..17036438a9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -17,6 +17,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 20 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 45 speed_topbottom = =math.ceil(speed_print * 30 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg index 01761062a4..2973abfdd3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPE_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -17,6 +17,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 17 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg index 2108839d3f..7760ffa89e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg index 0702d174a0..2499e6b3d2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg index d02d410ed6..2e611aeecc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_Nylon_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg index 0ed4e3d994..2ac89416aa 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg @@ -4,12 +4,13 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg index 53bf1d3107..31db0f93dd 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Sprint - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft -weight = -2 +weight = -4 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg index d9c45c2634..2ef532a8b9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg @@ -4,12 +4,13 @@ name = Extra Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -1 +weight = -3 material = generic_pc variant = AA 0.8 +is_experimental = True [values] brim_width = 14 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg index 7db4e96311..ecfab94ef3 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg index c59f015b5d..38f3c9c9d9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg index 6fdff8bf8d..b4b65ee5f7 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg index fee58b367d..9a413c42c1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg index aaa810e864..0286f482cf 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg index 5b8aa6d2e1..ed53d87b78 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg index 50dead746b..790ff4a922 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg index 0bdb088f8c..9111bb5804 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg index c7cb5902a2..af0fb786d2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPLA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg index e8276d54c5..479aab6e7c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg index 7da73a200d..2b2f280730 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg index 60dbbf38e6..ef38d96aea 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_TPU_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg index 37dceff349..e0dd599317 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg index eac339baa8..0ca1b63c0b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg index 590496df0f..1611c3fedd 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_ABS_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg index 3e74390840..6b0f12f8dc 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Fast_Print.inst.cfg @@ -4,13 +4,14 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 material = generic_cpe_plus variant = AA 0.8 buildplate = Aluminum +is_experimental = True [values] brim_width = 14 @@ -23,7 +24,7 @@ material_print_temperature = =default_material_print_temperature - 10 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg index 4c1b807430..78ad1f6eac 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -23,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 5 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg index 11aefc90cd..7be2cdbcc8 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPEP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -23,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 7 material_print_temperature_layer_0 = =material_print_temperature material_standby_temperature = 100 prime_tower_enable = True -retraction_combing = off +retraction_combing_max_distance = 50 retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg index 80c0585061..a0c0890b1b 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 @@ -18,6 +18,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 15 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg index 5dcc454173..ca001b62ed 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 @@ -18,6 +18,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 20 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 45 speed_topbottom = =math.ceil(speed_print * 30 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg index 8423e109e8..ea0cd0fa83 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_CPE_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 @@ -18,6 +18,7 @@ line_width = =machine_nozzle_size * 0.875 material_print_temperature = =default_material_print_temperature + 17 material_standby_temperature = 100 prime_tower_enable = True +retraction_combing_max_distance = 50 speed_print = 40 speed_topbottom = =math.ceil(speed_print * 25 / 40) speed_wall = =math.ceil(speed_print * 30 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg index 747e2fe8a5..04170b3ba2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Fast_Print.inst.cfg @@ -4,13 +4,14 @@ name = Fast - Experimental definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = 0 +weight = -2 material = generic_pc variant = AA 0.8 buildplate = Aluminum +is_experimental = True [values] brim_width = 10 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg index 689652dc06..90b7afdb8d 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Superdraft_Print.inst.cfg @@ -4,10 +4,10 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft -weight = -2 +weight = -4 material = generic_pc variant = AA 0.8 buildplate = Aluminum diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg index 0480ee5620..f9b93eac37 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PC_Verydraft_Print.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft -weight = -1 +weight = -3 material = generic_pc variant = AA 0.8 buildplate = Aluminum diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg index b80af1b75f..764dc75494 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg index 970e0971a9..63a594d3e0 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg index e51ba3207b..7de41de9c9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_aluminum_PP_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg index 73639be0b6..804e9fd62b 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg index 5da25be32d..52a571c4f1 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg index 36634af2c8..e8e293c81b 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg index f76c4c944a..b512b47514 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg index e4e3ab772a..04015fe0f8 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg index 5e78e51014..8d79e8fafe 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg index 5af09aebcc..31663ab192 100644 --- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg index 99b4b142fa..e3ecf51f13 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFCPE_Draft_Print.inst.cfg @@ -4,10 +4,10 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = -3 +weight = -2 material = generic_cffcpe variant = CC 0.6 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg index 80c383aa8d..f73379dd3d 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_CFFPA_Draft_Print.inst.cfg @@ -4,10 +4,10 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = -3 +weight = -2 material = generic_cffpa variant = CC 0.6 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg index c94d239c81..906f22a66f 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFCPE_Draft_Print.inst.cfg @@ -4,10 +4,10 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = -3 +weight = -2 material = generic_gffcpe variant = CC 0.6 diff --git a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg index e7d4d1955b..e411fa877b 100644 --- a/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_cc0.6_GFFPA_Draft_Print.inst.cfg @@ -4,10 +4,10 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft -weight = -3 +weight = -2 material = generic_gffpa variant = CC 0.6 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg index ed5303637b..6d5e9cce24 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Draft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = draft weight = -2 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg index ee9c6a8409..64fa64c463 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Fast_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = -1 diff --git a/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg index cd1c269b1d..0f15089757 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_High_Quality.inst.cfg @@ -4,10 +4,10 @@ name = Extra Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high -weight = 0 +weight = 1 global_quality = True [values] diff --git a/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg index 099ba7c584..f31a3e5ee3 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg index 4c0bd40bd1..d97e906d8e 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Superdraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Sprint definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = superdraft weight = -4 diff --git a/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg index ec4ec910ff..4a6a431e5f 100644 --- a/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_global_Verydraft_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = verydraft weight = -3 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg index 70aac3f666..d1547719f3 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg index 564b330132..169fda1f47 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg index e2f740a60a..a2a298542e 100644 --- a/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_ABS_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg index 48e80b5512..f82194c911 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg index 496144772c..9d8f5fa98d 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg index 75ae5f15e6..08bc3aa522 100644 --- a/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_Global_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg index 8309106d9f..09c3902405 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg index 6efaa3299f..058ed545b7 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg index bd3b0c35fb..595f2be25f 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PET_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg index d10b4c3f8d..9ec084e758 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg index ede77b0dfe..9f1bd25564 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg index a75cff6968..b60c8d8496 100644 --- a/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_PLA_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg index bee6b3bf11..567de3a73b 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_Extreme_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Extreme definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = extreme weight = 2 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg index 8b0f87cc77..dbcb27b229 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_High_Quality.inst.cfg @@ -4,7 +4,7 @@ name = High definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = high weight = 1 diff --git a/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg b/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg index bd4e04744f..975556bb86 100644 --- a/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/vertex_delta_k8800/k8800_TPU_Normal_Quality.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = vertex_delta_k8800 [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal weight = 0 diff --git a/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg index 67e350b39e..a795485a6d 100644 --- a/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg index 58e13b22c5..6133c0aa99 100644 --- a/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_fine.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fine -weight = 3 +weight = 1 global_quality = True [values] diff --git a/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg index cb4e042e7b..4a5bfc7d47 100644 --- a/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_global_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 global_quality = True [values] diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg index 188bdd25e5..ec89e83337 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg index 6654889c10..e9ce3c7244 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fine -weight = 3 +weight = 1 material = generic_tpu [values] diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg index f56355100c..81d7bcd308 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_tpu [values] diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg index 7ae4be06b0..f805c0f3be 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fast weight = 1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg index 64c7d4afc8..9647938cf6 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg @@ -4,10 +4,10 @@ name = Fine definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = fine -weight = 3 +weight = 1 material = generic_pla [values] diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg index dbdd600ece..af2a32384c 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg @@ -4,10 +4,10 @@ name = Normal definition = zyyx_agile [metadata] -setting_version = 5 +setting_version = 7 type = quality quality_type = normal -weight = 2 +weight = 0 material = generic_pla [values] diff --git a/resources/themes/cura-dark/icons/tab_status_unknown.svg b/resources/themes/cura-dark/icons/tab_status_unknown.svg deleted file mode 100644 index d20218bc00..0000000000 --- a/resources/themes/cura-dark/icons/tab_status_unknown.svg +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> - <title>Unknown</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="00-printer-status-overview" transform="translate(-165.000000, -22.000000)"></g> - <g id="Unknown" fill="#cccccc"> - <path d="M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z M6.78333984,11.3842884 C7.41672998,11.3842884 7.93020964,10.8704803 7.93020964,10.2374186 C7.93020964,9.60435702 7.41672998,9.09087736 6.78333984,9.09087736 C6.1499497,9.09087736 5.63647003,9.6040285 5.63647003,10.2374186 C5.63647003,10.8708088 6.1499497,11.3842884 6.78333984,11.3842884 Z M7.5343408,7.73605322 C8.81853274,7.61975648 9.82775188,6.53727696 9.82808041,5.22351806 C9.82808041,3.83222799 8.69632261,2.7004702 7.30503254,2.7004702 C5.91374248,2.7004702 4.78198468,3.83255652 4.78198468,5.22351806 L6.33589307,5.22351806 C6.33589307,4.68967004 6.77052748,4.25503562 7.30470402,4.25503562 C7.83920908,4.25503562 8.27351498,4.68967004 8.27351498,5.22351806 C8.27351498,5.75802312 7.83920908,6.19232901 7.30470402,6.19232901 L5.9801039,6.19232901 L5.9801039,8.54355994 L7.5343408,8.54355994 L7.5343408,7.73605322 Z" id="Combined-Shape"></path> - </g> - </g> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-dark/images/logo.svg b/resources/themes/cura-dark/images/logo.svg deleted file mode 100644 index 92ffe4ca0c..0000000000 --- a/resources/themes/cura-dark/images/logo.svg +++ /dev/null @@ -1,72 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="82px" - height="18px" - viewBox="0 0 82 18" - version="1.1" - id="svg12" - sodipodi:docname="logo.svg" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> - <metadata - id="metadata18"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <defs - id="defs16" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1156" - inkscape:window-height="480" - id="namedview14" - showgrid="false" - inkscape:zoom="3.4634146" - inkscape:cx="41" - inkscape:cy="9" - inkscape:window-x="3138" - inkscape:window-y="329" - inkscape:window-maximized="0" - inkscape:current-layer="svg12" /> - <polygon - fill="#20A6DB" - points="82 10.3797468 77.8757345 10.3797468 75.7721519 12.4764557 75.7721519 16.6075949 79.9067798 16.6075949 82 14.5108861" - id="polygon2" /> - <path - fill="white" - d="M0,9.32538529 C0,14.168804 3.22511,17.6455696 8.53908129,17.6455696 L16.6075949,17.6455696 L16.6075949,13.294146 L8.53908129,13.294146 C5.8534025,13.2832128 4.53351762,11.4792306 4.53351762,9.32538529 C4.53351762,7.17153994 5.8534025,5.40035747 8.53908129,5.37849102 L16.6075949,5.37849102 L16.6075949,1.03800064 L8.53908129,1.03800064 C3.21363275,1.02706742 0,4.47103333 0,9.32538529 Z" - id="path4" /> - <path - fill="white" - d="M33.004725,9.78605176 C33.004725,12.2613239 31.20074,13.5835846 29.0468913,13.5835846 C26.8930426,13.5835846 25.1218573,12.2613239 25.1218573,9.78605176 L25.1218573,1.03797468 L20.7594937,1.03797468 L20.7594937,9.78605176 C20.7594937,14.6837056 24.203465,17.6455696 29.0468913,17.6455696 C33.8903176,17.6455696 37.3670886,14.6731275 37.3670886,9.78605176 L37.3670886,1.03797468 L33.004725,1.03797468 L33.004725,9.78605176 L33.004725,9.78605176 Z" - id="path6" /> - <path - fill="white" - d="M62.1251127,1.03797468 C57.0530042,1.03797468 53.9746835,4.47968021 53.9746835,9.31992005 C53.9746835,14.1601599 57.0530042,17.6346436 62.1251127,17.6346436 L63.9217127,17.6346436 L63.9217127,13.297002 L62.1251127,13.297002 C59.5616713,13.2860759 58.3018603,11.4832778 58.3018603,9.3308461 C58.3018603,7.17841439 59.5616713,5.4083944 62.1251127,5.38654231 L66.2112822,5.38654231 L66.2112822,11.0680879 L66.2112822,13.297002 L66.2112822,17.6455696 L70.5822785,17.6455696 L70.5822785,17.3942705 L70.5822785,13.297002 L70.5822785,5.38654231 L70.5822785,1.80279813 L70.5822785,1.03797468 L62.1251127,1.03797468 Z" - id="path8" /> - <path - fill="white" - d="M 41.518987,9.13915 V 17.646 h 4.36332 V 9.13915 c 0,-2.1053391 1.273557,-3.8366328 3.86497,-3.8580068 h 3.189432 V 1.038405 h -3.189432 c -5.127454,0 -8.22829,3.3664044 -8.22829,8.100745 z" - id="path10" - inkscape:connector-curvature="0" /> -</svg> diff --git a/resources/themes/cura-dark/theme.json b/resources/themes/cura-dark/theme.json index 39546b6370..6b29073475 100644 --- a/resources/themes/cura-dark/theme.json +++ b/resources/themes/cura-dark/theme.json @@ -5,7 +5,9 @@ }, "colors": { - "sidebar": [39, 44, 48, 255], + "main_background": [39, 44, 48, 255], + "wide_lining": [31, 36, 39, 255], + "thick_lining": [255, 255, 255, 30], "lining": [64, 69, 72, 255], "viewport_overlay": [0, 6, 9, 222], @@ -13,14 +15,20 @@ "primary_hover": [48, 182, 231, 255], "primary_text": [255, 255, 255, 204], "border": [127, 127, 127, 255], - "secondary": [241, 242, 242, 255], + "secondary": [95, 95, 95, 255], - "topbar_background_color": [0, 0, 0, 0], - "topbar_background_color_monitoring": [31, 36, 39, 255], + "icon": [204, 204, 204, 255], + "toolbar_background": [39, 44, 48, 255], + "toolbar_button_active": [95, 95, 95, 255], + "toolbar_button_hover": [95, 95, 95, 255], + "toolbar_button_active_hover": [95, 95, 95, 255], - "topbar_button_text_active": [255, 255, 255, 255], - "topbar_button_text_inactive": [128, 128, 128, 255], - "topbar_button_text_hovered": [255, 255, 255, 255], + "main_window_header_button_text_inactive": [128, 128, 128, 255], + "main_window_header_button_text_hovered": [255, 255, 255, 255], + + "machine_selector_bar": [39, 44, 48, 255], + "machine_selector_active": [39, 44, 48, 255], + "machine_selector_printer_icon": [204, 204, 204, 255], "text": [255, 255, 255, 204], "text_detail": [255, 255, 255, 172], @@ -33,17 +41,10 @@ "text_scene": [255, 255, 255, 162], "text_scene_hover": [255, 255, 255, 204], + "printer_type_label_background": [95, 95, 95, 255], + "error": [212, 31, 53, 255], - "sidebar_header_bar": [39, 44, 48, 255], - "sidebar_header_active": [39, 44, 48, 255], - "sidebar_header_hover": [68, 72, 75, 255], - "sidebar_header_highlight": [68, 192, 255, 255], - "sidebar_header_highlight_hover": [68, 192, 255, 255], - "sidebar_header_text_active": [255, 255, 255, 255], - "sidebar_header_text_hover": [255, 255, 255, 255], - "sidebar_header_text_inactive": [255, 255, 255, 127], - "sidebar_lining": [31, 36, 39, 255], - "sidebar_lining_thin": [255, 255, 255, 30], + "disabled": [32, 32, 32, 255], "button": [39, 44, 48, 255], "button_hover": [39, 44, 48, 255], @@ -101,11 +102,11 @@ "scrollbar_handle_hover": [255, 255, 255, 255], "scrollbar_handle_down": [255, 255, 255, 255], - "setting_category": [39, 44, 48, 255], - "setting_category_disabled": [39, 44, 48, 255], - "setting_category_hover": [39, 44, 48, 255], - "setting_category_active": [39, 44, 48, 255], - "setting_category_active_hover": [39, 44, 48, 255], + "setting_category": [75, 80, 83, 255], + "setting_category_disabled": [75, 80, 83, 255], + "setting_category_hover": [75, 80, 83, 255], + "setting_category_active": [75, 80, 83, 255], + "setting_category_active_hover": [75, 80, 83, 255], "setting_category_text": [255, 255, 255, 152], "setting_category_disabled_text": [255, 255, 255, 101], "setting_category_hover_text": [255, 255, 255, 204], @@ -142,9 +143,7 @@ "slider_groove_border": [127, 127, 127, 255], "slider_groove_fill": [245, 245, 245, 255], "slider_handle": [255, 255, 255, 255], - "slider_handle_hover": [77, 182, 226, 255], "slider_handle_active": [68, 192, 255, 255], - "slider_handle_border": [39, 44, 48, 255], "slider_text_background": [255, 255, 255, 255], "checkbox": [43, 48, 52, 255], @@ -207,21 +206,14 @@ "layerview_support_interface": [64, 192, 255, 255], "layerview_nozzle": [181, 166, 66, 120], - "configuration_item": [0, 0, 0, 0], - "configuration_item_active": [12, 169, 227, 179], - "configuration_item_text": [255, 255, 255, 255], - "configuration_item_text_active": [255, 255, 255, 255], - "configuration_item_border": [255, 255, 255, 255], - "configuration_item_border_active": [12, 169, 227, 179], - "configuration_item_border_hover": [12, 169, 227, 179], - "material_compatibility_warning": [255, 255, 255, 255], "quality_slider_unavailable": [179, 179, 179, 255], "quality_slider_available": [255, 255, 255, 255], - "quality_slider_handle": [255, 255, 255, 255], - "quality_slider_handle_hover": [127, 127, 127, 255], - "quality_slider_text": [255, 255, 255, 255], + + "toolbox_header_button_text_active": [255, 255, 255, 255], + "toolbox_header_button_text_inactive": [128, 128, 128, 255], + "toolbox_header_button_text_hovered": [255, 255, 255, 255], "monitor_card_background_inactive": [43, 48, 52, 255], "monitor_card_background": [43, 48, 52, 255], diff --git a/resources/themes/cura-light/icons/buildplate.svg b/resources/themes/cura-light/icons/buildplate.svg index 9e61296958..7505c8204e 100644 --- a/resources/themes/cura-light/icons/buildplate.svg +++ b/resources/themes/cura-light/icons/buildplate.svg @@ -1,17 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 49 (51002) - http://www.bohemiancoding.com/sketch --> - <title>icn_buildplate</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Visual" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"> - <g id="Printer-status-icon" transform="translate(-33.000000, -366.000000)" stroke="#000000"> - <g id="icn_buildplate" transform="translate(33.000000, 367.000000)"> - <polyline id="Stroke-6823" points="0 5 7 8 14 5"></polyline> - <polyline id="Stroke-6823-Copy" points="0 7 7 10 14 7"></polyline> - <polyline id="Stroke-6823-Copy" points="0 9 7 12 14 9"></polyline> - <polygon id="Stroke-6824" points="0 2.75 7 0 14 2.75 7 5.5"></polygon> - </g> - </g> +<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg"> + <g fill="none" stroke="black" stroke-linecap="round" stroke-linejoin="round"> + <polyline points="0 6 7 9 14 6" /> + <polyline points="0 8 7 11 14 8" /> + <polyline points="0 10 7 13 14 10" /> + <polygon points="0 3.75 7 1 14 3.75 7 6.5" fill="black" /> </g> </svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/circle_outline.svg b/resources/themes/cura-light/icons/circle_outline.svg new file mode 100644 index 0000000000..3a8fb197f3 --- /dev/null +++ b/resources/themes/cura-light/icons/circle_outline.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<svg width="50" height="50" > + <circle cx="25" cy="25" r="23.74" fill="none" stroke="black" stroke-width="2.5" /> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/clock.svg b/resources/themes/cura-light/icons/clock.svg new file mode 100644 index 0000000000..0b6cb78881 --- /dev/null +++ b/resources/themes/cura-light/icons/clock.svg @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="iso-8859-1"?> +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="612px" height="612px" viewBox="0 0 612 612" style="enable-background:new 0 0 612 612;" xml:space="preserve"> +<g> + <g> + <path d="M587.572,186.881c-32.266-75.225-87.096-129.934-162.949-162.285C386.711,8.427,346.992,0.168,305.497,0.168 + c-41.488,0-80.914,8.181-118.784,24.428C111.488,56.861,56.415,111.535,24.092,186.881C7.895,224.629,0,264.176,0,305.664 + c0,41.496,7.895,81.371,24.092,119.127c32.323,75.346,87.403,130.348,162.621,162.621c37.877,16.247,77.295,24.42,118.784,24.42 + c41.489,0,81.214-8.259,119.12-24.42c75.853-32.352,130.683-87.403,162.956-162.621C603.819,386.914,612,347.16,612,305.664 + C612,264.176,603.826,224.757,587.572,186.881z M538.724,440.853c-24.021,41.195-56.929,73.876-98.375,98.039 + c-41.195,24.021-86.332,36.135-134.845,36.135c-36.47,0-71.27-7.024-104.4-21.415c-33.129-14.384-61.733-33.294-85.661-57.215 + c-23.928-23.928-42.973-52.811-57.214-85.997c-14.199-33.065-21.08-68.258-21.08-104.735c0-48.52,11.921-93.428,35.807-134.509 + c23.971-41.231,56.886-73.947,98.039-98.04c41.146-24.092,85.99-36.142,134.502-36.142c48.52,0,93.649,12.121,134.845,36.142 + c41.446,24.164,74.283,56.879,98.375,98.039c24.092,41.153,36.135,85.99,36.135,134.509 + C574.852,354.185,562.888,399.399,538.724,440.853z"/> + <path d="M324.906,302.988V129.659c0-10.372-9.037-18.738-19.41-18.738c-9.701,0-18.403,8.366-18.403,18.738v176.005 + c0,0.336,0.671,1.678,0.671,2.678c-0.671,6.024,1.007,11.043,5.019,15.062l100.053,100.046c6.695,6.695,19.073,6.695,25.763,0 + c7.694-7.695,7.188-18.86,0-26.099L324.906,302.988z"/> + </g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +<g> +</g> +</svg> diff --git a/resources/themes/cura-light/icons/connected.svg b/resources/themes/cura-light/icons/connected.svg deleted file mode 100644 index 18423bb6c4..0000000000 --- a/resources/themes/cura-light/icons/connected.svg +++ /dev/null @@ -1,5 +0,0 @@ -<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <polygon id="Polygon" points="15 8 16 9 9 16 8 15"></polygon> - <circle id="Oval-2" cx="6" cy="18" r="4"></circle> - <circle id="Oval-2-Copy" cx="18" cy="6" r="4"></circle> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/disconnected.svg b/resources/themes/cura-light/icons/disconnected.svg deleted file mode 100644 index 019dff117e..0000000000 --- a/resources/themes/cura-light/icons/disconnected.svg +++ /dev/null @@ -1,6 +0,0 @@ -<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <circle id="Oval-2" stroke="#FFFFFF" cx="4" cy="20" r="3.5"></circle> - <circle id="Oval-2-Copy" stroke="#FFFFFF" cx="20" cy="4" r="3.5"></circle> - <polygon id="Polygon" fill="#FFFFFF" points="11 12 12 13 9 16 8 15"></polygon> - <polygon id="Polygon-Copy" fill="#FFFFFF" points="15 8 16 9 13 12 12 11"></polygon> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/external_link.svg b/resources/themes/cura-light/icons/external_link.svg new file mode 100644 index 0000000000..a2130fb97b --- /dev/null +++ b/resources/themes/cura-light/icons/external_link.svg @@ -0,0 +1,8 @@ +<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="External-site" fill="#2671E7"> + <path d="M15.2542746,0 L10.117115,0 C9.70521103,0 9.37138968,0.331077601 9.37138968,0.7395961 C9.37138968,1.1481146 9.70521103,1.4791922 10.117115,1.4791922 L13.5368139,1.4791922 L6.21853299,8.73732261 C5.92715567,9.02612743 5.92715567,9.49450277 6.21853299,9.78330758 C6.36413212,9.92770999 6.55504068,10 6.74577014,10 C6.93649962,10 7.12740818,9.92770999 7.2730073,9.78330758 L14.5085492,2.60705849 L14.5085492,5.83435463 C14.5085492,6.24287313 14.8423706,6.57395074 15.2542746,6.57395074 C15.6661786,6.57395074 16,6.24287313 16,5.83435463 L16,0.7395961 C16,0.331077601 15.6661786,0 15.2542746,0 Z" id="Path"></path> + <path d="M12.2810964,7.69220962 C11.8840075,7.69220962 11.5621929,8.01402427 11.5621929,8.41111317 L11.5621929,14.0829238 C11.5621929,14.3427581 11.3427581,14.5621929 11.0829238,14.5621929 L1.91707615,14.5621929 C1.65724189,14.5621929 1.43780712,14.3427581 1.43780712,14.0829238 L1.43780712,4.91707615 C1.43780712,4.65724189 1.65724189,4.43780712 1.91707615,4.43780712 L7.60891391,4.43780712 C8.00600281,4.43780712 8.32781747,4.11599245 8.32781747,3.71890356 C8.32781747,3.32181465 8.00600281,3 7.60891391,3 L1.91707615,3 C0.859956439,3 0,3.85995644 0,4.91707615 L0,14.0829238 C0,15.1400436 0.859956439,16 1.91707615,16 L11.0829238,16 C12.1400436,16 13,15.1400436 13,14.0829238 L13,8.41111317 C13,8.01419692 12.6781853,7.69220962 12.2810964,7.69220962 Z" id="Path"></path> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/extruder_button.svg b/resources/themes/cura-light/icons/extruder_button.svg index e3c01b6a0a..c79ba5c5df 100644 --- a/resources/themes/cura-light/icons/extruder_button.svg +++ b/resources/themes/cura-light/icons/extruder_button.svg @@ -1,64 +1,9 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="30" - height="30" - viewBox="0 0 30 30" - version="1.1" - id="svg4595" - sodipodi:docname="extruder_button.svg" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> - <metadata - id="metadata4599"> - <rdf:RDF> - <cc:Work - rdf:about=""> - <dc:format>image/svg+xml</dc:format> - <dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title>Artboard 3 Copy</dc:title> - </cc:Work> - </rdf:RDF> - </metadata> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1137" - id="namedview4597" - showgrid="false" - inkscape:pagecheckerboard="true" - inkscape:zoom="23.442308" - inkscape:cx="4.9163727" - inkscape:cy="17.941232" - inkscape:window-x="2552" - inkscape:window-y="-8" - inkscape:window-maximized="1" - inkscape:current-layer="svg4595" /> - <!-- Generator: Sketch 43.1 (39012) - http://www.bohemiancoding.com/sketch --> - <title - id="title4584">Artboard 3 Copy</title> - <desc - id="desc4586">Created with Sketch.</desc> - <defs - id="defs4588" /> - <ellipse - id="path13" - cx="14.999999" - cy="15" - style="fill:none;stroke:#ffffff;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" - rx="13.735848" - ry="13.735849" /> -</svg> +<svg width="28px" height="28px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <g id="Configuration-panel" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="extruder_icn" fill="#000000"> + <g id="Icon/-Extruder/-color/-grey"> + <path d="M20,22 L14,28 L8,22 L2,22 C0.8954305,22 1.3527075e-16,21.1045695 0,20 L0,2 C-1.3527075e-16,0.8954305 0.8954305,2.02906125e-16 2,0 L26,0 C27.1045695,-2.02906125e-16 28,0.8954305 28,2 L28,20 C28,21.1045695 27.1045695,22 26,22 L20,22 Z" id="Combined-Shape"></path> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/grip_lines.svg b/resources/themes/cura-light/icons/grip_lines.svg new file mode 100644 index 0000000000..253d1fb486 --- /dev/null +++ b/resources/themes/cura-light/icons/grip_lines.svg @@ -0,0 +1,4 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 6"> + <rect width="30" height="2" rx="1" ry="1" /> + <rect width="30" height="2" rx="1" ry="1" y="4" /> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/info.svg b/resources/themes/cura-light/icons/info.svg new file mode 100644 index 0000000000..9896b3dac8 --- /dev/null +++ b/resources/themes/cura-light/icons/info.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Icon/ info</title> + <desc>Created with Sketch.</desc> + <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Print-panel/-print" transform="translate(-214.000000, -24.000000)" fill="#08073F" fill-rule="nonzero"> + <g id="Icon/-info" transform="translate(214.000000, 24.000000)"> + <path d="M2.63588391,2.63588391 C-0.878627968,6.15039578 -0.878627968,11.8496042 2.63588391,15.3641161 C6.15039578,18.878628 11.8496042,18.878628 15.3641161,15.3641161 C18.878628,11.8496042 18.878628,6.15039578 15.3641161,2.63588391 C11.8496042,-0.878627968 6.15039578,-0.878627968 2.63588391,2.63588391 Z M9.01034483,3.5 C9.83793103,3.5 10.5,4.17808219 10.5,5 C10.5,5.82191781 9.81724138,6.5 9.01034483,6.5 C8.18275862,6.5 7.5,5.82191781 7.5,4.97945205 C7.5,4.15753425 8.18275862,3.5 9.01034483,3.5 Z M11.488168,13.3648649 C11.4474692,13.4783784 11.3660716,13.6108108 11.2846741,13.6864865 C10.75559,14.1972973 10.1044095,14.5 9.33113276,14.5 C8.96484376,14.5 8.61890416,14.5 8.25261516,14.4432432 C7.66248289,14.3675676 6.9095555,13.6864865 7.01130245,12.9675676 C7.0927,12.4756757 7.17409756,11.9837838 7.25549511,11.4918919 C7.41829022,10.6405405 7.58108533,9.77027027 7.74388044,8.91891892 C7.74388044,8.86216216 7.76422983,8.80540541 7.76422983,8.74864865 C7.76422983,8.38918919 7.6421335,8.25675676 7.25549511,8.21891892 C7.0927,8.2 6.92990489,8.18108108 6.76710978,8.14324324 C6.58396529,8.08648649 6.48221834,7.93513514 6.50256773,7.8027027 C6.52291712,7.65135135 6.62466406,7.55675676 6.82815795,7.51891892 C6.92990489,7.5 7.05200123,7.5 7.17409756,7.5 C7.62178411,7.5 8.06947066,7.5 8.5375066,7.5 C9.02589193,7.5 9.49392787,7.5 9.9823132,7.5 C10.3282528,7.5 10.5317467,7.65135135 10.5317467,7.97297297 C10.5317467,8.23783784 10.4910479,8.5027027 10.4299997,8.76756757 C10.2468553,9.75135135 10.0433614,10.7162162 9.86021687,11.7 C9.7991687,12.0216216 9.71777115,12.3432432 9.67707237,12.6648649 C9.65672298,12.8162162 9.67707237,12.9864865 9.71777115,13.1378378 C9.77881931,13.3459459 9.94161442,13.4594595 10.1654577,13.4405405 C10.3486022,13.4216216 10.5317467,13.3648649 10.7148912,13.2891892 C10.8573369,13.2324324 10.9794332,13.1378378 11.121879,13.1 C11.3660716,13.0243243 11.5492161,13.1567568 11.488168,13.3648649 Z" id="Shape"></path> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/printer_cloud_connected.svg b/resources/themes/cura-light/icons/printer_cloud_connected.svg new file mode 100644 index 0000000000..3bc94a05e7 --- /dev/null +++ b/resources/themes/cura-light/icons/printer_cloud_connected.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Artboard Copy 2</title> + <desc>Created with Sketch.</desc> + <g id="Artboard-Copy-2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Group" fill="#3282FF"> + <path d="M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z M9.8,6.08333333 C9.72,5.375 9.12,4.83333333 8.4,4.83333333 C8.2,4.83333333 8.04,4.875 7.88,4.95833333 C7.52,4.375 6.88,4 6.2,4 C5.08,4 4.2,4.91666667 4.2,6.08333333 C4.2,6.08333333 4.2,6.08333333 4.2,6.125 C3.52,6.20833333 3,6.83333333 3,7.54166667 C3,8.33333333 3.64,9 4.4,9 C5,9 8.88,9 9.6,9 C10.36,9 11,8.33333333 11,7.54166667 C11,6.79166667 10.48,6.20833333 9.8,6.08333333 Z" id="Combined-Shape"></path> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_connected.svg b/resources/themes/cura-light/icons/printer_connected.svg index a8ff015a9d..a8ff015a9d 100644 --- a/resources/themes/cura-light/icons/tab_status_connected.svg +++ b/resources/themes/cura-light/icons/printer_connected.svg diff --git a/resources/themes/cura-light/icons/printer_group.svg b/resources/themes/cura-light/icons/printer_group.svg index 614bea90b8..5e439faca4 100644 --- a/resources/themes/cura-light/icons/printer_group.svg +++ b/resources/themes/cura-light/icons/printer_group.svg @@ -1,12 +1,20 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="32px" height="16px" viewBox="0 0 32 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 49 (51002) - http://www.bohemiancoding.com/sketch --> - <title>icn_groupPrinters</title> +<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Icon/ group printer/ disconnected</title> <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Visual" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="Printer-status-icon" transform="translate(-24.000000, -176.000000)" fill="#000000"> - <path d="M48,188 L54,188 L54,190 L48,190 L48,188 L48,188 Z M48,180 L54,180 L54,182 L48,182 L48,180 L48,180 Z M54,189 L56,189 L56,191 L54,191 L54,189 L54,189 Z M54,177 L56,177 L56,189 L54,189 L54,177 L54,177 Z M48,182 L51,182 L51,183 L48,183 L48,182 L48,182 Z M49,183 L50,183 L50,185 L49,185 L49,183 L49,183 Z M48,177 L54,177 L54,179 L48,179 L48,177 L48,177 Z M34,176 L46,176 L48,176 L48,187 L53,187 L53,188 L48,188 L48,190 L48,192 L46,192 L46,191 L34,191 L34,192 L32,192 L32,190 L26,190 L26,191 L24,191 L24,189 L24,177 L26,177 L32,177 L32,176 L34,176 Z M34,178 L34,179 L46,179 L46,178 L34,178 Z M41,182 L41,184 L39,184 L39,182 L38,182 L38,181 L42,181 L42,182 L41,182 Z M46,189 L46,181 L34,181 L34,189 L46,189 Z M32,179 L26,179 L26,180 L32,180 L32,179 Z M32,183 L31,183 L31,185 L30,185 L30,183 L29,183 L29,182 L26,182 L26,188 L27,188 L27,187 L32,187 L32,183 Z M35,188 L45,188 L45,189 L35,189 L35,188 Z" id="icn_groupPrinters"></path> + <g id="Icon/-group-printer/-disconnected" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Icon/-group-printer/-connected" transform="translate(0.000000, 6.000000)"> + <g id="printer-group"> + <path d="M8,16.9319728 L2.15026455,16.9319728 C1.96402116,16.9492063 1.77777778,17.0181406 1.64232804,17.1387755 L1.54074074,17.2421769 C1.43915344,17.4145125 1.23597884,17.4489796 1.03280423,17.4489796 L0.118518519,17.4489796 C0.0677248677,17.4489796 0.0169312169,17.3972789 0.0169312169,17.3455782 L0.0169312169,1.09433107 C0.0169312169,1.04263039 0.0677248677,0.990929705 0.118518519,0.990929705 L8,0.990929705 L8,2.47301587 L1.86243386,2.47301587 C1.67619048,2.47301587 1.54074074,2.62811791 1.54074074,2.80045351 L1.54074074,13.4680272 C1.54074074,13.9505669 1.93015873,14.3469388 2.4042328,14.3469388 L8,14.3469388 L8,16.9319728 Z" id="Combined-Shape" fill="#08073F" fill-rule="nonzero"></path> + <g id="UM3" transform="translate(23.777778, 0.904762)"></g> + <path d="M24,0.990929705 L31.8814815,0.990929705 C31.9322751,0.990929705 31.9830688,1.04263039 31.9830688,1.09433107 L31.9830688,17.3455782 C31.9830688,17.3972789 31.9322751,17.4489796 31.8814815,17.4489796 L30.9671958,17.4489796 C30.7809524,17.431746 30.594709,17.3628118 30.4592593,17.2421769 L30.357672,17.1387755 C30.2560847,16.9664399 30.0529101,16.9319728 29.8497354,16.9319728 L24,16.9319728 L24,14.3469388 L29.5619048,14.3469388 C30.0359788,14.3469388 30.4253968,13.9505669 30.4253968,13.4680272 L30.442328,13.4680272 L30.442328,2.80045351 C30.442328,2.61088435 30.2899471,2.47301587 30.1206349,2.47301587 L24,2.47301587 L24,0.990929705 Z" id="Combined-Shape" fill="#08073F" fill-rule="nonzero"></path> + <g id="Group-Copy-2" transform="translate(8.000000, 0.000000)" fill="#08073F" fill-rule="nonzero"> + <g id="UM3" transform="translate(0.000000, 0.000000)"> + <path d="M15.8666667,0.0969387755 L0.133333333,0.0969387755 C0.0761904762,0.0969387755 0.019047619,0.155102041 0.019047619,0.213265306 L0.019047619,18.4959184 C0.019047619,18.5540816 0.0761904762,18.6122449 0.133333333,18.6122449 L1.16190476,18.6122449 C1.39047619,18.6122449 1.61904762,18.5734694 1.73333333,18.3795918 L1.84761905,18.2632653 C2,18.127551 2.20952381,18.05 2.41904762,18.0306122 L13.5809524,18.0306122 C13.8095238,18.0306122 14.0380952,18.0693878 14.152381,18.2632653 L14.2666667,18.3795918 C14.4190476,18.5153061 14.6285714,18.5928571 14.8380952,18.6122449 L15.8666667,18.6122449 C15.9238095,18.6122449 15.9809524,18.5540816 15.9809524,18.4959184 L15.9809524,0.213265306 C15.9809524,0.155102041 15.9238095,0.0969387755 15.8666667,0.0969387755 Z M14.2285714,14.1336735 C14.2285714,14.6765306 13.7904762,15.122449 13.2571429,15.122449 L2.7047619,15.122449 C2.17142857,15.122449 1.73333333,14.6765306 1.73333333,14.1336735 L1.73333333,2.13265306 C1.73333333,1.93877551 1.88571429,1.76428571 2.0952381,1.76428571 L13.8857143,1.76428571 C14.0761905,1.76428571 14.247619,1.91938776 14.247619,2.13265306 L14.247619,14.1336735 L14.2285714,14.1336735 Z" id="Shape"></path> + </g> + </g> + </g> </g> </g> </svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/printer_single.svg b/resources/themes/cura-light/icons/printer_single.svg index f7dc83987d..69c4e212bc 100644 --- a/resources/themes/cura-light/icons/printer_single.svg +++ b/resources/themes/cura-light/icons/printer_single.svg @@ -1,13 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 49 (51002) - http://www.bohemiancoding.com/sketch --> - <title>icn_singlePrinter</title> +<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Icon/ single printer/ disconnected</title> <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Visual" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="Printer-status-icon" transform="translate(-217.000000, -176.000000)" fill="#000000"> - <g id="icn_singlePrinter" transform="translate(217.000000, 176.000000)"> - <path d="M2,13 L14,13 L14,15 L2,15 L2,13 L2,13 Z M2,3 L14,3 L14,5 L2,5 L2,3 L2,3 Z M0,14 L2,14 L2,16 L0,16 L0,14 L0,14 Z M14,14 L16,14 L16,16 L14,16 L14,14 L14,14 Z M0,0 L2,0 L2,14 L0,14 L0,0 L0,0 Z M14,0 L16,0 L16,14 L14,14 L14,0 L14,0 Z M6,5 L10,5 L10,6 L6,6 L6,5 L6,5 Z M7,6 L9,6 L9,8 L7,8 L7,6 L7,6 Z M2,0 L14,0 L14,2 L2,2 L2,0 L2,0 Z M3,12 L13,12 L13,13 L3,13 L3,12 L3,12 Z" id="Rectangle-185-Copy-5-Copy-4"></path> + <g id="Icon/-single-printer/-disconnected" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Group-Copy-7" transform="translate(6.000000, 5.000000)" fill="#08073F" fill-rule="nonzero"> + <g id="UM3" transform="translate(0.000000, 0.000000)"> + <path d="M19.8333333,0.119047619 L0.166666667,0.119047619 C0.0952380952,0.119047619 0.0238095238,0.19047619 0.0238095238,0.261904762 L0.0238095238,22.7142857 C0.0238095238,22.7857143 0.0952380952,22.8571429 0.166666667,22.8571429 L1.45238095,22.8571429 C1.73809524,22.8571429 2.02380952,22.8095238 2.16666667,22.5714286 L2.30952381,22.4285714 C2.5,22.2619048 2.76190476,22.1666667 3.02380952,22.1428571 L16.9761905,22.1428571 C17.2619048,22.1428571 17.547619,22.1904762 17.6904762,22.4285714 L17.8333333,22.5714286 C18.0238095,22.7380952 18.2857143,22.8333333 18.547619,22.8571429 L19.8333333,22.8571429 C19.9047619,22.8571429 19.9761905,22.7857143 19.9761905,22.7142857 L19.9761905,0.261904762 C19.9761905,0.19047619 19.9047619,0.119047619 19.8333333,0.119047619 Z M17.7857143,17.3571429 C17.7857143,18.0238095 17.2380952,18.5714286 16.5714286,18.5714286 L3.38095238,18.5714286 C2.71428571,18.5714286 2.16666667,18.0238095 2.16666667,17.3571429 L2.16666667,2.61904762 C2.16666667,2.38095238 2.35714286,2.16666667 2.61904762,2.16666667 L17.3571429,2.16666667 C17.5952381,2.16666667 17.8095238,2.35714286 17.8095238,2.61904762 L17.8095238,17.3571429 L17.7857143,17.3571429 Z" id="Shape"></path> </g> </g> </g> diff --git a/resources/themes/cura-light/icons/search.svg b/resources/themes/cura-light/icons/search.svg index 8272991300..a9ccb612fd 100644 --- a/resources/themes/cura-light/icons/search.svg +++ b/resources/themes/cura-light/icons/search.svg @@ -1,4 +1,21 @@ -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"> - <path - d="m 20.769231,12.692308 q 0,-3.3353368 -2.370794,-5.7061301 -2.370793,-2.3707933 -5.706129,-2.3707933 -3.335337,0 -5.70613,2.3707933 -2.370793,2.3707933 -2.370793,5.7061301 0,3.335336 2.370793,5.706129 2.370793,2.370794 5.70613,2.370794 3.335336,0 5.706129,-2.370794 2.370794,-2.370793 2.370794,-5.706129 z m 9.230769,15 q 0,0.9375 -0.685096,1.622596 Q 28.629808,30 27.692308,30 26.71875,30 26.069712,29.314904 l -6.183895,-6.165866 q -3.227163,2.235577 -7.193509,2.235577 -2.578125,0 -4.93089,-1.000601 Q 5.408654,23.383413 3.704928,21.679687 2.001202,19.975962 1.000601,17.623197 0,15.270433 0,12.692308 0,10.114183 1.000601,7.7614183 2.001202,5.4086538 3.704928,3.7049279 5.408654,2.0012019 7.761418,1.000601 10.114183,0 12.692308,0 q 2.578125,0 4.930889,1.000601 2.352765,1.0006009 4.05649,2.7043269 1.703726,1.7037259 2.704327,4.0564904 1.000601,2.3527647 1.000601,4.9308897 0,3.966346 -2.235577,7.193509 l 6.183895,6.183895 Q 30,26.736779 30,27.692308 Z" /> -</svg> +<?xml version="1.0" encoding="UTF-8"?> +<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Shape</title> + <desc>Created with Sketch.</desc> + <g id="Symbols" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Panel/-Print-settings-custom" transform="translate(-32.000000, -157.000000)" fill="#999999" fill-rule="nonzero"> + <g id="Print-settings"> + <g id="noun_Search_860389"> + <g transform="translate(32.000000, 157.000000)"> + <g id="Group"> + <g id="Shape"> + <path d="M10.2242373,9.21452652 L13.7917958,12.782085 C14.0693364,13.0596257 14.07024,13.5087044 13.7894722,13.7894722 C13.5106483,14.0682962 13.0545722,14.064283 12.782085,13.7917958 L9.21452652,10.2242373 C6.97377165,11.9681155 3.73256035,11.8102461 1.67294351,9.75062929 C-0.557647836,7.52003797 -0.557647836,3.90353485 1.67294351,1.67294351 C3.90353485,-0.557647836 7.52003797,-0.557647836 9.75062929,1.67294351 C11.8102461,3.73256035 11.9681155,6.97377165 10.2242373,9.21452652 Z M8.74091861,8.74091861 C10.4138621,7.06797507 10.4138621,4.35559774 8.74091861,2.68265423 C7.06797507,1.00971073 4.35559774,1.00971073 2.68265423,2.68265423 C1.00971073,4.35559774 1.00971073,7.06797507 2.68265423,8.74091861 C4.35559774,10.4138621 7.06797507,10.4138621 8.74091861,8.74091861 Z"></path> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/spool.svg b/resources/themes/cura-light/icons/spool.svg new file mode 100644 index 0000000000..0d8ae42d9d --- /dev/null +++ b/resources/themes/cura-light/icons/spool.svg @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"> + <switch> + <g> + <path d="M2.995 1H5.67v24H2.995zm21.33 0H27v24h-2.675zM8.992 3.284c-.368 0-.669.224-.669.5v18.433c0 .276.3.5.669.5.369 0 .669-.224.669-.5V3.784c0-.276-.299-.5-.669-.5m4.003 0c-.368 0-.669.224-.669.5v18.433c0 .276.3.5.669.5.371 0 .669-.224.669-.5V3.784c0-.276-.298-.5-.669-.5m4.004 0c-.371 0-.669.224-.669.5v24.451c0 .277.298.5.669.5.368 0 .669-.223.669-.5V3.784c0-.276-.301-.5-.669-.5m4.003 0c-.368 0-.669.224-.669.5v18.433c0 .276.3.5.669.5.37 0 .669-.224.669-.5V3.784c-.001-.276-.3-.5-.669-.5"/> + </g> + </switch> +</svg> diff --git a/resources/themes/cura-light/icons/star_empty.svg b/resources/themes/cura-light/icons/star_empty.svg new file mode 100644 index 0000000000..39b5791e91 --- /dev/null +++ b/resources/themes/cura-light/icons/star_empty.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="14px" height="13px" viewBox="0 0 14 13" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Star Copy 8</title> + <desc>Created with Sketch.</desc> + <g id="Toolbox-VIP-material" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Marketplace-hover-" transform="translate(-140.000000, -457.000000)" stroke="#666666"> + <path d="M150.450431,468.749111 L149.791458,464.907 L152.582915,462.186001 L148.725216,461.625444 L147,458.129776 L145.274784,461.625444 L141.417085,462.186001 L144.208542,464.907 L143.549569,468.749111 L147,466.935112 L150.450431,468.749111 Z" id="Star-Copy-8"></path> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/star_filled.svg b/resources/themes/cura-light/icons/star_filled.svg new file mode 100644 index 0000000000..d4e161f6c6 --- /dev/null +++ b/resources/themes/cura-light/icons/star_filled.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="14px" height="13px" viewBox="0 0 14 13" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Star Copy 7</title> + <desc>Created with Sketch.</desc> + <g id="Toolbox-VIP-material" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="Marketplace-hover-" transform="translate(-127.000000, -457.000000)" fill="#666666" stroke="#666666"> + <path d="M137.450431,468.749111 L136.791458,464.907 L139.582915,462.186001 L135.725216,461.625444 L134,458.129776 L132.274784,461.625444 L128.417085,462.186001 L131.208542,464.907 L130.549569,468.749111 L134,466.935112 L137.450431,468.749111 Z" id="Star-Copy-7"></path> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_busy.svg b/resources/themes/cura-light/icons/tab_status_busy.svg deleted file mode 100644 index debe4f6360..0000000000 --- a/resources/themes/cura-light/icons/tab_status_busy.svg +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> - <title>Busy</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="00-printer-status-overview" transform="translate(-17.000000, -22.000000)"></g> - <g id="Busy" fill="#D8D8D8"> - <path d="M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z M9.5,7 C9.5,7.83420277 10.1715729,8.5 11,8.5 C11.8342028,8.5 12.5,7.82842712 12.5,7 C12.5,6.16579723 11.8284271,5.5 11,5.5 C10.1657972,5.5 9.5,6.17157288 9.5,7 Z M1.5,7 C1.5,7.83420277 2.17157288,8.5 3,8.5 C3.83420277,8.5 4.5,7.82842712 4.5,7 C4.5,6.16579723 3.82842712,5.5 3,5.5 C2.16579723,5.5 1.5,6.17157288 1.5,7 Z M5.5,7 C5.5,7.83420277 6.17157288,8.5 7,8.5 C7.83420277,8.5 8.5,7.82842712 8.5,7 C8.5,6.16579723 7.82842712,5.5 7,5.5 C6.16579723,5.5 5.5,6.17157288 5.5,7 Z" id="Combined-Shape"></path> - </g> - </g> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_finished.svg b/resources/themes/cura-light/icons/tab_status_finished.svg deleted file mode 100644 index 2519f2f862..0000000000 --- a/resources/themes/cura-light/icons/tab_status_finished.svg +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> - <title>Wait cleanup</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="00-printer-status-overview" transform="translate(-84.000000, -22.000000)"></g> - <g id="Wait-cleanup" fill="#7FDB16"> - <path d="M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z M8.07520384,11.2263517 L8.07520384,10.7137766 C8.07520384,10.2581543 7.84739269,10.0018668 7.36329399,10.0018668 L6.73681332,10.0018668 C6.28119101,10.0018668 6.02490346,10.2296779 6.02490346,10.7137766 L6.02490346,11.2263517 C6.02490346,11.681974 6.25271461,11.9382616 6.73681332,11.9382616 L7.36329399,11.9382616 C7.8189163,11.9382616 8.07520384,11.7104504 8.07520384,11.2263517 Z M8.04672745,7.78070802 L8.21758581,2.74038625 C8.21758581,2.25628755 7.98977466,2 7.50567596,2 L6.59443134,2 C6.11033264,2 5.88252149,2.25628755 5.88252149,2.74038625 L6.05337986,7.78070802 C6.08185625,8.23633033 6.3381438,8.49261788 6.7937661,8.49261788 L7.3063412,8.49261788 C7.76196351,8.49261788 8.04672745,8.23633033 8.04672745,7.78070802 Z" id="Combined-Shape"></path> - </g> - </g> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_paused.svg b/resources/themes/cura-light/icons/tab_status_paused.svg deleted file mode 100644 index bab6c9ca6b..0000000000 --- a/resources/themes/cura-light/icons/tab_status_paused.svg +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> - <title>paused</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="00-printer-status-overview" transform="translate(-246.000000, -22.000000)"></g> - <g id="paused" fill="#F5A623"> - <path d="M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z M4.33333333,4.11111111 L4.33333333,9.88888889 L6.11111111,9.88888889 L6.11111111,4.11111111 L4.33333333,4.11111111 Z M7.88888889,4.11111111 L7.88888889,9.88888889 L9.66666667,9.88888889 L9.66666667,4.11111111 L7.88888889,4.11111111 Z" id="Combined-Shape"></path> - </g> - </g> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_stopped.svg b/resources/themes/cura-light/icons/tab_status_stopped.svg deleted file mode 100644 index c9b150db3a..0000000000 --- a/resources/themes/cura-light/icons/tab_status_stopped.svg +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> - <title>Aborted</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="00-printer-status-overview" transform="translate(-303.000000, -22.000000)"></g> - <g id="Aborted" fill="#D0021B"> - <path d="M7.006431,8.15087791 L8.99372277,9.86752475 L10.1369901,8.54194059 L8.1500273,6.82616116 L9.86540931,4.83910045 L8.54098909,3.69576014 L6.82576597,5.68263681 L4.8380396,3.96619802 L3.69512871,5.29053465 L5.6823619,7.00713089 L3.96564795,8.9957345 L5.29006817,10.1390748 L7.006431,8.15087791 Z M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z" id="Combined-Shape"></path> - </g> - </g> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/tab_status_unknown.svg b/resources/themes/cura-light/icons/tab_status_unknown.svg deleted file mode 100644 index 9f413baffc..0000000000 --- a/resources/themes/cura-light/icons/tab_status_unknown.svg +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> - <!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch --> - <title>Unknown</title> - <desc>Created with Sketch.</desc> - <defs></defs> - <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> - <g id="00-printer-status-overview" transform="translate(-165.000000, -22.000000)"></g> - <g id="Unknown" fill="#000000"> - <path d="M7,14 C3.13400675,14 0,10.8659932 0,7 C0,3.13400675 3.13400675,0 7,0 C10.8659932,0 14,3.13400675 14,7 C14,10.8659932 10.8659932,14 7,14 Z M6.78333984,11.3842884 C7.41672998,11.3842884 7.93020964,10.8704803 7.93020964,10.2374186 C7.93020964,9.60435702 7.41672998,9.09087736 6.78333984,9.09087736 C6.1499497,9.09087736 5.63647003,9.6040285 5.63647003,10.2374186 C5.63647003,10.8708088 6.1499497,11.3842884 6.78333984,11.3842884 Z M7.5343408,7.73605322 C8.81853274,7.61975648 9.82775188,6.53727696 9.82808041,5.22351806 C9.82808041,3.83222799 8.69632261,2.7004702 7.30503254,2.7004702 C5.91374248,2.7004702 4.78198468,3.83255652 4.78198468,5.22351806 L6.33589307,5.22351806 C6.33589307,4.68967004 6.77052748,4.25503562 7.30470402,4.25503562 C7.83920908,4.25503562 8.27351498,4.68967004 8.27351498,5.22351806 C8.27351498,5.75802312 7.83920908,6.19232901 7.30470402,6.19232901 L5.9801039,6.19232901 L5.9801039,8.54355994 L7.5343408,8.54355994 L7.5343408,7.73605322 Z" id="Combined-Shape"></path> - </g> - </g> -</svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/icons/warning.svg b/resources/themes/cura-light/icons/warning.svg index ae8a7a6430..14b7d797d0 100644 --- a/resources/themes/cura-light/icons/warning.svg +++ b/resources/themes/cura-light/icons/warning.svg @@ -1,4 +1,11 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<svg width="20px" height="17px" viewBox="0 0 20 17" version="1.1" xmlns="http://www.w3.org/2000/svg"> - <path d="M9.552 0C8.949 0 8.403 0.308 8.097 0.83L0.23 14.256C-0.076 14.78-0.077 15.415 0.23 15.937 0.573 16.522 1.146 16.769 1.751 16.767L17.354 16.767C17.959 16.769 18.531 16.522 18.875 15.937 19.182 15.415 19.181 14.78 18.875 14.256L11.008 0.83C10.702 0.308 10.156 0 9.552 0L9.552 0ZM9.552 1.397C9.636 1.397 9.762 1.471 9.8 1.536L17.667 14.962C17.704 15.027 17.704 15.16 17.667 15.224 17.665 15.227 17.437 15.37 17.354 15.37L1.751 15.37C1.668 15.37 1.44 15.227 1.438 15.224 1.4 15.16 1.4 15.027 1.438 14.962L9.305 1.536C9.343 1.471 9.469 1.397 9.552 1.397ZM9.552 5.356C8.909 5.356 8.388 5.877 8.388 6.521L8.621 10.479C8.621 10.994 9.038 11.411 9.552 11.411 10.067 11.411 10.484 10.994 10.484 10.479L10.717 6.521C10.717 5.877 10.195 5.356 9.552 5.356ZM9.552 11.877C8.781 11.877 8.155 12.502 8.155 13.274 8.155 14.046 8.781 14.671 9.552 14.671 10.324 14.671 10.95 14.046 10.95 13.274 10.95 12.502 10.324 11.877 9.552 11.877 Z" /> +<?xml version="1.0" encoding="UTF-8"?> +<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch --> + <title>Icon/warning-s</title> + <desc>Created with Sketch.</desc> + <g id="Icon/warning-s" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="icn/warning" transform="translate(0.000000, 1.000000)" fill="#000000" fill-rule="nonzero"> + <path d="M10.2840021,13.2214915 L10.2840021,11.3934951 C10.2840021,11.3037916 10.252402,11.2286553 10.1892019,11.1680863 C10.1252018,11.1067505 10.0498017,11.0760827 9.96300155,11.0760827 L8.03699845,11.0760827 C7.94979832,11.0760827 7.87439819,11.1067505 7.81079809,11.1680863 C7.74759799,11.2286553 7.71599794,11.3037916 7.71599794,11.3934951 L7.71599794,13.2209164 C7.71599794,13.3106199 7.74759799,13.3859479 7.81079809,13.4469003 C7.87479819,13.5078527 7.95019832,13.5383288 8.03699845,13.5383288 L9.96300155,13.5383288 C10.0502017,13.5383288 10.1256018,13.507661 10.1892019,13.4463252 C10.252402,13.3857562 10.2840021,13.3106199 10.2840021,13.2209164 L10.2840021,13.2214915 Z M10.264202,9.62530099 L10.4448023,5.21142857 C10.4448023,5.13475891 10.4114023,5.07380653 10.3446022,5.02857143 C10.257402,4.95803534 10.1770019,4.9227673 10.1034018,4.9227673 L7.89659823,4.9227673 C7.82299811,4.9227673 7.74259798,4.95803534 7.65539784,5.02857143 C7.58859774,5.07342318 7.55519768,5.14089248 7.55519768,5.23097934 L7.72559796,9.62530099 C7.72559796,9.68932016 7.75919801,9.74222222 7.82639812,9.78400719 C7.89319822,9.82540881 7.97319835,9.84610961 8.0663985,9.84610961 L9.92280148,9.84610961 C10.0168016,9.84610961 10.0954018,9.82540881 10.1586019,9.78400719 C10.222602,9.74183887 10.257802,9.68893681 10.264202,9.62530099 Z M10.1238018,0.644025157 L17.8290142,14.182929 C18.0634145,14.5865948 18.0568145,14.9904522 17.8092141,15.3945013 C17.695614,15.5804253 17.5400137,15.7280144 17.3424134,15.8372686 C17.1452131,15.9457562 16.9330127,16 16.7058124,16 L1.29418764,16 C1.06698727,16 0.854786932,15.9455645 0.657586615,15.8366936 C0.459986298,15.7278227 0.304386049,15.5802336 0.190785866,15.3939263 C-0.056814531,14.9902606 -0.0634145416,14.5865948 0.170985835,14.182929 L7.8761982,0.644025157 C7.98979838,0.445450734 8.14699863,0.288277928 8.34779895,0.172506739 C8.54859928,0.0575022462 8.76599962,-1.42108547e-13 9,-1.42108547e-13 C9.23400038,-1.42108547e-13 9.45140072,0.0575022462 9.65220105,0.172506739 C9.85300137,0.288277928 10.0102016,0.445450734 10.1238018,0.644025157 Z" id="Shape"></path> + </g> + </g> </svg>
\ No newline at end of file diff --git a/resources/themes/cura-light/images/avatar_default.svg b/resources/themes/cura-light/images/avatar_default.svg new file mode 100644 index 0000000000..7ec704bc8c --- /dev/null +++ b/resources/themes/cura-light/images/avatar_default.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="500" + height="500" + viewBox="0 0 132.29167 132.29167" + version="1.1" + id="svg8" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="avatar_default.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:zoom="0.98994949" + inkscape:cx="264.32988" + inkscape:cy="275.53798" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:pagecheckerboard="true" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1920" + inkscape:window-height="1137" + inkscape:window-x="2872" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-164.70834)"> + <g + id="g819" + transform="matrix(2.4332992,0,0,2.4332992,27.213046,191.79972)" + style="fill:#098cbc;fill-opacity:1"> + <path + id="path815" + d="m 16,15.7 c 3.6,0 6.4,-3.5 6.4,-7.8 C 22.4,3.6 21.5,0 16,0 10.5,0 9.6,3.5 9.6,7.8 c 0,4.4 2.8,7.9 6.4,7.9 z" + inkscape:connector-curvature="0" + style="fill:#098cbc;fill-opacity:1" /> + <path + id="path817" + d="m 28.2,27.3 c -0.1,-7.5 -1.1,-9.7 -8.6,-11 -0.9,0.9 -2.2,1.4 -3.5,1.3 -1.3,0.1 -2.6,-0.4 -3.5,-1.3 C 5,17.6 4,19.7 3.8,27 c 0,0.2 0,0.4 0,0.6 v 0.8 c 0,0 1.8,3.7 12.2,3.7 10.4,0 12.2,-3.6 12.2,-3.6 v -0.6 c 0,-0.3 -0.1,-0.4 0,-0.6 z" + inkscape:connector-curvature="0" + style="fill:#098cbc;fill-opacity:1" /> + </g> + </g> +</svg> diff --git a/resources/themes/cura-light/images/avatar_no_user.svg b/resources/themes/cura-light/images/avatar_no_user.svg new file mode 100644 index 0000000000..bef9cb52db --- /dev/null +++ b/resources/themes/cura-light/images/avatar_no_user.svg @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="500" + height="500" + viewBox="0 0 132.29167 132.29167" + version="1.1" + id="svg8" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="avatar_no_user.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="1" + inkscape:pageshadow="2" + inkscape:zoom="0.98994949" + inkscape:cx="264.32988" + inkscape:cy="275.53798" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + showgrid="false" + units="px" + inkscape:pagecheckerboard="true" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1920" + inkscape:window-height="1137" + inkscape:window-x="2872" + inkscape:window-y="-8" + inkscape:window-maximized="1" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-164.70834)"> + <g + id="g819" + transform="matrix(2.4332992,0,0,2.4332992,27.213046,191.79972)" + style="fill:#afafaf;fill-opacity:1"> + <path + id="path815" + d="m 16,15.7 c 3.6,0 6.4,-3.5 6.4,-7.8 C 22.4,3.6 21.5,0 16,0 10.5,0 9.6,3.5 9.6,7.8 c 0,4.4 2.8,7.9 6.4,7.9 z" + inkscape:connector-curvature="0" + style="fill:#afafaf;fill-opacity:1" /> + <path + id="path817" + d="m 28.2,27.3 c -0.1,-7.5 -1.1,-9.7 -8.6,-11 -0.9,0.9 -2.2,1.4 -3.5,1.3 -1.3,0.1 -2.6,-0.4 -3.5,-1.3 C 5,17.6 4,19.7 3.8,27 c 0,0.2 0,0.4 0,0.6 v 0.8 c 0,0 1.8,3.7 12.2,3.7 10.4,0 12.2,-3.6 12.2,-3.6 v -0.6 c 0,-0.3 -0.1,-0.4 0,-0.6 z" + inkscape:connector-curvature="0" + style="fill:#afafaf;fill-opacity:1" /> + </g> + </g> +</svg> diff --git a/resources/themes/cura-light/images/logo.svg b/resources/themes/cura-light/images/logo.svg index 5fa5895443..55842ef530 100644 --- a/resources/themes/cura-light/images/logo.svg +++ b/resources/themes/cura-light/images/logo.svg @@ -1,4 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" @@ -7,66 +9,164 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="82px" - height="18px" - viewBox="0 0 82 18" + width="110mm" + height="33mm" + viewBox="0 0 110 33" version="1.1" - id="svg12" - sodipodi:docname="logo.svg" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"> + id="svg8" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="logo.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.979899" + inkscape:cx="97.165681" + inkscape:cy="69.313647" + inkscape:document-units="mm" + inkscape:current-layer="g4570" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1137" + inkscape:window-x="2872" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:pagecheckerboard="true" /> <metadata - id="metadata18"> + id="metadata5"> <rdf:RDF> <cc:Work rdf:about=""> <dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> - <dc:title></dc:title> + <dc:title /> </cc:Work> </rdf:RDF> </metadata> - <defs - id="defs16" /> - <sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1156" - inkscape:window-height="480" - id="namedview14" - showgrid="false" - inkscape:zoom="3.4634146" - inkscape:cx="41" - inkscape:cy="9" - inkscape:window-x="3138" - inkscape:window-y="329" - inkscape:window-maximized="0" - inkscape:current-layer="svg12" /> - <polygon - fill="#20A6DB" - points="82 10.3797468 77.8757345 10.3797468 75.7721519 12.4764557 75.7721519 16.6075949 79.9067798 16.6075949 82 14.5108861" - id="polygon2" /> - <path - fill="black" - d="M0,9.32538529 C0,14.168804 3.22511,17.6455696 8.53908129,17.6455696 L16.6075949,17.6455696 L16.6075949,13.294146 L8.53908129,13.294146 C5.8534025,13.2832128 4.53351762,11.4792306 4.53351762,9.32538529 C4.53351762,7.17153994 5.8534025,5.40035747 8.53908129,5.37849102 L16.6075949,5.37849102 L16.6075949,1.03800064 L8.53908129,1.03800064 C3.21363275,1.02706742 0,4.47103333 0,9.32538529 Z" - id="path4" /> - <path - fill="black" - d="M33.004725,9.78605176 C33.004725,12.2613239 31.20074,13.5835846 29.0468913,13.5835846 C26.8930426,13.5835846 25.1218573,12.2613239 25.1218573,9.78605176 L25.1218573,1.03797468 L20.7594937,1.03797468 L20.7594937,9.78605176 C20.7594937,14.6837056 24.203465,17.6455696 29.0468913,17.6455696 C33.8903176,17.6455696 37.3670886,14.6731275 37.3670886,9.78605176 L37.3670886,1.03797468 L33.004725,1.03797468 L33.004725,9.78605176 L33.004725,9.78605176 Z" - id="path6" /> - <path - fill="black" - d="M62.1251127,1.03797468 C57.0530042,1.03797468 53.9746835,4.47968021 53.9746835,9.31992005 C53.9746835,14.1601599 57.0530042,17.6346436 62.1251127,17.6346436 L63.9217127,17.6346436 L63.9217127,13.297002 L62.1251127,13.297002 C59.5616713,13.2860759 58.3018603,11.4832778 58.3018603,9.3308461 C58.3018603,7.17841439 59.5616713,5.4083944 62.1251127,5.38654231 L66.2112822,5.38654231 L66.2112822,11.0680879 L66.2112822,13.297002 L66.2112822,17.6455696 L70.5822785,17.6455696 L70.5822785,17.3942705 L70.5822785,13.297002 L70.5822785,5.38654231 L70.5822785,1.80279813 L70.5822785,1.03797468 L62.1251127,1.03797468 Z" - id="path8" /> - <path - d="M 41.518987,9.13915 V 17.646 h 4.36332 V 9.13915 c 0,-2.1053391 1.273557,-3.8366328 3.86497,-3.8580068 h 3.189432 V 1.038405 h -3.189432 c -5.127454,0 -8.22829,3.3664044 -8.22829,8.100745 z" - id="path10" - inkscape:connector-curvature="0" - style="fill:#000000" /> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-264)"> + <g + id="g4570" + transform="matrix(0.1443759,0,0,0.14575971,-5.7750359,237.12191)"> + <polygon + id="polygon4506" + points="741.8,410.8 781.7,410.8 801.9,390.6 801.9,350.7 762,350.7 741.8,370.9 " + class="st0" + style="fill:#3282ff;fill-opacity:1" /> + <path + id="path4508" + d="m 40,334.7 c 0,44.3 28.1,76.1 74.4,76.1 h 70.3 V 371 H 114.4 C 91,370.9 79.5,354.4 79.5,334.7 79.5,315 91,298.8 114.4,298.6 h 70.3 V 258.9 H 114.4 C 68.1,258.9 40,290.4 40,334.7 Z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4510" + d="m 336.7,338.8 c 0,22.6 -16.5,34.7 -36.2,34.7 -19.7,0 -35.9,-12.1 -35.9,-34.7 v -79.9 h -39.9 v 79.9 c 0,44.7 31.5,71.9 75.8,71.9 44.3,0 76.1,-27.1 76.1,-71.9 v -79.9 h -39.9 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4512" + d="m 624.1,258.9 c -46.3,0 -74.4,31.5 -74.4,75.8 0,44.3 28.1,76.1 74.4,76.1 h 16.4 V 371 h -16.4 c -23.4,-0.1 -34.9,-16.6 -34.9,-36.3 0,-19.7 11.5,-35.9 34.9,-36.1 h 37.3 v 52 20.4 39.8 h 39.9 v -2.3 -37.5 -72.4 -32.8 -7 h -77.2 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4514" + d="m 416.6,333 v 77.8 H 456 V 333 c 0,-19.3 11.5,-35.1 34.9,-35.3 h 28.8 V 258.8 H 491 c -46.3,0.1 -74.4,30.9 -74.4,74.2 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <g + id="g4542"> + <path + id="path4518" + d="m 456.3,198.8 c -3.1,0 -5.3,1.8 -5.3,5.3 v 29.4 c 0,3.5 2.1,5.3 5.3,5.3 3.2,0 5.3,-1.8 5.3,-5.3 v -29.4 c -0.1,-3.5 -2.2,-5.3 -5.3,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4520" + d="m 456.3,184.4 c -2.9,0 -5.3,2.4 -5.3,5.4 0,0 0,0.1 0,0.1 0,3 2.5,5.3 5.5,5.3 3,0 5.3,-2.5 5.3,-5.5 -0.1,-3 -2.6,-5.3 -5.5,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4522" + d="m 408.8,184.6 v 0 l -9.4,-0.1 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 h 3.6 v 43 c 0,3.5 2.1,5.3 5.3,5.3 3.1,0 5.3,-1.8 5.3,-5.3 v -43.6 c -0.2,-3.4 -2,-5.1 -4.8,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4524" + d="m 521.3,204.9 c -1.1,-2.9 -3.8,-4.8 -6.8,-4.7 -0.4,0 -0.7,0.1 -1.1,0.1 -2.6,0.3 -4.8,2 -5.7,4.5 l -6.4,15.2 -6.4,-15.3 c -1.1,-2.8 -3.8,-4.6 -6.8,-4.6 -0.2,0 -0.3,0 -0.5,0 h -8.9 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 h 2.2 l -9.2,25.8 c -1,2.7 0.4,5.7 3.1,6.7 0.6,0.2 1.1,0.3 1.7,0.3 2.2,0 4.1,-1.4 4.9,-3.5 l 6.9,-19.2 7.9,18.8 c 0.5,1.7 1.8,3 3.5,3.5 0,0 0.1,0 0.1,0 0.2,0.1 0.4,0.1 0.6,0.1 0.3,0 0.5,0.1 0.8,0.1 0,0 0,0 0.1,0 0,0 0,0 0,0 v 0 0.1 c 2.1,0 4,-1.3 4.8,-3.2 l 8.1,-19.5 6.9,19.3 c 0.7,2.1 2.7,3.4 4.9,3.5 h 0.1 c 0.6,0 1.2,-0.1 1.7,-0.3 0,0 0,0 0,0 2.7,-1 4.1,-3.9 3.1,-6.6 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4526" + d="m 476.5,238.8 c 0,0 0,0 0,0 0,0 0,0 0,0 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4528" + d="m 608.9,215.4 7.8,-8.1 c 1.1,-0.8 1.6,-2.1 1.6,-3.5 -0.2,-2.6 -2.3,-4.7 -5,-4.8 -1.6,0.1 -3,0.8 -4,2 l -9.1,10.2 c -1.1,1.3 -1.7,2.9 -1.7,4.6 v 0 c 0,3.2 2.8,6.3 2.8,6.3 l 10,14.1 c 1,1.6 2.8,2.5 4.7,2.5 2.8,-0.1 5,-2.3 5,-5.1 0,-1.2 -0.4,-2.4 -1.1,-3.4 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4530" + d="m 590.9,184.6 v 0 l -9.4,-0.1 c -1.6,0 -3,1.3 -3,3 0,1.7 1.3,3 3,3 h 3.6 v 42.9 c 0,3.5 2.1,5.3 5.3,5.3 3.2,0 5.3,-1.8 5.3,-5.3 v -8 -35.5 c -0.1,-3.4 -1.9,-5.1 -4.8,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4532" + d="m 440.7,200.2 h -3.3 v -6.7 c 0,-3.5 -2.1,-5.3 -5.3,-5.3 -3.1,0 -5.3,1.8 -5.3,5.3 v 6.7 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 v 27.4 c 0,3.5 2.2,5.3 5.3,5.3 3.1,0 5.3,-1.8 5.3,-5.3 V 228 206.2 h 3.3 c 1.6,0 3,-1.3 3,-3 0,-1.7 -1.3,-3 -3,-3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4534" + d="m 573.4,227.7 v -18.6 c 0,-7.6 -7.7,-11.2 -21.5,-10.1 -2.3,0.2 -9.2,1.5 -9.2,1.5 -2.1,0.5 -4.2,1.6 -4.2,4.2 -0.1,2 1.4,3.7 3.4,3.8 0,0 0,0 0,0 0.3,0 0.6,0 0.8,0 0,0 7.4,-1.4 10,-1.6 1.3,-0.1 2.7,-0.1 4,-0.1 3.5,0.1 6.2,0.5 6.2,3.6 v 13.8 c 0,3.9 -3.5,7.6 -9.3,7.6 -3.6,0 -5.8,-1.9 -5.8,-4.3 0,-3.2 2.4,-4.5 6.8,-5.2 1.6,-0.3 2.6,-1.8 2.3,-3.4 0,0 0,0 0,0 0,-0.1 -0.1,-0.3 -0.1,-0.4 -0.8,-3.1 -4.7,-2.7 -4.7,-2.7 -8.1,0.9 -14.7,3.4 -14.7,12.1 0,6.6 5.9,10.7 11.9,10.7 5.5,0 10.3,-1.6 14.4,-6.1 0.2,3.2 1.7,6.1 6.2,6.1 2.5,0 4.8,-1.7 4.8,-4 -0.2,-1.4 -1.3,-2.5 -1.3,-6.9 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4536" + d="m 387.8,213 -0.1,0.1 v -22.7 c -0.2,-3 -2.6,-5.4 -5.5,-5.5 -3.3,-0.2 -6.1,2.3 -6.3,5.5 v 28.5 c 0,7 -4,10.2 -10.7,10.2 -6.8,0 -10.7,-3.2 -10.7,-10.2 v -28.5 c 0,-0.2 0,-0.5 0,-0.7 0,0 0,0 0,0 -0.2,-3.1 -2.8,-5.4 -5.9,-5.2 v 0 0 h -0.7 -8.7 c -1.6,0 -3,1.3 -3,3 0,1.7 1.3,3 3,3 h 3.5 c 0,0 0,0 0,0 l 0.1,27.5 c 0,14.3 8.8,20.7 22.5,20.7 5.3,0 9.9,-1 13.5,-3 0.9,1.7 2.5,2.9 5.4,2.9 2.5,0 4.8,-1.7 4.8,-4 0,-1.7 -1.1,-2.7 -1.1,-7.1 V 213 Z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4538" + d="m 645.5,199 c -12.5,0 -19.9,8.2 -19.9,20.5 0,9.2 5.4,19.1 20.3,19.1 2.9,0 12.5,-2.2 12.5,-2.2 2.5,-0.5 4.3,-1.7 3.7,-5 -0.5,-2.3 -2.3,-3.3 -5,-2.9 0,0 -8.3,1.6 -11.2,1.8 -6.1,0.5 -9.7,-4 -9.7,-9.6 0,0 -1.7,-14.4 9.6,-14.4 4.6,0 8.2,3.7 8.9,8.4 h -11.1 c -1.6,0 -3,1.3 -3,3 0,1.7 1.3,3 3,3 v 0 0 H 660 c 3.5,0 4.6,-0.9 4.6,-4.5 -0.1,-8.6 -7,-17.2 -19.1,-17.2 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + <path + id="path4540" + d="m 696.9,198.9 c -0.3,0 -0.6,0 -0.9,0 h -5.5 c -2.9,0 -4.9,1.5 -5.2,4.4 -0.3,-2.9 -2.3,-4.3 -5.2,-4.3 h -9.4 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 h 4.2 v 28.6 c 0,3.5 2.1,5.3 5.3,5.3 3.1,0 5.3,-1.8 5.3,-5.3 v -21.1 c 0,-1.6 1.3,-3 3,-3 h 7.7 c 3.5,0 5.3,-2.1 5.3,-5.3 0,-2.8 -1.9,-5.1 -4.6,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#ffffff" /> + </g> + </g> + </g> + <style + id="style4504" + type="text/css"> + .st0{fill:#333333;} + .st1{fill:#FFFFFF;} +</style> </svg> diff --git a/resources/themes/cura-light/images/logo_about.svg b/resources/themes/cura-light/images/logo_about.svg new file mode 100644 index 0000000000..34301fd6c9 --- /dev/null +++ b/resources/themes/cura-light/images/logo_about.svg @@ -0,0 +1,172 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="110mm" + height="33mm" + viewBox="0 0 110 33" + version="1.1" + id="svg8" + inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + sodipodi:docname="logo.svg"> + <defs + id="defs2" /> + <sodipodi:namedview + id="base" + pagecolor="#000000" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.979899" + inkscape:cx="97.165681" + inkscape:cy="69.313647" + inkscape:document-units="mm" + inkscape:current-layer="g4570" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="1137" + inkscape:window-x="2872" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:pagecheckerboard="true" /> + <metadata + id="metadata5"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(0,-264)"> + <g + id="g4570" + transform="matrix(0.1443759,0,0,0.14575971,-5.7750359,237.12191)"> + <polygon + id="polygon4506" + points="741.8,410.8 781.7,410.8 801.9,390.6 801.9,350.7 762,350.7 741.8,370.9 " + class="st0" + style="fill:#3282ff;fill-opacity:1" /> + <path + id="path4508" + d="m 40,334.7 c 0,44.3 28.1,76.1 74.4,76.1 h 70.3 V 371 H 114.4 C 91,370.9 79.5,354.4 79.5,334.7 79.5,315 91,298.8 114.4,298.6 h 70.3 V 258.9 H 114.4 C 68.1,258.9 40,290.4 40,334.7 Z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4510" + d="m 336.7,338.8 c 0,22.6 -16.5,34.7 -36.2,34.7 -19.7,0 -35.9,-12.1 -35.9,-34.7 v -79.9 h -39.9 v 79.9 c 0,44.7 31.5,71.9 75.8,71.9 44.3,0 76.1,-27.1 76.1,-71.9 v -79.9 h -39.9 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4512" + d="m 624.1,258.9 c -46.3,0 -74.4,31.5 -74.4,75.8 0,44.3 28.1,76.1 74.4,76.1 h 16.4 V 371 h -16.4 c -23.4,-0.1 -34.9,-16.6 -34.9,-36.3 0,-19.7 11.5,-35.9 34.9,-36.1 h 37.3 v 52 20.4 39.8 h 39.9 v -2.3 -37.5 -72.4 -32.8 -7 h -77.2 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4514" + d="m 416.6,333 v 77.8 H 456 V 333 c 0,-19.3 11.5,-35.1 34.9,-35.3 h 28.8 V 258.8 H 491 c -46.3,0.1 -74.4,30.9 -74.4,74.2 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <g + id="g4542"> + <path + id="path4518" + d="m 456.3,198.8 c -3.1,0 -5.3,1.8 -5.3,5.3 v 29.4 c 0,3.5 2.1,5.3 5.3,5.3 3.2,0 5.3,-1.8 5.3,-5.3 v -29.4 c -0.1,-3.5 -2.2,-5.3 -5.3,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4520" + d="m 456.3,184.4 c -2.9,0 -5.3,2.4 -5.3,5.4 0,0 0,0.1 0,0.1 0,3 2.5,5.3 5.5,5.3 3,0 5.3,-2.5 5.3,-5.5 -0.1,-3 -2.6,-5.3 -5.5,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4522" + d="m 408.8,184.6 v 0 l -9.4,-0.1 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 h 3.6 v 43 c 0,3.5 2.1,5.3 5.3,5.3 3.1,0 5.3,-1.8 5.3,-5.3 v -43.6 c -0.2,-3.4 -2,-5.1 -4.8,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4524" + d="m 521.3,204.9 c -1.1,-2.9 -3.8,-4.8 -6.8,-4.7 -0.4,0 -0.7,0.1 -1.1,0.1 -2.6,0.3 -4.8,2 -5.7,4.5 l -6.4,15.2 -6.4,-15.3 c -1.1,-2.8 -3.8,-4.6 -6.8,-4.6 -0.2,0 -0.3,0 -0.5,0 h -8.9 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 h 2.2 l -9.2,25.8 c -1,2.7 0.4,5.7 3.1,6.7 0.6,0.2 1.1,0.3 1.7,0.3 2.2,0 4.1,-1.4 4.9,-3.5 l 6.9,-19.2 7.9,18.8 c 0.5,1.7 1.8,3 3.5,3.5 0,0 0.1,0 0.1,0 0.2,0.1 0.4,0.1 0.6,0.1 0.3,0 0.5,0.1 0.8,0.1 0,0 0,0 0.1,0 0,0 0,0 0,0 v 0 0.1 c 2.1,0 4,-1.3 4.8,-3.2 l 8.1,-19.5 6.9,19.3 c 0.7,2.1 2.7,3.4 4.9,3.5 h 0.1 c 0.6,0 1.2,-0.1 1.7,-0.3 0,0 0,0 0,0 2.7,-1 4.1,-3.9 3.1,-6.6 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4526" + d="m 476.5,238.8 c 0,0 0,0 0,0 0,0 0,0 0,0 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4528" + d="m 608.9,215.4 7.8,-8.1 c 1.1,-0.8 1.6,-2.1 1.6,-3.5 -0.2,-2.6 -2.3,-4.7 -5,-4.8 -1.6,0.1 -3,0.8 -4,2 l -9.1,10.2 c -1.1,1.3 -1.7,2.9 -1.7,4.6 v 0 c 0,3.2 2.8,6.3 2.8,6.3 l 10,14.1 c 1,1.6 2.8,2.5 4.7,2.5 2.8,-0.1 5,-2.3 5,-5.1 0,-1.2 -0.4,-2.4 -1.1,-3.4 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4530" + d="m 590.9,184.6 v 0 l -9.4,-0.1 c -1.6,0 -3,1.3 -3,3 0,1.7 1.3,3 3,3 h 3.6 v 42.9 c 0,3.5 2.1,5.3 5.3,5.3 3.2,0 5.3,-1.8 5.3,-5.3 v -8 -35.5 c -0.1,-3.4 -1.9,-5.1 -4.8,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4532" + d="m 440.7,200.2 h -3.3 v -6.7 c 0,-3.5 -2.1,-5.3 -5.3,-5.3 -3.1,0 -5.3,1.8 -5.3,5.3 v 6.7 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 v 27.4 c 0,3.5 2.2,5.3 5.3,5.3 3.1,0 5.3,-1.8 5.3,-5.3 V 228 206.2 h 3.3 c 1.6,0 3,-1.3 3,-3 0,-1.7 -1.3,-3 -3,-3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4534" + d="m 573.4,227.7 v -18.6 c 0,-7.6 -7.7,-11.2 -21.5,-10.1 -2.3,0.2 -9.2,1.5 -9.2,1.5 -2.1,0.5 -4.2,1.6 -4.2,4.2 -0.1,2 1.4,3.7 3.4,3.8 0,0 0,0 0,0 0.3,0 0.6,0 0.8,0 0,0 7.4,-1.4 10,-1.6 1.3,-0.1 2.7,-0.1 4,-0.1 3.5,0.1 6.2,0.5 6.2,3.6 v 13.8 c 0,3.9 -3.5,7.6 -9.3,7.6 -3.6,0 -5.8,-1.9 -5.8,-4.3 0,-3.2 2.4,-4.5 6.8,-5.2 1.6,-0.3 2.6,-1.8 2.3,-3.4 0,0 0,0 0,0 0,-0.1 -0.1,-0.3 -0.1,-0.4 -0.8,-3.1 -4.7,-2.7 -4.7,-2.7 -8.1,0.9 -14.7,3.4 -14.7,12.1 0,6.6 5.9,10.7 11.9,10.7 5.5,0 10.3,-1.6 14.4,-6.1 0.2,3.2 1.7,6.1 6.2,6.1 2.5,0 4.8,-1.7 4.8,-4 -0.2,-1.4 -1.3,-2.5 -1.3,-6.9 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4536" + d="m 387.8,213 -0.1,0.1 v -22.7 c -0.2,-3 -2.6,-5.4 -5.5,-5.5 -3.3,-0.2 -6.1,2.3 -6.3,5.5 v 28.5 c 0,7 -4,10.2 -10.7,10.2 -6.8,0 -10.7,-3.2 -10.7,-10.2 v -28.5 c 0,-0.2 0,-0.5 0,-0.7 0,0 0,0 0,0 -0.2,-3.1 -2.8,-5.4 -5.9,-5.2 v 0 0 h -0.7 -8.7 c -1.6,0 -3,1.3 -3,3 0,1.7 1.3,3 3,3 h 3.5 c 0,0 0,0 0,0 l 0.1,27.5 c 0,14.3 8.8,20.7 22.5,20.7 5.3,0 9.9,-1 13.5,-3 0.9,1.7 2.5,2.9 5.4,2.9 2.5,0 4.8,-1.7 4.8,-4 0,-1.7 -1.1,-2.7 -1.1,-7.1 V 213 Z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4538" + d="m 645.5,199 c -12.5,0 -19.9,8.2 -19.9,20.5 0,9.2 5.4,19.1 20.3,19.1 2.9,0 12.5,-2.2 12.5,-2.2 2.5,-0.5 4.3,-1.7 3.7,-5 -0.5,-2.3 -2.3,-3.3 -5,-2.9 0,0 -8.3,1.6 -11.2,1.8 -6.1,0.5 -9.7,-4 -9.7,-9.6 0,0 -1.7,-14.4 9.6,-14.4 4.6,0 8.2,3.7 8.9,8.4 h -11.1 c -1.6,0 -3,1.3 -3,3 0,1.7 1.3,3 3,3 v 0 0 H 660 c 3.5,0 4.6,-0.9 4.6,-4.5 -0.1,-8.6 -7,-17.2 -19.1,-17.2 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + <path + id="path4540" + d="m 696.9,198.9 c -0.3,0 -0.6,0 -0.9,0 h -5.5 c -2.9,0 -4.9,1.5 -5.2,4.4 -0.3,-2.9 -2.3,-4.3 -5.2,-4.3 h -9.4 c -1.6,0 -3,1.3 -3,3 0,1.6 1.3,3 3,3 h 4.2 v 28.6 c 0,3.5 2.1,5.3 5.3,5.3 3.1,0 5.3,-1.8 5.3,-5.3 v -21.1 c 0,-1.6 1.3,-3 3,-3 h 7.7 c 3.5,0 5.3,-2.1 5.3,-5.3 0,-2.8 -1.9,-5.1 -4.6,-5.3 z" + class="st1" + inkscape:connector-curvature="0" + style="fill:#000000" /> + </g> + </g> + </g> + <style + id="style4504" + type="text/css"> + .st0{fill:#333333;} + .st1{fill:#000000;} +</style> +</svg> diff --git a/resources/themes/cura-light/styles.qml b/resources/themes/cura-light/styles.qml index b71ddd2d86..121f604362 100755 --- a/resources/themes/cura-light/styles.qml +++ b/resources/themes/cura-light/styles.qml @@ -1,16 +1,20 @@ -// Copyright (c) 2017 Ultimaker B.V. +// Copyright (c) 2018 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. -import QtQuick 2.1 -import QtQuick.Controls 1.1 -import QtQuick.Controls.Styles 1.1 +import QtQuick 2.10 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 import UM 1.1 as UM -QtObject { - property Component sidebar_header_button: Component { - ButtonStyle { - background: Rectangle { +QtObject +{ + property Component print_setup_header_button: Component + { + ButtonStyle + { + background: Rectangle + { color: { if(control.enabled) @@ -34,6 +38,7 @@ QtObject { } } + radius: UM.Theme.getSize("setting_control_radius").width border.width: Theme.getSize("default_lining").width border.color: { @@ -61,20 +66,21 @@ QtObject { return Theme.getColor("setting_control_disabled_border"); } } - UM.RecolorImage { + UM.RecolorImage + { id: downArrow anchors.verticalCenter: parent.verticalCenter anchors.right: parent.right anchors.rightMargin: Theme.getSize("default_margin").width width: Theme.getSize("standard_arrow").width height: Theme.getSize("standard_arrow").height - sourceSize.width: width sourceSize.height: width - color: control.enabled ? Theme.getColor("setting_category_text") : Theme.getColor("setting_category_disabled_text") + color: control.enabled ? Theme.getColor("setting_control_button") : Theme.getColor("setting_category_disabled_text") source: Theme.getIcon("arrow_bottom") } - Label { - id: sidebarComboBoxLabel + Label + { + id: printSetupComboBoxLabel color: control.enabled ? Theme.getColor("setting_control_text") : Theme.getColor("setting_control_disabled_text") text: control.text; elide: Text.ElideRight; @@ -90,178 +96,92 @@ QtObject { } } - property Component topbar_header_tab_no_overlay: Component { - ButtonStyle { - background: Rectangle { - implicitHeight: Theme.getSize("topbar_button").height - implicitWidth: Theme.getSize("topbar_button").width - color: "transparent" - anchors.fill: parent + property Component main_window_header_tab: Component + { + ButtonStyle + { + // This property will be back-propagated when the width of the label is calculated + property var buttonWidth: 0 + background: Item + { + implicitHeight: control.height + implicitWidth: buttonWidth Rectangle { - id: underline + id: buttonFace + implicitHeight: parent.height + implicitWidth: parent.width + radius: UM.Theme.getSize("action_button_radius").width - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - width: parent.width - height: Theme.getSize("sidebar_header_highlight").height - color: control.checked ? UM.Theme.getColor("sidebar_header_highlight") : UM.Theme.getColor("sidebar_header_highlight_hover") - visible: control.hovered || control.checked - } - } - - label: Rectangle { - implicitHeight: Theme.getSize("topbar_button_icon").height - implicitWidth: Theme.getSize("topbar_button").width - color: "transparent" - anchors.fill: parent - - Item - { - anchors.centerIn: parent - width: Math.round(textLabel.width + icon.width + Theme.getSize("default_margin").width / 2) - Label + color: { - id: textLabel - text: control.text - anchors.right: icon.visible ? icon.left : parent.right - anchors.rightMargin: icon.visible ? Math.round(Theme.getSize("default_margin").width / 2) : 0 - anchors.verticalCenter: parent.verticalCenter; - font: control.checked ? UM.Theme.getFont("large") : UM.Theme.getFont("large_nonbold") - color: + if (control.checked) { - if(control.hovered) - { - return UM.Theme.getColor("topbar_button_text_hovered"); - } - if(control.checked) - { - return UM.Theme.getColor("topbar_button_text_active"); - } - else + return UM.Theme.getColor("main_window_header_button_background_active") + } + else + { + if (control.hovered) { - return UM.Theme.getColor("topbar_button_text_inactive"); + return UM.Theme.getColor("main_window_header_button_background_hovered") } + return UM.Theme.getColor("main_window_header_button_background_inactive") } } - Image - { - id: icon - visible: control.iconSource != "" - anchors.right: parent.right - anchors.verticalCenter: parent.verticalCenter - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource - width: visible ? Theme.getSize("topbar_button_icon").width : 0 - height: Theme.getSize("topbar_button_icon").height - - sourceSize: Theme.getSize("topbar_button_icon") - } - } - } - } - } - - property Component topbar_header_tab: Component { - ButtonStyle { - background: Item { - implicitHeight: Theme.getSize("topbar_button").height - implicitWidth: Theme.getSize("topbar_button").width + Theme.getSize("topbar_button_icon").width - - Rectangle { - id: buttonFace; - anchors.fill: parent; - - color: "transparent" - Behavior on color { ColorAnimation { duration: 50; } } - - Rectangle { - id: underline; - - anchors.horizontalCenter: parent.horizontalCenter - anchors.bottom: parent.bottom - width: Theme.getSize("topbar_button").width + Theme.getSize("topbar_button_icon").width - height: Theme.getSize("sidebar_header_highlight").height - color: control.checked ? UM.Theme.getColor("sidebar_header_highlight") : UM.Theme.getColor("sidebar_header_highlight_hover") - visible: control.hovered || control.checked - } } } label: Item { - implicitHeight: Theme.getSize("topbar_button_icon").height - implicitWidth: Theme.getSize("topbar_button").width + Theme.getSize("topbar_button_icon").width - Item + id: contents + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + height: control.height + width: buttonLabel.width + 4 * UM.Theme.getSize("default_margin").width + + Label { + id: buttonLabel + text: control.text + anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter; - width: childrenRect.width - height: Theme.getSize("topbar_button_icon").height - Label + font: UM.Theme.getFont("medium") + color: { - id: button_label - text: control.text; - anchors.verticalCenter: parent.verticalCenter; - font: control.checked ? UM.Theme.getFont("large") : UM.Theme.getFont("large_nonbold") - color: + if (control.checked) { - if(control.hovered) - { - return UM.Theme.getColor("topbar_button_text_hovered"); - } - if(control.checked) - { - return UM.Theme.getColor("topbar_button_text_active"); - } - else + return UM.Theme.getColor("main_window_header_button_text_active") + } + else + { + if (control.hovered) { - return UM.Theme.getColor("topbar_button_text_inactive"); + return UM.Theme.getColor("main_window_header_button_text_hovered") } + return UM.Theme.getColor("main_window_header_button_text_inactive") } } - UM.RecolorImage - { - visible: control.iconSource != "" - id: icon - anchors.left: button_label.right - anchors.leftMargin: (icon.visible || overlayIcon.visible) ? Theme.getSize("default_margin").width : 0 - color: UM.Theme.getColor("text_emphasis") - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource - width: visible ? Theme.getSize("topbar_button_icon").width : 0 - height: Theme.getSize("topbar_button_icon").height - - sourceSize: Theme.getSize("topbar_button_icon") - } - UM.RecolorImage - { - id: overlayIcon - anchors.left: button_label.right - anchors.leftMargin: (icon.visible || overlayIcon.visible) ? Theme.getSize("default_margin").width : 0 - visible: control.overlayIconSource != "" && control.iconSource != "" - color: control.overlayColor - opacity: !control.enabled ? 0.2 : 1.0 - source: control.overlayIconSource - width: visible ? Theme.getSize("topbar_button_icon").width : 0 - height: Theme.getSize("topbar_button_icon").height - - sourceSize: Theme.getSize("topbar_button_icon") - } + } + Component.onCompleted: + { + buttonWidth = width } } } } - property Component tool_button: Component { - ButtonStyle { - background: Item { - implicitWidth: Theme.getSize("button").width; - implicitHeight: Theme.getSize("button").height; + property Component tool_button: Component + { + ButtonStyle + { + background: Item + { + implicitWidth: Theme.getSize("button").width + implicitHeight: Theme.getSize("button").height - UM.PointingRectangle { + UM.PointingRectangle + { id: button_tooltip anchors.left: parent.right @@ -280,23 +200,25 @@ QtObject { Behavior on width { NumberAnimation { duration: 100; } } Behavior on opacity { NumberAnimation { duration: 100; } } - Label { + Label + { id: button_tip anchors.horizontalCenter: parent.horizontalCenter - anchors.verticalCenter: parent.verticalCenter; + anchors.verticalCenter: parent.verticalCenter - text: control.text; - font: Theme.getFont("button_tooltip"); - color: Theme.getColor("tooltip_text"); + text: control.text + font: Theme.getFont("default") + color: Theme.getColor("tooltip_text") } } - Rectangle { - id: buttonFace; + Rectangle + { + id: buttonFace - anchors.fill: parent; - property bool down: control.pressed || (control.checkable && control.checked); + anchors.fill: parent + property bool down: control.pressed || (control.checkable && control.checked) color: { @@ -306,87 +228,35 @@ QtObject { } else if(control.checkable && control.checked && control.hovered) { - return Theme.getColor("button_active_hover"); + return Theme.getColor("toolbar_button_active_hover") } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("button_active"); + return Theme.getColor("toolbar_button_active") } else if(control.hovered) { - return Theme.getColor("button_hover"); - } - else - { - return Theme.getColor("button"); + return Theme.getColor("toolbar_button_hover") } + return Theme.getColor("toolbar_background") } Behavior on color { ColorAnimation { duration: 50; } } - border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? 2 * screenScaleFactor : 0 - border.color: Theme.getColor("tool_button_border") - - UM.RecolorImage { - id: tool_button_arrow - anchors.right: parent.right; - anchors.rightMargin: Theme.getSize("button").width - Math.round(Theme.getSize("button_icon").width / 4) - anchors.bottom: parent.bottom; - anchors.bottomMargin: Theme.getSize("button").height - Math.round(Theme.getSize("button_icon").height / 4) - width: Theme.getSize("standard_arrow").width - height: Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - visible: control.menu != null; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("button_text_hover"); - } - else - { - return Theme.getColor("button_text"); - } - } - source: Theme.getIcon("arrow_bottom") - } + border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? Theme.getSize("default_lining").width : 0 + border.color: Theme.getColor("lining") } } - label: Item { - UM.RecolorImage { - anchors.centerIn: parent; - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource; - width: Theme.getSize("button_icon").width; - height: Theme.getSize("button_icon").height; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("button_text_hover"); - } - else - { - return Theme.getColor("button_text"); - } - } + label: Item + { + UM.RecolorImage + { + anchors.centerIn: parent + opacity: control.enabled ? 1.0 : 0.2 + source: control.iconSource + width: Theme.getSize("button_icon").width + height: Theme.getSize("button_icon").height + color: Theme.getColor("icon") sourceSize: Theme.getSize("button_icon") } @@ -394,119 +264,19 @@ QtObject { } } - property Component small_tool_button: Component { - ButtonStyle { - background: Item { - implicitWidth: Theme.getSize("small_button").width; - implicitHeight: Theme.getSize("small_button").height; - - Rectangle { - id: smallButtonFace; - - anchors.fill: parent; - property bool down: control.pressed || (control.checkable && control.checked); - - color: - { - if(control.customColor !== undefined && control.customColor !== null) - { - return control.customColor - } - else if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("small_button_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("small_button_active"); - } - else if(control.hovered) - { - return Theme.getColor("small_button_hover"); - } - else - { - return Theme.getColor("small_button"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - - border.width: (control.hasOwnProperty("needBorder") && control.needBorder) ? 2 * screenScaleFactor : 0 - border.color: Theme.getColor("tool_button_border") - - UM.RecolorImage { - id: smallToolButtonArrow - - width: 5 - height: 5 - sourceSize.width: 5 - sourceSize.height: 5 - visible: control.menu != null; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("small_button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("small_button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("small_button_text_hover"); - } - else - { - return Theme.getColor("small_button_text"); - } - } - source: Theme.getIcon("arrow_bottom") - } - } - } - - label: Item { - UM.RecolorImage { - anchors.centerIn: parent; - opacity: !control.enabled ? 0.2 : 1.0 - source: control.iconSource; - width: Theme.getSize("small_button_icon").width; - height: Theme.getSize("small_button_icon").height; - color: - { - if(control.checkable && control.checked && control.hovered) - { - return Theme.getColor("small_button_text_active_hover"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("small_button_text_active"); - } - else if(control.hovered) - { - return Theme.getColor("small_button_text_hover"); - } - else - { - return Theme.getColor("small_button_text"); - } - } - - sourceSize: Theme.getSize("small_button_icon") - } - } - } - } - - property Component progressbar: Component{ - ProgressBarStyle { - background: Rectangle { + property Component progressbar: Component + { + ProgressBarStyle + { + background: Rectangle + { implicitWidth: Theme.getSize("message").width - (Theme.getSize("default_margin").width * 2) implicitHeight: Theme.getSize("progressbar").height color: control.hasOwnProperty("backgroundColor") ? control.backgroundColor : Theme.getColor("progressbar_background") + radius: Theme.getSize("progressbar_radius").width } - progress: Rectangle { + progress: Rectangle + { color: { if(control.indeterminate) @@ -523,14 +293,16 @@ QtObject { } } radius: Theme.getSize("progressbar_radius").width - Rectangle{ + Rectangle + { radius: Theme.getSize("progressbar_radius").width color: control.hasOwnProperty("controlColor") ? control.controlColor : Theme.getColor("progressbar_control") width: Theme.getSize("progressbar_control").width height: Theme.getSize("progressbar_control").height visible: control.indeterminate - SequentialAnimation on x { + SequentialAnimation on x + { id: xAnim property int animEndPoint: Theme.getSize("message").width - Math.round((Theme.getSize("default_margin").width * 2.5)) - Theme.getSize("progressbar_control").width running: control.indeterminate && control.visible @@ -543,194 +315,41 @@ QtObject { } } - property Component sidebar_category: Component { - ButtonStyle { - background: Rectangle { - anchors.fill: parent; - anchors.left: parent.left - anchors.leftMargin: Theme.getSize("sidebar_margin").width - anchors.right: parent.right - anchors.rightMargin: Theme.getSize("sidebar_margin").width - implicitHeight: Theme.getSize("section").height; - color: { - if(control.color) { - return control.color; - } else if(!control.enabled) { - return Theme.getColor("setting_category_disabled"); - } else if(control.hovered && control.checkable && control.checked) { - return Theme.getColor("setting_category_active_hover"); - } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("setting_category_active"); - } else if(control.hovered) { - return Theme.getColor("setting_category_hover"); - } else { - return Theme.getColor("setting_category"); - } - } - Behavior on color { ColorAnimation { duration: 50; } } - Rectangle { - height: Theme.getSize("default_lining").height - width: parent.width - anchors.bottom: parent.bottom - color: { - if(!control.enabled) { - return Theme.getColor("setting_category_disabled_border"); - } else if((control.hovered || control.activeFocus) && control.checkable && control.checked) { - return Theme.getColor("setting_category_active_hover_border"); - } else if(control.pressed || (control.checkable && control.checked)) { - return Theme.getColor("setting_category_active_border"); - } else if(control.hovered || control.activeFocus) { - return Theme.getColor("setting_category_hover_border"); - } else { - return Theme.getColor("setting_category_border"); - } - } - } - } - label: Item { - anchors.fill: parent; - anchors.left: parent.left - Item{ - id: icon; - anchors.left: parent.left - height: parent.height - width: Theme.getSize("section_icon_column").width - UM.RecolorImage { - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: Theme.getSize("sidebar_margin").width - color: - { - if(!control.enabled) - { - return Theme.getColor("setting_category_disabled_text"); - } - else if((control.hovered || control.activeFocus) && control.checkable && control.checked) - { - return Theme.getColor("setting_category_active_hover_text"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("setting_category_active_text"); - } - else if(control.hovered || control.activeFocus) - { - return Theme.getColor("setting_category_hover_text"); - } - else - { - return Theme.getColor("setting_category_text"); - } - } - source: control.iconSource; - width: Theme.getSize("section_icon").width; - height: Theme.getSize("section_icon").height; - sourceSize.width: width + 15 * screenScaleFactor - sourceSize.height: width + 15 * screenScaleFactor - } - } - - Label { - anchors { - left: icon.right; - leftMargin: Theme.getSize("default_margin").width; - right: parent.right; - verticalCenter: parent.verticalCenter; - } - text: control.text; - font: Theme.getFont("setting_category"); - color: - { - if(!control.enabled) - { - return Theme.getColor("setting_category_disabled_text"); - } - else if((control.hovered || control.activeFocus) && control.checkable && control.checked) - { - return Theme.getColor("setting_category_active_hover_text"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("setting_category_active_text"); - } - else if(control.hovered || control.activeFocus) - { - return Theme.getColor("setting_category_hover_text"); - } - else - { - return Theme.getColor("setting_category_text"); - } - } - fontSizeMode: Text.HorizontalFit; - minimumPointSize: 8 - } - UM.RecolorImage { - id: category_arrow - anchors.verticalCenter: parent.verticalCenter - anchors.right: parent.right - anchors.rightMargin: Theme.getSize("default_margin").width * 3 - Math.round(width / 2) - width: Theme.getSize("standard_arrow").width - height: Theme.getSize("standard_arrow").height - sourceSize.width: width - sourceSize.height: width - color: - { - if(!control.enabled) - { - return Theme.getColor("setting_category_disabled_text"); - } - else if((control.hovered || control.activeFocus) && control.checkable && control.checked) - { - return Theme.getColor("setting_category_active_hover_text"); - } - else if(control.pressed || (control.checkable && control.checked)) - { - return Theme.getColor("setting_category_active_text"); - } - else if(control.hovered || control.activeFocus) - { - return Theme.getColor("setting_category_hover_text"); - } - else - { - return Theme.getColor("setting_category_text"); - } - } - source: control.checked ? Theme.getIcon("arrow_bottom") : Theme.getIcon("arrow_left") - } - } - } - } - - property Component scrollview: Component { - ScrollViewStyle { + property Component scrollview: Component + { + ScrollViewStyle + { decrementControl: Item { } incrementControl: Item { } transientScrollBars: false - scrollBarBackground: Rectangle { + scrollBarBackground: Rectangle + { implicitWidth: Theme.getSize("scrollbar").width radius: Math.round(implicitWidth / 2) - color: Theme.getColor("scrollbar_background"); + color: Theme.getColor("scrollbar_background") } - handle: Rectangle { + handle: Rectangle + { id: scrollViewHandle - implicitWidth: Theme.getSize("scrollbar").width; + implicitWidth: Theme.getSize("scrollbar").width radius: Math.round(implicitWidth / 2) - color: styleData.pressed ? Theme.getColor("scrollbar_handle_down") : styleData.hovered ? Theme.getColor("scrollbar_handle_hover") : Theme.getColor("scrollbar_handle"); + color: styleData.pressed ? Theme.getColor("scrollbar_handle_down") : styleData.hovered ? Theme.getColor("scrollbar_handle_hover") : Theme.getColor("scrollbar_handle") Behavior on color { ColorAnimation { duration: 50; } } } } } - property Component combobox: Component { - ComboBoxStyle { + property Component combobox: Component + { + ComboBoxStyle + { - background: Rectangle { + background: Rectangle + { implicitHeight: Theme.getSize("setting_control").height; implicitWidth: Theme.getSize("setting_control").width; @@ -739,30 +358,33 @@ QtObject { border.width: Theme.getSize("default_lining").width; border.color: control.hovered ? Theme.getColor("setting_control_border_highlight") : Theme.getColor("setting_control_border"); + radius: UM.Theme.getSize("setting_control_radius").width } - label: Item { - - Label { - anchors.left: parent.left; + label: Item + { + Label + { + anchors.left: parent.left anchors.leftMargin: Theme.getSize("default_lining").width - anchors.right: downArrow.left; - anchors.rightMargin: Theme.getSize("default_lining").width; - anchors.verticalCenter: parent.verticalCenter; + anchors.right: downArrow.left + anchors.rightMargin: Theme.getSize("default_lining").width + anchors.verticalCenter: parent.verticalCenter - text: control.currentText; + text: control.currentText font: Theme.getFont("default"); - color: !enabled ? Theme.getColor("setting_control_disabled_text") : Theme.getColor("setting_control_text"); + color: !enabled ? Theme.getColor("setting_control_disabled_text") : Theme.getColor("setting_control_text") - elide: Text.ElideRight; - verticalAlignment: Text.AlignVCenter; + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter } - UM.RecolorImage { + UM.RecolorImage + { id: downArrow - anchors.right: parent.right; - anchors.rightMargin: Theme.getSize("default_lining").width * 2; - anchors.verticalCenter: parent.verticalCenter; + anchors.right: parent.right + anchors.rightMargin: Theme.getSize("default_lining").width * 2 + anchors.verticalCenter: parent.verticalCenter source: Theme.getIcon("arrow_bottom") width: Theme.getSize("standard_arrow").width @@ -770,26 +392,31 @@ QtObject { sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: Theme.getColor("setting_control_text"); + color: Theme.getColor("setting_control_button"); } } } } // Combobox with items with colored rectangles - property Component combobox_color: Component { + property Component combobox_color: Component + { - ComboBoxStyle { + ComboBoxStyle + { - background: Rectangle { + background: Rectangle + { color: !enabled ? UM.Theme.getColor("setting_control_disabled") : control._hovered ? UM.Theme.getColor("setting_control_highlight") : UM.Theme.getColor("setting_control") border.width: UM.Theme.getSize("default_lining").width border.color: !enabled ? UM.Theme.getColor("setting_control_disabled_border") : control._hovered ? UM.Theme.getColor("setting_control_border_highlight") : UM.Theme.getColor("setting_control_border") + radius: UM.Theme.getSize("setting_control_radius").width } - label: Item { - - Label { + label: Item + { + Label + { anchors.left: parent.left anchors.leftMargin: UM.Theme.getSize("default_lining").width anchors.right: swatch.left @@ -804,20 +431,23 @@ QtObject { verticalAlignment: Text.AlignVCenter } - Rectangle { + UM.RecolorImage + { id: swatch - height: Math.round(UM.Theme.getSize("setting_control").height / 2) + height: Math.round(control.height / 2) width: height anchors.right: downArrow.left anchors.verticalCenter: parent.verticalCenter - anchors.margins: Math.round(UM.Theme.getSize("default_margin").width / 4) - radius: Math.round(width / 2) - border.width: UM.Theme.getSize("default_lining").width - border.color: UM.Theme.getColor("lining") + anchors.rightMargin: UM.Theme.getSize("default_margin").width + + sourceSize.width: width + sourceSize.height: height + source: UM.Theme.getIcon("extruder_button") color: (control.color_override !== "") ? control.color_override : control.color } - UM.RecolorImage { + UM.RecolorImage + { id: downArrow anchors.right: parent.right anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 @@ -829,33 +459,36 @@ QtObject { sourceSize.width: width + 5 * screenScaleFactor sourceSize.height: width + 5 * screenScaleFactor - color: UM.Theme.getColor("setting_control_text") + color: UM.Theme.getColor("setting_control_button") } } } } - property Component checkbox: Component { - CheckBoxStyle { + property Component checkbox: Component + { + CheckBoxStyle + { background: Item { } - indicator: Rectangle { - implicitWidth: Theme.getSize("checkbox").width; - implicitHeight: Theme.getSize("checkbox").height; + indicator: Rectangle + { + implicitWidth: Theme.getSize("checkbox").width + implicitHeight: Theme.getSize("checkbox").height - color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_hover") : Theme.getColor("checkbox"); + color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_hover") : (control.enabled ? Theme.getColor("checkbox") : Theme.getColor("checkbox_disabled")) Behavior on color { ColorAnimation { duration: 50; } } - radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : 0 + radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : Theme.getSize("checkbox_radius").width - border.width: Theme.getSize("default_lining").width; - border.color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_border_hover") : Theme.getColor("checkbox_border"); + border.width: Theme.getSize("default_lining").width + border.color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_border_hover") : Theme.getColor("checkbox_border") - UM.RecolorImage { + UM.RecolorImage + { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: Math.round(parent.width / 2.5) height: Math.round(parent.height / 2.5) - sourceSize.width: width sourceSize.height: width color: Theme.getColor("checkbox_mark") source: control.exclusiveGroup ? Theme.getIcon("dot") : Theme.getIcon("check") @@ -863,98 +496,74 @@ QtObject { Behavior on opacity { NumberAnimation { duration: 100; } } } } - label: Label { + label: Label + { text: control.text color: Theme.getColor("checkbox_text") font: Theme.getFont("default") elide: Text.ElideRight + renderType: Text.NativeRendering } } } - property Component partially_checkbox: Component { - CheckBoxStyle { + property Component partially_checkbox: Component + { + CheckBoxStyle + { background: Item { } - indicator: Rectangle { - implicitWidth: Theme.getSize("checkbox").width; - implicitHeight: Theme.getSize("checkbox").height; + indicator: Rectangle + { + implicitWidth: Theme.getSize("checkbox").width + implicitHeight: Theme.getSize("checkbox").height color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_hover") : Theme.getColor("checkbox"); Behavior on color { ColorAnimation { duration: 50; } } - radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : 0 + radius: control.exclusiveGroup ? Math.round(Theme.getSize("checkbox").width / 2) : UM.Theme.getSize("checkbox_radius").width border.width: Theme.getSize("default_lining").width; border.color: (control.hovered || control._hovered) ? Theme.getColor("checkbox_border_hover") : Theme.getColor("checkbox_border"); - UM.RecolorImage { + UM.RecolorImage + { anchors.verticalCenter: parent.verticalCenter anchors.horizontalCenter: parent.horizontalCenter width: Math.round(parent.width / 2.5) height: Math.round(parent.height / 2.5) - sourceSize.width: width sourceSize.height: width color: Theme.getColor("checkbox_mark") - source: { - if (control.checkbox_state == 2){ - return Theme.getIcon("solid") + source: + { + if (control.checkbox_state == 2) + { + return Theme.getIcon("solid"); } - else{ - return control.exclusiveGroup ? Theme.getIcon("dot") : Theme.getIcon("check") + else + { + return control.exclusiveGroup ? Theme.getIcon("dot") : Theme.getIcon("check"); } } opacity: control.checked Behavior on opacity { NumberAnimation { duration: 100; } } } } - label: Label { - text: control.text; - color: Theme.getColor("checkbox_text"); - font: Theme.getFont("default"); - } - } - } - - property Component slider: Component { - SliderStyle { - groove: Rectangle { - implicitWidth: control.width; - implicitHeight: Theme.getSize("slider_groove").height; - - color: Theme.getColor("slider_groove"); - border.width: Theme.getSize("default_lining").width; - border.color: Theme.getColor("slider_groove_border"); - - radius: Math.round(width / 2); - - Rectangle { - anchors { - left: parent.left; - top: parent.top; - bottom: parent.bottom; - } - color: Theme.getColor("slider_groove_fill"); - width: Math.round((control.value / (control.maximumValue - control.minimumValue)) * parent.width); - radius: Math.round(width / 2); - } - } - handle: Rectangle { - width: Theme.getSize("slider_handle").width; - height: Theme.getSize("slider_handle").height; - color: control.hovered ? Theme.getColor("slider_handle_hover") : Theme.getColor("slider_handle"); - border.width: Theme.getSize("default_lining").width - border.color: control.hovered ? Theme.getColor("slider_handle_hover_border") : Theme.getColor("slider_handle_border") - radius: Math.round(Theme.getSize("slider_handle").width / 2); //Round. - Behavior on color { ColorAnimation { duration: 50; } } + label: Label + { + text: control.text + color: Theme.getColor("checkbox_text") + font: Theme.getFont("default") } } } - property Component text_field: Component { - TextFieldStyle { - textColor: Theme.getColor("setting_control_text"); + property Component text_field: Component + { + TextFieldStyle + { + textColor: Theme.getColor("setting_control_text") placeholderTextColor: Theme.getColor("setting_control_text") - font: Theme.getFont("default"); + font: Theme.getFont("default") background: Rectangle { @@ -963,10 +572,12 @@ QtObject { border.width: Theme.getSize("default_lining").width; border.color: control.hovered ? Theme.getColor("setting_control_border_highlight") : Theme.getColor("setting_control_border"); + radius: UM.Theme.getSize("setting_control_radius").width color: Theme.getColor("setting_validation_ok"); - Label { + Label + { anchors.right: parent.right; anchors.rightMargin: Theme.getSize("setting_unit_margin").width; anchors.verticalCenter: parent.verticalCenter; @@ -974,12 +585,14 @@ QtObject { text: control.unit ? control.unit : "" color: Theme.getColor("setting_unit"); font: Theme.getFont("default"); + renderType: Text.NativeRendering } } } } - property Component sidebar_action_button: Component { + property Component print_setup_action_button: Component + { ButtonStyle { background: Rectangle @@ -988,28 +601,44 @@ QtObject { border.color: { if(!control.enabled) + { return UM.Theme.getColor("action_button_disabled_border"); + } else if(control.pressed) + { return UM.Theme.getColor("action_button_active_border"); + } else if(control.hovered) + { return UM.Theme.getColor("action_button_hovered_border"); + } else + { return UM.Theme.getColor("action_button_border"); + } } color: { if(!control.enabled) + { return UM.Theme.getColor("action_button_disabled"); + } else if(control.pressed) + { return UM.Theme.getColor("action_button_active"); + } else if(control.hovered) + { return UM.Theme.getColor("action_button_hovered"); + } else + { return UM.Theme.getColor("action_button"); + } } - Behavior on color { ColorAnimation { duration: 50; } } + Behavior on color { ColorAnimation { duration: 50 } } - implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("sidebar_margin").width * 2) + implicitWidth: actualLabel.contentWidth + (UM.Theme.getSize("thick_margin").width * 2) Label { @@ -1018,15 +647,23 @@ QtObject { color: { if(!control.enabled) + { return UM.Theme.getColor("action_button_disabled_text"); + } else if(control.pressed) + { return UM.Theme.getColor("action_button_active_text"); + } else if(control.hovered) + { return UM.Theme.getColor("action_button_hovered_text"); + } else + { return UM.Theme.getColor("action_button_text"); + } } - font: UM.Theme.getFont("action_button") + font: UM.Theme.getFont("medium") text: control.text } } @@ -1034,7 +671,8 @@ QtObject { } } - property Component toolbox_action_button: Component { + property Component toolbox_action_button: Component + { ButtonStyle { background: Rectangle @@ -1045,17 +683,17 @@ QtObject { { if (control.installed) { - return UM.Theme.getColor("action_button_disabled") + return UM.Theme.getColor("action_button_disabled"); } else { if (control.hovered) { - return UM.Theme.getColor("primary_hover") + return UM.Theme.getColor("primary_hover"); } else { - return UM.Theme.getColor("primary") + return UM.Theme.getColor("primary"); } } @@ -1068,17 +706,17 @@ QtObject { { if (control.installed) { - return UM.Theme.getColor("action_button_disabled_text") + return UM.Theme.getColor("action_button_disabled_text"); } else { if (control.hovered) { - return UM.Theme.getColor("button_text_hover") + return UM.Theme.getColor("button_text_hover"); } else { - return UM.Theme.getColor("button_text") + return UM.Theme.getColor("button_text"); } } } @@ -1088,4 +726,153 @@ QtObject { } } } + + property Component monitor_button_style: Component + { + ButtonStyle + { + background: Rectangle + { + border.width: UM.Theme.getSize("default_lining").width + border.color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_border"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active_border"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_border"); + } + return UM.Theme.getColor("action_button_border"); + } + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered"); + } + return UM.Theme.getColor("action_button"); + } + Behavior on color + { + ColorAnimation + { + duration: 50 + } + } + } + + label: Item + { + UM.RecolorImage + { + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + width: Math.floor(control.width / 2) + height: Math.floor(control.height / 2) + sourceSize.height: width + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_text"); + } + else if(control.pressed) + { + return UM.Theme.getColor("action_button_active_text"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_text"); + } + return UM.Theme.getColor("action_button_text"); + } + source: control.iconSource + } + } + } + } + + property Component monitor_checkable_button_style: Component + { + ButtonStyle { + background: Rectangle { + border.width: control.checked ? UM.Theme.getSize("default_lining").width * 2 : UM.Theme.getSize("default_lining").width + border.color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_border"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active_border"); + } + else if(control.hovered) + { + return UM.Theme.getColor("action_button_hovered_border"); + } + return UM.Theme.getColor("action_button_border"); + } + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active"); + } + else if (control.hovered) + { + return UM.Theme.getColor("action_button_hovered"); + } + return UM.Theme.getColor("action_button"); + } + Behavior on color { ColorAnimation { duration: 50; } } + Label { + anchors.left: parent.left + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + anchors.leftMargin: UM.Theme.getSize("default_lining").width * 2 + anchors.rightMargin: UM.Theme.getSize("default_lining").width * 2 + color: + { + if(!control.enabled) + { + return UM.Theme.getColor("action_button_disabled_text"); + } + else if (control.checked || control.pressed) + { + return UM.Theme.getColor("action_button_active_text"); + } + else if (control.hovered) + { + return UM.Theme.getColor("action_button_hovered_text"); + } + return UM.Theme.getColor("action_button_text"); + } + font: UM.Theme.getFont("default") + text: control.text + horizontalAlignment: Text.AlignHCenter + elide: Text.ElideMiddle + } + } + label: Item { } + } + } } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 25c9a678c1..4938bd1aae 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -6,16 +6,46 @@ "fonts": { "large": { "size": 1.35, - "weight": 63, + "weight": 40, + "family": "Noto Sans" + }, + "large_ja_JP": { + "size": 1.35, + "weight": 50, + "family": "Noto Sans" + }, + "large_zh_CN": { + "size": 1.35, + "weight": 50, "family": "Noto Sans" }, - "large_nonbold": { + "large_zh_TW": { "size": 1.35, "weight": 50, "family": "Noto Sans" }, + "large_bold": { + "size": 1.35, + "weight": 63, + "family": "Noto Sans" + }, "medium": { "size": 1.16, + "weight": 40, + "family": "Noto Sans" + }, + "medium_ja_JP": { + "size": 1.16, + "weight": 50, + "family": "Noto Sans" + }, + "medium_zh_CN": { + "size": 1.16, + "weight": 50, + "family": "Noto Sans" + }, + "medium_zh_TW": { + "size": 1.16, "weight": 50, "family": "Noto Sans" }, @@ -25,43 +55,86 @@ "family": "Noto Sans" }, "default": { + "size": 0.95, + "weight": 40, + "family": "Noto Sans" + }, + "default_ja_JP": { + "size": 1.0, + "weight": 50, + "family": "Noto Sans" + }, + "default_zh_CN": { + "size": 1.0, + "weight": 50, + "family": "Noto Sans" + }, + "default_zh_TW": { "size": 1.0, "weight": 50, "family": "Noto Sans" }, "default_bold": { + "size": 0.95, + "weight": 63, + "family": "Noto Sans" + }, + "default_bold_ja_JP": { + "size": 1.0, + "weight": 63, + "family": "Noto Sans" + }, + "default_bold_zh_CN": { + "size": 1.0, + "weight": 63, + "family": "Noto Sans" + }, + "default_bold_zh_TW": { "size": 1.0, "weight": 63, "family": "Noto Sans" }, "default_italic": { - "size": 1.15, - "weight": 50, + "size": 0.95, + "weight": 40, "italic": true, "family": "Noto Sans" }, - "small": { + "default_italic_ja_JP": { "size": 1.0, - "weight": 63, + "weight": 50, + "italic": true, "family": "Noto Sans" }, - "very_small": { + "default_italic_zh_CN": { "size": 1.0, "weight": 50, + "italic": true, "family": "Noto Sans" }, - "button_tooltip": { + "default_italic_zh_TW": { "size": 1.0, "weight": 50, + "italic": true, "family": "Noto Sans" }, - "setting_category": { - "size": 1.15, - "weight": 63, + "small": { + "size": 0.7, + "weight": 40, + "family": "Noto Sans" + }, + "small_ja_JP": { + "size": 0.7, + "weight": 50, + "family": "Noto Sans" + }, + "small_zh_CN": { + "size": 0.7, + "weight": 50, "family": "Noto Sans" }, - "action_button": { - "size": 1.15, + "small_zh_TW": { + "size": 0.7, "weight": 50, "family": "Noto Sans" } @@ -69,46 +142,73 @@ "colors": { - "sidebar": [255, 255, 255, 255], + "main_background": [255, 255, 255, 255], + "wide_lining": [245, 245, 245, 255], + "thick_lining": [127, 127, 127, 255], "lining": [192, 193, 194, 255], "viewport_overlay": [0, 0, 0, 192], - "primary": [12, 169, 227, 255], + "primary": [50, 130, 255, 255], + "primary_shadow": [64, 47, 205, 255], "primary_hover": [48, 182, 231, 255], "primary_text": [255, 255, 255, 255], "border": [127, 127, 127, 255], - "secondary": [245, 245, 245, 255], + "secondary": [240, 240, 240, 255], + "secondary_shadow": [216, 216, 216, 255], - "topbar_background_color": [255, 255, 255, 0], - "topbar_background_color_monitoring": [255, 255, 255, 255], + "icon": [8, 7, 63, 255], - "topbar_button_text_active": [0, 0, 0, 255], - "topbar_button_text_inactive": [128, 128, 128, 255], - "topbar_button_text_hovered": [0, 0, 0, 255], + "primary_button": [38, 113, 231, 255], + "primary_button_shadow": [27, 95, 202, 255], + "primary_button_hover": [81, 145, 247, 255], + "primary_button_text": [255, 255, 255, 255], - "text": [0, 0, 0, 255], + "secondary_button": [240, 240, 240, 255], + "secondary_button_shadow": [216, 216, 216, 255], + "secondary_button_hover": [228, 228, 228, 255], + "secondary_button_text": [30, 102, 215, 255], + + "main_window_header_background": [8, 7, 63, 255], + "main_window_header_background_gradient": [25, 23, 91, 255], + "main_window_header_button_text_active": [8, 7, 63, 255], + "main_window_header_button_text_inactive": [255, 255, 255, 255], + "main_window_header_button_text_hovered": [255, 255, 255, 255], + "main_window_header_button_background_active": [255, 255, 255, 255], + "main_window_header_button_background_inactive": [255, 255, 255, 0], + "main_window_header_button_background_hovered": [117, 114, 159, 255], + + "account_widget_outline_active": [70, 66, 126, 255], + + "machine_selector_bar": [31, 36, 39, 255], + "machine_selector_active": [68, 72, 75, 255], + "machine_selector_hover": [68, 72, 75, 255], + "machine_selector_text_active": [255, 255, 255, 255], + "machine_selector_printer_icon": [8, 7, 63, 255], + + "action_panel_secondary": [27, 95, 202, 255], + + "toolbar_background": [255, 255, 255, 255], + + "printer_type_label_background": [228, 228, 242, 255], + + "text": [25, 25, 25, 255], "text_detail": [174, 174, 174, 128], - "text_link": [12, 169, 227, 255], + "text_link": [50, 130, 255, 255], "text_inactive": [174, 174, 174, 255], - "text_hover": [70, 84, 113, 255], - "text_pressed": [12, 169, 227, 255], + "text_pressed": [50, 130, 255, 255], "text_subtext": [0, 0, 0, 255], "text_medium": [128, 128, 128, 255], "text_emphasis": [255, 255, 255, 255], - "text_scene": [31, 36, 39, 255], - "text_scene_hover": [70, 84, 113, 255], + "text_scene": [102, 102, 102, 255], + "text_scene_hover": [123, 123, 113, 255], "error": [255, 140, 0, 255], - "sidebar_header_bar": [31, 36, 39, 255], - "sidebar_header_active": [68, 72, 75, 255], - "sidebar_header_hover": [68, 72, 75, 255], - "sidebar_header_highlight": [68, 192, 255, 255], - "sidebar_header_highlight_hover": [68, 192, 255, 255], - "sidebar_header_text_inactive": [255, 255, 255, 255], - "sidebar_header_text_active": [255, 255, 255, 255], - "sidebar_header_text_hover": [255, 255, 255, 255], - "sidebar_lining": [245, 245, 245, 255], - "sidebar_lining_thin": [127, 127, 127, 255], + "warning": [245, 166, 35, 255], + "disabled": [229, 229, 229, 255], + + "toolbar_button_hover": [232, 242, 252, 255], + "toolbar_button_active": [232, 242, 252, 255], + "toolbar_button_active_hover": [232, 242, 252, 255], "button": [31, 36, 39, 255], "button_hover": [68, 72, 75, 255], @@ -118,15 +218,13 @@ "button_text_hover": [255, 255, 255, 255], "button_text_active": [255, 255, 255, 255], "button_text_active_hover": [255, 255, 255, 255], - "button_disabled": [31, 36, 39, 255], - "button_disabled_text": [255, 255, 255, 101], - - "small_button": [31, 36, 39, 0], - "small_button_hover": [68, 72, 75, 255], - "small_button_active": [68, 72, 75, 255], - "small_button_active_hover": [68, 72, 75, 255], - "small_button_text": [31, 36, 39, 197], - "small_button_text_hover": [255, 255, 255, 255], + + "small_button": [0, 0, 0, 0], + "small_button_hover": [102, 102, 102, 255], + "small_button_active": [10, 8, 80, 255], + "small_button_active_hover": [10, 8, 80, 255], + "small_button_text": [102, 102, 102, 255], + "small_button_text_hover": [8, 7, 63, 255], "small_button_text_active": [255, 255, 255, 255], "small_button_text_active_hover": [255, 255, 255, 255], @@ -136,60 +234,55 @@ "extruder_button_material_border": [255, 255, 255, 255], + "rating_star": [90, 90, 90, 255], + "sync_button_text": [120, 120, 120, 255], "sync_button_text_hovered": [0, 0, 0, 255], "action_button": [255, 255, 255, 255], "action_button_text": [0, 0, 0, 255], "action_button_border": [127, 127, 127, 255], - "action_button_hovered": [255, 255, 255, 255], + "action_button_hovered": [232, 242, 252, 255], "action_button_hovered_text": [31, 36, 39, 255], - "action_button_hovered_border": [12, 169, 227, 255], + "action_button_hovered_border": [50, 130, 255, 255], "action_button_active": [255, 255, 255, 255], "action_button_active_text": [0, 0, 0, 255], - "action_button_active_border": [12, 169, 227, 255], + "action_button_active_border": [50, 130, 255, 255], "action_button_disabled": [245, 245, 245, 255], "action_button_disabled_text": [127, 127, 127, 255], "action_button_disabled_border": [245, 245, 245, 255], - - "print_button_ready": [12, 169, 227, 255], - "print_button_ready_border": [12, 169, 227, 255], - "print_button_ready_text": [255, 255, 255, 255], - "print_button_ready_hovered": [30, 186, 245, 243], - "print_button_ready_hovered_border": [30, 186, 245, 243], - "print_button_ready_pressed": [30, 186, 245, 243], - "print_button_ready_pressed_border": [30, 186, 245, 243], + "action_button_shadow": [223, 223, 223, 255], + "action_button_disabled_shadow": [228, 228, 228, 255], "scrollbar_background": [255, 255, 255, 255], - "scrollbar_handle": [31, 36, 39, 255], - "scrollbar_handle_hover": [12, 159, 227, 255], - "scrollbar_handle_down": [12, 159, 227, 255], + "scrollbar_handle": [10, 8, 80, 255], + "scrollbar_handle_hover": [50, 130, 255, 255], + "scrollbar_handle_down": [50, 130, 255, 255], - "setting_category": [245, 245, 245, 255], + "setting_category": [240, 240, 240, 255], "setting_category_disabled": [255, 255, 255, 255], - "setting_category_hover": [245, 245, 245, 255], - "setting_category_active": [245, 245, 245, 255], - "setting_category_active_hover": [245, 245, 245, 255], - "setting_category_text": [31, 36, 39, 255], + "setting_category_hover": [232, 242, 252, 255], + "setting_category_active": [240, 240, 240, 255], + "setting_category_active_hover": [232, 242, 252, 255], + "setting_category_text": [35, 35, 35, 255], "setting_category_disabled_text": [24, 41, 77, 101], - "setting_category_hover_text": [31, 36, 39, 255], - "setting_category_active_text": [31, 36, 39, 255], - "setting_category_active_hover_text": [31, 36, 39, 255], - "setting_category_border": [245, 245, 245, 255], - "setting_category_disabled_border": [245, 245, 245, 255], - "setting_category_hover_border": [12, 159, 227, 255], - "setting_category_active_border": [245, 245, 245, 255], - "setting_category_active_hover_border": [12, 159, 227, 255], + "setting_category_hover_text": [35, 35, 35, 255], + "setting_category_active_text": [35, 35, 35, 255], + "setting_category_active_hover_text": [35, 35, 35, 255], + "setting_category_border": [240, 240, 240, 255], + "setting_category_disabled_border": [240, 240, 240, 255], + "setting_category_hover_border": [50, 130, 255, 255], + "setting_category_active_border": [50, 130, 255, 255], + "setting_category_active_hover_border": [50, 130, 255, 255], "setting_control": [255, 255, 255, 255], "setting_control_selected": [31, 36, 39, 255], "setting_control_highlight": [255, 255, 255, 255], - "setting_control_border": [127, 127, 127, 255], - "setting_control_border_highlight": [12, 169, 227, 255], - "setting_control_text": [27, 27, 27, 255], - "setting_control_depth_line": [127, 127, 127, 255], - "setting_control_button": [127, 127, 127, 255], - "setting_control_button_hover": [70, 84, 113, 255], + "setting_control_border": [199, 199, 199, 255], + "setting_control_border_highlight": [50, 130, 255, 255], + "setting_control_text": [35, 35, 35, 255], + "setting_control_button": [102, 102, 102, 255], + "setting_control_button_hover": [8, 7, 63, 255], "setting_control_disabled": [245, 245, 245, 255], "setting_control_disabled_text": [127, 127, 127, 255], "setting_control_disabled_border": [127, 127, 127, 255], @@ -199,66 +292,53 @@ "setting_validation_warning_background": [255, 145, 62, 255], "setting_validation_warning": [127, 127, 127, 255], "setting_validation_ok": [255, 255, 255, 255], + "setting_filter_field" : [153, 153, 153, 255], "material_compatibility_warning": [0, 0, 0, 255], "progressbar_background": [245, 245, 245, 255], - "progressbar_control": [31, 36, 39, 255], - - "slider_groove": [245, 245, 245, 255], - "slider_groove_border": [127, 127, 127, 255], - "slider_groove_fill": [127, 127, 127, 255], - "slider_handle": [0, 0, 0, 255], - "slider_handle_hover": [77, 182, 226, 255], - "slider_handle_active": [68, 192, 255, 255], - "slider_handle_border": [39, 44, 48, 255], + "progressbar_control": [50, 130, 255, 255], + + "slider_groove": [223, 223, 223, 255], + "slider_groove_fill": [8, 7, 63, 255], + "slider_handle": [8, 7, 63, 255], + "slider_handle_active": [50, 130, 255, 255], "slider_text_background": [255, 255, 255, 255], "quality_slider_unavailable": [179, 179, 179, 255], "quality_slider_available": [0, 0, 0, 255], - "quality_slider_handle": [0, 0, 0, 255], - "quality_slider_handle_hover": [127, 127, 127, 255], - "quality_slider_text": [0, 0, 0, 255], "checkbox": [255, 255, 255, 255], "checkbox_hover": [255, 255, 255, 255], - "checkbox_border": [64, 69, 72, 255], - "checkbox_border_hover": [12, 169, 227, 255], - "checkbox_mark": [119, 122, 124, 255], - "checkbox_text": [27, 27, 27, 255], - - "mode_switch": [255, 255, 255, 255], - "mode_switch_hover": [255, 255, 255, 255], - "mode_switch_border": [127, 127, 127, 255], - "mode_switch_border_hover": [12, 169, 227, 255], - "mode_switch_handle": [31, 36, 39, 255], - "mode_switch_text": [31, 36, 39, 255], - "mode_switch_text_hover": [31, 36, 39, 255], - "mode_switch_text_checked": [12, 169, 227, 255], - - "tooltip": [68, 192, 255, 255], - "tooltip_text": [255, 255, 255, 255], + "checkbox_border": [199, 199, 199, 255], + "checkbox_border_hover": [50, 130, 255, 255], + "checkbox_mark": [50, 130, 255, 255], + "checkbox_disabled": [223, 223, 223, 255], + "checkbox_text": [35, 35, 35, 255], - "tool_button_border": [255, 255, 255, 0], + "tooltip": [25, 25, 25, 255], + "tooltip_text": [255, 255, 255, 255], "message_background": [255, 255, 255, 255], "message_shadow": [0, 0, 0, 120], - "message_border": [127, 127, 127, 255], + "message_border": [192, 193, 194, 255], "message_text": [0, 0, 0, 255], - "message_button": [12, 169, 227, 255], - "message_button_hover": [12, 169, 227, 255], - "message_button_active": [12, 169, 227, 255], + "message_close": [102, 102, 102, 255], + "message_close_hover": [8, 7, 63, 255], + "message_button": [38, 113, 231, 255], + "message_button_hover": [81, 145, 247, 255], + "message_button_active": [38, 113, 231, 255], "message_button_text": [255, 255, 255, 255], "message_button_text_hover": [255, 255, 255, 255], "message_button_text_active": [255, 255, 255, 255], - "message_progressbar_background": [200, 200, 200, 255], - "message_progressbar_control": [77, 182, 226, 255], + "message_progressbar_background": [245, 245, 245, 255], + "message_progressbar_control": [50, 130, 255, 255], "tool_panel_background": [255, 255, 255, 255], "status_offline": [0, 0, 0, 255], "status_ready": [0, 205, 0, 255], - "status_busy": [12, 169, 227, 255], + "status_busy": [50, 130, 255, 255], "status_paused": [255, 140, 0, 255], "status_stopped": [236, 82, 80, 255], "status_unknown": [127, 127, 127, 255], @@ -269,8 +349,8 @@ "z_axis": [0, 255, 0, 255], "all_axis": [255, 255, 255, 255], - "viewport_background": [245, 245, 245, 255], - "volume_outline": [12, 169, 227, 255], + "viewport_background": [250, 250, 250, 255], + "volume_outline": [50, 130, 255, 255], "buildplate": [244, 244, 244, 255], "buildplate_grid": [129, 131, 134, 255], "buildplate_grid_minor": [230, 230, 231, 255], @@ -283,40 +363,37 @@ "model_overhang": [255, 0, 0, 255], "model_unslicable": [122, 122, 122, 255], "model_unslicable_alt": [172, 172, 127, 255], - "model_selection_outline": [12, 169, 227, 255], + "model_selection_outline": [50, 130, 255, 255], "model_non_printing": [122, 122, 122, 255], "xray": [26, 26, 62, 255], "xray_error": [255, 0, 0, 255], "layerview_ghost": [32, 32, 32, 96], - "layerview_none": [255, 255, 255, 255], - "layerview_inset_0": [255, 0, 0, 255], - "layerview_inset_x": [0, 255, 0, 255], - "layerview_skin": [255, 255, 0, 255], - "layerview_support": [0, 255, 255, 255], - "layerview_skirt": [0, 255, 255, 255], - "layerview_infill": [255, 192, 0, 255], - "layerview_support_infill": [0, 255, 255, 255], - "layerview_move_combing": [0, 0, 255, 255], - "layerview_move_retraction": [128, 128, 255, 255], + "layerview_none": [255, 255, 255, 255], + "layerview_inset_0": [255, 0, 0, 255], + "layerview_inset_x": [0, 255, 0, 255], + "layerview_skin": [255, 255, 0, 255], + "layerview_support": [0, 255, 255, 255], + "layerview_skirt": [0, 255, 255, 255], + "layerview_infill": [255, 192, 0, 255], + "layerview_support_infill": [0, 255, 255, 255], + "layerview_move_combing": [0, 0, 255, 255], + "layerview_move_retraction": [128, 128, 255, 255], "layerview_support_interface": [64, 192, 255, 255], + "layerview_prime_tower": [0, 255, 255, 255], "layerview_nozzle": [181, 166, 66, 50], - "configuration_item": [255, 255, 255, 0], - "configuration_item_active": [12, 169, 227, 32], - "configuration_item_text": [0, 0, 0, 255], - "configuration_item_text_active": [0, 0, 0, 255], - "configuration_item_border": [127, 127, 127, 255], - "configuration_item_border_active": [12, 169, 227, 32], - "configuration_item_border_hover": [12, 169, 227, 255], - - "tab_status_connected": [12, 169, 227, 255], + "tab_status_connected": [50, 130, 255, 255], "tab_status_disconnected": [200, 200, 200, 255], - "printer_config_matched": [12, 169, 227, 255], + "printer_config_matched": [50, 130, 255, 255], "printer_config_mismatch": [127, 127, 127, 255], + "toolbox_header_button_text_active": [0, 0, 0, 255], + "toolbox_header_button_text_inactive": [0, 0, 0, 255], + "toolbox_header_button_text_hovered": [0, 0, 0, 255], + "favorites_header_bar": [245, 245, 245, 255], "favorites_header_hover": [245, 245, 245, 255], "favorites_header_text": [31, 36, 39, 255], @@ -334,12 +411,12 @@ "monitor_pill_background": [245, 245, 245, 255], "monitor_placeholder_image": [230, 230, 230, 255], "monitor_printer_icon_inactive": [154, 154, 154, 255], - "monitor_printer_icon": [12, 169, 227, 255], + "monitor_printer_icon": [50, 130, 255, 255], "monitor_progress_background_text": [0,0,0,255], "monitor_progress_background": [245, 245, 245, 255], "monitor_progress_fill_inactive": [154, 154, 154, 255], "monitor_progress_fill_text": [255,255,255,255], - "monitor_progress_fill": [12, 169, 227, 255], + "monitor_progress_fill": [50, 130, 255, 255], "monitor_shadow": [0, 0, 0, 63], "monitor_skeleton_fill": [245, 245, 245, 255], "monitor_skeleton_fill_dark": [216, 216, 216, 255], @@ -347,42 +424,67 @@ }, "sizes": { - "window_minimum_size": [70, 50], + "window_minimum_size": [100, 60], + + "main_window_header": [0.0, 4.0], + "main_window_header_button": [8, 2.35], + "main_window_header_button_icon": [1.2, 1.2], + + "stage_menu": [0.0, 4.0], + + "account_button": [12, 3], + + "print_setup_widget": [38.0, 30.0], + "print_setup_mode_toggle": [0.0, 2.0], + "print_setup_item": [0.0, 2.0], + "print_setup_extruder_box": [0.0, 6.0], + "print_setup_slider_groove": [0.16, 0.16], + "print_setup_slider_handle": [1.0, 1.0], + "print_setup_slider_tickmarks": [0.32, 0.32], + "print_setup_big_item": [28, 2.5], + "print_setup_icon": [1.2, 1.2], + + "expandable_component_content_header": [0.0, 3.0], + + "configuration_selector": [35.0, 4.0], + "configuration_selector_mode_tabs": [0.0, 3.0], + + "action_panel_widget": [26.0, 0.0], + "action_panel_information_widget": [20.0, 0.0], + + "machine_selector_widget": [20.0, 4.0], + "machine_selector_widget_content": [25.0, 32.0], + "machine_selector_icon": [2.66, 2.66], + "views_selector": [23.0, 4.0], + + "printer_type_label": [3.5, 1.5], + + "default_radius": [0.25, 0.25], + + "wide_lining": [0.5, 0.5], + "thick_lining": [0.2, 0.2], "default_lining": [0.08, 0.08], + "default_arrow": [0.8, 0.8], - "logo": [7.6, 1.6], + "logo": [8, 2.4], - "default_margin": [1.0, 1.0], "wide_margin": [2.0, 2.0], + "thick_margin": [1.71, 1.43], + "default_margin": [1.0, 1.0], + "thin_margin": [0.71, 0.71], "narrow_margin": [0.5, 0.5], - "window_margin": [1.0, 1.0], - - "extruder_button_material_margin": [0.70, 0.9], - "extruder_button_material": [0.75, 0.75], - - "sidebar": [35.0, 10.0], - "sidebar_margin": [1.71, 1.43], - "sidebar_margin_thin": [0.71, 0.71], - "sidebar_header": [0.0, 4.0], - "sidebar_header_highlight": [0.25, 0.25], - "sidebar_header_mode_toggle": [0.0, 2.0], - "sidebar_header_mode_tabs": [0.0, 3.0], - "sidebar_lining": [0.5, 0.5], - "sidebar_lining_thin": [0.2, 0.2], - "sidebar_setup": [0.0, 2.0], - "sidebar_tabs": [0.0, 3.5], - "sidebar_inputfields": [0.0, 2.0], - "sidebar_extruder_box": [0.0, 6.0], - "simple_mode_infill_caption": [0.0, 5.0], - "simple_mode_infill_height": [0.0, 8.0], - - "section": [0.0, 2.2], + + "extruder_icon": [2.33, 2.33], + + "section": [0.0, 2], "section_icon": [1.6, 1.6], "section_icon_column": [2.8, 0.0], + "rating_star": [1.0, 1.0], "setting": [25.0, 1.8], - "setting_control": [10.0, 2.0], + "setting_control": [11.0, 2.0], + "setting_control_radius": [0.15, 0.15], "setting_control_depth_margin": [1.4, 0.0], "setting_preferences_button_margin": [4, 0.0], "setting_control_margin": [0.0, 0.0], @@ -390,13 +492,16 @@ "setting_text_maxwidth": [40.0, 0.0], "standard_list_lineheight": [1.5, 1.5], - "standard_list_input": [20.0, 25.0], - "standard_arrow": [0.8, 0.8], + "standard_arrow": [1.0, 1.0], "button": [4, 4], "button_icon": [2.5, 2.5], "button_lining": [0, 0], + "action_button": [15.0, 3.0], + "action_button_icon": [1.0, 1.0], + "action_button_radius": [0.15, 0.15], + "small_button": [2, 2], "small_button_icon": [1.5, 1.5], @@ -404,42 +509,32 @@ "favorites_button": [2, 2], "favorites_button_icon": [1.2, 1.2], - "printer_status_icon": [1.8, 1.8], + "printer_status_icon": [1.0, 1.0], "printer_sync_icon": [1.2, 1.2], - "topbar_logo_right_margin": [3, 0], - "topbar_button": [8, 4], - "topbar_button_icon": [1.2, 1.2], - "button_tooltip": [1.0, 1.3], "button_tooltip_arrow": [0.25, 0.25], "tool_button_border": [1.0, 0], - "progressbar": [26.0, 0.4], - "progressbar_radius": [0, 0], - "progressbar_control": [8.0, 0.4], + "progressbar": [26.0, 0.75], + "progressbar_radius": [0.15, 0.15], + "progressbar_control": [8.0, 0.75], "scrollbar": [0.75, 0.5], - "quality_slider_bar": [1, 0.2], - - "slider_groove": [0.3, 0.3], - "slider_handle": [1.0, 1.0], - "slider_layerview_size": [1.0, 22.0], - "slider_layerview_background": [4.0, 0.0], - "slider_layerview_margin": [1.0, 1.5], + "slider_groove": [0.5, 0.5], + "slider_groove_radius": [0.15, 0.15], + "slider_handle": [1.5, 1.5], + "slider_layerview_size": [1.0, 26.0], - "layerview_menu_size": [15, 20], - "layerview_menu_size_material_color_mode": [15, 16], - "layerview_menu_size_collapsed": [15, 6], - "layerview_menu_size_compatibility": [22, 22.0], - "layerview_menu_size_compatibility_collapsed": [15, 3.5], + "layerview_menu_size": [16.0, 4.0], "layerview_legend_size": [1.0, 1.0], "layerview_row": [11.0, 1.5], "layerview_row_spacing": [0.0, 0.5], - "checkbox": [2.0, 2.0], + "checkbox": [1.5, 1.5], + "checkbox_radius": [0.08, 0.08], "tooltip": [20.0, 10.0], "tooltip_margins": [1.0, 1.0], @@ -463,6 +558,8 @@ "message_shadow": [0, 0], "message_margin": [0, 1.0], "message_inner_margin": [1.5, 1.5], + "message_radius": [0.25, 0.25], + "message_button_radius": [0.15, 0.15], "infill_button_margin": [0.5, 0.5], @@ -483,16 +580,19 @@ "toolbox_detail_header": [1.0, 14.0], "toolbox_detail_tile": [1.0, 8.0], "toolbox_back_column": [6.0, 1.0], - "toolbox_back_button": [4.0, 2.0], + "toolbox_back_button": [6.0, 2.0], "toolbox_installed_tile": [1.0, 8.0], "toolbox_property_label": [1.0, 2.0], - "toolbox_heading_label": [1.0, 4.0], + "toolbox_heading_label": [1.0, 3.8], "toolbox_header": [1.0, 4.0], + "toolbox_header_highlight": [0.25, 0.25], "toolbox_progress_bar": [8.0, 0.5], "toolbox_chart_row": [1.0, 2.0], "toolbox_action_button": [8.0, 2.5], "toolbox_loader": [2.0, 2.0], + "avatar_image": [6.8, 6.8], + "monitor_config_override_box": [1.0, 14.0], "monitor_extruder_circle": [2.75, 2.75], "monitor_text_line": [1.16, 1.16], diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index b3aae8a393..24203fa0d3 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 5cea5823c4..6b980110b7 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index b4009cf9ed..62669929dc 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -5,7 +5,7 @@ definition = cartesio [metadata] author = Cartesio -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_hyb35.inst.cfg b/resources/variants/fabtotum_hyb35.inst.cfg index d3f0077792..bf00512c8f 100644 --- a/resources/variants/fabtotum_hyb35.inst.cfg +++ b/resources/variants/fabtotum_hyb35.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_lite04.inst.cfg b/resources/variants/fabtotum_lite04.inst.cfg index 226c136564..cb4f7e4d34 100644 --- a/resources/variants/fabtotum_lite04.inst.cfg +++ b/resources/variants/fabtotum_lite04.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_lite06.inst.cfg b/resources/variants/fabtotum_lite06.inst.cfg index 62e3014b60..9f0e3fe145 100644 --- a/resources/variants/fabtotum_lite06.inst.cfg +++ b/resources/variants/fabtotum_lite06.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro02.inst.cfg b/resources/variants/fabtotum_pro02.inst.cfg index 3e4661ee2c..b80f80155b 100644 --- a/resources/variants/fabtotum_pro02.inst.cfg +++ b/resources/variants/fabtotum_pro02.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro04.inst.cfg b/resources/variants/fabtotum_pro04.inst.cfg index 3fe140f8be..7a0afdccb2 100644 --- a/resources/variants/fabtotum_pro04.inst.cfg +++ b/resources/variants/fabtotum_pro04.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro06.inst.cfg b/resources/variants/fabtotum_pro06.inst.cfg index fcb5c71ef0..6330b2e77c 100644 --- a/resources/variants/fabtotum_pro06.inst.cfg +++ b/resources/variants/fabtotum_pro06.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/fabtotum_pro08.inst.cfg b/resources/variants/fabtotum_pro08.inst.cfg index bef04734eb..412bbf7410 100644 --- a/resources/variants/fabtotum_pro08.inst.cfg +++ b/resources/variants/fabtotum_pro08.inst.cfg @@ -5,7 +5,7 @@ definition = fabtotum [metadata] author = FABtotum -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/felixtec4_0.25.inst.cfg b/resources/variants/felixtec4_0.25.inst.cfg index 7d8bca94b0..7a158bcc80 100644 --- a/resources/variants/felixtec4_0.25.inst.cfg +++ b/resources/variants/felixtec4_0.25.inst.cfg @@ -6,7 +6,7 @@ definition = felixtec4dual [metadata] author = kerog777 type = variant -setting_version = 5 +setting_version = 7 hardware_type = nozzle [values] diff --git a/resources/variants/felixtec4_0.35.inst.cfg b/resources/variants/felixtec4_0.35.inst.cfg index f061aa1cbc..35850afa7a 100644 --- a/resources/variants/felixtec4_0.35.inst.cfg +++ b/resources/variants/felixtec4_0.35.inst.cfg @@ -6,7 +6,7 @@ definition = felixtec4dual [metadata] author = kerog777 type = variant -setting_version = 5 +setting_version = 7 hardware_type = nozzle [values] diff --git a/resources/variants/felixtec4_0.50.inst.cfg b/resources/variants/felixtec4_0.50.inst.cfg index 3c68c42dae..d4ee356132 100644 --- a/resources/variants/felixtec4_0.50.inst.cfg +++ b/resources/variants/felixtec4_0.50.inst.cfg @@ -7,7 +7,7 @@ definition = felixtec4dual author = kerog777 type = variant hardware_type = nozzle -setting_version = 5 +setting_version = 7 [values] machine_nozzle_size = 0.5 diff --git a/resources/variants/felixtec4_0.70.inst.cfg b/resources/variants/felixtec4_0.70.inst.cfg index 3a52644714..b5dfc3758c 100644 --- a/resources/variants/felixtec4_0.70.inst.cfg +++ b/resources/variants/felixtec4_0.70.inst.cfg @@ -7,7 +7,7 @@ definition = felixtec4dual author = kerog777 type = variant hardware_type = nozzle -setting_version = 5 +setting_version = 7 [values] machine_nozzle_size = 0.70 diff --git a/resources/variants/gmax15plus_025_e3d.inst.cfg b/resources/variants/gmax15plus_025_e3d.inst.cfg index 8a6b37067d..42d692d5df 100644 --- a/resources/variants/gmax15plus_025_e3d.inst.cfg +++ b/resources/variants/gmax15plus_025_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_04_e3d.inst.cfg b/resources/variants/gmax15plus_04_e3d.inst.cfg index a2f779f426..fca1fd837d 100644 --- a/resources/variants/gmax15plus_04_e3d.inst.cfg +++ b/resources/variants/gmax15plus_04_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.4 +machine_nozzle_size = 0.4
\ No newline at end of file diff --git a/resources/variants/gmax15plus_05_e3d.inst.cfg b/resources/variants/gmax15plus_05_e3d.inst.cfg index 68ee111aa1..9c514dea8f 100644 --- a/resources/variants/gmax15plus_05_e3d.inst.cfg +++ b/resources/variants/gmax15plus_05_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.5 +machine_nozzle_size = 0.5
\ No newline at end of file diff --git a/resources/variants/gmax15plus_05_jhead.inst.cfg b/resources/variants/gmax15plus_05_jhead.inst.cfg index 6d0b084969..29dded70e2 100644 --- a/resources/variants/gmax15plus_05_jhead.inst.cfg +++ b/resources/variants/gmax15plus_05_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_06_e3d.inst.cfg b/resources/variants/gmax15plus_06_e3d.inst.cfg index 987e882a09..18569ff55a 100644 --- a/resources/variants/gmax15plus_06_e3d.inst.cfg +++ b/resources/variants/gmax15plus_06_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.6 +machine_nozzle_size = 0.6
\ No newline at end of file diff --git a/resources/variants/gmax15plus_08_e3d.inst.cfg b/resources/variants/gmax15plus_08_e3d.inst.cfg index bf59b47da0..5ec1ce6916 100644 --- a/resources/variants/gmax15plus_08_e3d.inst.cfg +++ b/resources/variants/gmax15plus_08_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.8 +machine_nozzle_size = 0.8
\ No newline at end of file diff --git a/resources/variants/gmax15plus_10_jhead.inst.cfg b/resources/variants/gmax15plus_10_jhead.inst.cfg index 47355f344c..81c8ce2fcc 100644 --- a/resources/variants/gmax15plus_10_jhead.inst.cfg +++ b/resources/variants/gmax15plus_10_jhead.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.5 +machine_nozzle_size = 0.5
\ No newline at end of file diff --git a/resources/variants/gmax15plus_12_e3d.inst.cfg b/resources/variants/gmax15plus_12_e3d.inst.cfg new file mode 100644 index 0000000000..3381f53cd0 --- /dev/null +++ b/resources/variants/gmax15plus_12_e3d.inst.cfg @@ -0,0 +1,13 @@ +[general] +name = 1.2mm E3D Volcano +version = 4 +definition = gmax15plus + +[metadata] +author = gcreate +setting_version = 7 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 1.2
\ No newline at end of file diff --git a/resources/variants/gmax15plus_dual_025_e3d.inst.cfg b/resources/variants/gmax15plus_dual_025_e3d.inst.cfg index 750a5381b3..a3d22f8629 100644 --- a/resources/variants/gmax15plus_dual_025_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_025_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_04_e3d.inst.cfg b/resources/variants/gmax15plus_dual_04_e3d.inst.cfg index 4b5a71c53b..4338432b10 100644 --- a/resources/variants/gmax15plus_dual_04_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_04_e3d.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.4 +machine_nozzle_size = 0.4
\ No newline at end of file diff --git a/resources/variants/gmax15plus_dual_05_e3d.inst.cfg b/resources/variants/gmax15plus_dual_05_e3d.inst.cfg index 05d9a88d54..1c1151324c 100644 --- a/resources/variants/gmax15plus_dual_05_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_05_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_05_jhead.inst.cfg b/resources/variants/gmax15plus_dual_05_jhead.inst.cfg index 54a237e848..ce2e9546be 100644 --- a/resources/variants/gmax15plus_dual_05_jhead.inst.cfg +++ b/resources/variants/gmax15plus_dual_05_jhead.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_06_e3d.inst.cfg b/resources/variants/gmax15plus_dual_06_e3d.inst.cfg index 39c41be968..ec2f378ff5 100644 --- a/resources/variants/gmax15plus_dual_06_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_06_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_08_e3d.inst.cfg b/resources/variants/gmax15plus_dual_08_e3d.inst.cfg index 1f2d7b9790..06f9969302 100644 --- a/resources/variants/gmax15plus_dual_08_e3d.inst.cfg +++ b/resources/variants/gmax15plus_dual_08_e3d.inst.cfg @@ -5,7 +5,7 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/gmax15plus_dual_10_jhead.inst.cfg b/resources/variants/gmax15plus_dual_10_jhead.inst.cfg index cf615bb874..6fefc37862 100644 --- a/resources/variants/gmax15plus_dual_10_jhead.inst.cfg +++ b/resources/variants/gmax15plus_dual_10_jhead.inst.cfg @@ -5,9 +5,9 @@ definition = gmax15plus_dual [metadata] author = gcreate -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle [values] -machine_nozzle_size = 0.5 +machine_nozzle_size = 1.0 diff --git a/resources/variants/imade3d_jellybox_0.4.inst.cfg b/resources/variants/imade3d_jellybox_0.4.inst.cfg index 2bd0f578cf..18481a8342 100644 --- a/resources/variants/imade3d_jellybox_0.4.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4.inst.cfg @@ -5,7 +5,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg index 6a93cdf13d..2f4d35676e 100644 --- a/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg +++ b/resources/variants/imade3d_jellybox_0.4_2-fans.inst.cfg @@ -5,7 +5,7 @@ definition = imade3d_jellybox [metadata] author = IMADE3D -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.2.inst.cfg b/resources/variants/tizyx_k25_0.2.inst.cfg index cd9f1bcbd1..589d50f93c 100644 --- a/resources/variants/tizyx_k25_0.2.inst.cfg +++ b/resources/variants/tizyx_k25_0.2.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.3.inst.cfg b/resources/variants/tizyx_k25_0.3.inst.cfg index 8b34d23bf6..41612baa4d 100644 --- a/resources/variants/tizyx_k25_0.3.inst.cfg +++ b/resources/variants/tizyx_k25_0.3.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.4.inst.cfg b/resources/variants/tizyx_k25_0.4.inst.cfg index c147eb0ad0..b3fca877b3 100644 --- a/resources/variants/tizyx_k25_0.4.inst.cfg +++ b/resources/variants/tizyx_k25_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.5.inst.cfg b/resources/variants/tizyx_k25_0.5.inst.cfg index 14102fb2c7..e0dd4f1054 100644 --- a/resources/variants/tizyx_k25_0.5.inst.cfg +++ b/resources/variants/tizyx_k25_0.5.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.6.inst.cfg b/resources/variants/tizyx_k25_0.6.inst.cfg index 00f69f71f4..d2aebe4695 100644 --- a/resources/variants/tizyx_k25_0.6.inst.cfg +++ b/resources/variants/tizyx_k25_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_0.8.inst.cfg b/resources/variants/tizyx_k25_0.8.inst.cfg index c80f5e70d2..5a425988ee 100644 --- a/resources/variants/tizyx_k25_0.8.inst.cfg +++ b/resources/variants/tizyx_k25_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/tizyx_k25_1.0.inst.cfg b/resources/variants/tizyx_k25_1.0.inst.cfg index ce8593b1e8..01c8944960 100644 --- a/resources/variants/tizyx_k25_1.0.inst.cfg +++ b/resources/variants/tizyx_k25_1.0.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = tizyx_k25 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.25.inst.cfg b/resources/variants/ultimaker2_0.25.inst.cfg index a58b4d9a56..87bb0a237d 100644 --- a/resources/variants/ultimaker2_0.25.inst.cfg +++ b/resources/variants/ultimaker2_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.4.inst.cfg b/resources/variants/ultimaker2_0.4.inst.cfg index 46845d974e..b50cc32eca 100644 --- a/resources/variants/ultimaker2_0.4.inst.cfg +++ b/resources/variants/ultimaker2_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.6.inst.cfg b/resources/variants/ultimaker2_0.6.inst.cfg index f9ab1f1358..fac65ed284 100644 --- a/resources/variants/ultimaker2_0.6.inst.cfg +++ b/resources/variants/ultimaker2_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_0.8.inst.cfg b/resources/variants/ultimaker2_0.8.inst.cfg index 3d9c273783..9177e8e6ee 100644 --- a/resources/variants/ultimaker2_0.8.inst.cfg +++ b/resources/variants/ultimaker2_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.25.inst.cfg b/resources/variants/ultimaker2_extended_0.25.inst.cfg index f5471fc505..eceb659e21 100644 --- a/resources/variants/ultimaker2_extended_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.4.inst.cfg b/resources/variants/ultimaker2_extended_0.4.inst.cfg index a7d03f2408..e3dad7fd56 100644 --- a/resources/variants/ultimaker2_extended_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.6.inst.cfg b/resources/variants/ultimaker2_extended_0.6.inst.cfg index 25c180e07e..82a5c08362 100644 --- a/resources/variants/ultimaker2_extended_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_0.8.inst.cfg b/resources/variants/ultimaker2_extended_0.8.inst.cfg index c33f483da3..4f9d1d8889 100644 --- a/resources/variants/ultimaker2_extended_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg index c65940251c..034d094e86 100644 --- a/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg index 7493f2af44..976e129393 100644 --- a/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg index c4a3ab6340..b7cbe8fa62 100644 --- a/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg index e77ec2a5c2..437e107e89 100644 --- a/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_extended_plus_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_extended_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.25.inst.cfg b/resources/variants/ultimaker2_plus_0.25.inst.cfg index 7fd7f3980f..0880159d03 100644 --- a/resources/variants/ultimaker2_plus_0.25.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.4.inst.cfg b/resources/variants/ultimaker2_plus_0.4.inst.cfg index 3b54e0cdef..4543c148bb 100644 --- a/resources/variants/ultimaker2_plus_0.4.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.4.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.6.inst.cfg b/resources/variants/ultimaker2_plus_0.6.inst.cfg index d8fea055e5..57ff6714a7 100644 --- a/resources/variants/ultimaker2_plus_0.6.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.6.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker2_plus_0.8.inst.cfg b/resources/variants/ultimaker2_plus_0.8.inst.cfg index 3ae902ac2f..0fd1b50c5f 100644 --- a/resources/variants/ultimaker2_plus_0.8.inst.cfg +++ b/resources/variants/ultimaker2_plus_0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker2_plus [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa0.25.inst.cfg b/resources/variants/ultimaker3_aa0.25.inst.cfg index b46fdf5dfb..1dadf10e91 100644 --- a/resources/variants/ultimaker3_aa0.25.inst.cfg +++ b/resources/variants/ultimaker3_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa0.8.inst.cfg b/resources/variants/ultimaker3_aa0.8.inst.cfg index 56740233dd..c224c49c43 100644 --- a/resources/variants/ultimaker3_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_aa04.inst.cfg b/resources/variants/ultimaker3_aa04.inst.cfg index ce91e89d26..b5a250184f 100644 --- a/resources/variants/ultimaker3_aa04.inst.cfg +++ b/resources/variants/ultimaker3_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_bb0.8.inst.cfg b/resources/variants/ultimaker3_bb0.8.inst.cfg index ace0bf3a94..df5b654e2e 100644 --- a/resources/variants/ultimaker3_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_bb04.inst.cfg b/resources/variants/ultimaker3_bb04.inst.cfg index d571cabc9b..70e2a5faa8 100644 --- a/resources/variants/ultimaker3_bb04.inst.cfg +++ b/resources/variants/ultimaker3_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa0.25.inst.cfg b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg index 714b017653..5a9292ad1f 100644 --- a/resources/variants/ultimaker3_extended_aa0.25.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg index f72c96b551..03b5b0753d 100644 --- a/resources/variants/ultimaker3_extended_aa0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_aa04.inst.cfg b/resources/variants/ultimaker3_extended_aa04.inst.cfg index f354784fc6..8303eca4e6 100644 --- a/resources/variants/ultimaker3_extended_aa04.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg index fe760c93b8..13bb67d108 100644 --- a/resources/variants/ultimaker3_extended_bb0.8.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker3_extended_bb04.inst.cfg b/resources/variants/ultimaker3_extended_bb04.inst.cfg index 742dc9896e..36191bd054 100644 --- a/resources/variants/ultimaker3_extended_bb04.inst.cfg +++ b/resources/variants/ultimaker3_extended_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker3_extended [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa0.25.inst.cfg b/resources/variants/ultimaker_s5_aa0.25.inst.cfg index 643513faad..e2ed3defe9 100644 --- a/resources/variants/ultimaker_s5_aa0.25.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.25.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa0.8.inst.cfg b/resources/variants/ultimaker_s5_aa0.8.inst.cfg index eca8c400d0..84b3802fef 100644 --- a/resources/variants/ultimaker_s5_aa0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_aa0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aa04.inst.cfg b/resources/variants/ultimaker_s5_aa04.inst.cfg index b5b694d0c1..88dbc25d91 100644 --- a/resources/variants/ultimaker_s5_aa04.inst.cfg +++ b/resources/variants/ultimaker_s5_aa04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_aluminum.inst.cfg b/resources/variants/ultimaker_s5_aluminum.inst.cfg index 1018b7e5ab..65b0a6da68 100644 --- a/resources/variants/ultimaker_s5_aluminum.inst.cfg +++ b/resources/variants/ultimaker_s5_aluminum.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = buildplate diff --git a/resources/variants/ultimaker_s5_bb0.8.inst.cfg b/resources/variants/ultimaker_s5_bb0.8.inst.cfg index c1c5c1a10b..d05ce74f61 100644 --- a/resources/variants/ultimaker_s5_bb0.8.inst.cfg +++ b/resources/variants/ultimaker_s5_bb0.8.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_bb04.inst.cfg b/resources/variants/ultimaker_s5_bb04.inst.cfg index b5ff8d51f6..2d3bc42a50 100644 --- a/resources/variants/ultimaker_s5_bb04.inst.cfg +++ b/resources/variants/ultimaker_s5_bb04.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle diff --git a/resources/variants/ultimaker_s5_cc06.inst.cfg b/resources/variants/ultimaker_s5_cc06.inst.cfg index d41d08118a..f64e3b9055 100644 --- a/resources/variants/ultimaker_s5_cc06.inst.cfg +++ b/resources/variants/ultimaker_s5_cc06.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = nozzle @@ -13,7 +13,6 @@ brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = CC 0.6 machine_nozzle_size = 0.6 -material_print_temperature = =default_material_print_temperature + 10 raft_acceleration = =acceleration_print raft_airgap = 0.3 raft_base_thickness = =resolveOrValue('layer_height_0') * 1.2 diff --git a/resources/variants/ultimaker_s5_glass.inst.cfg b/resources/variants/ultimaker_s5_glass.inst.cfg index d74eb3c6c9..87196e5e9b 100644 --- a/resources/variants/ultimaker_s5_glass.inst.cfg +++ b/resources/variants/ultimaker_s5_glass.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = ultimaker_s5 [metadata] -setting_version = 5 +setting_version = 7 type = variant hardware_type = buildplate diff --git a/tests/TestPrintInformation.py b/tests/TestPrintInformation.py index a226a437c6..baa36fb338 100644 --- a/tests/TestPrintInformation.py +++ b/tests/TestPrintInformation.py @@ -1,5 +1,7 @@ +import functools from cura import PrintInformation +from cura.Settings.MachineManager import MachineManager from unittest.mock import MagicMock, patch from UM.Application import Application @@ -11,14 +13,20 @@ def getPrintInformation(printer_name) -> PrintInformation: mock_application = MagicMock() global_container_stack = MagicMock() - global_container_stack.definition.getName = MagicMock(return_value=printer_name) - mock_application.getGlobalContainerStack = MagicMock(return_value=global_container_stack) + global_container_stack.definition.getName = MagicMock(return_value = printer_name) + mock_application.getGlobalContainerStack = MagicMock(return_value = global_container_stack) - multiBuildPlateModel = MagicMock() - multiBuildPlateModel.maxBuildPlate = 0 - mock_application.getMultiBuildPlateModel = MagicMock(return_value=multiBuildPlateModel) + multi_build_plate_model = MagicMock() + multi_build_plate_model.maxBuildPlate = 0 + mock_application.getMultiBuildPlateModel = MagicMock(return_value = multi_build_plate_model) - Application.getInstance = MagicMock(return_type=mock_application) + # Mock-up the entire machine manager except the function that needs to be tested: getAbbreviatedMachineName + original_get_abbreviated_name = MachineManager.getAbbreviatedMachineName + mock_machine_manager = MagicMock() + mock_machine_manager.getAbbreviatedMachineName = functools.partial(original_get_abbreviated_name, mock_machine_manager) + mock_application.getMachineManager = MagicMock(return_value = mock_machine_manager) + + Application.getInstance = MagicMock(return_type = mock_application) with patch("json.loads", lambda x: {}): print_information = PrintInformation.PrintInformation(mock_application) @@ -28,17 +36,17 @@ def getPrintInformation(printer_name) -> PrintInformation: def setup_module(): MimeTypeDatabase.addMimeType( MimeType( - name="application/vnd.ms-package.3dmanufacturing-3dmodel+xml", - comment="3MF", - suffixes=["3mf"] + name = "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", + comment = "3MF", + suffixes = ["3mf"] ) ) MimeTypeDatabase.addMimeType( MimeType( - name="application/x-cura-gcode-file", - comment="Cura GCode File", - suffixes=["gcode"] + name = "application/x-cura-gcode-file", + comment = "Cura GCode File", + suffixes = ["gcode"] ) ) @@ -49,42 +57,42 @@ def test_setProjectName(): print_information = getPrintInformation("ultimaker") # Test simple name - project_name = ["HelloWorld",".3mf"] + project_name = ["HelloWorld", ".3mf"] print_information.setProjectName(project_name[0] + project_name[1]) assert "UM_" + project_name[0] == print_information._job_name # Test the name with one dot - project_name = ["Hello.World",".3mf"] + project_name = ["Hello.World", ".3mf"] print_information.setProjectName(project_name[0] + project_name[1]) assert "UM_" + project_name[0] == print_information._job_name # Test the name with two dot - project_name = ["Hello.World.World",".3mf"] + project_name = ["Hello.World.World", ".3mf"] print_information.setProjectName(project_name[0] + project_name[1]) assert "UM_" + project_name[0] == print_information._job_name # Test the name with dot at the beginning - project_name = [".Hello.World",".3mf"] + project_name = [".Hello.World", ".3mf"] print_information.setProjectName(project_name[0] + project_name[1]) assert "UM_" + project_name[0] == print_information._job_name # Test the name with underline - project_name = ["Hello_World",".3mf"] + project_name = ["Hello_World", ".3mf"] print_information.setProjectName(project_name[0] + project_name[1]) assert "UM_" + project_name[0] == print_information._job_name # Test gcode extension - project_name = ["Hello_World",".gcode"] + project_name = ["Hello_World", ".gcode"] print_information.setProjectName(project_name[0] + project_name[1]) assert "UM_" + project_name[0] == print_information._job_name # Test empty project name - project_name = ["",""] + project_name = ["", ""] print_information.setProjectName(project_name[0] + project_name[1]) assert print_information.UNTITLED_JOB_NAME == print_information._job_name # Test wrong file extension - project_name = ["Hello_World",".test"] + project_name = ["Hello_World", ".test"] print_information.setProjectName(project_name[0] + project_name[1]) assert "UM_" + project_name[0] != print_information._job_name @@ -93,7 +101,7 @@ def test_setJobName(): print_information = getPrintInformation("ultimaker") print_information._abbr_machine = "UM" - print_information.setJobName("UM_HelloWorld", is_user_specified_job_name=False) + print_information.setJobName("UM_HelloWorld", is_user_specified_job_name = False) def test_defineAbbreviatedMachineName(): @@ -102,6 +110,6 @@ def test_defineAbbreviatedMachineName(): print_information = getPrintInformation(printer_name) # Test not ultimaker printer, name suffix should have first letter from the printer name - project_name = ["HelloWorld",".3mf"] + project_name = ["HelloWorld", ".3mf"] print_information.setProjectName(project_name[0] + project_name[1]) assert printer_name[0] + "_" + project_name[0] == print_information._job_name
\ No newline at end of file |