diff --git a/source/apps/.gitkeep b/.omniverse_eula_accepted.txt similarity index 100% rename from source/apps/.gitkeep rename to .omniverse_eula_accepted.txt diff --git a/.vscode/settings.json b/.vscode/settings.json index 5f6ee0b..f5188cf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -116,658 +116,491 @@ "diffEditor.ignoreTrimWhitespace": false, "typescript.tsc.autoDetect": "off", - "grunt.autoDetect": "off", - "jake.autoDetect": "off", - "gulp.autoDetect": "off", "npm.autoDetect": "off", - "spellright.language": [ - "en" - ], - "spellright.documentTypes": [ - "markdown", - "latex", - "plaintext", - "cpp", - "asciidoc" - ], // Those paths are automatically filled by build system, see `repo.toml` for configuration: "python.analysis.extraPaths": [ "_build/pip-packages", "_build/windows-x86_64/debug/kit/kernel/py", - "_build/windows-x86_64/release/kit/exts/carb.audio", - "_build/windows-x86_64/release/kit/exts/carb.audio/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/carb.windowing.plugins", - "_build/windows-x86_64/release/kit/exts/carb.windowing.plugins/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.activity.core", - "_build/windows-x86_64/release/kit/exts/omni.activity.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.activity.freeze_monitor", - "_build/windows-x86_64/release/kit/exts/omni.activity.freeze_monitor/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.activity.profiler", - "_build/windows-x86_64/release/kit/exts/omni.activity.profiler/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.activity.pump", - "_build/windows-x86_64/release/kit/exts/omni.activity.pump/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.activity.ui", - "_build/windows-x86_64/release/kit/exts/omni.activity.ui/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.activity.usd_resolver", - "_build/windows-x86_64/release/kit/exts/omni.activity.usd_resolver/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.app.setup", - "_build/windows-x86_64/release/kit/exts/omni.app.setup/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.app.workflow.startup", - "_build/windows-x86_64/release/kit/exts/omni.app.workflow.startup/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.appwindow", - "_build/windows-x86_64/release/kit/exts/omni.appwindow/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.assets", - "_build/windows-x86_64/release/kit/exts/omni.assets/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.audioplayer", - "_build/windows-x86_64/release/kit/exts/omni.audioplayer/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.audiorecorder", - "_build/windows-x86_64/release/kit/exts/omni.audiorecorder/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.command.usd", - "_build/windows-x86_64/release/kit/exts/omni.command.usd/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.datastore", - "_build/windows-x86_64/release/kit/exts/omni.datastore/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.debugdraw", - "_build/windows-x86_64/release/kit/exts/omni.debugdraw/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.example.ui", - "_build/windows-x86_64/release/kit/exts/omni.example.ui/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.fabric.fabric_inspector", - "_build/windows-x86_64/release/kit/exts/omni.fabric.fabric_inspector/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.gpu_foundation", - "_build/windows-x86_64/release/kit/exts/omni.gpu_foundation/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.gpucompute.plugins", - "_build/windows-x86_64/release/kit/exts/omni.gpucompute.plugins/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph", - "_build/windows-x86_64/release/kit/exts/omni.graph.action", - "_build/windows-x86_64/release/kit/exts/omni.graph.action/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.core", - "_build/windows-x86_64/release/kit/exts/omni.graph.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.docs", - "_build/windows-x86_64/release/kit/exts/omni.graph.docs/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.examples.cpp", - "_build/windows-x86_64/release/kit/exts/omni.graph.examples.cpp/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.examples.python", - "_build/windows-x86_64/release/kit/exts/omni.graph.examples.python/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.exec", - "_build/windows-x86_64/release/kit/exts/omni.graph.exec/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.expression", - "_build/windows-x86_64/release/kit/exts/omni.graph.expression/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.image.core", - "_build/windows-x86_64/release/kit/exts/omni.graph.image.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.io", - "_build/windows-x86_64/release/kit/exts/omni.graph.io/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.nodes", - "_build/windows-x86_64/release/kit/exts/omni.graph.nodes/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.rtxtest", - "_build/windows-x86_64/release/kit/exts/omni.graph.rtxtest/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.scriptnode", - "_build/windows-x86_64/release/kit/exts/omni.graph.scriptnode/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.test", - "_build/windows-x86_64/release/kit/exts/omni.graph.test/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.tools", - "_build/windows-x86_64/release/kit/exts/omni.graph.tools/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.tutorials", - "_build/windows-x86_64/release/kit/exts/omni.graph.tutorials/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.ui", - "_build/windows-x86_64/release/kit/exts/omni.graph.ui/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph.ui_nodes", - "_build/windows-x86_64/release/kit/exts/omni.graph.ui_nodes/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.graph/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hsscclient", - "_build/windows-x86_64/release/kit/exts/omni.hsscclient/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.engine.stats", - "_build/windows-x86_64/release/kit/exts/omni.hydra.engine.stats/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.index", - "_build/windows-x86_64/release/kit/exts/omni.hydra.index/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.index_remote", - "_build/windows-x86_64/release/kit/exts/omni.hydra.index_remote/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.iray", - "_build/windows-x86_64/release/kit/exts/omni.hydra.iray/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.pxr", - "_build/windows-x86_64/release/kit/exts/omni.hydra.pxr.settings", - "_build/windows-x86_64/release/kit/exts/omni.hydra.pxr.settings/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.pxr/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.rtx", - "_build/windows-x86_64/release/kit/exts/omni.hydra.rtx/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.scene_api", - "_build/windows-x86_64/release/kit/exts/omni.hydra.scene_api/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.scene_delegate", - "_build/windows-x86_64/release/kit/exts/omni.hydra.scene_delegate/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.ui", - "_build/windows-x86_64/release/kit/exts/omni.hydra.ui/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.hydra.usdrt_delegate", - "_build/windows-x86_64/release/kit/exts/omni.hydra.usdrt_delegate/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.index", - "_build/windows-x86_64/release/kit/exts/omni.index.compute", - "_build/windows-x86_64/release/kit/exts/omni.index.compute/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.index.libs", - "_build/windows-x86_64/release/kit/exts/omni.index.libs/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.index.settings.core", - "_build/windows-x86_64/release/kit/exts/omni.index.settings.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.index.usd", - "_build/windows-x86_64/release/kit/exts/omni.index.usd/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.index/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.inspect", - "_build/windows-x86_64/release/kit/exts/omni.inspect/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.iray.libs", - "_build/windows-x86_64/release/kit/exts/omni.iray.libs/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.iray.settings.core", - "_build/windows-x86_64/release/kit/exts/omni.iray.settings.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.actions.core", - "_build/windows-x86_64/release/kit/exts/omni.kit.actions.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.actions.window", - "_build/windows-x86_64/release/kit/exts/omni.kit.actions.window/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.app_snippets", - "_build/windows-x86_64/release/kit/exts/omni.kit.app_snippets/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.audio.test.usd", - "_build/windows-x86_64/release/kit/exts/omni.kit.audio.test.usd/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.audiodeviceenum", - "_build/windows-x86_64/release/kit/exts/omni.kit.audiodeviceenum/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.autocapture", - "_build/windows-x86_64/release/kit/exts/omni.kit.autocapture/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.capture", - "_build/windows-x86_64/release/kit/exts/omni.kit.capture.viewport", - "_build/windows-x86_64/release/kit/exts/omni.kit.capture.viewport/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.capture/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.clipboard", - "_build/windows-x86_64/release/kit/exts/omni.kit.clipboard/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.channel_manager", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.channel_manager/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.presence_layer", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.presence_layer/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.selection_outline", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.selection_outline/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.stage_columns", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.stage_columns/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.telemetry", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.telemetry/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.viewport.camera", - "_build/windows-x86_64/release/kit/exts/omni.kit.collaboration.viewport.camera/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.commands", - "_build/windows-x86_64/release/kit/exts/omni.kit.commands/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.compatibility_checker", - "_build/windows-x86_64/release/kit/exts/omni.kit.compatibility_checker/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.context_menu", - "_build/windows-x86_64/release/kit/exts/omni.kit.context_menu/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.core.tests", - "_build/windows-x86_64/release/kit/exts/omni.kit.core.tests/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.debug.python", - "_build/windows-x86_64/release/kit/exts/omni.kit.debug.python/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.debug.vscode", - "_build/windows-x86_64/release/kit/exts/omni.kit.debug.vscode/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.documentation.builder", - "_build/windows-x86_64/release/kit/exts/omni.kit.documentation.builder/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.documentation.ui.style", - "_build/windows-x86_64/release/kit/exts/omni.kit.documentation.ui.style/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.example.toolbar_button", - "_build/windows-x86_64/release/kit/exts/omni.kit.example.toolbar_button/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.core", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.debug", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.debug/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.example-carb", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.example-carb/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.example-omni", - "_build/windows-x86_64/release/kit/exts/omni.kit.exec.example-omni/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.extpath.git", - "_build/windows-x86_64/release/kit/exts/omni.kit.extpath.git/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.filebrowser_column.acl", - "_build/windows-x86_64/release/kit/exts/omni.kit.filebrowser_column.acl/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.filebrowser_column.tags", - "_build/windows-x86_64/release/kit/exts/omni.kit.filebrowser_column.tags/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.gfn", - "_build/windows-x86_64/release/kit/exts/omni.kit.gfn/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.helper.file_utils", - "_build/windows-x86_64/release/kit/exts/omni.kit.helper.file_utils/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.hotkeys.core", - "_build/windows-x86_64/release/kit/exts/omni.kit.hotkeys.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.hotkeys.window", - "_build/windows-x86_64/release/kit/exts/omni.kit.hotkeys.window/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.hydra_texture", - "_build/windows-x86_64/release/kit/exts/omni.kit.hydra_texture/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.loop-default", - "_build/windows-x86_64/release/kit/exts/omni.kit.loop-default/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.mainwindow", - "_build/windows-x86_64/release/kit/exts/omni.kit.mainwindow/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.camera", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.camera/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.prim", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.prim/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.prim2.core", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.prim2.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.selection", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.selection/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.selector", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.selector/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.tool.snap", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.tool.snap/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.transform", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.transform/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.viewport", - "_build/windows-x86_64/release/kit/exts/omni.kit.manipulator.viewport/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.material.library", - "_build/windows-x86_64/release/kit/exts/omni.kit.material.library/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.aov", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.aov/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.common", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.common/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.create", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.create/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.edit", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.edit/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.file", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.file/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.utils", - "_build/windows-x86_64/release/kit/exts/omni.kit.menu.utils/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.multinode", - "_build/windows-x86_64/release/kit/exts/omni.kit.multinode/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.notification_manager", - "_build/windows-x86_64/release/kit/exts/omni.kit.notification_manager/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.numpy.common", - "_build/windows-x86_64/release/kit/exts/omni.kit.numpy.common/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.pip_archive", - "_build/windows-x86_64/release/kit/exts/omni.kit.pip_archive/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.pipapi", - "_build/windows-x86_64/release/kit/exts/omni.kit.pipapi/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.primitive.mesh", - "_build/windows-x86_64/release/kit/exts/omni.kit.primitive.mesh/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.profile_python", - "_build/windows-x86_64/release/kit/exts/omni.kit.profile_python/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.audio", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.audio/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.bundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.bundle/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.camera", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.camera/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.file", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.file/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.geometry", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.geometry/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.layer", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.layer/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.light", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.light/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.material", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.material/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.render", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.render/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.skel", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.skel/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.tagging", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.tagging/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.transform", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.transform/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.usd", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.usd/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.usd_clipboard_test", - "_build/windows-x86_64/release/kit/exts/omni.kit.property.usd_clipboard_test/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.quicklayout", - "_build/windows-x86_64/release/kit/exts/omni.kit.quicklayout/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.capture", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.capture/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.core", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.cuda_interop", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.cuda_interop/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.imgui", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.imgui/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.init", - "_build/windows-x86_64/release/kit/exts/omni.kit.renderer.init/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.scene_view.opengl", - "_build/windows-x86_64/release/kit/exts/omni.kit.scene_view.opengl/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.scene_view.usd", - "_build/windows-x86_64/release/kit/exts/omni.kit.scene_view.usd/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.search_core", - "_build/windows-x86_64/release/kit/exts/omni.kit.search_core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.search_example", - "_build/windows-x86_64/release/kit/exts/omni.kit.search_example/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.selection", - "_build/windows-x86_64/release/kit/exts/omni.kit.selection/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.stage.copypaste", - "_build/windows-x86_64/release/kit/exts/omni.kit.stage.copypaste/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.stage.mdl_converter", - "_build/windows-x86_64/release/kit/exts/omni.kit.stage.mdl_converter/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.stage_templates", - "_build/windows-x86_64/release/kit/exts/omni.kit.stage_templates/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.tagging", - "_build/windows-x86_64/release/kit/exts/omni.kit.tagging/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.telemetry", - "_build/windows-x86_64/release/kit/exts/omni.kit.telemetry/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test", - "_build/windows-x86_64/release/kit/exts/omni.kit.test/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_app_compat", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_app_compat/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_app_full_nonrtx", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_app_full_nonrtx/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_async_rendering", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_async_rendering/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_helpers_gfx", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_helpers_gfx/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.browser", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.browser/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.helpers", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.helpers/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.layer_window", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.layer_window/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.layout", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.layout/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.menu", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.menu/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.stage_window", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.stage_window/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.viewport", - "_build/windows-x86_64/release/kit/exts/omni.kit.test_suite.viewport/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.tool.collect", - "_build/windows-x86_64/release/kit/exts/omni.kit.tool.collect/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.ui_test", - "_build/windows-x86_64/release/kit/exts/omni.kit.ui_test/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.uiapp", - "_build/windows-x86_64/release/kit/exts/omni.kit.uiapp/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.usd.collect", - "_build/windows-x86_64/release/kit/exts/omni.kit.usd.collect/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.usd.layers", - "_build/windows-x86_64/release/kit/exts/omni.kit.usd.layers/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.usd_undo", - "_build/windows-x86_64/release/kit/exts/omni.kit.usd_undo/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.usda_edit", - "_build/windows-x86_64/release/kit/exts/omni.kit.usda_edit/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.usdz_export", - "_build/windows-x86_64/release/kit/exts/omni.kit.usdz_export/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.actions", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.actions/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.bundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.bundle/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.docs", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.docs/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.legacy_gizmos", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.legacy_gizmos/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.manipulator.transform", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.manipulator.transform/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.camera", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.camera/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.core", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.display", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.display/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.render", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.render/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.settings", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.menubar.settings/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.pxr", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.pxr/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.ready", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.ready/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.registry", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.registry/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.rtx", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.rtx/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.utility", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.utility/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.window", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport.window/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport_widgets_manager", - "_build/windows-x86_64/release/kit/exts/omni.kit.viewport_widgets_manager/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.about", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.about/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.extensions", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.extensions/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.learn", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.learn/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.open", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.open/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.whats_new", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.whats_new/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.window", - "_build/windows-x86_64/release/kit/exts/omni.kit.welcome.window/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.browser_bar", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.browser_bar/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.cache_indicator", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.cache_indicator/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.fast_search", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.fast_search/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.filebrowser", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.filebrowser/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.filter", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.filter/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.graph", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.graph/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.highlight_label", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.highlight_label/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.imageview", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.imageview/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.inspector", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.inspector/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.layers", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.layers/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.live", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.live/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.live_session_management", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.live_session_management/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.nucleus_connector", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.nucleus_connector/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.nucleus_info", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.nucleus_info/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.opengl", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.opengl/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.options_menu", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.options_menu/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.path_field", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.path_field/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.prompt", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.prompt/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.search_delegate", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.search_delegate/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.searchable_combobox", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.searchable_combobox/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.searchfield", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.searchfield/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.settings", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.settings/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.spinner", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.spinner/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.stage", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.stage/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.stage_icons", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.stage_icons/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.text_editor", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.text_editor/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.toolbar", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.toolbar/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.versioning", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.versioning/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.viewport", - "_build/windows-x86_64/release/kit/exts/omni.kit.widget.viewport/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.about", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.about/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.audio.oscilloscope", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.audio.oscilloscope/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.audioplayer", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.audioplayer/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.audiorecorder", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.audiorecorder/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.commands", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.commands/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.console", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.console/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.content_browser", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.content_browser/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.content_browser_registry", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.content_browser_registry/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.cursor", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.cursor/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.drop_support", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.drop_support/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.extensions", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.extensions/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.file", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.file/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.file_exporter", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.file_exporter/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.file_importer", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.file_importer/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.filepicker", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.filepicker/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.images", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.images/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.imageviewer", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.imageviewer/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.imguidebug", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.imguidebug/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.inspector", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.inspector/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.material_swap", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.material_swap/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.popup_dialog", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.popup_dialog/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.preferences", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.preferences/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.privacy", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.privacy/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.property", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.property/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.provide_feedback", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.provide_feedback/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.reshade_editor", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.reshade_editor/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.script_editor", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.script_editor/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.splash", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.splash/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.splash_close_example", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.splash_close_example/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.stage", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.stage/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.stageviewer", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.stageviewer/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.stats", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.stats/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.status_bar", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.status_bar/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.tests", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.tests/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.title", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.title/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.toolbar", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.toolbar/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.usd_paths", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.usd_paths/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.viewport", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.viewport/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.welcome", - "_build/windows-x86_64/release/kit/exts/omni.kit.window.welcome/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.mdl", - "_build/windows-x86_64/release/kit/exts/omni.mdl.distill_and_bake", - "_build/windows-x86_64/release/kit/exts/omni.mdl.distill_and_bake/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.mdl.neuraylib", - "_build/windows-x86_64/release/kit/exts/omni.mdl.neuraylib/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.mdl.usd_converter", - "_build/windows-x86_64/release/kit/exts/omni.mdl.usd_converter/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.mdl/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.mtlx", - "_build/windows-x86_64/release/kit/exts/omni.mtlx/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.population", - "_build/windows-x86_64/release/kit/exts/omni.population/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.resourcemonitor", - "_build/windows-x86_64/release/kit/exts/omni.resourcemonitor/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.index_composite", - "_build/windows-x86_64/release/kit/exts/omni.rtx.index_composite/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.ovtextureconverter", - "_build/windows-x86_64/release/kit/exts/omni.rtx.ovtextureconverter/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.settings.core", - "_build/windows-x86_64/release/kit/exts/omni.rtx.settings.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.shadercache.d3d12", - "_build/windows-x86_64/release/kit/exts/omni.rtx.shadercache.d3d12/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.shadercache.vulkan", - "_build/windows-x86_64/release/kit/exts/omni.rtx.shadercache.vulkan/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.tests", - "_build/windows-x86_64/release/kit/exts/omni.rtx.tests/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.ujitsoprocessors", - "_build/windows-x86_64/release/kit/exts/omni.rtx.ujitsoprocessors/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.rtx.window.settings", - "_build/windows-x86_64/release/kit/exts/omni.rtx.window.settings/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.stats", - "_build/windows-x86_64/release/kit/exts/omni.stats/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.syntheticdata", - "_build/windows-x86_64/release/kit/exts/omni.syntheticdata/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.taskagent", - "_build/windows-x86_64/release/kit/exts/omni.taskagent/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.timeline", - "_build/windows-x86_64/release/kit/exts/omni.timeline.live_session", - "_build/windows-x86_64/release/kit/exts/omni.timeline.live_session/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.timeline/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.ui", - "_build/windows-x86_64/release/kit/exts/omni.ui.scene", - "_build/windows-x86_64/release/kit/exts/omni.ui.scene/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.ui/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.ui_query", - "_build/windows-x86_64/release/kit/exts/omni.ui_query/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.uiaudio", - "_build/windows-x86_64/release/kit/exts/omni.uiaudio/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.ujitso", - "_build/windows-x86_64/release/kit/exts/omni.ujitso.python", - "_build/windows-x86_64/release/kit/exts/omni.ujitso.python/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.ujitso/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd", - "_build/windows-x86_64/release/kit/exts/omni.usd.config", - "_build/windows-x86_64/release/kit/exts/omni.usd.config/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.core", - "_build/windows-x86_64/release/kit/exts/omni.usd.core/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.libs", - "_build/windows-x86_64/release/kit/exts/omni.usd.libs/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.anim", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.anim/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.audio", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.audio/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.geospatial", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.geospatial/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.omnigraph", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.omnigraph/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.omniscripting", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.omniscripting/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.physics", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.physics/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.semantics", - "_build/windows-x86_64/release/kit/exts/omni.usd.schema.semantics/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.usd_resolver", - "_build/windows-x86_64/release/kit/exts/omni.usd_resolver/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.videoencoding", - "_build/windows-x86_64/release/kit/exts/omni.videoencoding/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/omni.volume", - "_build/windows-x86_64/release/kit/exts/omni.volume/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/usdrt.gf", - "_build/windows-x86_64/release/kit/exts/usdrt.gf/pip_prebundle", - "_build/windows-x86_64/release/kit/exts/usdrt.scenegraph", - "_build/windows-x86_64/release/kit/exts/usdrt.scenegraph/pip_prebundle", + "_build/windows-x86_64/release/exts/iot_samples.panel_extension.setup", + "_build/windows-x86_64/release/exts/iot_samples.ui_panel", + "_build/windows-x86_64/release/exts/iot_samples.usd_explorer.setup", + "_build/windows-x86_64/release/extscache/carb.audio-0.1.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/carb.audio-0.1.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/carb.windowing.plugins-1.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/carb.windowing.plugins-1.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.activity.core-1.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.activity.core-1.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.activity.profiler-1.0.3+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.activity.profiler-1.0.3+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.activity.pump-1.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.activity.pump-1.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.activity.ui-1.0.29+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.activity.ui-1.0.29+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.activity.usd_resolver-1.0.2+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.activity.usd_resolver-1.0.2+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.appwindow-1.1.8+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.appwindow-1.1.8+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.blobkey-1.1.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.blobkey-1.1.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.datastore-0.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.datastore-0.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.fabric.commands-1.1.4+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.fabric.commands-1.1.4+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.gpu_foundation-0.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.gpu_foundation-0.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.gpucompute.plugins-0.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.gpucompute.plugins-0.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.graph.exec-0.9.3+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.graph.exec-0.9.3+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hsscclient-0.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.hsscclient-0.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hydra.engine.stats-1.0.2+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.hydra.engine.stats-1.0.2+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hydra.pxr-1.1.7+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.hydra.pxr-1.1.7+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hydra.pxr.settings-1.0.7+36286b8b", + "_build/windows-x86_64/release/extscache/omni.hydra.pxr.settings-1.0.7+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hydra.rtx-0.2.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.hydra.rtx-0.2.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hydra.scene_api-0.1.2+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.hydra.scene_api-0.1.2+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hydra.scene_delegate-0.3.3+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.hydra.scene_delegate-0.3.3+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.hydra.usdrt_delegate-7.4.7+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.hydra.usdrt_delegate-7.4.7+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.iray.libs-0.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.iray.libs-0.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.actions.core-1.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.actions.core-1.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.asset_converter-2.1.11+wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.asset_converter-2.1.11+wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.audiodeviceenum-1.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.audiodeviceenum-1.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.browser.asset-1.3.9", + "_build/windows-x86_64/release/extscache/omni.kit.browser.asset-1.3.9/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.browser.core-2.3.11", + "_build/windows-x86_64/release/extscache/omni.kit.browser.core-2.3.11/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.browser.folder.core-1.9.12", + "_build/windows-x86_64/release/extscache/omni.kit.browser.folder.core-1.9.12/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.browser.material-1.5.2", + "_build/windows-x86_64/release/extscache/omni.kit.browser.material-1.5.2/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.browser.sample-1.4.7", + "_build/windows-x86_64/release/extscache/omni.kit.browser.sample-1.4.7/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.clipboard-1.0.3+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.clipboard-1.0.3+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.channel_manager-1.0.11+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.channel_manager-1.0.11+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.presence_layer-1.0.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.presence_layer-1.0.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.selection_outline-1.0.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.selection_outline-1.0.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.telemetry-1.0.0+106.0.2.36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.telemetry-1.0.0+106.0.2.36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.viewport.camera-2.0.18+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.collaboration.viewport.camera-2.0.18+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.commands-1.4.9+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.commands-1.4.9+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.context_menu-1.8.0+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.context_menu-1.8.0+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.converter.cad-201.0.2+106.0.0", + "_build/windows-x86_64/release/extscache/omni.kit.converter.cad-201.0.2+106.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.converter.cad_core-201.0.2+wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.converter.cad_core-201.0.2+wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.converter.common-201.0.2+wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.converter.common-201.0.2+wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.converter.dgn_core-201.0.2+wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.converter.dgn_core-201.0.2+wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.converter.jt_core-201.0.2+wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.converter.jt_core-201.0.2+wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.exec.core-0.13.2+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.exec.core-0.13.2+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.helper.file_utils-0.1.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.helper.file_utils-0.1.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.hotkeys.core-1.3.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.hotkeys.core-1.3.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.hydra_texture-1.2.6+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.hydra_texture-1.2.6+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.loop-default-0.2.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.kit.loop-default-0.2.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.mainwindow-1.0.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.mainwindow-1.0.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.camera-105.0.5+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.camera-105.0.5+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim-106.0.0+106.0.2.36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim-106.0.0+106.0.2.36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim.core-107.0.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim.core-107.0.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim.fabric-106.0.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim.fabric-106.0.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim.usd-106.0.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.prim.usd-106.0.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.selection-104.0.9+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.selection-104.0.9+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.selector-1.1.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.selector-1.1.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.tool.snap-1.4.5+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.tool.snap-1.4.5+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.transform-104.7.5+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.transform-104.7.5+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.viewport-107.0.0+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.manipulator.viewport-107.0.0+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.markup.core-1.2.19", + "_build/windows-x86_64/release/extscache/omni.kit.markup.core-1.2.19/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.markup.playlist-0.0.5", + "_build/windows-x86_64/release/extscache/omni.kit.markup.playlist-0.0.5/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.material.library-1.4.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.material.library-1.4.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.menu.edit-1.1.24+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.menu.edit-1.1.24+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.menu.file-1.1.10+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.menu.file-1.1.10+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.menu.utils-1.5.27+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.menu.utils-1.5.27+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.ngsearch-0.3.3", + "_build/windows-x86_64/release/extscache/omni.kit.ngsearch-0.3.3/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.notification_manager-1.0.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.notification_manager-1.0.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.pip_archive-0.0.0+36286b8b.wx64.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.pip_archive-0.0.0+36286b8b.wx64.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.pipapi-0.0.0+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.pipapi-0.0.0+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.playlist.core-1.3.4", + "_build/windows-x86_64/release/extscache/omni.kit.playlist.core-1.3.4/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.prim.icon-1.0.13", + "_build/windows-x86_64/release/extscache/omni.kit.prim.icon-1.0.13/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.primitive.mesh-1.0.16+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.primitive.mesh-1.0.16+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.audio-1.0.11+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.audio-1.0.11+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.bundle-1.2.11+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.bundle-1.2.11+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.camera-1.0.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.camera-1.0.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.geometry-1.3.0+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.geometry-1.3.0+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.layer-1.1.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.layer-1.1.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.light-1.0.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.light-1.0.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.material-1.9.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.material-1.9.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.render-1.1.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.render-1.1.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.transform-1.5.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.transform-1.5.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.property.usd-3.21.28+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.property.usd-3.21.28+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.quicklayout-1.0.7+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.quicklayout-1.0.7+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.raycast.query-1.0.5+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.raycast.query-1.0.5+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.capture-0.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.capture-0.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.core-1.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.core-1.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.imgui-1.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.imgui-1.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.init-0.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.kit.renderer.init-0.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.search.service-0.1.12", + "_build/windows-x86_64/release/extscache/omni.kit.search.service-0.1.12/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.search_core-1.0.5+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.search_core-1.0.5+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.selection-0.1.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.selection-0.1.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.stage.copypaste-1.2.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.stage.copypaste-1.2.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.stage_column.payload-2.0.0", + "_build/windows-x86_64/release/extscache/omni.kit.stage_column.payload-2.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.stage_template.core-1.1.21+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.stage_template.core-1.1.21+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.stage_templates-1.2.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.stage_templates-1.2.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.telemetry-0.5.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.telemetry-0.5.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.thumbnails.usd-1.0.9", + "_build/windows-x86_64/release/extscache/omni.kit.thumbnails.usd-1.0.9/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.timeline.minibar-1.2.9", + "_build/windows-x86_64/release/extscache/omni.kit.timeline.minibar-1.2.9/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.tool.asset_importer-2.5.5", + "_build/windows-x86_64/release/extscache/omni.kit.tool.asset_importer-2.5.5/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.tool.camera_playlist-1.3.1", + "_build/windows-x86_64/release/extscache/omni.kit.tool.camera_playlist-1.3.1/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.tool.markup-1.2.69", + "_build/windows-x86_64/release/extscache/omni.kit.tool.markup-1.2.69/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.tool.measure-105.2.5+105.1", + "_build/windows-x86_64/release/extscache/omni.kit.tool.measure-105.2.5+105.1/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.tool.remove_unused.controller-0.1.3", + "_build/windows-x86_64/release/extscache/omni.kit.tool.remove_unused.controller-0.1.3/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.tool.remove_unused.core-0.1.2", + "_build/windows-x86_64/release/extscache/omni.kit.tool.remove_unused.core-0.1.2/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.tool.teleport-104.2.15", + "_build/windows-x86_64/release/extscache/omni.kit.tool.teleport-104.2.15/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.uiapp-0.0.0+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.uiapp-0.0.0+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.usd.layers-2.1.31+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.usd.layers-2.1.31+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.conn.manager-1.0.0", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.conn.manager-1.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.main.menubar-1.0.36", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.main.menubar-1.0.36/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.render-1.0.1", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.render-1.0.1/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.tooltip-1.0.0", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.tooltip-1.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.window.welcome-1.0.0", + "_build/windows-x86_64/release/extscache/omni.kit.usd_explorer.window.welcome-1.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.usd_undo-0.1.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.usd_undo-0.1.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.actions-106.0.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.actions-106.0.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.legacy_gizmos-1.0.15+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.legacy_gizmos-1.0.15+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.manipulator.transform-106.0.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.manipulator.transform-106.0.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.bottom-1.0.5", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.bottom-1.0.5/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.camera-105.1.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.camera-105.1.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.core-106.0.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.core-106.0.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.display-106.0.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.display-106.0.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.framerate-1.0.9", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.framerate-1.0.9/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.lighting-106.0.2+ub3f", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.lighting-106.0.2+ub3f/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.markup-104.1.26", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.markup-104.1.26/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.nav_bar_toggle-1.0.3", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.nav_bar_toggle-1.0.3/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.timeline-1.0.2", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.timeline-1.0.2/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.waypoint-104.2.16", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.menubar.waypoint-104.2.16/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.camera_manipulator-1.0.53", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.camera_manipulator-1.0.53/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.capture_no_ansel-1.0.16", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.capture_no_ansel-1.0.16/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.core-1.0.29", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.core-1.0.29/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.markup-1.0.30", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.markup-1.0.30/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.measure-1.0.5", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.measure-1.0.5/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.section-1.0.4", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.section-1.0.4/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.teleport-1.0.16", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.teleport-1.0.16/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.usd_explorer.bundle-1.0.13", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.usd_explorer.bundle-1.0.13/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.walk-1.0.4", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.walk-1.0.4/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.waypoint-1.0.22", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.navigation.waypoint-1.0.22/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.ready-1.0.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.ready-1.0.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.registry-104.0.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.registry-104.0.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.rtx-104.0.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.rtx-104.0.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.scene_camera_model-1.0.4+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.scene_camera_model-1.0.4+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.utility-1.0.17+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.utility-1.0.17+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.window-106.0.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.viewport.window-106.0.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.waypoint.core-1.4.52", + "_build/windows-x86_64/release/extscache/omni.kit.waypoint.core-1.4.52/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.waypoint.playlist-1.0.8", + "_build/windows-x86_64/release/extscache/omni.kit.waypoint.playlist-1.0.8/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.browser_bar-2.0.10+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.browser_bar-2.0.10+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.context_menu-1.2.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.context_menu-1.2.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.filebrowser-2.10.48+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.filebrowser-2.10.48+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.filter-1.1.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.filter-1.1.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.highlight_label-1.0.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.highlight_label-1.0.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.layers-1.7.9+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.layers-1.7.9+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.live-2.1.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.live-2.1.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.live_session_management-1.2.18+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.live_session_management-1.2.18+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.live_session_management.ui-1.0.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.live_session_management.ui-1.0.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.material_preview-1.0.16", + "_build/windows-x86_64/release/extscache/omni.kit.widget.material_preview-1.0.16/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.nucleus_connector-1.1.8+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.nucleus_connector-1.1.8+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.nucleus_info-1.0.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.nucleus_info-1.0.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.options_button-1.0.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.options_button-1.0.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.options_menu-1.1.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.options_menu-1.1.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.path_field-2.0.9+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.path_field-2.0.9+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.prompt-1.0.7+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.prompt-1.0.7+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.searchable_combobox-1.0.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.searchable_combobox-1.0.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.searchfield-1.1.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.searchfield-1.1.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.settings-1.1.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.settings-1.1.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.stage-2.10.26+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.stage-2.10.26+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.stage_icons-1.0.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.stage_icons-1.0.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.toolbar-1.6.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.toolbar-1.6.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.viewport-106.0.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.widget.viewport-106.0.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widget.zoombar-1.0.5", + "_build/windows-x86_64/release/extscache/omni.kit.widget.zoombar-1.0.5/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.widgets.custom-1.0.8", + "_build/windows-x86_64/release/extscache/omni.kit.widgets.custom-1.0.8/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.about-1.2.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.about-1.2.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.console-0.2.12+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.window.console-0.2.12+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.content_browser-2.9.14+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.content_browser-2.9.14+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.content_browser_registry-0.0.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.content_browser_registry-0.0.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.cursor-1.1.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.cursor-1.1.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.drop_support-1.0.2+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.drop_support-1.0.2+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.file-1.3.52+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.file-1.3.52+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.file_exporter-1.0.29+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.file_exporter-1.0.29+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.file_importer-1.1.11+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.file_importer-1.1.11+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.filepicker-2.10.34+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.filepicker-2.10.34+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.material-1.5.7", + "_build/windows-x86_64/release/extscache/omni.kit.window.material-1.5.7/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.modifier.titlebar-105.2.16+105.2.wx64.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.window.modifier.titlebar-105.2.16+105.2.wx64.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.popup_dialog-2.0.24+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.popup_dialog-2.0.24+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.preferences-1.5.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.preferences-1.5.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.property-1.11.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.property-1.11.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.section-107.0.1", + "_build/windows-x86_64/release/extscache/omni.kit.window.section-107.0.1/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.stage-2.5.10+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.stage-2.5.10+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.stats-0.1.6+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.stats-0.1.6+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.status_bar-0.1.6+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.kit.window.status_bar-0.1.6+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.title-1.1.3+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.title-1.1.3+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.kit.window.toolbar-1.6.1+36286b8b", + "_build/windows-x86_64/release/extscache/omni.kit.window.toolbar-1.6.1+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.mdl-52.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.mdl-52.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.mdl.neuraylib-0.2.5+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.mdl.neuraylib-0.2.5+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.mtlx-0.1.0+36286b8b", + "_build/windows-x86_64/release/extscache/omni.mtlx-0.1.0+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.resourcemonitor-105.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.resourcemonitor-105.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.rtx.settings.core-0.6.0+36286b8b", + "_build/windows-x86_64/release/extscache/omni.rtx.settings.core-0.6.0+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.rtx.shadercache.d3d12-1.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.rtx.shadercache.d3d12-1.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.rtx.window.settings-0.6.16+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.rtx.window.settings-0.6.16+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.scene.optimizer.bundle-106.0.4+106.0.0", + "_build/windows-x86_64/release/extscache/omni.scene.optimizer.bundle-106.0.4+106.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.scene.optimizer.core-106.0.4+106.0.0.wx64.r.cp310.ub3f", + "_build/windows-x86_64/release/extscache/omni.scene.optimizer.core-106.0.4+106.0.0.wx64.r.cp310.ub3f/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.scene.optimizer.ui-106.0.4+106.0.0", + "_build/windows-x86_64/release/extscache/omni.scene.optimizer.ui-106.0.4+106.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.services.pip_archive-0.13.3+wx64", + "_build/windows-x86_64/release/extscache/omni.services.pip_archive-0.13.3+wx64/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.stats-1.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.stats-1.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.timeline-1.0.10+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.timeline-1.0.10+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.timeline.live_session-1.0.7+36286b8b", + "_build/windows-x86_64/release/extscache/omni.timeline.live_session-1.0.7+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.ui-2.23.11+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.ui-2.23.11+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.ui.scene-1.9.3+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.ui.scene-1.9.3+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.uiaudio-1.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.uiaudio-1.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.ujitso.client-0.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.ujitso.client-0.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.ujitso.default-1.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.ujitso.default-1.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.ujitso.processor.texture-1.0.0+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.ujitso.processor.texture-1.0.0+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd-1.11.2+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd-1.11.2+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.config-1.0.4+36286b8b", + "_build/windows-x86_64/release/extscache/omni.usd.config-1.0.4+36286b8b/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.core-1.2.11+36286b8b.wx64.r", + "_build/windows-x86_64/release/extscache/omni.usd.core-1.2.11+36286b8b.wx64.r/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.libs-1.0.1+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd.libs-1.0.1+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.metrics.assembler-106.0.1+106.0.0.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd.metrics.assembler-106.0.1+106.0.0.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.metrics.assembler.ui-106.0.2+106.0.0", + "_build/windows-x86_64/release/extscache/omni.usd.metrics.assembler.ui-106.0.2+106.0.0/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.schema.anim-0.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd.schema.anim-0.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.schema.audio-0.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd.schema.audio-0.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.schema.geospatial-0.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd.schema.geospatial-0.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.schema.metrics.assembler-106.0.1+106.0.0.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd.schema.metrics.assembler-106.0.1+106.0.0.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd.schema.semantics-0.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd.schema.semantics-0.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.usd_resolver-1.0.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.usd_resolver-1.0.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.volume-0.5.0+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/omni.volume-0.5.0+36286b8b.wx64.r.cp310/pip_prebundle", + "_build/windows-x86_64/release/extscache/omni.warp.core-1.1.1", + "_build/windows-x86_64/release/extscache/omni.warp.core-1.1.1/pip_prebundle", + "_build/windows-x86_64/release/extscache/usdrt.scenegraph-7.4.8+36286b8b.wx64.r.cp310", + "_build/windows-x86_64/release/extscache/usdrt.scenegraph-7.4.8+36286b8b.wx64.r.cp310/pip_prebundle", "_build/windows-x86_64/release/kit/extscore/omni.assets.plugins", "_build/windows-x86_64/release/kit/extscore/omni.client", "_build/windows-x86_64/release/kit/extscore/omni.kit.async_engine", "_build/windows-x86_64/release/kit/extscore/omni.kit.registry.nucleus", "_build/windows-x86_64/release/kit/kernel/py", "_repo/deps/repo_build", - "_repo/deps/repo_changelog", - "_repo/deps/repo_docs", - "_repo/deps/repo_format", + "_repo/deps/repo_build_deps", + "_repo/deps/repo_kit_template", "_repo/deps/repo_kit_tools", + "_repo/deps/repo_kit_tools_deps", "_repo/deps/repo_man", + "_repo/deps/repo_man_deps", "_repo/deps/repo_package", - "_repo/deps/repo_source", + "_repo/deps/repo_test", + "_repo/deps/uv_deps", "tools/repoman", ], "python.languageServer": "Pylance", - "python.pythonPath": "${workspaceFolder}/_build/windows-x86_64/release/kit/python/python.exe", - "python.defaultInterpreterPath": "${workspaceFolder}/_build/windows-x86_64/release/kit/python/python.exe", // https://github.com/microsoft/vscode-python/wiki/AB-Experiments#pythondeprecatepythonpath - // We use "black" as a formatter: - "python.formatting.provider": "black", - "python.formatting.blackArgs": ["--line-length", "120"], - "black-formatter.args": ["--line-length", "120"], - "python.sortImports.args": ["--profile", "black"], + // Used on first run. See also: + // https://github.com/microsoft/vscode-python/wiki/Setting-descriptions#pythondefaultinterpreterpath + "python.defaultInterpreterPath": "${workspaceFolder}/_build/windows-x86_64/release/kit/python", - // Use flake8 for linting - "python.linting.enabled": true, - "python.linting.pylintEnabled": false, - "python.linting.flake8Enabled": true, - "python.linting.flake8Args": ["--max-line-length=120"] + // Configure "black" formatter: + "black-formatter.args": ["--line-length", "120"] } diff --git a/CHANGELOG.md b/CHANGELOG.md index 17d42e0..d75dbf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,12 @@ -0.3 +0.4 ----- * Updated paho-mqtt to 2.1.0 +0.3 +----- +* Migrated to kit-sdk 106 +* Updated MQQT sample to reflect updates in dependencies + 0.2 ----- * Added support for API Token authentication diff --git a/Dockerfile b/Dockerfile index ba34c32..bdf13a0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,9 +6,6 @@ ENV PYTHONDONTWRITEBYTECODE=1 # Turns off buffering for easier container logging ENV PYTHONUNBUFFERED=1 -# Install pip requirements -COPY requirements.txt . -RUN python -m pip install -r requirements.txt WORKDIR /app COPY . /app @@ -18,5 +15,10 @@ COPY . /app RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app USER appuser +RUN python -m pip install -r source/requirements.txt + +# Install pip requirements into the OV instance of python +RUN python source/requirements.py + # During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug ENTRYPOINT [ "python", "source/ingest_app_csv/run_app.py", "--server", "", "--username", "", "--password", "" ] diff --git a/PACKAGE-INFO.yaml b/PACKAGE-INFO.yaml deleted file mode 100644 index c2528b2..0000000 --- a/PACKAGE-INFO.yaml +++ /dev/null @@ -1,2 +0,0 @@ -Package : kit-extension-template-cpp -License Type : Modified Apache 2.0 diff --git a/README.md b/README.md index f3772d3..3c50a3e 100644 --- a/README.md +++ b/README.md @@ -33,20 +33,35 @@ IoT Samples guides you on how-to: - Perform transformations of USD geometry using IoT data - Incorporate Omniverse OmniGraph/ActionGraph with IoT data -The repository is broken down into the following folders: - -- *app* - Is a symlink to the *Omniverse Kit* based app. Note: This folder **does not exist** when the repo is first cloned. You must follow the instruction for configuring the folder which is found here: [App Link Setup](#app-link-setup). -- *content* - Contains the content data used by the samples. -- *deps* - Contains the packman dependencies required for the stand-alone data ingestion applications. -- *exts* - Contains the sample Omniverse extension. -- *source* - Contains the stand-alone python sample applications for ingesting and manipulating a USD stage with a headless connector. -- *tools* - Contains the utility code for building and packaging Omniverse native C++ client applications, +## Repository Structure + +| Directory Item | Purpose | +|------------------|------------------------------------------------------------| +| .vscode | VS Code configuration details and helper tasks | +| content/ | Assets used by the samples | +| readme-assets/ | Images and additional repository documentation | +| source/ | Source code for the sample applications and extensions | +| templates/ | Template Applications and Extensions. | +| tools/ | Tooling settings and repository specific (local) tools | +| .dockerignore | [docklerignore](https://docs.docker.com/build/building/context/#dockerignore-files) file. | +| .editorconfig | [EditorConfig](https://editorconfig.org/) file. | +| .gitattributes | Git configuration. | +| .gitignore | Git configuration. | +| Dockerfile | [Dockerfile](https://docs.docker.com/reference/dockerfile/) | +| LICENSE | License for the repo. | +| README.md | Project information. | +| premake5.lua | Build configuration - such as what apps to build. | +| repo.bat | Windows repo tool entry point. | +| repo.sh | Linux repo tool entry point. | +| repo.toml | Top level configuration of repo tools. | +| repo_tools.toml | Setup of local, repository specific tools | +| tar_ignore.txt | List of file to ignore when building the Docker image | When opening the `iot-samples` folder in Visual Studio Code, you will be promted to install a number of extensions that will enhance the python experience in Visual Studio Code. # Architecture -![Connector Architecture](content/docs/architecture.jpg?raw=true) +![Connector Architecture](readme-assets/docs/architecture.jpg?raw=true) The architecture decouples the IoT data model from the presentation in Omniverse, allowing for a data driven approach and separation of concerns that is similar to a [Model/View/Controller (MVC) design pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller). The diagram above illustrates the key components to a solution. These are: - **Customer Domain** - represents the data sources. Industrial IoT deployments require connecting operational technology (OT) systems, such as SCADA, PLC, to information technology (IT) systems to enable various use cases to improve efficiency, productivity, and safety in various industries. These deployments provide a data ingestion endpoint to connect OT data to IT and cloud applications. Some of the widely adopted methods for connecting OT data include MQTT and Kafka. The samples in this repository use CSV and MQTT as data sources, but you can develop your IoT project with any other connectivity method. @@ -67,87 +82,85 @@ Note: Connectors implement a producer/consumer pattern that is not mutually excl # Prerequisites Before running any of the installation a number of prerequisites are required. -Follow the [Getting Started with Omniverse ](https://www.nvidia.com/en-us/omniverse/download/) to install the latest Omniverse version. +Follow the [Getting Started with Omniverse ](https://www.nvidia.com/en-us/omniverse/download/) to install the latest Omniverse Launcher. -If you've already installed Omniverse, ensure you have updated to the latest +If you've already installed Omniverse Launcher, ensure you have updated to the latest * Python 3.10 or greater -* Kit 105.1 or greater -* USD Composer 2023.2.0 or greater * Nucleus 2023.1 or greater # Installation -Once you have the latest Omniverse prerequisites installed, please run the following to install the needed Omniverse USD resolver, Omni client, and related dependencies. +Once you have the prerequisites installed, please run the following to install the needed Omniverse USD resolver, Omni client, and related dependencies. -``` -Windows -> install.bat -``` -``` -Linux -> ./install.sh -``` - -### App Link Setup +### 1. Clone the Repository -If `app` folder link doesn't exist or becomes broken it can be recreated. For a better developer experience it is recommended to create a folder link named `app` to the *Omniverse Kit* app installed from *Omniverse Launcher*. A convenience script to use is included. +Begin by cloning the `iot-samples` to your local workspace: -Run: +#### 1a. Clone +```bash +git clone https://github.com/NVIDIA-Omniverse/iot-samples ``` -Windows -> link_app.bat -``` + +#### 1b. Navigate to Cloned Directory + +```bash +cd iot-samples ``` -Linux -> ./link_app.sh + +### 2. Build the Omniverse Application + +Build The application application with the following command: + +**Linux:** +```bash +./repo.sh build ``` +**Windows:** +```powershell +.\repo.bat build + ``` + If you experience issues related to build, please see the [Usage and Troubleshooting](readme-assets/additional-docs/usage_and_troubleshooting.md) section for additional information. -If successful you should see an `app` folder link in the root of this repo. -If multiple Omniverse apps are installed the script will automatically select one. Or you can explicitly pass an app: +### 3. Launch Omniverse +Start the application using: + +**Linux:** +```bash +./repo.sh launch ``` -Windows -> link_app.bat --app create -``` -``` -Linux -> ./link_app.sh --app create +**Windows:** +```powershell +.\repo.bat launch ``` -You can also pass an explicit path to the Omniverse Kit app: +**Select `iot_samples.usd_explorer.kit` with arrow keys and press enter** -``` -Windows -> link_app.bat --path "%USERPROFILE%/AppData/Local/ov/pkg/create-2023.2.0" -``` -``` -Linux -> ./link_app.sh --path "~/.local/share/ov/pkg/create-2023.2.0" -``` +***NOTE:* The initial startup may take 5 to 8 minutes as shaders compile for the first time. After initial shader compilation, startup time will reduce dramatically** # Headless Connector -Headless connectos are stand-alone applications that implements a bidirectional bridge between customer domain and USD related data. The logic implemented by a connector is use-case dependent and can be simple or complex. +Headless connectos are stand-alone applications that implement a bidirectional bridge between customer domain and USD related data. The logic implemented by a connector is use-case dependent and can be simple or complex. There are two sample connector applications - [CSV Ingest Application](#csv-ingest-application) and [MQTT Ingest Application](#mqtt-ingest-application) - that transits the data as is from source to destination, whereas the [Geometry Transformation Application](#direct-to-usd-from-headless-connector) manipulates USD geometry directly in the connector. Depending on the use cases, a connector can run as a headless application locally, on-prem, at the edge, or in the cloud. ### CSV Ingest Application To execute the application run the following: -``` -> python source/ingest_app_csv/run_app.py +```bash +python source/ingest_app_csv/run_app.py -u -p -s (optional default: localhost) ``` Or if you are using Environment Variables (see [Using Environment Variables](#using-environment-variables)) -``` -> python source/ingest_app_csv/run_app.py +```bash +python source/ingest_app_csv/run_app.py ``` @@ -180,27 +193,30 @@ The CSV ingest application can be found in the `./source/ingest_app_csv` folder. - Sleep for the the duration of delta between the previous and current `TimeStamp`. -In `USD Composer` or `Kit`, open `omniverse:///users//iot-samples/ConveyorBelt_A08_PR_NVD_01/ConveyorBelt_A08_PR_NVD_01.usd` and join the `iot_session` live collaboration session. See [Joining a Live Session](#joining-a-live-session) for detailed instructions. +In your Omniverse application, open `omniverse:///users//iot-samples/ConveyorBelt_A08_PR_NVD_01/ConveyorBelt_A08_PR_NVD_01.usd` and join the `iot_session` live collaboration session. See [Joining a Live Session](#joining-a-live-session) for detailed instructions. Once you have joined the `iot_session`, then you should see the following: -![iot data in usd](content/docs/stage_001.png?raw=true) +![iot data in usd](readme-assets/docs/stage_001.png?raw=true) Selecting the `/iot/A08_PR_NVD_01` prim in the `Stage` panel and toggling the `Raw USD Properties` in the `Property` panel will provide real-time updates from the the data being pushed by the Python application. ### MQTT Ingest Application To execute the application run the the following: -``` -> python source/ingest_app_mqtt/run_app.py + +**Windows:** +```powershell +python source/ingest_app_mqtt/run_app.py -u -p -s (optional default: localhost) ``` Or if you are using Environment Variables (see [Using Environment Variables](#using-environment-variables)) -``` -> python source/ingest_app_mqtt/run_app.py +**Windows:** +```powershell +python source/ingest_app_mqtt/run_app.py ``` Username and password are of the Nucleus instance (running on local workstation or on cloud) you will be connecting to for your IoT projects. @@ -246,15 +262,15 @@ The MQTT ingest application can be found in the `./source/ingest_app_mqtt` folde -In `'USD Composer'` or `Kit`, open `omniverse:///users//iot-samples/ConveyorBelt_A08_PR_NVD_01/ConveyorBelt_A08_PR_NVD_01.usd` and join the `iot_session` live collaboration session. . See [Joining a Live Session](#joining-a-live-session) for detailed instructions. +In your Omniverse application, open `omniverse:///users//iot-samples/ConveyorBelt_A08_PR_NVD_01/ConveyorBelt_A08_PR_NVD_01.usd` and join the `iot_session` live collaboration session. See [Joining a Live Session](#joining-a-live-session) for detailed instructions. Once you have joined the `iot_session`, then you should see the following: -![iot data in usd](content/docs/stage_001.png?raw=true) +![iot data in usd](readme-assets/docs/stage_001.png?raw=true) Selecting the `/iot/A08_PR_NVD_01` prim in the `Stage` panel and toggling the `Raw USD Properties` in the `Property` panel will provide real-time updates from the data being pushed by the python application -### Containerize headless connector +### Containerized headless connector The following is a simple example of how to deploy a headless connector application into Docker Desktop for Windows. Steps assume the use of - WSL (comes standard with Docker Desktop installation) and @@ -270,13 +286,14 @@ The ollowing has to be done in **WSL environment** and *NOT* in Windows environm Once you have a new repo cloned, from within WSL run. -``` -> ./install.sh +**Linux:** +```bash +./repo.sh build ``` - Share the Nucleus services using a web browser by navigating to http://localhost:3080/. Click on 'Enable Sharing'. This will enable access to Nucleus services from WSL. - ![Sharing Nucleus services](content/docs/sharing.png) + ![Sharing Nucleus services](readme-assets/docs/sharing.png) - Record the *WSL IP address* of the host machine for use by the container application. ``` @@ -312,10 +329,6 @@ Once you have a new repo cloned, from within WSL run. # Turns off buffering for easier container logging ENV PYTHONUNBUFFERED=1 - # Install pip requirements - COPY requirements.txt . - RUN python -m pip install -r requirements.txt - WORKDIR /app COPY . /app @@ -329,16 +342,20 @@ Once you have a new repo cloned, from within WSL run. ``` - Create a docker image named `headlessapp`. + + **Linux:** ```bash tar -czh -X tar_ignore.txt . | docker build -t headlessapp - ``` - Run a container with the lastest version of the `headlessapp` image - ``` + + **Windows:** + ```powershell docker run -d --add-host host.docker.internal:host-gateway -p 3100:3100 -p 8891:8891 -p 8892:8892 headlessapp:latest ``` - Watch the application run in Docker Desktop. - ![open settings](content/docs/docker_logs.png?raw=true) + ![open settings](readme-assets/docs/docker_logs.png?raw=true) # Consuming IoT data in USD @@ -355,77 +372,89 @@ The sample IoT Extension uses Omniverse Extensions, which are the core building The IoT Extension demonstrates; -1. Visualizing IoT data -2. Animating a USD stage using IoT data +- Visualizing IoT data +- Animating a USD stage using IoT data -To enable the IoT Extension in USD Composer or Kit, do the following: -Open the Extensions panel by clicking on **Window** > **Extensions** in the menu and then follow the steps as shown. +**Visualizing IoT data** -![open settings](content/docs/ext_001.png?raw=true) +The IoT Extension leverages the Omniverse UI Framework to visualize the IoT data as a panel. [Find out more about the Omniverse UI Framework](https://docs.omniverse.nvidia.com/kit/docs/omni.ui/latest/Overview.html) -![map to extension folder](content/docs/ext_002.png?raw=true) +1. **Launch Omniverse** -![enabling extension](content/docs/enabling_iot_panel_extension.png?raw=true) +Start the application using: -1. **Visualizing IoT data** +**Linux:** +```bash +./repo.sh launch +``` +**Windows:** +```powershell +.\repo.bat launch +``` -The IoT Extension leverages the Omniverse UI Framework to visualize the IoT data as a panel. [Find out more about the Omniverse UI Framework](https://docs.omniverse.nvidia.com/kit/docs/omni.ui/latest/Overview.html) +**Select `iot_samples.panel_extension.kit` with arrow keys and press enter** +***NOTE:* The initial startup may take 5 to 8 minutes as shaders compile for the first time. After initial shader compilation, startup time will reduce dramatically** -Once you have enabled the IoT extension, you should see IoT data visualized in a Panel. +2. **Load the staage** -![iot panel](content/docs/iot_panel.png?raw=true) +In your Omniverse application, -Alternatively, you can launch your app from the console with this folder added to search path and your extension enabled, e.g.: +open `omniverse:///users//iot-samples/ConveyorBelt_A08_PR_NVD_01/ConveyorBelt_A08_PR_NVD_01.usd`. -``` -> app\omni.code.bat --ext-folder exts --enable omni.iot.sample.panel -``` -2. **Animating a USD stage using IoT data** +3. **Join the IoT Live session** -In `'USD Composer'` or `Kit`, +See [Joining a Live Session](#joining-a-live-session) -open `omniverse:///users//iot-samples/ConveyorBelt_A08_PR_NVD_01/ConveyorBelt_A08_PR_NVD_01.usd`. +4. **Select the Iot Topic** + +![iot panel](readme-assets/docs/ext_003.png?raw=true) -Ensure the IoT Extension is enabled. -Click on the `play` icon on the left toolbar of the USD Composer and the extension will animate to the `Velocity` value change in the IoT data +Click on the `play` icon on the bottom right of the applications's viewport and then start the timeline. The extension will animate to the `Velocity` value change in the IoT data -![open settings](content/docs/play_to_animate.png?raw=true) +![show the timeline](readme-assets/docs/play_to_animate.png?raw=true) + +![play](readme-assets/docs/start_timeline.png?raw=true) and then run one of the following: - ``` - source\ingest_app_csv\run_app.py - -u - -p - -s (optional default: localhost) +**Windows:** +```powershell +source\ingest_app_csv\run_app.py + -u + -p + -s (optional default: localhost) ``` or - ``` - source\ingest_app_mqtt\run_app.py - -u - -p - -s (optional default: localhost) +**Windows:** +```powershell +source\ingest_app_mqtt\run_app.py + -u + -p + -s (optional default: localhost) ``` If you are using Environment Variables (see [Using Environment Variables](#using-environment-variables)) then run one of the following: -``` -> python source/ingest_app_csv/run_app.py +**Windows:** +```powershell +python source/ingest_app_csv/run_app.py ``` or -``` -> python source/ingest_app_mqtt/run_app.py + +**Windows:** +```powershell +python source/ingest_app_mqtt/run_app.py ``` Username and password are for the target Nucleus instance (running on local workstation or on cloud) that you will be connecting to for your IoT projects. You will see the following animation with the cube moving: -![animation playing](content/docs/animation_playing.png?raw=true) +![animation playing](readme-assets/docs/animation_playing.png?raw=true) When the IoT velocity value changes, the extension will animate the rollers (`LiveRoller` class) as well as the cube (`LiveCube` class). @@ -441,7 +470,7 @@ To access the graph: You should see the following: -![action graph](content/docs/action_graph.png?raw=true) +![action graph](readme-assets/docs/action_graph.png?raw=true) The Graph performs the following: - Reads the `_ts` attribute from the `/iot/A08_PR_NVD_01` prim. @@ -455,8 +484,10 @@ The Graph performs the following: Sample demonstrates how to execute USD tranformations from a headless connector using arbtriary values. To execute the application run the the following: -``` -> python source/transform_geometry/run_app.py + +**Windows:** +```powershell +python source/transform_geometry/run_app.py -u -p -s (optional default: localhost) @@ -479,33 +510,34 @@ The sample geometry transformation application can be found in `source\transform If you open `omniverse:///users//iot-samples/Dancing_Cubes.usd` in `Composer` or `Kit`, you should see the following: -![Rotating Cubes](content/docs/cubes.png) +![Rotating Cubes](readme-assets/docs/cubes.png) # Joining A Live Session Here's how-to join a live collaboration session. Click on `Join Session` -![join session](content/docs/join_session.png) +![join session](readme-assets/docs/join_session.png) Select `iot-session` from the drop down to join the already created live session. -![joint iot session](content/docs/join_iot_session.png) +![joint iot session](readme-assets/docs/join_iot_session.png) # API Key Authentication To authenicate the connector application using an API Key, start Nucleus Explore from the Omniverse Launcher application and right click on the server you wish to connect to and select `API Tokens` -![select API Tokens](content/docs/auth_1.png) +![select API Tokens](readme-assets/docs/auth_1.png) Provide a token name and click `Create` -![create API Tokens](content/docs/auth_2.png) +![create API Tokens](readme-assets/docs/auth_2.png) Copy the token token value and store it somewhere safe. If you are using the `run_app.py` application launcher you can do the following: -``` -> python source/ingest_app_csv/run_app.py +**Windows:** +```powershell +python source/ingest_app_csv/run_app.py -u $omni-api-token -p -s (optional default: localhost) @@ -513,38 +545,67 @@ If you are using the `run_app.py` application launcher you can do the following: Or if you are using Environment Variables (see [Using Environment Variables](#using-environment-variables)) you can do the following: -``` -> python source/ingest_app_csv/run_app.py +**Windows:** +```powershell +python source/ingest_app_csv/run_app.py ``` # Using Environment Variables The samples supports Nucleus authentication via Environment Variables. -For Windows Powershell with User Name/Password: +Set User Name and Password environment variables: + +**Linux:** +```bash +export OMNI_HOST= +export OMNI_USER= +export OMNI_PASS= +``` + +**Windows:** ```powershell $Env:OMNI_HOST = "" $Env:OMNI_USER = "" $Env:OMNI_PASS = "" ``` -For Windows Powershell with API Token: +Set the API Token environment variable: + +**Linux:** +```bash +export OMNI_HOST= +export OMNI_USER=\$omni-api-token +export OMNI_PASS= +``` + +**Windows:** ```powershell $Env:OMNI_HOST = "" $Env:OMNI_USER = "`$omni-api-token" $Env:OMNI_PASS = "" ``` -For Linux Bash with User Name/Password: -```bash -export OMNI_HOST= -export OMNI_USER= -export OMNI_PASS= -``` +## License -For Linux Bash with API Token: -```bash -export OMNI_HOST= -export OMNI_USER=\$omni-api-token -export OMNI_PASS= -``` +Development using the Omniverse Kit SDK is subject to the licensing terms detailed [here](https://docs.omniverse.nvidia.com/dev-guide/latest/common/NVIDIA_Omniverse_License_Agreement.html). + +## Data Collection +The Omniverse Kit SDK collects anonymous usage data to help improve software performance and aid in diagnostic purposes. Rest assured, no personal information such as user email, name or any other field is collected. + +To learn more about what data is collected, how we use it and how you can change the data collection setting [see details page](readme-assets/additional-docs/data_collection_and_use.md). + +## Additional Resources + +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) + +- [Usage and Troubleshooting](readme-assets/additional-docs/usage_and_troubleshooting.md) + +- [BETA - Developer Bundle Extensions](readme-assets/additional-docs/developer_bundle_extensions.md) + +- [Omniverse Kit SDK Manual](https://docs.omniverse.nvidia.com/kit/docs/kit-manual/latest/index.html) + + +## Contributing + +We provide this source code as-is and are currently not accepting outside contributions. \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..d49bea6 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,24 @@ +## Security + +NVIDIA is dedicated to the security and trust of our software products and services, including all source code repositories managed through our organization. + +If you need to report a security issue, please use the appropriate contact points outlined below. **Please do not report security vulnerabilities through GitHub/GitLab.** + +## Reporting Potential Security Vulnerability in an NVIDIA Product + +To report a potential security vulnerability in any NVIDIA product: +- Web: [Security Vulnerability Submission Form](https://www.nvidia.com/object/submit-security-vulnerability.html) +- E-Mail: psirt@nvidia.com + - We encourage you to use the following PGP key for secure email communication: [NVIDIA public PGP Key for communication](https://www.nvidia.com/en-us/security/pgp-key) + - Please include the following information: + - Product/Driver name and version/branch that contains the vulnerability + - Type of vulnerability (code execution, denial of service, buffer overflow, etc.) + - Instructions to reproduce the vulnerability + - Proof-of-concept or exploit code + - Potential impact of the vulnerability, including how an attacker could exploit the vulnerability + +While NVIDIA currently does not have a bug bounty program, we do offer acknowledgement when an externally reported security issue is addressed under our coordinated vulnerability disclosure policy. Please visit our [Product Security Incident Response Team (PSIRT)](https://www.nvidia.com/en-us/security/psirt-policies/) policies page for more information. + +## NVIDIA Product Security + +For all security-related concerns, please visit NVIDIA's Product Security portal at https://www.nvidia.com/en-us/security diff --git a/VERSION.md b/VERSION.md deleted file mode 100644 index 013101b..0000000 --- a/VERSION.md +++ /dev/null @@ -1 +0,0 @@ -105.0 \ No newline at end of file diff --git a/content/docs/action_graph.png b/content/docs/action_graph.png deleted file mode 100644 index 8e5097a..0000000 --- a/content/docs/action_graph.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6b547f8af418c2461c6a59637fc60ee66a63123760d34b899d3b1551acf6edde -size 26758 diff --git a/content/docs/animation_playing.png b/content/docs/animation_playing.png deleted file mode 100644 index 82e71e1..0000000 --- a/content/docs/animation_playing.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e80946754c85c57fed9d3736f00a42e53acad745cab93a6e993468b1eaaadaef -size 2611232 diff --git a/content/docs/animation_video.mp4 b/content/docs/animation_video.mp4 deleted file mode 100644 index a14e564..0000000 --- a/content/docs/animation_video.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a071986fce8640fa6501c2022816bd03c66b0f6c570c1b6aeffa6ad0170ecb23 -size 58628283 diff --git a/content/docs/architecture.jpg b/content/docs/architecture.jpg deleted file mode 100644 index af40c23..0000000 --- a/content/docs/architecture.jpg +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:563f3f7aa17a55dc81b371f617f32b9f040ad55305d5d018a995a4a0e96bcdf7 -size 111437 diff --git a/content/docs/auth_1.png b/content/docs/auth_1.png deleted file mode 100644 index 05a0a56..0000000 --- a/content/docs/auth_1.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7bb266bc3cff5e171501cab55d97f982a2c38c1362cb37473bc15981e8ed3605 -size 65843 diff --git a/content/docs/auth_2.png b/content/docs/auth_2.png deleted file mode 100644 index 7e41599..0000000 --- a/content/docs/auth_2.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:49a542fa5b0fd3d6aaaef2e38043a27319fab2aa2dac9be4c4fd2b1f75a85373 -size 61648 diff --git a/content/docs/cubes.png b/content/docs/cubes.png deleted file mode 100644 index 2b4c986..0000000 --- a/content/docs/cubes.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:90b7326eae158ab058fd314868588381998bc0a73bba6e3f572b4ea02eb92fa0 -size 286441 diff --git a/content/docs/docker_logs.png b/content/docs/docker_logs.png deleted file mode 100644 index 38307f7..0000000 --- a/content/docs/docker_logs.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e24dc2af9df8384301fec515f98993f236c9ba5a32c8338d79459c14e25b2a8 -size 134393 diff --git a/content/docs/enabling_iot_panel_extension.png b/content/docs/enabling_iot_panel_extension.png deleted file mode 100644 index 6ba8df3..0000000 --- a/content/docs/enabling_iot_panel_extension.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2b002a3d20b46318bd3f5ff521fe8dd84280ab4a252bbee68cec2854bc24cec7 -size 780913 diff --git a/content/docs/ext_001.png b/content/docs/ext_001.png deleted file mode 100644 index ea1c25c..0000000 --- a/content/docs/ext_001.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ee80caa2b3e955f69f75b57cb3ab9d27960d6a6d047098265051919280f95a8d -size 163402 diff --git a/content/docs/ext_002.png b/content/docs/ext_002.png deleted file mode 100644 index f009a5e..0000000 --- a/content/docs/ext_002.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0153a347c98cc69c6fdad828d4f0f05733d11360fd72e4c2730b78bb65400978 -size 224451 diff --git a/content/docs/ext_003.png b/content/docs/ext_003.png deleted file mode 100644 index dfa8f43..0000000 --- a/content/docs/ext_003.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:843c50e01b18d29b771cb20c3ba36bf5caf998c28e9b4029e04966eaac093146 -size 557826 diff --git a/content/docs/iot_panel.png b/content/docs/iot_panel.png deleted file mode 100644 index e7d7aa6..0000000 --- a/content/docs/iot_panel.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58aa99d612ad0657827bacf8f6cea3109dd38f296e1f9478fa79b3644b2814c9 -size 2288011 diff --git a/content/docs/join_iot_session.png b/content/docs/join_iot_session.png deleted file mode 100644 index 57f4158..0000000 --- a/content/docs/join_iot_session.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4307924f114657c2ecc4ec9168170c4e8d09e4a6e3eb1e3ad5156350a95f52d -size 1516364 diff --git a/content/docs/join_session.png b/content/docs/join_session.png deleted file mode 100644 index b8761b0..0000000 --- a/content/docs/join_session.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:149b0337eec04dc93a282c161a0e2e9db3bebd6461275f50befeffb5473205d7 -size 2294086 diff --git a/content/docs/play_to_animate.png b/content/docs/play_to_animate.png deleted file mode 100644 index b60c5a7..0000000 --- a/content/docs/play_to_animate.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8d94231ea92407d9f0f6383c5e3cd28746b4d4bbef1dd43dc98dfb3daa0fcc5c -size 2295575 diff --git a/content/docs/sharing.png b/content/docs/sharing.png deleted file mode 100644 index 20902fa..0000000 --- a/content/docs/sharing.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5e75d013417a9ea0cb539a5666d775793ae14f1137f5527c20fb1eae180e344e -size 282357 diff --git a/content/docs/stage_001.png b/content/docs/stage_001.png deleted file mode 100644 index c8f3bc1..0000000 --- a/content/docs/stage_001.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e35cfd92cd512d298f520a1a6cf89661e84ce72d4478be0f53653984be0d6ce4 -size 2031258 diff --git a/deps/ext-deps.packman.xml b/deps/ext-deps.packman.xml deleted file mode 100644 index 0568f8a..0000000 --- a/deps/ext-deps.packman.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/deps/host-deps.packman.xml b/deps/host-deps.packman.xml deleted file mode 100644 index cc5670b..0000000 --- a/deps/host-deps.packman.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/deps/kit-sdk-deps.packman.xml b/deps/kit-sdk-deps.packman.xml deleted file mode 100644 index 5bc56fe..0000000 --- a/deps/kit-sdk-deps.packman.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/deps/kit-sdk.packman.xml b/deps/kit-sdk.packman.xml deleted file mode 100644 index dbdbe12..0000000 --- a/deps/kit-sdk.packman.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/deps/repo-deps.packman.xml b/deps/repo-deps.packman.xml deleted file mode 100644 index 516130c..0000000 --- a/deps/repo-deps.packman.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/exts/omni.iot.sample.panel/config/extension.toml b/exts/omni.iot.sample.panel/config/extension.toml deleted file mode 100644 index b91707f..0000000 --- a/exts/omni.iot.sample.panel/config/extension.toml +++ /dev/null @@ -1,47 +0,0 @@ -[package] -# Semantic Versioning is used: https://semver.org/ -version = "1.0.0" - -# Lists people or organizations that are considered the "authors" of the package. -authors = ["NVIDIA"] - -# The title and description fields are primarily for displaying extension info in UI -title = "omni iot sample panel" -description="A simple python extension example to use as a starting point for your extensions." - -# Path (relative to the root) or content of readme markdown file for UI. -readme = "docs/README.md" - -# URL of the extension source repository. -repository = "" - -# One of categories for UI. -category = "Example" - -# Keywords for the extension -keywords = ["kit", "example"] - -# Location of change log file in target (final) folder of extension, relative to the root. -# More info on writing changelog: https://keepachangelog.com/en/1.0.0/ -changelog="docs/CHANGELOG.md" - -# Preview image and icon. Folder named "data" automatically goes in git lfs (see .gitattributes file). -# Preview image is shown in "Overview" of Extensions window. Screenshot of an extension might be a good preview image. -preview_image = "data/preview.png" - -# Icon is shown in Extensions window, it is recommended to be square, of size 256x256. -icon = "data/icon.png" - -# Use omni.ui to build simple UI -[dependencies] -"omni.kit.uiapp" = {} - -# Main python module this extension provides, it will be publicly available as "import omni.iot.sample.panel". -[[python.module]] -name = "omni.iot.sample.panel" - -[[test]] -# Extra dependencies only to be used during test run -dependencies = [ - "omni.kit.ui_test" # UI testing extension -] diff --git a/exts/omni.iot.sample.panel/data/icon.png b/exts/omni.iot.sample.panel/data/icon.png deleted file mode 100644 index a1d5f6b..0000000 Binary files a/exts/omni.iot.sample.panel/data/icon.png and /dev/null differ diff --git a/exts/omni.iot.sample.panel/data/preview.png b/exts/omni.iot.sample.panel/data/preview.png deleted file mode 100644 index 9b3e496..0000000 Binary files a/exts/omni.iot.sample.panel/data/preview.png and /dev/null differ diff --git a/exts/omni.iot.sample.panel/docs/README.md b/exts/omni.iot.sample.panel/docs/README.md deleted file mode 100644 index 9f3e4e5..0000000 --- a/exts/omni.iot.sample.panel/docs/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Python Extension Example [omni.iot.sample.panel] - -This is an example of pure python Kit extension. It is intended to be copied and serve as a template to create new extensions. - diff --git a/exts/omni.iot.sample.panel/docs/index.rst b/exts/omni.iot.sample.panel/docs/index.rst deleted file mode 100644 index ca3e7f9..0000000 --- a/exts/omni.iot.sample.panel/docs/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -omni.iot.sample.panel -############################# - -Example of Python only extension - - -.. toctree:: - :maxdepth: 1 - - README - CHANGELOG - - -.. automodule::"omni.iot.sample.panel" - :platform: Windows-x86_64, Linux-x86_64 - :members: - :undoc-members: - :show-inheritance: - :imported-members: - :exclude-members: contextmanager diff --git a/exts/omni.iot.sample.panel/omni/iot/sample/panel/__init__.py b/exts/omni.iot.sample.panel/omni/iot/sample/panel/__init__.py deleted file mode 100644 index 53b61d6..0000000 --- a/exts/omni.iot.sample.panel/omni/iot/sample/panel/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .extension import * diff --git a/exts/omni.iot.sample.panel/omni/iot/sample/panel/tests/__init__.py b/exts/omni.iot.sample.panel/omni/iot/sample/panel/tests/__init__.py deleted file mode 100644 index db3b63a..0000000 --- a/exts/omni.iot.sample.panel/omni/iot/sample/panel/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .test_hello_world import * \ No newline at end of file diff --git a/exts/omni.iot.sample.panel/omni/iot/sample/panel/tests/test_hello_world.py b/exts/omni.iot.sample.panel/omni/iot/sample/panel/tests/test_hello_world.py deleted file mode 100644 index da00f1e..0000000 --- a/exts/omni.iot.sample.panel/omni/iot/sample/panel/tests/test_hello_world.py +++ /dev/null @@ -1,48 +0,0 @@ -# NOTE: -# omni.kit.test - std python's unittest module with additional wrapping to add suport for async/await tests -# For most things refer to unittest docs: https://docs.python.org/3/library/unittest.html -import omni.kit.test - -# Extnsion for writing UI tests (simulate UI interaction) -import omni.kit.ui_test as ui_test - -# Import extension python module we are testing with absolute import path, as if we are external user (other extension) -import omni.iot.sample.panel - - -# Having a test class dervived from omni.kit.test.AsyncTestCase declared on the root of module will make it auto-discoverable by omni.kit.test -class Test(omni.kit.test.AsyncTestCase): - # Before running each test - async def setUp(self): - pass - - # After running each test - async def tearDown(self): - pass - - # Actual test, notice it is "async" function, so "await" can be used if needed - @omni.kit.test.omni_test_registry(guid="f898a949-bacc-41f5-be56-b4eb8923f54e") - async def test_hello_public_function(self): - result = omni.iot.sample.panel.some_public_function(4) - self.assertEqual(result, 256) - - - @omni.kit.test.omni_test_registry(guid="4626d574-659f-4a85-8958-9fa8588fbce3") - async def test_window_button(self): - - # Find a label in our window - label = ui_test.find("My Window//Frame/**/Label[*]") - - # Find buttons in our window - add_button = ui_test.find("My Window//Frame/**/Button[*].text=='Add'") - reset_button = ui_test.find("My Window//Frame/**/Button[*].text=='Reset'") - - # Click reset button - await reset_button.click() - self.assertEqual(label.widget.text, "empty") - - await add_button.click() - self.assertEqual(label.widget.text, "count: 1") - - await add_button.click() - self.assertEqual(label.widget.text, "count: 2") diff --git a/install.bat b/install.bat deleted file mode 100644 index 287ebeb..0000000 --- a/install.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -call "%~dp0repo" build %* diff --git a/link_app.bat b/link_app.bat deleted file mode 100644 index 9f46856..0000000 --- a/link_app.bat +++ /dev/null @@ -1,10 +0,0 @@ -@echo off - -call "%~dp0tools\packman\python.bat" %~dp0tools\scripts\link_app.py %* -if %errorlevel% neq 0 ( goto Error ) - -:Success -exit /b 0 - -:Error -exit /b %errorlevel% diff --git a/link_app.sh b/link_app.sh deleted file mode 100644 index 042ba8a..0000000 --- a/link_app.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -set -e - -SCRIPT_DIR=$(dirname ${BASH_SOURCE}) -cd "$SCRIPT_DIR" - -exec "tools/packman/python.sh" tools/scripts/link_app.py $@ diff --git a/premake5.lua b/premake5.lua index 15c32ea..a1334ad 100644 --- a/premake5.lua +++ b/premake5.lua @@ -1,22 +1,18 @@ --- Shared build scripts from repo_build package. +--- Shared build scripts from repo_build package. repo_build = require("omni/repo/build") -- Repo root root = repo_build.get_abs_path(".") --- Set the desired MSVC, WINSDK, and MSBUILD versions before executing the kit template premake configuration. -MSVC_VERSION = "14.27.29110" -WINSDK_VERSION = "10.0.18362.0" -MSBUILD_VERSION = "Current" - -- Execute the kit template premake configuration, which creates the solution, finds extensions, etc. dofile("_repo/deps/repo_kit_tools/kit-template/premake5.lua") --- Example application that runs kit with the minimal set of extensions required to use the extension browser. ---define_app("omni.app.example.extension_browser") +-- Registries config for testing +repo_build.prebuild_copy { + { "%{root}/tools/deps/user.toml", "%{root}/_build/deps/user.toml" }, +} --- Example application that runs kit with the minimal set of extensions required to use the viewport. ---define_app("omni.app.example.viewport") +-- Apps: for each app generate batch files and a project based on kit files (e.g. my_name.my_app.kit) --- The default kit dev app with extensions from this repo made available. ---define_app("omni.app.kit.dev") +define_app("iot_samples.usd_explorer.kit") +define_app("iot_samples.panel_extension.kit") \ No newline at end of file diff --git a/readme-assets/additional-docs/data_collection_and_use.md b/readme-assets/additional-docs/data_collection_and_use.md new file mode 100644 index 0000000..1cd9a28 --- /dev/null +++ b/readme-assets/additional-docs/data_collection_and_use.md @@ -0,0 +1,49 @@ +# Data Collection & Use + + +## Overview + + +NVIDIA Omniverse Kit Application Template collects anonymous usage data to help improve software performance and aid in diagnostic purposes. Rest assured, no personal information such as user email, name or any other PII field is collected. + + +## Purpose + + +Omniverse Kit Application Template starts collecting data when you begin interaction with our provided software. +It includes:- +- Installation and configuration details such as version of operating system, applications installed : Allows us to recognize usage trends & patterns +- Hardware Details such as CPU, GPU, monitor information : Allows us to optimize settings in order to provide best performance +- Product session and feature usage : Allows us to understand user journey and product interaction to further enhance workflows +Error and crash logs : Allows us to improve performance & stability for troubleshooting and diagnostic purposes of our software + + + + +## Turn off Data Collection + + +To turn off data collection, you must need to change a setting: + + +1. After creating an application with the `template new` tooling, go to the `source/apps` directory +2. Locate the `.kit` file for the application you want to disable telemetry for. +3. Find the following section in the `.kit` file: + + + ```toml + [settings.telemetry] + # Anonymous Kit application usage telemetry + enableAnonymousData = true + ``` +4. Change `enableAnonymousData` to `false`: + + + ```toml + [settings.telemetry] + # Anonymous Kit application usage telemetry + enableAnonymousData = false + ``` + + +Disabling telemetry stops data collection from your application. diff --git a/readme-assets/additional-docs/developer_bundle_extensions.md b/readme-assets/additional-docs/developer_bundle_extensions.md new file mode 100644 index 0000000..a4ef5e3 --- /dev/null +++ b/readme-assets/additional-docs/developer_bundle_extensions.md @@ -0,0 +1,63 @@ +# BETA - Developer Bundle Extensions + +## Overview + +The BETA Developer Bundle Extensions provide a suite of tools designed to enhance the development and debugging process within Omniverse Kit applications. These extensions fall into a few categories, each aimed at streamlining specific aspects of application and extension development. Given their BETA status, these tools are in active development, which means they will undergo continual enhancements, updates, and possibly some significant changes. + +--- + +## Enabling Developer Bundle Extensions + +**Linux** +```bash +./repo.sh launch --dev-bundle +``` + +**Windows** +```powershell +.\repo.bat launch --dev-bundle +``` + +The `launch` tool will prompt for a selection of a `.kit` file to launch. Select the desired UI based application. The developer bundle is not currently suitable for headless services. + +--- + +## Developer Bundle + +### Developer Utilities + +Developer Utilities are designed to assist developers in various aspects of application development, from debugging to extension management. These utilities offer insight into the internal workings of an application and its extensions. + +- **[Developer > Utilities > Debug Settings] omni.kit.debug.settings**: This utility provides a detailed view of the configurable settings for extensions within an application, making it easier to tweak and optimize extension behavior. + +- **[Developer > Utilities > Commands] omni.kit.window.commands**: Captures the command history within a running application. It is particularly useful for developers who interact with the UI, allowing them to capture the commands used to execute specific functionalities. + +- **[Developer > Utilities > Extensions] omni.kit.window.extensions**: The most popular utility, this tool manages available extensions. It provides quick access to the extension registry and local extensions, simplifying the process of adding dependencies for developer extensions and applications. + +- **[Developer > Utilities > Window Inspector] omni.kit.window.inspector**: Enables developers to inspect UI elements, understanding their configuration and structure, which is helpful for efficient UI development. + +- **[Developer > Utilities > Script Editor] omni.kit.window.script_editor**: A simplified script editor for running short code snippets directly within the application. It's a helpful tool for testing small pieces of code before integrating them into a project. Additionally, it offers useful sample scripts that can be executed live. + +### Live Documentation + +Live Documentation extensions offer in-app documentation, making it easier for developers to understand and leverage various components of the Omniverse Kit SDK. + +- **[Developer > Documentation > Omni UI Style Docs] omni.kit.documentation.ui.style**: Provides in-app documentation for UI styling, helping developers achieve the desired look and feel for their applications. + +- **[Developer > Documentation > Omni Viewport Docs] omni.kit.viewport.docs**: Offers in-app documentation for viewport usage, enabling developers to leverage viewport features effectively. + +- **[Developer > Documentation > Omni UI Scene Docs] omni.ui.scene.docs**: Delivers in-app documentation for in-scene (within the viewport) UI elements, assisting developers in creating immersive and interactive 3D environments. + +### Profiling + +Profiling tools are essential for identifying bottlenecks and optimizing application performance. This category includes: + +- **[Developer > Profiling > Tracy] omni.kit.profiler.tracy**: An application profiler that can be launched and connected to analyze the application's performance in depth. + +- **[Developer > Profiling > Profiler Window] omni.kit.profiler.window**: Provides quick access to a profiler UI window, offering summary information about application performance and facilitating easy identification of potential issues. + +- **[Developer > Profiling > Performance] omni.kit.runtime_performance_monitor**: A configurable performance testing extension that captures performance data during its enabled state. Upon disabling, it prints the results to the console, allowing for an analysis of the application's runtime performance. + +--- + +**:warning: The developer extensions do require a UI based application to run properly. They will not work as expected for headless services** \ No newline at end of file diff --git a/readme-assets/additional-docs/kit_app_template_tooling_guide.md b/readme-assets/additional-docs/kit_app_template_tooling_guide.md new file mode 100644 index 0000000..074b30b --- /dev/null +++ b/readme-assets/additional-docs/kit_app_template_tooling_guide.md @@ -0,0 +1,162 @@ +# Kit App Template Tooling Guide + +This document provides an overview of the practical aspects of using the tooling provided in the `kit-app-template`. Intended for users with a basic familiarity with command-line operations, this guide offers typical usage patterns and recommendations for effective tool use. For a complete list of options for a given tool, use the help command: `./repo.sh [tool] -h` or `.\repo.bat [tool] -h`. + +## Overview of Tools + +The `kit-app-template` repository includes several tools designed to streamline the development of applications and extensions within the Omniverse Kit SDK. + +### Available Tools +- `template` +- `build` +- `launch` +- `test` +- `package` + +Each tool plays a specific role in the development workflow: + +## Template Tool + +**Command:** `./repo.sh template` or `.\repo.bat template` + +### Purpose +The template tool facilitates the initiation of new projects by generating scaffolds for applications or extensions based on predefined templates located in `/templates/templates.toml`. + +### Usage +The template tool has two main commands: `list` and `new`. + +#### `list` +Lists available templates without initiating the configuration wizard. + +**Linux:** +```bash +./repo.sh template list +``` +**Windows:** +```powershell +.\repo.bat template list +``` + +#### `new` +Creates new applications or extensions from templates with interactive prompts guiding you through various configuration choices. + +**Linux:** +```bash +./repo.sh template new +``` +**Windows:** +```powershell +.\repo.bat template new +``` + +## Build Tool + +**Command:** `./repo.sh build` or `.\repo.bat build` + +### Purpose +The build tool compiles all necessary files in your project, ensuring they are ready for execution, testing, or packaging. It includes all resources located in the `source/` directory. + +### Usage +Run the build command before testing or packaging your application to ensure all components are up to date: + +**Linux:** +```bash +./repo.sh build +``` +**Windows:** +```powershell +.\repo.bat build +``` + +Other common build options: +- `-c` or `--clean`: Cleans the build directory before building. +- `x` or `--rebuild`: Rebuilds the project from scratch. + +## Launch Tool + +**Command:** `./repo.sh launch` or `.\repo.bat launch` + +### Purpose +The launch tool is used to start your application after it has been successfully built, allowing you to test it live. + +### Usage +Select and run a built .kit file from the `source/apps` directory: + +**Linux:** +```bash +./repo.sh launch +``` +**Windows:** +```powershell +.\repo.bat launch +``` + +Additional launch options: +- `d` or `--dev-bundle`: Launches with a suite of developer tools enabled in UI-based applications. +- `-p` or `--package`: Launches a packaged application from a specified path. + +**Linux:** +```bash +./repo.sh launch -p /path/to/package.zip +``` +**Windows:** +```powershell +.\repo.bat launch -p C:\path\to\package.zip +``` + +## Test Tool + +**Command:** `./repo.sh test` or `.\repo.bat test` + +### Purpose +The test tool facilitates the execution of automated tests on your applications and extensions to help ensure their functionality and stability. + +### Usage +Always run a build before testing: + +**Linux:** +```bash +./repo.sh test +``` +**Windows:** +```powershell +.\repo.bat test +``` + +## Package Tool + +**Command:** `./repo.sh package` or `.\repo.bat package` + +### Purpose +This tool prepares your application for distribution or deployment by packaging it into a distributable format. + +### Usage +Always run a build before packaging to ensure the application is up-to-date: + +**Linux:** +```bash +./repo.sh package +``` +**Windows:** +```powershell +.\repo.bat package +``` + +By default, the `package` tool creates a `.zip` file named `kit-app-template` in the `_build/packages` directory. The package name can be specified using the `-n` or `--name` flag: + +**Linux:** +```bash +./repo.sh package -n my_package +``` +**Windows:** +```powershell +.\repo.bat package -n my_package +``` + +:warning: **Important Note for Packaging:** Because the packaging operation will package everything within the `source/` directory the package version will need to be set independently of a given `kit` file. **The version is set within the `tools/VERSION.md` file.** + +#### Fat and Thin Packages +Packages can be either 'fat' (including all dependencies) or 'thin' (including only custom extensions and configurations for required registry extensions). Thin packages are created using the `--thin` flag. A fat package is created by default to facilitate ease of use and testing, whereas **thin package distribution is required for broader dissemination.** + +## Additional Resources +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) \ No newline at end of file diff --git a/readme-assets/additional-docs/usage_and_troubleshooting.md b/readme-assets/additional-docs/usage_and_troubleshooting.md new file mode 100644 index 0000000..611a27d --- /dev/null +++ b/readme-assets/additional-docs/usage_and_troubleshooting.md @@ -0,0 +1,51 @@ +# Usage and Troubleshooting + +This section provides high-level information and guidance related to using the Kit App Template repository, along with troubleshooting tips for common issues. + +## Usage Information + +### A Project per Repository +The `build` and `package` tooling provided in this repository is designed to capture all code and assets contained within the `/source` directory. Each time the `template new` command is executed, a new application or extension is created within `/source`. + +For purposes of experimentation and initial development, housing all working assets within the `/source` directory is reasonable. However, as the project matures or requires deployment, it is recommended to segregate projects (typically a single `.kit` file and any required custom extensions) to minimize build times and reduce the size of the resultant package. + +### Applications and Extensions +From the perspective of the Omniverse Kit SDK, everything is considered an extension. The `.kit` files that define applications are simply a convenient method to assemble and configure a set of extensions for specific functionalities, while extensions (and combinations thereof) can act as modular components fulfilling particular tasks. + +For additional information on the Kit SDK and how to create applications and extensions, refer to the [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html). + +### Extendable Templates and Tools +The templates and tools provided in this repository are designed to be extendable. + +#### Templates +Templates consist of a directory structure and boilerplate code containing variables configurable at the time the templates are applied. The `templates.toml` file, located in `templates/templates.toml`, specifies which templates the tooling recognizes. + +#### Tooling +Most tooling is not stored directly within the repository; it is instead downloaded from a remote registry upon the initial use of the tooling. This design allows the tooling to be updated independently of the repository. The framework used for the tooling also supports the definition of custom tools. + +To see this extensibility in action, explore the local tooling defined within `tools/repoman`, specifically the `launch` tool. Configuration for this tool within the repo is delineated in the `repo_tools.toml` file at the root of the repository. + + +## Troubleshooting + +This section outlines potential issues that may arise when using the Kit App Template repository. + +### Initial Rendering Startup Times +When launching an application that requires the RTX renderer, the first launch may take considerably longer than subsequent launches due to shader compilation. **The initial launch can take between 5 to 8 minutes.** Subsequent launches of RTX-enabled applications will be faster as the renderer caches the compiled shaders. + + +### Build Issues +The `template new` tooling ensures that any created application is properly configured to build. However, extensive manual changes can occasionally cause the configuration and `/source` directory contents to become unsynchronized. The specifics of any given build are determined by three main factors: + +1) The state of the top-level `repo.toml` file, especially the `.kit` files listed in the `apps` array within the `[[repo_precache_exts]]` section. + +2) The state of the `premake5.lua` file, particularly which `.kit` files are set to build via `define_app()` (e.g., `define_app("my_company.my_service.kit")`). + +3) The state of the `source` directory, specifically which `.kit` files are present within `source/apps`. + +**To ensure a build proceeds as intended, verify that the same `.kit` files are listed or defined in all three locations.** + +For a clean build, use the command `./repo.sh build -c` or `.\repo.bat build -c` to clean the build directory before building. + +### Windows Long Path +Due to path length limitations on Windows it is recommended to place repository artifacts in a location closer to the root of the drive. This will help avoid issues with the path lengths when building and packaging applications. \ No newline at end of file diff --git a/readme-assets/docs/action_graph.png b/readme-assets/docs/action_graph.png new file mode 100644 index 0000000..7bebfc5 Binary files /dev/null and b/readme-assets/docs/action_graph.png differ diff --git a/readme-assets/docs/animation_playing.png b/readme-assets/docs/animation_playing.png new file mode 100644 index 0000000..3ff7fe7 Binary files /dev/null and b/readme-assets/docs/animation_playing.png differ diff --git a/readme-assets/docs/animation_video.mp4 b/readme-assets/docs/animation_video.mp4 new file mode 100644 index 0000000..ea053e1 Binary files /dev/null and b/readme-assets/docs/animation_video.mp4 differ diff --git a/readme-assets/docs/architecture.jpg b/readme-assets/docs/architecture.jpg new file mode 100644 index 0000000..cd29699 Binary files /dev/null and b/readme-assets/docs/architecture.jpg differ diff --git a/readme-assets/docs/auth_1.png b/readme-assets/docs/auth_1.png new file mode 100644 index 0000000..7d3fba1 Binary files /dev/null and b/readme-assets/docs/auth_1.png differ diff --git a/readme-assets/docs/auth_2.png b/readme-assets/docs/auth_2.png new file mode 100644 index 0000000..95bda98 Binary files /dev/null and b/readme-assets/docs/auth_2.png differ diff --git a/readme-assets/docs/cubes.png b/readme-assets/docs/cubes.png new file mode 100644 index 0000000..93b497f Binary files /dev/null and b/readme-assets/docs/cubes.png differ diff --git a/readme-assets/docs/docker_logs.png b/readme-assets/docs/docker_logs.png new file mode 100644 index 0000000..7c10e0a Binary files /dev/null and b/readme-assets/docs/docker_logs.png differ diff --git a/readme-assets/docs/ext_003.png b/readme-assets/docs/ext_003.png new file mode 100644 index 0000000..746f793 Binary files /dev/null and b/readme-assets/docs/ext_003.png differ diff --git a/readme-assets/docs/join_iot_session.png b/readme-assets/docs/join_iot_session.png new file mode 100644 index 0000000..9868679 Binary files /dev/null and b/readme-assets/docs/join_iot_session.png differ diff --git a/readme-assets/docs/join_session.png b/readme-assets/docs/join_session.png new file mode 100644 index 0000000..83b97fc Binary files /dev/null and b/readme-assets/docs/join_session.png differ diff --git a/readme-assets/docs/play_to_animate.png b/readme-assets/docs/play_to_animate.png new file mode 100644 index 0000000..c789716 Binary files /dev/null and b/readme-assets/docs/play_to_animate.png differ diff --git a/readme-assets/docs/sharing.png b/readme-assets/docs/sharing.png new file mode 100644 index 0000000..8c71340 Binary files /dev/null and b/readme-assets/docs/sharing.png differ diff --git a/readme-assets/docs/stage_001.png b/readme-assets/docs/stage_001.png new file mode 100644 index 0000000..c84d3cd Binary files /dev/null and b/readme-assets/docs/stage_001.png differ diff --git a/readme-assets/docs/start_timeline.png b/readme-assets/docs/start_timeline.png new file mode 100644 index 0000000..74cdf14 Binary files /dev/null and b/readme-assets/docs/start_timeline.png differ diff --git a/images/extension_browser.png b/readme-assets/extension_browser.png similarity index 100% rename from images/extension_browser.png rename to readme-assets/extension_browser.png diff --git a/images/visual_studio_solution.png b/readme-assets/visual_studio_solution.png similarity index 100% rename from images/visual_studio_solution.png rename to readme-assets/visual_studio_solution.png diff --git a/repo.bat b/repo.bat index db5bdd1..00c5c78 100644 --- a/repo.bat +++ b/repo.bat @@ -2,13 +2,17 @@ :: Set OMNI_REPO_ROOT early so `repo` bootstrapping can target the repository :: root when writing out Python dependencies. +:: Use SETLOCAL and ENDLOCAL to constrain these variables to this batch file. +SETLOCAL set OMNI_REPO_ROOT="%~dp0" call "%~dp0tools\packman\python.bat" "%~dp0tools\repoman\repoman.py" %* if %errorlevel% neq 0 ( goto Error ) :Success +ENDLOCAL exit /b 0 :Error +ENDLOCAL exit /b %errorlevel% diff --git a/repo.sh b/repo.sh index 8ef2bdd..2ca081f 100755 --- a/repo.sh +++ b/repo.sh @@ -7,6 +7,4 @@ cd "$SCRIPT_DIR" # Set OMNI_REPO_ROOT early so `repo` bootstrapping can target the repository # root when writing out Python dependencies. -export OMNI_REPO_ROOT="$( cd "$(dirname "$0")" ; pwd -P )" - -exec "tools/packman/python.sh" tools/repoman/repoman.py "$@" +OMNI_REPO_ROOT="$( cd "$(dirname "$0")" ; pwd -P )" exec "tools/packman/python.sh" tools/repoman/repoman.py "$@" diff --git a/repo.toml b/repo.toml index aca0b1b..755fab3 100644 --- a/repo.toml +++ b/repo.toml @@ -5,35 +5,114 @@ [repo] # Use the Kit Template repo configuration as a base. Only override things specific to the repo. -import_configs = ["${root}/_repo/deps/repo_kit_tools/kit-template/repo.toml"] +import_configs = [ + "${root}/_repo/deps/repo_kit_tools/kit-template/repo.toml", + "${root}/_repo/deps/repo_kit_tools/kit-template/repo-external-app.toml", +] # Repository Name name = "iot-samples" -[repo_build] -msbuild.vs_version = "vs2019" -post_build.commands = [] - -[repo_docs] -name = "Kit Extension Template C++" -project = "iot-samples" -api_output_directory = "api" -use_fast_doxygen_conversion=false -sphinx_version = "4.5.0.2-py3.10-${platform}" -sphinx_exclude_patterns = [ - "_build", - "tools", - "VERSION.md", - "source/extensions/*/docs/Overview.md", - "source/extensions/*/docs/CHANGELOG.md", +# Disable linbuild until we know what we want to do with this. +[repo_build.docker] +enabled = false + + +[repo_build.fetch.pip] +# List of pip files to pip install from (in order) +files_to_pull = [ + "${root}/tools/deps/pip.toml" ] -[repo_build.licensing] -enabled = false -run_by_default = false +# Do not gather Python dependency licenses +licensing_enabled = false + +# Do not try to publish a pip cache to S3 +publish_pip_cache = false + +######################################################################################################################## +# Extensions precacher +######################################################################################################################## -[repo_docs.kit] -extensions = [] +[repo_precache_exts] +# Apps to run and precache +apps = ["${root}/source/apps/iot_samples.usd_explorer.kit", "${root}/source/apps/iot_samples.panel_extension.kit"] + +registries = [ + { name = "kit/default", url = "https://ovextensionsprod.blob.core.windows.net/exts/kit/prod/shared" }, + { name = "kit/sdk", url = "https://ovextensionsprod.blob.core.windows.net/exts/kit/prod/sdk/${kit_version_short}/${kit_git_hash}" }, + { name = "kit/community", url = "https://dw290v42wisod.cloudfront.net/exts/kit/community" }, +] + +######################################################################################################################## +# Packaging +######################################################################################################################## -[repo_package.packages."platform:windows-x86_64".docs] -windows_max_path_length = 0 +[repo_package.packages.fat_package] +root = "_build/$${platform}/$${config}" +archive_name = "${conf:repo.name}-fat" +omniverse_flow_version_scheme=false +package_per_config = true # By default we only build + package release. +append_config = false # Set to true to append release/debug config to package name. +archive_format = "zip" # We support "7z", "zip", "tar.gz", "tar.bz2" +build_version = "${file:${config_root}/tools/VERSION.md}" + +# omniverse_flow_version_scheme sets package name to the format: +# archive_name@{build_version}+{gitbranch}.{builder_id}.{githash}.{build_environment}.{host_platform}.{archive_format} +# e.g. kit-app-template-thin@2024.1.0+custom-app-stuff.0.12345678.local.linux-x86_64.zip +# omniverse_flow_version_scheme=true + +files = [ + ["**"], +] +files_exclude = [ + ["_*/**"], + [".*/**"], + ["**/*.pdb"], + ["**/*.exp"], + ["baseapp/**"], + ["extsbuild/**"], + ["cache/**"], + ["data/**"], + ["logs/**"], + ["apps/kit.portable"], + ["**/__pycache__"], +] +"linux-x86_64".files_strip = [] + + +[repo_package.packages.thin_package] +root = "_build/$${platform}/$${config}" +archive_name = "${conf:repo.name}-thin" +omniverse_flow_version_scheme=false +package_per_config = true +append_config = false +archive_format = "zip" +build_version = "${file:${config_root}/tools/VERSION.md}" + +files = [ + ["**"], +] +files_exclude = [ + ["_*/**"], + [".*/**"], + ["**/*.pdb"], + ["**/*.exp"], + ["kit/**"], + ["extscache/**"], + ["extsbuild/**"], + ["baseapp/**"], + ["cache/**"], + ["data/**"], + ["logs/**"], + ["apps/kit.portable"], + ["**/__pycache__"], +] +"linux-x86_64".files_strip = [] + + +######################################################################################################################## +# Template tool configuration +######################################################################################################################## +[repo_kit_template] +extension_templates_config = "templates/templates.toml" diff --git a/repo_tools.toml b/repo_tools.toml new file mode 100644 index 0000000..8233db0 --- /dev/null +++ b/repo_tools.toml @@ -0,0 +1,17 @@ +####################################################################################################################### +# [repo_launcher] Simple tool to launch Kit applications +####################################################################################################################### + +[repo_launch] +command = "launch" +entry_point = "${root}/tools/repoman/launch.py:setup_repo_tool" + +[repo_package] +# Hide default repo_package under internal command to be used by `repo_package_app` +command = "_package" + +[repo_package_app] +# Replace regular repo_package with our guided packaging tool +command = "package" +entry_point = "${root}/tools/repoman/package.py:setup_repo_tool" +enabled = true diff --git a/source/apps/iot_samples.panel_extension.kit b/source/apps/iot_samples.panel_extension.kit new file mode 100644 index 0000000..1b49293 --- /dev/null +++ b/source/apps/iot_samples.panel_extension.kit @@ -0,0 +1,785 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +[package] +title = "IoT Samples Panel Extension" +version = "0.1.0" +description = "A reference application for reviewing and constructing large facilities such as factories, warehouses and more." +keywords = ["app", "usd", "explore"] # That makes it browsable in UI with "experience" filter +template_name = "omni.usd_explorer" + +[dependencies] +"omni.activity.ui" = {} +"omni.activity.usd_resolver" = {} +"omni.hydra.engine.stats" = {} +"omni.hydra.pxr" = {} +"omni.hydra.pxr.settings" = {} +"omni.kit.asset_converter" = {} # File format conversion +"omni.kit.browser.asset" = {} # Enable the NVIDIA asset Browsing only +"omni.kit.browser.sample" = {} # Examples +"omni.kit.collaboration.channel_manager" = {} +"omni.kit.collaboration.presence_layer" = {} +"omni.kit.collaboration.selection_outline" = {} +"omni.kit.collaboration.telemetry" = {} +"omni.kit.collaboration.viewport.camera" = {} +"omni.kit.context_menu" = {} +"omni.kit.converter.cad" = {} +"omni.kit.converter.cad_core" = {} +"omni.kit.converter.jt_core" = {} +"omni.kit.converter.dgn_core" = {} +"omni.kit.converter.common" = {} +"omni.kit.manipulator.camera" = {} # Manipulator for the Viewport +"omni.kit.manipulator.prim" = {} +"omni.kit.manipulator.selection" = {} +"omni.kit.manipulator.transform" = {} +"omni.kit.manipulator.viewport" = {} +"omni.kit.menu.edit" = {} +"omni.kit.menu.file" = {} +"omni.kit.property.bundle" = {} +"omni.kit.property.layer" = {} +"omni.kit.quicklayout" = {} # Quicklayout is on enabling custom layouts +"omni.kit.renderer.core" = {} +"omni.kit.search.service" = {} +"omni.kit.selection" = {} +"omni.kit.stage_column.payload" = {} # Those are extra stage window columns that are not enabled by default +"omni.kit.stage_templates" = {} # Stage templates +"omni.kit.telemetry" = {} # Telemetry +"omni.kit.thumbnails.usd" = {} +"omni.kit.timeline.minibar" = {} # For animation +"omni.kit.tool.asset_importer" = {} +"omni.kit.tool.camera_playlist" = {} +"omni.kit.tool.markup" = {} +"omni.kit.tool.measure" = {} +"omni.kit.tool.remove_unused.controller" = {} +"omni.kit.uiapp" = {} # The Main UI App. Bring everything needed for UI application. +"omni.kit.usd_explorer.main.menubar" = { order = 12000 } +"omni.kit.usd_explorer.window.welcome" = { order = 10 } +"omni.kit.viewport.legacy_gizmos" = {} +"omni.kit.viewport.menubar.camera" = {} +"omni.kit.viewport.menubar.framerate" = {} +"omni.kit.viewport.menubar.lighting" = {} +"omni.kit.viewport.menubar.markup" = {} +"omni.kit.viewport.menubar.nav_bar_toggle" = { order = -30 } +"omni.kit.viewport.menubar.timeline" = { order = -20 } +"omni.kit.viewport.menubar.waypoint" = {} +"omni.kit.viewport.ready" = {} +"omni.kit.viewport.rtx" = {} # Load the RTX rendering bundle +"omni.kit.viewport.scene_camera_model" = {} # Push camera changes to Viewport ui.scene as fast as possible +"omni.kit.viewport.window" = {} +"omni.kit.waypoint.playlist" = {} +"omni.kit.widget.filebrowser" = {} # General purpose widgets to browsder and select fles +"omni.kit.widget.layers" = {} +"omni.kit.widget.live" = {} # Includes Cache status display +"omni.kit.window.about" = {} +"omni.kit.window.console" = {} # Enable to write some python script, disable by default +"omni.kit.window.content_browser" = {} +"omni.kit.window.cursor" = {} +"omni.kit.window.drop_support" = {} +"omni.kit.window.file" = {} +"omni.kit.window.filepicker" = {} +"omni.kit.window.material" = {} # Material Management and browsing +"omni.kit.window.preferences" = { order = 1000 } # Execute last so the menu is in the correct place +"omni.kit.window.property" = {} +"omni.kit.window.section" = {} +"omni.kit.window.stage" = {} +"omni.kit.window.stats" = { order = 1000 } # Show the stats of the renderer +"omni.kit.window.status_bar" = {} +"omni.kit.window.title" = {} +"omni.kit.window.toolbar" = {} +"omni.resourcemonitor" = {} # Needed for Fabric delegate +"omni.rtx.settings.core" = {} # This is the Render Settings 2.0 +"omni.scene.optimizer.bundle" = {} +"omni.stats" = {} # This is not strictly needed +"omni.timeline.live_session" = {} +"omni.usd.metrics.assembler.ui" = {} +"omni.usd.schema.metrics.assembler" = {} +"omni.warp.core" = {} +"usdrt.scenegraph" = {} +"iot_samples.panel_extension.setup" = { order = 10000 } # This is your application setup Extensions. order = 10000 makes it run last +"iot_samples.ui_panel" = { order = 10001 } # This is the IoT panel + +[dependencies."filter:platform"."windows-x86_64"] +"omni.kit.window.modifier.titlebar" = {version = "=105.2.16"} # Use exact version to avoid supported target platform check + +[settings.app] +name = "IoT Samples Panel Extension" +fastShutdown = true # Fast shutdown by default +useFabricSceneDelegate = true # Turn on the Fabric scene delegate by default + +[settings.app.content] +emptyStageOnStart = true # This will create a stage during the startup process. + +[settings.app.create] +forceViewportSettings = true # Force enable Axis, Grid, Outline and Lights at startup + +[settings.app.docks] +autoHideTabBar = false +noWindowMenuButton = false + +[settings.app.extensions] +excluded = [ + "omni.kit.viewport.menubar.render", + "omni.kit.viewport.menubar.settings", +] +generatedVersionLockExclude = [ + "omni.app.usd_explorer", + "iot_samples.panel_extension.setup", + "iot_samples.ui_panel", +] + +registryEnabled = true +skipPublishVerification = false + +[settings.app.extensions."filter:platform"."linux-x86_64"] +# Windows only extensions. For all of them set exact=true to not be included into generated version lock. +# That will break linux otherwise, as version lock is platform agnostic currently. +excluded = [ + "omni.kit.window.modifier.titlebar", +] + +[settings.app.exts] +folders.'++' = ["${app}/../exts", "${app}/../extscache/"] # Search paths for extensions. + +[settings.app.font] +file = "${fonts}/OpenSans-SemiBold.ttf" +size = 16 + +[settings.app.hangDetector] +# Hang Detector +enabled = false +timeout = 120 + +[settings.app.liveSession] +enableMenuFollowUser = false + +[settings.app.material] +disableMtlx = true # Disable MaterialX to ensure Material Watcher doesn't impact startup time + +[settings.app.menu] +compatibility_mode = false # Use omni.ui.Menu for the MenuBar +legacy_mode = false # Deprecate support for old kit.ui.menu + +[settings.app."omni.usd"] +getRenderablePaths.parallel = 4 # Enable parallel mode for selection performance +loadRenderSettingsFromUsdStage = false # Ensure consistent settings across all USD stages independently of what was saved to them + +[settings.app.primCreation] +enableMenuAudio = false +enableMenuCamera = false +hideShapes = true # Don't show Create->Shape menus + +[settings.app.renderer] +resolution.height = 1080 +resolution.width = 1920 +skipWhileMinimized = true + +[settings.app.settings] +dev_build = true +persistent = true + +[settings.app.startup] +expandViewport = true + +[settings.app.tools] +modal_tool_active = false # Tool State Management + +[settings.app.usdrt.population.utils] +mergeInstances = false # When populating Fabric from USD, merge meshes under scene graph instances. + +[settings.app.usdrt.scene_delegate] +enableProxyCubes = false +numFramesBetweenLoadBatches = 1 +timeSampledDataStatic = true + +[settings.app.usdrt.scene_delegate.geometryStreaming] +# 0: Display everything +# 0.0005: Display all geometry down to around the size of a pixel +# 0.001: Display all geometry bigger than a few pixels +enabled = false # Disabling FSD geometry streaming +numberOfVerticesToLoadPerChunk = 800000 +solidAngleLimit = 0 + +[settings.app.viewport] +boundingBoxes.hideWhenManipulating = true +createCameraModelRep = true # Enable creation of camera meshes in USD +grid.enabled = true +outline.enabled = true +showCameraMenu = false +showHideMenu = false +showRendererMenu = false +showSettingMenu = false +snapEnabled = true + +[settings.app.viewport.defaultCamera.target.distance] +enabled = true +units = "meters" +value = 5 + +[settings.app.viewport.defaults] +fillViewport = false # default to fill viewport + +[settings.app.viewport.defaults.hud] +camera.controllerUseSRT = true +captureFrame.viewport = true +deviceMemory.visible=false +hostMemory.visible=false +primCreation.typedDefaults.camera.focalLength = 15 +renderFPS.visible=false +rendering.whiteModeExceptions = 'GizmoTex, Gizmo, OmniGlass, SunsetSkyMat, ProceduralSky, Blue_Glass, Clear_Glass, Dull_Glass, Frosted_Glass, Glazed_Glass, Green_Glass, Mirror, Red_Glass, Tinted_Glass, Tinted_Glass_R02, Tinted_Glass_R25, Tinted_Glass_R50, Tinted_Glass_R75, Tinted_Glass_R85, Tinted_Glass_R98, Cirrus, CumulusHeavy, CumulusLight, Overcast, NightSky' +renderProgress.visible=false +renderResolution.visible=false +transform.gizmoUseSRT = true + +[settings.app.viewport.defaults.hud.file] +initDialogHeight = 800 +initDialogWidth = 1200 +recentFiles = [] +save.showUnsavedLayersDialog = true + +[settings.app.viewport.defaults.hud.omniverse] +content_browser.options_menu.show_details = true # Make Detail panel visible by default +filepicker.options_menu.show_details = true +tooltipEnabled = false + +[settings.app.viewport.defaults.hud.stage] +instanceableOnCreatingReference = false +movePrimInPlace = false +upAxis = 'Z' + +[settings.app.viewport.defaults.hud.viewport] +camInertiaAmount = 0.0 +camInertiaEnabled = false +camVelocityMax = 20.0 +displayOptions = 32767 # Disable Frame Rate and Resoltion by default +previewOnPeek = false +snapToSurface = false +Viewport0.fillViewport = false +Viewport1.fillViewport = false + +[settings.app.viewport.offsets] +navBottom = 0 + +[settings.app.viewport.show] +audio = false +camera = false +lights = false + +[settings.app.window] +displayModeLock = false +fullscreen = false +height = 1010 +iconPath = "${iot_samples.panel_extension.setup}/data/nvidia-omniverse-usd_explorer.ico" +imagePath = "${iot_samples.panel_extension.setup}/data/nvidia-omniverse-usd_explorer_about.png" +minimalPanelsOnStartup = true +showStartup = true +showStatusBar = false +title = "IoT Samples Panel Extension" +toolBarHorizontal = false +uiStyle = 'NvidiaDark' +width = 1920 +x = -1 +y = -1 + +[settings.crashreporter.data] +experience = "USD Explorer" + +[settings.ext."omni.kit.widget.viewport".sceneView.singleCameraModel] +enabled = true # Enable single Viewport camera model (setting w/ typo in current Kit) + +[settings.exts.foundation] +verifyOsVersion.enabled = false + +[settings.exts."omni.kit.browser.asset"] +folders = [ + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Commercial", + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial", + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse", +] + +[settings.exts."omni.kit.browser.material"] +enabled = false +folders = [ + "Base::http://omniverse-content-production.s3-us-west-2.amazonaws.com/Materials/2023_1/Base", +] + +[settings.exts."omni.kit.browser.sample"] +folders = [ + "https://omniverse-content-production.s3.us-west-2.amazonaws.com/Usd_Explorer/Samples/Examples/2023_2", +] +folders_hide_in_category = [ + "2023_2", +] + +[settings.exts."omni.kit.browser.sky"] +folders = [ + "Skies (S3)::https://omniverse-content-production.s3.us-west-2.amazonaws.com/Assets/Skies/2022_1/Skies/", +] + +[settings.exts."omni.kit.compatibility_checker"] +supportedGpus = [ + "*GeForce RTX ????*", + "*Quadro RTX ????*", + "*RTX ?????*", + "*RTX????*", + "*TITAN RTX*" +] + +[settings.exts."omni.kit.manipulator.tool.snap"] +# Have snap to surface as default option +providerNames = [ + "Surface (Framebuffer Based)", + "Surface (Mesh Based)", +] + +[settings.exts."omni.kit.markup.core"] +enable_hotkeys = true +show_icons = false + +[settings.exts."omni.kit.material.library"] +lib_paths = [ + "${kit}/mdl/core/Base", + "", +] +original_svg_color = true +ui_hidden_list = [ + "${kit}/mdl/core/Base/OmniPBR_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl", + "${kit}/mdl/core/Base/OmniGlass_Opacity.mdl", + "${kit}/mdl/core/Base/SimPBR_Model.mdl", + "${kit}/mdl/core/Base/OmniEmissive.mdl", + "${kit}/mdl/core/Base/OmniHair.mdl", + "${kit}/mdl/core/Base/OmniHairPresets.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBR_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBRBase.mdl", + "${kit}/mdl/core/Base/OmniSurface.mdl", + "${kit}/mdl/core/Base/OmniSurfaceBlend.mdl", + "${kit}/mdl/core/Base/OmniSurfaceLite.mdl", + "${kit}/mdl/core/Base/OmniSurfacePresets.mdl", + "${kit}/mdl/core/Base/SimPBR.mdl", + "${kit}/mdl/core/Base/SimPBR_Model.mdl", + "${kit}/mdl/core/Base/SimPBR_Translucent.mdl", +] + +[settings.exts."omni.kit.mesh.raycast"] +bvhBuildOnFirstRequired = true # Avoids mesh raycast to initialize during stage open + +[settings.exts."omni.kit.menu.utils"] +logDeprecated = false + +[settings.exts."omni.kit.playlist.core"] +smooth_with_time_sampling = true + +[settings.exts."omni.kit.property.usd"] +show_prefs = false + +[settings.exts."omni.kit.renderer.core".imgui] +enableMips = true + +[settings.exts."omni.kit.timeline.minibar"] +offsetBottom = 10 +scale_with_nav_bar = true +stay_on_playing = true +toggleByHover = false + +[settings.exts."omni.kit.tool.asset_importer"] +useNewFilePicker = true + +[settings.exts."omni.kit.tool.collect"] +useNewFilePicker = true + +[settings.exts."omni.kit.tool.markup"] +toolbar.offset = 160 # Markup toolbar offset, keeps us above the navbar + +[settings.exts."omni.kit.tool.measure"] +enable_hotkeys = true + +[settings.exts."omni.kit.tool.teleport"] +basicGizmo = true +beamVisible = false +eyeHeight = 175 +max_slope_angle = 30.0 +simple_camera = false +widgetScale = 0.7 + +[settings.exts."omni.kit.usd_explorer.main.menubar"] +include_approve_mode = false +include_file_menu = true +include_modify_mode = true +include_present_mode = false +include_render_modes = false +switch_to_present_on_open = false + +[settings.exts."omni.kit.usd_explorer.window.welcome"] +alwaysClosable = true + +[settings.exts."omni.kit.waypoint.core"] +enable_hotkeys = true +show_icons = false + +[settings.exts."omni.kit.widget.cloud_share"] +require_access_code = false + +[settings.exts."omni.kit.widget.graph"] +raster_nodes = true + +[settings.exts."omni.kit.widget.layers"] +useNewFilePicker = true + +[settings.exts."omni.kit.widget.live_session_management"] +quick_join_enabled = false +session_list_select = "DefaultSession" + +[settings.exts."omni.kit.widget.toolbar".PlayButton] +enabled = false + +[settings.exts."omni.kit.widget.viewport".sceneView.singleCameraModel] +enabled = true # Enable single Viewport camera model + +[settings.exts."omni.kit.window.content_browser"] +enable_thumbnail_generation_images = false +show_grid_view = false + +[settings.exts."omni.kit.window.extensions"] +hideNonToggleableExts = true +showFeatureOnly = false + +[settings.exts."omni.kit.window.file"] +useNewFilePicker = true + +[settings.exts."omni.kit.window.material"] +load_after_startup = true +show_capture_thumbnail_menu = true + +[settings.exts."omni.kit.window.modifier.titlebar"] +changeWindowRegion = true +colors.caption = 0x0F0F0F +colors.client = 0x0F0F0F +defaultFont.color = 0xD0D0D0 +defaultFont.size = 18 +icon.file = "${iot_samples.panel_extension.setup}/data/nvidia-omniverse-usd_explorer.ico" +icon.size = 18 +icon.use_size = false +respondOnMouseUp = true +separator.color = 0x00B976 +separator.width = 1 +showFileFullPath = true +titleFormatString = " IoT Samples Panel Extension 0.1.0 {separator} {file, board=true}" +windowBorder.color = 0x0F0F0F +windowBorder.width = 2 + +[settings.exts."omni.kit.window.preferences"] +show_audio = false +show_rendering = false +show_resource_monitor = false +show_tagging = false +show_thumbnail_generation_mdl = false + +[settings.exts."omni.kit.window.viewport"] +blockingGetViewportDrawable = false + +[settings.exts."omni.kit.viewport.menubar.camera"] +expand = true # Expand the extra-camera settings by default +showManualExposure = true # Enable FOV drop-down in viewport ribbon +showStageCameras = false + +[settings.exts."omni.kit.viewport.menubar.display".showByType] +exclude_list = ["Audio"] + +[settings.exts."omni.kit.viewport.menubar.framerate"] +visible = false + +[settings.exts."omni.kit.viewport.menubar.lighting"] +autoLightRig.enableWithoutMenu = true # Enable adding a light rig whether menu item is loaded/visible or not +defaultRig = "Sunny Sky" # Set the default light-rig to apply for a stage opened without any lights in it +rigImport.lightRemovalLimit = 3 +rigs = "${iot_samples.panel_extension.setup}/data/light_rigs" # Setup path to the light-rig items in the lighting menu + +[settings.exts."omni.kit.viewport.navigation.camera_manipulator"] +orbitAutoFrameSelected = true + +[settings.exts."omni.kit.viewport.navigation.core"] +bottom_offset = 10 +bottom_spacing = 10 +enable_hotkeys = true +isVisible = false # Hide navigation bar while welcome window is visible + +[settings.exts."omni.kit.viewport.navigation.markup"] +visible = false + +[settings.exts."omni.kit.viewport.navigation.waypoint"] +visible = false + +[settings.exts."omni.kit.viewport.window"] +startup.windowName = "Viewport" +hud.hostMemory.perProcess = true + +[settings.exts."omni.services.transport.server.http"] +port = 8311 # Setting the port for the embedded http server, using custom port for your application make sure not to collide with other apps + +[settings.exts."omni.ui".raster] +default_rasterpolicy_enabled = true # reduce overhead of UI in Layout mode + +[settings.exts."omni.ui".workpace.draw_freeze] +enabled = true +frames = 5 + +[settings.exts."omni.usd"] +enableUsdMaterialWatcherForFsd = true + +[settings.omnihydra] +parallelHydraSprimSync = true # Sync materials in parallel from within Hydra + +[settings.persistent.app.newStage] +defaultTemplate = "SunnySky" # Change default stage template to what we have in the setup extension + +[settings.persistent.app.stage] +upAxis = 'Z' + +[settings.persistent.app.viewport] +camMoveVelocity = 1.5 +camVelocityMax = 50 +camVelocityMin = 0.01 +pickingMode = "kind:model.ALL" + +[settings.persistent.app.viewport.manipulator.camera] +flyAcceleration = 1000.0 +flyDampening = 10.0 +lookAcceleration = 2000.0 +lookDampening = 20.0 +moveAcceleration = 1000.0 +moveDampening = 10.0 +tumbleAcceleration = 2000.0 +tumbleDampening = 20.0 + +[settings.persistent.exts."omni.kit.environment.core".rtx.env.ground] +enable = false # Making a ground for whatever reason bewteen scene loads is causing side car issues. + +[settings.persistent.exts."omni.kit.manipulator.camera"] +inertiaDecay = 3 +tumbleSpeed = 720 + +[setings.persistent.exts."omni.kit.manipulator.prim".manipulator] +placement = "Bounding Box Base" + +[settings.persistent.exts."omni.kit.manipulator.tool.snap"] +# Snap tool default persistent settings +conformToTarget = true +conformUpAxis = "Stage" +explicitTransform.rotate = 15.0 +explicitTransform.scale = 1.0 +explicitTransform.translate = 10.0 +keepSpacing = true + +[settings.persistent.exts."omni.kit.manipulator.transform"] +tools.defaultCollapsed = false # Expand prim manipulator toolbar + +[settings.persistent.exts."omni.kit.viewport.menubar.camera"] +expand = true # expand was set to False in omni.kit.viewport.bundle + +[settings.persistent.exts."omni.kit.viewport.menubar.lighting"] +autoLightRig.enabled = true + +[settings.persistent.exts."omni.kit.viewport.window"] +cameraSpeedMessage.showFlyViewLock = true + +[settings.privacy] +externalBuild = false + +[settings.renderer] +active = "rtx" # RTX As the default renderer always +enabled = "rtx" # only enable rtx renderer by default + +[setetings.renderer.multiGpu] +enabled = false # do not enable Multi-GPU, will choose the "best" GPU +maxGpuCount = 1 # this ensures at most one GPU is enabled even if /persistent/renderer/multiGpu/enabled=true was saved in user.config.json + +[settings.rtx.directLighting.sampledLighting] +enabled = true + +[settings.rtx.domeLight] +upperLowerStrategy = 4 # Approximated Image-Based Lighting + +[settings.rtx.ecoMode] +enabled = true + +[settings.rtx.hydra] +minFreeDeviceMemory = 3000 +readTransformsFromFabricInRenderDelegate = true + +[settings.rtx.newDenoiser] +enabled = true + +[settings.rtx.post] +dlss.execMode = 1 # DLSS Balanced mode instead of Auto +histogram.enabled = true # auto-exposure + +[settings.rtx.reflections] +maxRoughness = 0.11 # instead of default of 0.3, reduces GPU time spent on reflections + +[settings.rtx.sceneDb] +ambientLightIntensity = 1.0 + +[settings.rtx-flags] +rendermode = 1 + +[settings.rtx-transient.hydra] +conservativeMemoryLimits = true # Enable a more conservative approach to stop loading geometry when the amount of free GPU and system memory go below specified thresholds +maxInstanceCount = 12000000 # Limit the number of instances to 12 million to cap performance and memory impact of larger instance counts + +[settings.rtx-transient.meshlights] +forceDisable = true # Disable use mesh light sampling, not critical + +[settings.rtx-transient.scenedb] +useUniformsReindexing = true + +[settings.structuredLog] +enable = true + +[settings.telemetry] +# Anonymous Kit application usage telemetry +enableAnonymousData = true + + +[[test]] +samplingFactor = 1.0 # No test sampling for these tests + +dependencies = [ + "omni.kit.test_suite.helpers", + "omni.kit.ui_test", + "omni.kit.core.tests", + #"omni.hydra.pxr", + # NOTE: test_extensions.py (with imports from omni.kit.core.tests) need dependencies from some extensions + "omni.kit.test_helpers_gfx", # test dependency from omni.renderer.core + "omni.rtx.tests", # test dependency from omni.hydra.scene_api +] + + +pythonTests.include = [ + "iot_samples.panel_extension.setup.tests.*", + "iot_samples.ui_panel.tests.*", +] + +args = [ + "--portable", + "--/app/window/width=1600", + "--/app/window/height=900", + "--/app/window/dpiScaleOverride=1.0", + "--/app/window/scaleToMonitor=false", + "--/app/file/ignoreUnsavedOnExit=true", + "--/app/testMode=1", + "--/app/fastShutdown=1", + "--/exts/omni.kit.test/testExtCodeChangeAnalyzerEnabled=false", + "--no-window", + "--/exts/omni.kit.pipapi/allowOnlineIndex=0", # Make sure it starts without any pip installs +] + +stdoutFailPatterns.exclude = [ + "*Warning: The NumPy module was reloaded*" +] + +timeout = 600 + + +######################################################################################################################## +# BEGIN GENERATED PART (Remove from 'BEGIN' to 'END' to regenerate) +######################################################################################################################## + +# Kit SDK Version: 106.0.0+release.118399.fcefe91f.gl + +# Exact Version dependencies: +# omni.kit.converter.cad_core-201.0.2 +# omni.kit.converter.common-201.0.2 +# omni.kit.converter.jt_core-201.0.2 +# omni.kit.window.modifier.titlebar-105.2.16 +# omni.scene.optimizer.core-106.0.4 +# omni.scene.optimizer.ui-106.0.4 + +# Version lock for all dependencies: +[settings.app.exts] +enabled = [ + "iot_samples.panel_extension.setup-0.1.0", + "iot_samples.ui_panel-0.1.0", + "omni.kit.asset_converter-2.1.11", + "omni.kit.browser.asset-1.3.9", + "omni.kit.browser.core-2.3.11", + "omni.kit.browser.folder.core-1.9.12", + "omni.kit.browser.material-1.5.2", + "omni.kit.browser.sample-1.4.7", + "omni.kit.converter.cad-201.0.2", + "omni.kit.converter.dgn_core-201.0.2", + "omni.kit.markup.core-1.2.19", + "omni.kit.markup.playlist-0.0.5", + "omni.kit.ngsearch-0.3.3", + "omni.kit.playlist.core-1.3.4", + "omni.kit.prim.icon-1.0.13", + "omni.kit.search.service-0.1.12", + "omni.kit.stage_column.payload-2.0.0", + "omni.kit.thumbnails.usd-1.0.9", + "omni.kit.timeline.minibar-1.2.9", + "omni.kit.tool.asset_importer-2.5.5", + "omni.kit.tool.camera_playlist-1.3.1", + "omni.kit.tool.markup-1.2.69", + "omni.kit.tool.measure-105.2.5", + "omni.kit.tool.remove_unused.controller-0.1.3", + "omni.kit.tool.remove_unused.core-0.1.2", + "omni.kit.tool.teleport-104.2.15", + "omni.kit.usd_explorer.conn.manager-1.0.0", + "omni.kit.usd_explorer.main.menubar-1.0.36", + "omni.kit.usd_explorer.render-1.0.1", + "omni.kit.usd_explorer.tooltip-1.0.0", + "omni.kit.usd_explorer.window.welcome-1.0.0", + "omni.kit.viewport.menubar.bottom-1.0.5", + "omni.kit.viewport.menubar.framerate-1.0.9", + "omni.kit.viewport.menubar.lighting-106.0.2", + "omni.kit.viewport.menubar.markup-104.1.26", + "omni.kit.viewport.menubar.nav_bar_toggle-1.0.3", + "omni.kit.viewport.menubar.timeline-1.0.2", + "omni.kit.viewport.menubar.waypoint-104.2.16", + "omni.kit.viewport.navigation.camera_manipulator-1.0.53", + "omni.kit.viewport.navigation.capture_no_ansel-1.0.16", + "omni.kit.viewport.navigation.core-1.0.29", + "omni.kit.viewport.navigation.markup-1.0.30", + "omni.kit.viewport.navigation.measure-1.0.5", + "omni.kit.viewport.navigation.section-1.0.4", + "omni.kit.viewport.navigation.teleport-1.0.16", + "omni.kit.viewport.navigation.usd_explorer.bundle-1.0.13", + "omni.kit.viewport.navigation.walk-1.0.4", + "omni.kit.viewport.navigation.waypoint-1.0.22", + "omni.kit.waypoint.core-1.4.52", + "omni.kit.waypoint.playlist-1.0.8", + "omni.kit.widget.material_preview-1.0.16", + "omni.kit.widget.zoombar-1.0.5", + "omni.kit.widgets.custom-1.0.8", + "omni.kit.window.material-1.5.7", + "omni.kit.window.section-107.0.1", + "omni.scene.optimizer.bundle-106.0.4", + "omni.services.pip_archive-0.13.3", + "omni.usd.metrics.assembler-106.0.1", + "omni.usd.metrics.assembler.ui-106.0.2", + "omni.usd.schema.metrics.assembler-106.0.1", + "omni.warp.core-1.1.1", +] + +######################################################################################################################## +# END GENERATED PART +######################################################################################################################## \ No newline at end of file diff --git a/source/apps/iot_samples.usd_explorer.kit b/source/apps/iot_samples.usd_explorer.kit new file mode 100644 index 0000000..f0de382 --- /dev/null +++ b/source/apps/iot_samples.usd_explorer.kit @@ -0,0 +1,781 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + + +[package] +title = "IoT Samples USD Explorer" +version = "0.1.0" +description = "A reference application for reviewing and constructing large facilities such as factories, warehouses and more." +keywords = ["app", "usd", "explore"] # That makes it browsable in UI with "experience" filter +template_name = "omni.usd_explorer" + +[dependencies] +"omni.activity.ui" = {} +"omni.activity.usd_resolver" = {} +"omni.hydra.engine.stats" = {} +"omni.hydra.pxr" = {} +"omni.hydra.pxr.settings" = {} +"omni.kit.asset_converter" = {} # File format conversion +"omni.kit.browser.asset" = {} # Enable the NVIDIA asset Browsing only +"omni.kit.browser.sample" = {} # Examples +"omni.kit.collaboration.channel_manager" = {} +"omni.kit.collaboration.presence_layer" = {} +"omni.kit.collaboration.selection_outline" = {} +"omni.kit.collaboration.telemetry" = {} +"omni.kit.collaboration.viewport.camera" = {} +"omni.kit.context_menu" = {} +"omni.kit.converter.cad" = {} +"omni.kit.converter.cad_core" = {} +"omni.kit.converter.jt_core" = {} +"omni.kit.converter.dgn_core" = {} +"omni.kit.converter.common" = {} +"omni.kit.manipulator.camera" = {} # Manipulator for the Viewport +"omni.kit.manipulator.prim" = {} +"omni.kit.manipulator.selection" = {} +"omni.kit.manipulator.transform" = {} +"omni.kit.manipulator.viewport" = {} +"omni.kit.menu.edit" = {} +"omni.kit.menu.file" = {} +"omni.kit.property.bundle" = {} +"omni.kit.property.layer" = {} +"omni.kit.quicklayout" = {} # Quicklayout is on enabling custom layouts +"omni.kit.renderer.core" = {} +"omni.kit.search.service" = {} +"omni.kit.selection" = {} +"omni.kit.stage_column.payload" = {} # Those are extra stage window columns that are not enabled by default +"omni.kit.stage_templates" = {} # Stage templates +"omni.kit.telemetry" = {} # Telemetry +"omni.kit.thumbnails.usd" = {} +"omni.kit.timeline.minibar" = {} # For animation +"omni.kit.tool.asset_importer" = {} +"omni.kit.tool.camera_playlist" = {} +"omni.kit.tool.markup" = {} +"omni.kit.tool.measure" = {} +"omni.kit.tool.remove_unused.controller" = {} +"omni.kit.uiapp" = {} # The Main UI App. Bring everything needed for UI application. +"omni.kit.usd_explorer.main.menubar" = { order = 12000 } +"omni.kit.usd_explorer.window.welcome" = { order = 10 } +"omni.kit.viewport.legacy_gizmos" = {} +"omni.kit.viewport.menubar.camera" = {} +"omni.kit.viewport.menubar.framerate" = {} +"omni.kit.viewport.menubar.lighting" = {} +"omni.kit.viewport.menubar.markup" = {} +"omni.kit.viewport.menubar.nav_bar_toggle" = { order = -30 } +"omni.kit.viewport.menubar.timeline" = { order = -20 } +"omni.kit.viewport.menubar.waypoint" = {} +"omni.kit.viewport.ready" = {} +"omni.kit.viewport.rtx" = {} # Load the RTX rendering bundle +"omni.kit.viewport.scene_camera_model" = {} # Push camera changes to Viewport ui.scene as fast as possible +"omni.kit.viewport.window" = {} +"omni.kit.waypoint.playlist" = {} +"omni.kit.widget.filebrowser" = {} # General purpose widgets to browsder and select fles +"omni.kit.widget.layers" = {} +"omni.kit.widget.live" = {} # Includes Cache status display +"omni.kit.window.about" = {} +"omni.kit.window.console" = {} # Enable to write some python script, disable by default +"omni.kit.window.content_browser" = {} +"omni.kit.window.cursor" = {} +"omni.kit.window.drop_support" = {} +"omni.kit.window.file" = {} +"omni.kit.window.filepicker" = {} +"omni.kit.window.material" = {} # Material Management and browsing +"omni.kit.window.preferences" = { order = 1000 } # Execute last so the menu is in the correct place +"omni.kit.window.property" = {} +"omni.kit.window.section" = {} +"omni.kit.window.stage" = {} +"omni.kit.window.stats" = { order = 1000 } # Show the stats of the renderer +"omni.kit.window.status_bar" = {} +"omni.kit.window.title" = {} +"omni.kit.window.toolbar" = {} +"omni.resourcemonitor" = {} # Needed for Fabric delegate +"omni.rtx.settings.core" = {} # This is the Render Settings 2.0 +"omni.scene.optimizer.bundle" = {} +"omni.stats" = {} # This is not strictly needed +"omni.timeline.live_session" = {} +"omni.usd.metrics.assembler.ui" = {} +"omni.usd.schema.metrics.assembler" = {} +"omni.warp.core" = {} +"usdrt.scenegraph" = {} +"iot_samples.usd_explorer.setup" = { order = 10000 } # This is your application setup Extensions. order = 10000 makes it run last + +[dependencies."filter:platform"."windows-x86_64"] +"omni.kit.window.modifier.titlebar" = {version = "=105.2.16"} # Use exact version to avoid supported target platform check + +[settings.app] +name = "IoT Samples USD Explorer" +fastShutdown = true # Fast shutdown by default +useFabricSceneDelegate = true # Turn on the Fabric scene delegate by default + +[settings.app.content] +emptyStageOnStart = true # This will create a stage during the startup process. + +[settings.app.create] +forceViewportSettings = true # Force enable Axis, Grid, Outline and Lights at startup + +[settings.app.docks] +autoHideTabBar = false +noWindowMenuButton = false + +[settings.app.extensions] +excluded = [ + "omni.kit.viewport.menubar.render", + "omni.kit.viewport.menubar.settings", +] +generatedVersionLockExclude = [ + "omni.app.usd_explorer", + "iot_samples.usd_explorer.setup", +] +registryEnabled = true +skipPublishVerification = false + +[settings.app.extensions."filter:platform"."linux-x86_64"] +# Windows only extensions. For all of them set exact=true to not be included into generated version lock. +# That will break linux otherwise, as version lock is platform agnostic currently. +excluded = [ + "omni.kit.window.modifier.titlebar", +] + +[settings.app.exts] +folders.'++' = ["${app}/../exts", "${app}/../extscache/"] # Search paths for extensions. + +[settings.app.font] +file = "${fonts}/OpenSans-SemiBold.ttf" +size = 16 + +[settings.app.hangDetector] +# Hang Detector +enabled = false +timeout = 120 + +[settings.app.liveSession] +enableMenuFollowUser = false + +[settings.app.material] +disableMtlx = true # Disable MaterialX to ensure Material Watcher doesn't impact startup time + +[settings.app.menu] +compatibility_mode = false # Use omni.ui.Menu for the MenuBar +legacy_mode = false # Deprecate support for old kit.ui.menu + +[settings.app."omni.usd"] +getRenderablePaths.parallel = 4 # Enable parallel mode for selection performance +loadRenderSettingsFromUsdStage = false # Ensure consistent settings across all USD stages independently of what was saved to them + +[settings.app.primCreation] +enableMenuAudio = false +enableMenuCamera = false +hideShapes = true # Don't show Create->Shape menus + +[settings.app.renderer] +resolution.height = 1080 +resolution.width = 1920 +skipWhileMinimized = true + +[settings.app.settings] +dev_build = true +persistent = true + +[settings.app.startup] +expandViewport = true + +[settings.app.tools] +modal_tool_active = false # Tool State Management + +[settings.app.usdrt.population.utils] +mergeInstances = false # When populating Fabric from USD, merge meshes under scene graph instances. + +[settings.app.usdrt.scene_delegate] +enableProxyCubes = false +numFramesBetweenLoadBatches = 1 +timeSampledDataStatic = true + +[settings.app.usdrt.scene_delegate.geometryStreaming] +# 0: Display everything +# 0.0005: Display all geometry down to around the size of a pixel +# 0.001: Display all geometry bigger than a few pixels +enabled = false # Disabling FSD geometry streaming +numberOfVerticesToLoadPerChunk = 800000 +solidAngleLimit = 0 + +[settings.app.viewport] +boundingBoxes.hideWhenManipulating = true +createCameraModelRep = true # Enable creation of camera meshes in USD +grid.enabled = true +outline.enabled = true +showCameraMenu = false +showHideMenu = false +showRendererMenu = false +showSettingMenu = false +snapEnabled = true + +[settings.app.viewport.defaultCamera.target.distance] +enabled = true +units = "meters" +value = 5 + +[settings.app.viewport.defaults] +fillViewport = false # default to fill viewport + +[settings.app.viewport.defaults.hud] +camera.controllerUseSRT = true +captureFrame.viewport = true +deviceMemory.visible=false +hostMemory.visible=false +primCreation.typedDefaults.camera.focalLength = 15 +renderFPS.visible=false +rendering.whiteModeExceptions = 'GizmoTex, Gizmo, OmniGlass, SunsetSkyMat, ProceduralSky, Blue_Glass, Clear_Glass, Dull_Glass, Frosted_Glass, Glazed_Glass, Green_Glass, Mirror, Red_Glass, Tinted_Glass, Tinted_Glass_R02, Tinted_Glass_R25, Tinted_Glass_R50, Tinted_Glass_R75, Tinted_Glass_R85, Tinted_Glass_R98, Cirrus, CumulusHeavy, CumulusLight, Overcast, NightSky' +renderProgress.visible=false +renderResolution.visible=false +transform.gizmoUseSRT = true + +[settings.app.viewport.defaults.hud.file] +initDialogHeight = 800 +initDialogWidth = 1200 +recentFiles = [] +save.showUnsavedLayersDialog = true + +[settings.app.viewport.defaults.hud.omniverse] +content_browser.options_menu.show_details = true # Make Detail panel visible by default +filepicker.options_menu.show_details = true +tooltipEnabled = false + +[settings.app.viewport.defaults.hud.stage] +instanceableOnCreatingReference = false +movePrimInPlace = false +upAxis = 'Z' + +[settings.app.viewport.defaults.hud.viewport] +camInertiaAmount = 0.0 +camInertiaEnabled = false +camVelocityMax = 20.0 +displayOptions = 32767 # Disable Frame Rate and Resoltion by default +previewOnPeek = false +snapToSurface = false +Viewport0.fillViewport = false +Viewport1.fillViewport = false + +[settings.app.viewport.offsets] +navBottom = 0 + +[settings.app.viewport.show] +audio = false +camera = false +lights = false + +[settings.app.window] +displayModeLock = false +fullscreen = false +height = 1010 +iconPath = "${iot_samples.usd_explorer.setup}/data/nvidia-omniverse-usd_explorer.ico" +imagePath = "${iot_samples.usd_explorer.setup}/data/nvidia-omniverse-usd_explorer_about.png" +minimalPanelsOnStartup = true +showStartup = true +showStatusBar = false +title = "IoT Samples USD Explorer" +toolBarHorizontal = false +uiStyle = 'NvidiaDark' +width = 1920 +x = -1 +y = -1 + +[settings.crashreporter.data] +experience = "USD Explorer" + +[settings.ext."omni.kit.widget.viewport".sceneView.singleCameraModel] +enabled = true # Enable single Viewport camera model (setting w/ typo in current Kit) + +[settings.exts.foundation] +verifyOsVersion.enabled = false + +[settings.exts."omni.kit.browser.asset"] +folders = [ + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Commercial", + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial", + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse", +] + +[settings.exts."omni.kit.browser.material"] +enabled = false +folders = [ + "Base::http://omniverse-content-production.s3-us-west-2.amazonaws.com/Materials/2023_1/Base", +] + +[settings.exts."omni.kit.browser.sample"] +folders = [ + "https://omniverse-content-production.s3.us-west-2.amazonaws.com/Usd_Explorer/Samples/Examples/2023_2", +] +folders_hide_in_category = [ + "2023_2", +] + +[settings.exts."omni.kit.browser.sky"] +folders = [ + "Skies (S3)::https://omniverse-content-production.s3.us-west-2.amazonaws.com/Assets/Skies/2022_1/Skies/", +] + +[settings.exts."omni.kit.compatibility_checker"] +supportedGpus = [ + "*GeForce RTX ????*", + "*Quadro RTX ????*", + "*RTX ?????*", + "*RTX????*", + "*TITAN RTX*" +] + +[settings.exts."omni.kit.manipulator.tool.snap"] +# Have snap to surface as default option +providerNames = [ + "Surface (Framebuffer Based)", + "Surface (Mesh Based)", +] + +[settings.exts."omni.kit.markup.core"] +enable_hotkeys = true +show_icons = false + +[settings.exts."omni.kit.material.library"] +lib_paths = [ + "${kit}/mdl/core/Base", + "", +] +original_svg_color = true +ui_hidden_list = [ + "${kit}/mdl/core/Base/OmniPBR_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl", + "${kit}/mdl/core/Base/OmniGlass_Opacity.mdl", + "${kit}/mdl/core/Base/SimPBR_Model.mdl", + "${kit}/mdl/core/Base/OmniEmissive.mdl", + "${kit}/mdl/core/Base/OmniHair.mdl", + "${kit}/mdl/core/Base/OmniHairPresets.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBR_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBRBase.mdl", + "${kit}/mdl/core/Base/OmniSurface.mdl", + "${kit}/mdl/core/Base/OmniSurfaceBlend.mdl", + "${kit}/mdl/core/Base/OmniSurfaceLite.mdl", + "${kit}/mdl/core/Base/OmniSurfacePresets.mdl", + "${kit}/mdl/core/Base/SimPBR.mdl", + "${kit}/mdl/core/Base/SimPBR_Model.mdl", + "${kit}/mdl/core/Base/SimPBR_Translucent.mdl", +] + +[settings.exts."omni.kit.mesh.raycast"] +bvhBuildOnFirstRequired = true # Avoids mesh raycast to initialize during stage open + +[settings.exts."omni.kit.menu.utils"] +logDeprecated = false + +[settings.exts."omni.kit.playlist.core"] +smooth_with_time_sampling = true + +[settings.exts."omni.kit.property.usd"] +show_prefs = false + +[settings.exts."omni.kit.renderer.core".imgui] +enableMips = true + +[settings.exts."omni.kit.timeline.minibar"] +offsetBottom = 10 +scale_with_nav_bar = true +stay_on_playing = true +toggleByHover = false + +[settings.exts."omni.kit.tool.asset_importer"] +useNewFilePicker = true + +[settings.exts."omni.kit.tool.collect"] +useNewFilePicker = true + +[settings.exts."omni.kit.tool.markup"] +toolbar.offset = 160 # Markup toolbar offset, keeps us above the navbar + +[settings.exts."omni.kit.tool.measure"] +enable_hotkeys = true + +[settings.exts."omni.kit.tool.teleport"] +basicGizmo = true +beamVisible = false +eyeHeight = 175 +max_slope_angle = 30.0 +simple_camera = false +widgetScale = 0.7 + +[settings.exts."omni.kit.usd_explorer.main.menubar"] +include_approve_mode = false +include_file_menu = true +include_modify_mode = true +include_present_mode = false +include_render_modes = false +switch_to_present_on_open = false + +[settings.exts."omni.kit.usd_explorer.window.welcome"] +alwaysClosable = true + +[settings.exts."omni.kit.waypoint.core"] +enable_hotkeys = true +show_icons = false + +[settings.exts."omni.kit.widget.cloud_share"] +require_access_code = false + +[settings.exts."omni.kit.widget.graph"] +raster_nodes = true + +[settings.exts."omni.kit.widget.layers"] +useNewFilePicker = true + +[settings.exts."omni.kit.widget.live_session_management"] +quick_join_enabled = false +session_list_select = "DefaultSession" + +[settings.exts."omni.kit.widget.toolbar".PlayButton] +enabled = false + +[settings.exts."omni.kit.widget.viewport".sceneView.singleCameraModel] +enabled = true # Enable single Viewport camera model + +[settings.exts."omni.kit.window.content_browser"] +enable_thumbnail_generation_images = false +show_grid_view = false + +[settings.exts."omni.kit.window.extensions"] +hideNonToggleableExts = true +showFeatureOnly = false + +[settings.exts."omni.kit.window.file"] +useNewFilePicker = true + +[settings.exts."omni.kit.window.material"] +load_after_startup = true +show_capture_thumbnail_menu = true + +[settings.exts."omni.kit.window.modifier.titlebar"] +changeWindowRegion = true +colors.caption = 0x0F0F0F +colors.client = 0x0F0F0F +defaultFont.color = 0xD0D0D0 +defaultFont.size = 18 +icon.file = "${iot_samples.usd_explorer.setup}/data/nvidia-omniverse-usd_explorer.ico" +icon.size = 18 +icon.use_size = false +respondOnMouseUp = true +separator.color = 0x00B976 +separator.width = 1 +showFileFullPath = true +titleFormatString = " IoT Samples USD Explorer 0.1.0 {separator} {file, board=true}" +windowBorder.color = 0x0F0F0F +windowBorder.width = 2 + +[settings.exts."omni.kit.window.preferences"] +show_audio = false +show_rendering = false +show_resource_monitor = false +show_tagging = false +show_thumbnail_generation_mdl = false + +[settings.exts."omni.kit.window.viewport"] +blockingGetViewportDrawable = false + +[settings.exts."omni.kit.viewport.menubar.camera"] +expand = true # Expand the extra-camera settings by default +showManualExposure = true # Enable FOV drop-down in viewport ribbon +showStageCameras = false + +[settings.exts."omni.kit.viewport.menubar.display".showByType] +exclude_list = ["Audio"] + +[settings.exts."omni.kit.viewport.menubar.framerate"] +visible = false + +[settings.exts."omni.kit.viewport.menubar.lighting"] +autoLightRig.enableWithoutMenu = true # Enable adding a light rig whether menu item is loaded/visible or not +defaultRig = "Sunny Sky" # Set the default light-rig to apply for a stage opened without any lights in it +rigImport.lightRemovalLimit = 3 +rigs = "${iot_samples.usd_explorer.setup}/data/light_rigs" # Setup path to the light-rig items in the lighting menu + +[settings.exts."omni.kit.viewport.navigation.camera_manipulator"] +orbitAutoFrameSelected = true + +[settings.exts."omni.kit.viewport.navigation.core"] +bottom_offset = 10 +bottom_spacing = 10 +enable_hotkeys = true +isVisible = false # Hide navigation bar while welcome window is visible + +[settings.exts."omni.kit.viewport.navigation.markup"] +visible = false + +[settings.exts."omni.kit.viewport.navigation.waypoint"] +visible = false + +[settings.exts."omni.kit.viewport.window"] +startup.windowName = "Viewport" +hud.hostMemory.perProcess = true + +[settings.exts."omni.services.transport.server.http"] +port = 8311 # Setting the port for the embedded http server, using custom port for your application make sure not to collide with other apps + +[settings.exts."omni.ui".raster] +default_rasterpolicy_enabled = true # reduce overhead of UI in Layout mode + +[settings.exts."omni.ui".workpace.draw_freeze] +enabled = true +frames = 5 + +[settings.exts."omni.usd"] +enableUsdMaterialWatcherForFsd = true + +[settings.omnihydra] +parallelHydraSprimSync = true # Sync materials in parallel from within Hydra + +[settings.persistent.app.newStage] +defaultTemplate = "SunnySky" # Change default stage template to what we have in the setup extension + +[settings.persistent.app.stage] +upAxis = 'Z' + +[settings.persistent.app.viewport] +camMoveVelocity = 1.5 +camVelocityMax = 50 +camVelocityMin = 0.01 +pickingMode = "kind:model.ALL" + +[settings.persistent.app.viewport.manipulator.camera] +flyAcceleration = 1000.0 +flyDampening = 10.0 +lookAcceleration = 2000.0 +lookDampening = 20.0 +moveAcceleration = 1000.0 +moveDampening = 10.0 +tumbleAcceleration = 2000.0 +tumbleDampening = 20.0 + +[settings.persistent.exts."omni.kit.environment.core".rtx.env.ground] +enable = false # Making a ground for whatever reason bewteen scene loads is causing side car issues. + +[settings.persistent.exts."omni.kit.manipulator.camera"] +inertiaDecay = 3 +tumbleSpeed = 720 + +[setings.persistent.exts."omni.kit.manipulator.prim".manipulator] +placement = "Bounding Box Base" + +[settings.persistent.exts."omni.kit.manipulator.tool.snap"] +# Snap tool default persistent settings +conformToTarget = true +conformUpAxis = "Stage" +explicitTransform.rotate = 15.0 +explicitTransform.scale = 1.0 +explicitTransform.translate = 10.0 +keepSpacing = true + +[settings.persistent.exts."omni.kit.manipulator.transform"] +tools.defaultCollapsed = false # Expand prim manipulator toolbar + +[settings.persistent.exts."omni.kit.viewport.menubar.camera"] +expand = true # expand was set to False in omni.kit.viewport.bundle + +[settings.persistent.exts."omni.kit.viewport.menubar.lighting"] +autoLightRig.enabled = true + +[settings.persistent.exts."omni.kit.viewport.window"] +cameraSpeedMessage.showFlyViewLock = true + +[settings.privacy] +externalBuild = false + +[settings.renderer] +active = "rtx" # RTX As the default renderer always +enabled = "rtx" # only enable rtx renderer by default + +[setetings.renderer.multiGpu] +enabled = false # do not enable Multi-GPU, will choose the "best" GPU +maxGpuCount = 1 # this ensures at most one GPU is enabled even if /persistent/renderer/multiGpu/enabled=true was saved in user.config.json + +[settings.rtx.directLighting.sampledLighting] +enabled = true + +[settings.rtx.domeLight] +upperLowerStrategy = 4 # Approximated Image-Based Lighting + +[settings.rtx.ecoMode] +enabled = true + +[settings.rtx.hydra] +minFreeDeviceMemory = 3000 +readTransformsFromFabricInRenderDelegate = true + +[settings.rtx.newDenoiser] +enabled = true + +[settings.rtx.post] +dlss.execMode = 1 # DLSS Balanced mode instead of Auto +histogram.enabled = true # auto-exposure + +[settings.rtx.reflections] +maxRoughness = 0.11 # instead of default of 0.3, reduces GPU time spent on reflections + +[settings.rtx.sceneDb] +ambientLightIntensity = 1.0 + +[settings.rtx-flags] +rendermode = 1 + +[settings.rtx-transient.hydra] +conservativeMemoryLimits = true # Enable a more conservative approach to stop loading geometry when the amount of free GPU and system memory go below specified thresholds +maxInstanceCount = 12000000 # Limit the number of instances to 12 million to cap performance and memory impact of larger instance counts + +[settings.rtx-transient.meshlights] +forceDisable = true # Disable use mesh light sampling, not critical + +[settings.rtx-transient.scenedb] +useUniformsReindexing = true + +[settings.structuredLog] +enable = true + +[settings.telemetry] +# Anonymous Kit application usage telemetry +enableAnonymousData = true + + +[[test]] +samplingFactor = 1.0 # No test sampling for these tests + +dependencies = [ + "omni.kit.test_suite.helpers", + "omni.kit.ui_test", + "omni.kit.core.tests", + #"omni.hydra.pxr", + # NOTE: test_extensions.py (with imports from omni.kit.core.tests) need dependencies from some extensions + "omni.kit.test_helpers_gfx", # test dependency from omni.renderer.core + "omni.rtx.tests", # test dependency from omni.hydra.scene_api +] + + +pythonTests.include = [ + "iot_samples.usd_explorer.setup.tests.*", +] +args = [ + "--portable", + "--/app/window/width=1600", + "--/app/window/height=900", + "--/app/window/dpiScaleOverride=1.0", + "--/app/window/scaleToMonitor=false", + "--/app/file/ignoreUnsavedOnExit=true", + "--/app/testMode=1", + "--/app/fastShutdown=1", + "--/exts/omni.kit.test/testExtCodeChangeAnalyzerEnabled=false", + "--no-window", + "--/exts/omni.kit.pipapi/allowOnlineIndex=0", # Make sure it starts without any pip installs +] + +stdoutFailPatterns.exclude = [ + "*Warning: The NumPy module was reloaded*" +] + +timeout = 600 + + +######################################################################################################################## +# BEGIN GENERATED PART (Remove from 'BEGIN' to 'END' to regenerate) +######################################################################################################################## + +# Kit SDK Version: 106.0.0+release.118399.fcefe91f.gl + +# Exact Version dependencies: +# omni.kit.converter.cad_core-201.0.2 +# omni.kit.converter.common-201.0.2 +# omni.kit.converter.jt_core-201.0.2 +# omni.kit.window.modifier.titlebar-105.2.16 +# omni.scene.optimizer.core-106.0.4 +# omni.scene.optimizer.ui-106.0.4 + +# Version lock for all dependencies: +[settings.app.exts] +enabled = [ + "iot_samples.usd_explorer.setup-0.1.0", + "omni.kit.asset_converter-2.1.11", + "omni.kit.browser.asset-1.3.9", + "omni.kit.browser.core-2.3.11", + "omni.kit.browser.folder.core-1.9.12", + "omni.kit.browser.material-1.5.2", + "omni.kit.browser.sample-1.4.7", + "omni.kit.converter.cad-201.0.2", + "omni.kit.converter.dgn_core-201.0.2", + "omni.kit.markup.core-1.2.19", + "omni.kit.markup.playlist-0.0.5", + "omni.kit.ngsearch-0.3.3", + "omni.kit.playlist.core-1.3.4", + "omni.kit.prim.icon-1.0.13", + "omni.kit.search.service-0.1.12", + "omni.kit.stage_column.payload-2.0.0", + "omni.kit.thumbnails.usd-1.0.9", + "omni.kit.timeline.minibar-1.2.9", + "omni.kit.tool.asset_importer-2.5.5", + "omni.kit.tool.camera_playlist-1.3.1", + "omni.kit.tool.markup-1.2.69", + "omni.kit.tool.measure-105.2.5", + "omni.kit.tool.remove_unused.controller-0.1.3", + "omni.kit.tool.remove_unused.core-0.1.2", + "omni.kit.tool.teleport-104.2.15", + "omni.kit.usd_explorer.conn.manager-1.0.0", + "omni.kit.usd_explorer.main.menubar-1.0.36", + "omni.kit.usd_explorer.render-1.0.1", + "omni.kit.usd_explorer.tooltip-1.0.0", + "omni.kit.usd_explorer.window.welcome-1.0.0", + "omni.kit.viewport.menubar.bottom-1.0.5", + "omni.kit.viewport.menubar.framerate-1.0.9", + "omni.kit.viewport.menubar.lighting-106.0.2", + "omni.kit.viewport.menubar.markup-104.1.26", + "omni.kit.viewport.menubar.nav_bar_toggle-1.0.3", + "omni.kit.viewport.menubar.timeline-1.0.2", + "omni.kit.viewport.menubar.waypoint-104.2.16", + "omni.kit.viewport.navigation.camera_manipulator-1.0.53", + "omni.kit.viewport.navigation.capture_no_ansel-1.0.16", + "omni.kit.viewport.navigation.core-1.0.29", + "omni.kit.viewport.navigation.markup-1.0.30", + "omni.kit.viewport.navigation.measure-1.0.5", + "omni.kit.viewport.navigation.section-1.0.4", + "omni.kit.viewport.navigation.teleport-1.0.16", + "omni.kit.viewport.navigation.usd_explorer.bundle-1.0.13", + "omni.kit.viewport.navigation.walk-1.0.4", + "omni.kit.viewport.navigation.waypoint-1.0.22", + "omni.kit.waypoint.core-1.4.52", + "omni.kit.waypoint.playlist-1.0.8", + "omni.kit.widget.material_preview-1.0.16", + "omni.kit.widget.zoombar-1.0.5", + "omni.kit.widgets.custom-1.0.8", + "omni.kit.window.material-1.5.7", + "omni.kit.window.section-107.0.1", + "omni.scene.optimizer.bundle-106.0.4", + "omni.services.pip_archive-0.13.3", + "omni.usd.metrics.assembler-106.0.1", + "omni.usd.metrics.assembler.ui-106.0.2", + "omni.usd.schema.metrics.assembler-106.0.1", + "omni.warp.core-1.1.1", +] + +######################################################################################################################## +# END GENERATED PART +######################################################################################################################## \ No newline at end of file diff --git a/source/extensions/iot_samples.panel_extension.setup/config/extension.toml b/source/extensions/iot_samples.panel_extension.setup/config/extension.toml new file mode 100644 index 0000000..306fd34 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/config/extension.toml @@ -0,0 +1,107 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +[package] +# Semantic Versionning is used: https://semver.org/ +version = "0.1.0" + +# The title and description fields are primarily for displaying extension info in UI +title = "Iot Samples Panel Setup Extension" +description = "A setup extension for a USD Explorer based template applicaiton" + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for UI. +category = "setup" + +# Keywords for the extension +keywords = ["kit", "app", "setup"] + +# Icon to show in the extension manager +icon = "data/icon.png" + +# Preview to show in the extension manager +preview_image = "data/preview.png" + +# Use omni.ui to build simple UI +[dependencies] +"omni.kit.quicklayout" = {} +"omni.kit.window.title" = {} +"omni.kit.browser.asset" = {} +"omni.kit.window.console" = {} +"omni.kit.window.content_browser" = {} +"omni.kit.window.material" = {} +"omni.kit.window.toolbar" = {} +"omni.kit.property.bundle" = {} +"omni.kit.property.layer" = {} +"omni.kit.stage_templates" = {} +"omni.kit.viewport.navigation.usd_explorer.bundle" = {} +"omni.kit.window.preferences" = {} + +# from omni.view.app.setup +"omni.kit.viewport.menubar.camera" = { optional=true } +"omni.kit.widget.layers" = { optional=true } +"omni.kit.widgets.custom" = {} +"omni.kit.window.file" = {} + +# Main python module this extension provides, it will be publicly available as "import omni.hello.world". +[[python.module]] +name = "iot_samples.panel_extension.setup" + +[settings] +app.layout.name = "viewport_only" +app.application_mode = "review" +exts."omni.kit.viewport.menubar.camera".expand = true # Expand the extra-camera settings by default +exts."omni.kit.window.file".useNewFilePicker = true +exts."omni.kit.tool.asset_importer".useNewFilePicker = true +exts."omni.kit.tool.collect".useNewFilePicker = true +exts."omni.kit.widget.layers".useNewFilePicker = true +exts."omni.kit.renderer.core".imgui.enableMips = true +exts."omni.kit.browser.material".enabled = false +exts."omni.kit.window.material".load_after_startup = true +exts."omni.kit.widget.cloud_share".require_access_code = false +exts."omni.kit.mesh.raycast".bvhBuildOnFirstRequired = true # Avoids mesh raycast to initialize during stage open +app.content.emptyStageOnStart = true +app.viewport.createCameraModelRep = false # Disable creation of camera meshes in USD + +# USDRT +app.usdrt.scene_delegate.enableProxyCubes = false +app.usdrt.scene_delegate.geometryStreaming.enabled = true +app.usdrt.scene_delegate.numFramesBetweenLoadBatches = 2 +app.usdrt.scene_delegate.geometryStreaming.numberOfVerticesToLoadPerChunk = 600000 + +exts."omni.kit.viewport.navigation.camera_manipulator".defaultOperation = "" + +[[test]] +dependencies = [ + "omni.kit.core.tests", + "omni.kit.ui_test", + "omni.kit.mainwindow", + "omni.kit.stage_templates", + "omni.kit.viewport.window", + "omni.kit.viewport.utility", +] +args = [ + "--/app/file/ignoreUnsavedOnExit=true", + # "--/renderer/enabled=pxr", + # "--/renderer/active=pxr", + "--/app/window/width=1280", + "--/app/window/height=720", + "--/app/window/dpiScaleOverride=1.0", + "--/app/window/scaleToMonitor=false", + "--/exts/omni.kit.viewport.window/startup/windowName=Viewport", + "--reset-user", + "--no-window", + "--/app/fastShutdown=1" +] diff --git a/source/extensions/iot_samples.panel_extension.setup/data/BuiltInMaterials.usda b/source/extensions/iot_samples.panel_extension.setup/data/BuiltInMaterials.usda new file mode 100644 index 0000000..b63f55d --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/data/BuiltInMaterials.usda @@ -0,0 +1,984 @@ +#usda 1.0 +( + customLayerData = { + dictionary audioSettings = { + double dopplerLimit = 2 + double dopplerScale = 1 + double nonSpatialTimeScale = 1 + double spatialTimeScale = 1 + double speedOfSound = 340 + } + dictionary cameraSettings = { + dictionary Front = { + double3 position = (0, 0, 50000) + double radius = 500 + double3 target = (0, 0, 0) + } + dictionary Perspective = { + double3 position = (-585.5409829436198, 535.6688465310699, 562.1769926693995) + double radius = 1131.7878009131487 + double3 target = (-27.520387592247175, -243.6256650263898, -39.70065745223519) + } + dictionary Right = { + double3 position = (-50000, 0, -1.1102230246251565e-11) + double radius = 500 + double3 target = (0, 0, 0) + } + dictionary Top = { + double3 position = (-8.11833802720775e-12, 50000, 1.1102230246251565e-11) + double radius = 500 + double3 target = (0, 0, 0) + } + string boundCamera = "/OmniverseKit_Persp" + } + dictionary navmeshSettings = { + double agentHeight = 180 + double agentRadius = 20 + bool excludeRigidBodies = 1 + int ver = 1 + double voxelCeiling = 460 + } + dictionary omni_layer = { + string authoring_layer = "./BuiltInMaterials.usda" + dictionary locked = { + } + dictionary muteness = { + } + } + int refinementOverrideImplVersion = 0 + dictionary renderSettings = { + float3 "rtx:debugView:pixelDebug:textColor" = (0, 1e18, 0) + float3 "rtx:fog:fogColor" = (0.75, 0.75, 0.75) + float3 "rtx:index:regionOfInterestMax" = (0, 0, 0) + float3 "rtx:index:regionOfInterestMin" = (0, 0, 0) + float3 "rtx:iray:environment_dome_ground_position" = (0, 0, 0) + float3 "rtx:iray:environment_dome_ground_reflectivity" = (0, 0, 0) + float3 "rtx:iray:environment_dome_rotation_axis" = (3.4028235e38, 3.4028235e38, 3.4028235e38) + float3 "rtx:post:backgroundZeroAlpha:backgroundDefaultColor" = (0, 0, 0) + float3 "rtx:post:colorcorr:contrast" = (1, 1, 1) + float3 "rtx:post:colorcorr:gain" = (1, 1, 1) + float3 "rtx:post:colorcorr:gamma" = (1, 1, 1) + float3 "rtx:post:colorcorr:offset" = (0, 0, 0) + float3 "rtx:post:colorcorr:saturation" = (1, 1, 1) + float3 "rtx:post:colorgrad:blackpoint" = (0, 0, 0) + float3 "rtx:post:colorgrad:contrast" = (1, 1, 1) + float3 "rtx:post:colorgrad:gain" = (1, 1, 1) + float3 "rtx:post:colorgrad:gamma" = (1, 1, 1) + float3 "rtx:post:colorgrad:lift" = (0, 0, 0) + float3 "rtx:post:colorgrad:multiply" = (1, 1, 1) + float3 "rtx:post:colorgrad:offset" = (0, 0, 0) + float3 "rtx:post:colorgrad:whitepoint" = (1, 1, 1) + float3 "rtx:post:lensDistortion:lensFocalLengthArray" = (10, 30, 50) + float3 "rtx:post:lensFlares:anisoFlareFalloffX" = (450, 475, 500) + float3 "rtx:post:lensFlares:anisoFlareFalloffY" = (10, 10, 10) + float3 "rtx:post:lensFlares:cutoffPoint" = (2, 2, 2) + float3 "rtx:post:lensFlares:haloFlareFalloff" = (10, 10, 10) + float3 "rtx:post:lensFlares:haloFlareRadius" = (75, 75, 75) + float3 "rtx:post:lensFlares:isotropicFlareFalloff" = (50, 50, 50) + float3 "rtx:post:tonemap:whitepoint" = (1, 1, 1) + float3 "rtx:raytracing:inscattering:singleScatteringAlbedo" = (0.9, 0.9, 0.9) + float3 "rtx:raytracing:inscattering:transmittanceColor" = (0.5, 0.5, 0.5) + token "rtx:rendermode" = "PathTracing" + float3 "rtx:sceneDb:ambientLightColor" = (0.1, 0.1, 0.1) + } + } + defaultPrim = "World" + metersPerUnit = 0.009999999776482582 + timeCodesPerSecond = 24 + upAxis = "Y" +) + +def Xform "World" +{ + def DistantLight "defaultLight" ( + prepend apiSchemas = ["ShapingAPI"] + kind = "model" + ) + { + float angle = 1 + float intensity = 3000 + float shaping:cone:angle = 180 + float shaping:cone:softness + float shaping:focus + color3f shaping:focusTint + asset shaping:ies:file + float3 xformOp:rotateZYX = (315, 0, 0) + float3 xformOp:translate = (0, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX"] + } + + def Cube "Cube" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double size = 100 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-210.281097, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Scope "Looks" ( + kind = "model" + ) + { + def Material "OmniGlass" + { + color3f inputs:glass_color = (0.02953589, 0.15239275, 1) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (0, 0, 0) + float3 min = (0, 0, 0) + } + } + displayGroup = "Color" + displayName = "Glass Color" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniGlass.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniGlass" + color3f inputs:glass_color.connect = + token outputs:out + } + } + + def Material "OmniPBR" + { + color3f inputs:diffuse_tint = (0.78902954, 0.6577549, 0.49272734) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR" + color3f inputs:diffuse_tint ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Albedo" + displayName = "Color Tint" + doc = "When enabled, this color value is multiplied over the final albedo color" + hidden = false + ) + color3f inputs:diffuse_tint.connect = + token outputs:out + } + } + + def Material "OmniPBR_Opacity" + { + color3f inputs:diffuse_tint = (0.37539837, 0.7552743, 0.34417564) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_Opacity" + color3f inputs:diffuse_tint.connect = + token outputs:out + } + } + + def Material "PreviewSurface" + { + token outputs:surface.connect = + + def Shader "Shader" + { + reorder properties = ["inputs:diffuseColor", "inputs:emissiveColor", "inputs:useSpecularWorkflow", "inputs:specularColor", "inputs:metallic", "inputs:roughness", "inputs:clearcoat", "inputs:clearcoatRoughness", "inputs:opacity", "inputs:opacityThreshold", "inputs:ior", "inputs:normal", "inputs:displacement", "inputs:occlusion", "outputs:surface", "outputs:displacement"] + uniform token info:id = "UsdPreviewSurface" + float inputs:clearcoat + float inputs:clearcoatRoughness = 0.01 + color3f inputs:diffuseColor = (0.06402108, 0.19669037, 0.24472576) + float inputs:displacement + color3f inputs:emissiveColor + float inputs:ior = 1.5 + float inputs:metallic + normal3f inputs:normal = (0, 0, 1) + float inputs:occlusion = 1 + float inputs:opacity = 1 + float inputs:opacityThreshold + float inputs:roughness = 0.5 ( + customData = { + dictionary range = { + double max = 1 + double min = 0 + } + } + ) + color3f inputs:specularColor + int inputs:useSpecularWorkflow ( + customData = { + dictionary range = { + int max = 1 + int min = 0 + } + } + ) + token outputs:displacement + token outputs:surface + } + } + + def Material "OmniPBR_ClearCoat" + { + float inputs:clearcoat_reflection_roughness = 0.051 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Roughness" + ) + color3f inputs:clearcoat_tint = (0, 0.9873462, 1) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Tint" + ) + color3f inputs:diffuse_tint = (0.050134417, 0.74261606, 0.10272784) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + bool inputs:enable_clearcoat = 1 ( + customData = { + bool default = 0 + } + displayGroup = "Clearcoat" + displayName = "Enable Clearcoat Layer" + ) + float inputs:metallic_constant = 1 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Reflectivity" + displayName = "Metallic Amount" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_ClearCoat.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_ClearCoat" + float inputs:clearcoat_reflection_roughness.connect = + color3f inputs:clearcoat_tint.connect = + color3f inputs:diffuse_tint.connect = + bool inputs:enable_clearcoat.connect = + float inputs:metallic_constant.connect = + token outputs:out + } + } + + def Material "OmniPBR_ClearCoat_Opacity" + { + float inputs:clearcoat_reflection_roughness = 0.079 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Roughness" + ) + color3f inputs:clearcoat_tint = (0.9999908, 1, 0.99999) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Tint" + ) + color3f inputs:diffuse_tint = (0.93670887, 0.039523557, 0.039523557) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + bool inputs:enable_clearcoat = 1 ( + customData = { + bool default = 0 + } + displayGroup = "Clearcoat" + displayName = "Enable Clearcoat Layer" + ) + float inputs:metallic_constant = 1 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Reflectivity" + displayName = "Metallic Amount" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_ClearCoat_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_ClearCoat_Opacity" + float inputs:clearcoat_reflection_roughness.connect = + color3f inputs:clearcoat_tint.connect = + color3f inputs:diffuse_tint.connect = + bool inputs:enable_clearcoat.connect = + float inputs:metallic_constant.connect = + token outputs:out + } + } + + def Material "OmniGlass_Opacity" + { + color3f inputs:glass_color = (1, 0, 0) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (0, 0, 0) + float3 min = (0, 0, 0) + } + } + displayGroup = "Color" + displayName = "Glass Color" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniGlass_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniGlass_Opacity" + color3f inputs:glass_color.connect = + token outputs:out + } + } + + def Material "OmniVolumeDensity" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniVolumeDensity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniVolumeDensity" + token outputs:out + } + } + + def Material "OmniSurface" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniSurface.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniSurface" + float inputs:coat_weight = 0.35999998 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Coat" + displayName = "Weight" + hidden = false + ) + color3f inputs:diffuse_reflection_color = (0.06820113, 0.28957528, 0.117775105) ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Base" + displayName = "Color" + hidden = false + ) + float inputs:metalness = 0 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Base" + displayName = "Metalness" + hidden = false + ) + float inputs:specular_reflection_roughness = 0.42 ( + customData = { + float default = 0.2 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Specular" + displayName = "Roughness" + hidden = false + ) + token outputs:out + } + } + + def Material "OmniSurfaceLite" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniSurfaceLite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniSurfaceLite" + color3f inputs:diffuse_reflection_color = (0.23333995, 0.053487573, 0.3011583) ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Base" + displayName = "Color" + hidden = false + ) + token outputs:out + } + } + + def Material "OmniHair" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniHair.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniHair" + token outputs:out ( + renderType = "material" + ) + } + } + + def Material "PreviewSurface_monolithic" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @UsdPreviewSurfaceMonolithic.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "UsdPreviewSurfaceMonolithic" + color3f inputs:diffuseColor = (1, 1, 0) ( + customData = { + float3 default = (0.18, 0.18, 0.18) + } + hidden = false + renderType = "color" + ) + token outputs:out + } + } + + def Material "PreviewSurface_monolithic_lite" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @UsdPreviewSurfaceMonolithicLite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "UsdPreviewSurfaceMonolithicLite" + color3f inputs:diffuseColor = (0, 1, 1) + token outputs:out + } + } + + def Material "DebugWhite" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @DebugWhite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "DebugWhite" + token outputs:out + } + } + + def Material "Default" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @Default.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "Default" + token outputs:out + } + } + + def Material "DebugWhiteEmissive" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @DebugWhiteEmissive.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "DebugWhiteEmissive" + token outputs:out + } + } + } + + def Cube "Cube_01" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double size = 100 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (6.813209, 0.170179, 6.813209) + double3 xformOp:translate = (0, -61.738472, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Sphere "Sphere" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (197.062866, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Sphere "Sphere_02" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4.04462, 0, -168.7586) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Cylinder "Cylinder" ( + kind = "model" + ) + { + uniform token axis = "Y" + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + double height = 100 + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + } + + def Cone "Cone" ( + kind = "model" + ) + { + uniform token axis = "Y" + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + double height = 100 + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + double3 xformOp:rotateZYX = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 0, 168.965569) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Torus" ( + kind = "model" + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 32, 33, 1, 1, 33, 34, 2, 2, 34, 35, 3, 3, 35, 36, 4, 4, 36, 37, 5, 5, 37, 38, 6, 6, 38, 39, 7, 7, 39, 40, 8, 8, 40, 41, 9, 9, 41, 42, 10, 10, 42, 43, 11, 11, 43, 44, 12, 12, 44, 45, 13, 13, 45, 46, 14, 14, 46, 47, 15, 15, 47, 48, 16, 16, 48, 49, 17, 17, 49, 50, 18, 18, 50, 51, 19, 19, 51, 52, 20, 20, 52, 53, 21, 21, 53, 54, 22, 22, 54, 55, 23, 23, 55, 56, 24, 24, 56, 57, 25, 25, 57, 58, 26, 26, 58, 59, 27, 27, 59, 60, 28, 28, 60, 61, 29, 29, 61, 62, 30, 30, 62, 63, 31, 31, 63, 32, 0, 32, 64, 65, 33, 33, 65, 66, 34, 34, 66, 67, 35, 35, 67, 68, 36, 36, 68, 69, 37, 37, 69, 70, 38, 38, 70, 71, 39, 39, 71, 72, 40, 40, 72, 73, 41, 41, 73, 74, 42, 42, 74, 75, 43, 43, 75, 76, 44, 44, 76, 77, 45, 45, 77, 78, 46, 46, 78, 79, 47, 47, 79, 80, 48, 48, 80, 81, 49, 49, 81, 82, 50, 50, 82, 83, 51, 51, 83, 84, 52, 52, 84, 85, 53, 53, 85, 86, 54, 54, 86, 87, 55, 55, 87, 88, 56, 56, 88, 89, 57, 57, 89, 90, 58, 58, 90, 91, 59, 59, 91, 92, 60, 60, 92, 93, 61, 61, 93, 94, 62, 62, 94, 95, 63, 63, 95, 64, 32, 64, 96, 97, 65, 65, 97, 98, 66, 66, 98, 99, 67, 67, 99, 100, 68, 68, 100, 101, 69, 69, 101, 102, 70, 70, 102, 103, 71, 71, 103, 104, 72, 72, 104, 105, 73, 73, 105, 106, 74, 74, 106, 107, 75, 75, 107, 108, 76, 76, 108, 109, 77, 77, 109, 110, 78, 78, 110, 111, 79, 79, 111, 112, 80, 80, 112, 113, 81, 81, 113, 114, 82, 82, 114, 115, 83, 83, 115, 116, 84, 84, 116, 117, 85, 85, 117, 118, 86, 86, 118, 119, 87, 87, 119, 120, 88, 88, 120, 121, 89, 89, 121, 122, 90, 90, 122, 123, 91, 91, 123, 124, 92, 92, 124, 125, 93, 93, 125, 126, 94, 94, 126, 127, 95, 95, 127, 96, 64, 96, 128, 129, 97, 97, 129, 130, 98, 98, 130, 131, 99, 99, 131, 132, 100, 100, 132, 133, 101, 101, 133, 134, 102, 102, 134, 135, 103, 103, 135, 136, 104, 104, 136, 137, 105, 105, 137, 138, 106, 106, 138, 139, 107, 107, 139, 140, 108, 108, 140, 141, 109, 109, 141, 142, 110, 110, 142, 143, 111, 111, 143, 144, 112, 112, 144, 145, 113, 113, 145, 146, 114, 114, 146, 147, 115, 115, 147, 148, 116, 116, 148, 149, 117, 117, 149, 150, 118, 118, 150, 151, 119, 119, 151, 152, 120, 120, 152, 153, 121, 121, 153, 154, 122, 122, 154, 155, 123, 123, 155, 156, 124, 124, 156, 157, 125, 125, 157, 158, 126, 126, 158, 159, 127, 127, 159, 128, 96, 128, 160, 161, 129, 129, 161, 162, 130, 130, 162, 163, 131, 131, 163, 164, 132, 132, 164, 165, 133, 133, 165, 166, 134, 134, 166, 167, 135, 135, 167, 168, 136, 136, 168, 169, 137, 137, 169, 170, 138, 138, 170, 171, 139, 139, 171, 172, 140, 140, 172, 173, 141, 141, 173, 174, 142, 142, 174, 175, 143, 143, 175, 176, 144, 144, 176, 177, 145, 145, 177, 178, 146, 146, 178, 179, 147, 147, 179, 180, 148, 148, 180, 181, 149, 149, 181, 182, 150, 150, 182, 183, 151, 151, 183, 184, 152, 152, 184, 185, 153, 153, 185, 186, 154, 154, 186, 187, 155, 155, 187, 188, 156, 156, 188, 189, 157, 157, 189, 190, 158, 158, 190, 191, 159, 159, 191, 160, 128, 160, 192, 193, 161, 161, 193, 194, 162, 162, 194, 195, 163, 163, 195, 196, 164, 164, 196, 197, 165, 165, 197, 198, 166, 166, 198, 199, 167, 167, 199, 200, 168, 168, 200, 201, 169, 169, 201, 202, 170, 170, 202, 203, 171, 171, 203, 204, 172, 172, 204, 205, 173, 173, 205, 206, 174, 174, 206, 207, 175, 175, 207, 208, 176, 176, 208, 209, 177, 177, 209, 210, 178, 178, 210, 211, 179, 179, 211, 212, 180, 180, 212, 213, 181, 181, 213, 214, 182, 182, 214, 215, 183, 183, 215, 216, 184, 184, 216, 217, 185, 185, 217, 218, 186, 186, 218, 219, 187, 187, 219, 220, 188, 188, 220, 221, 189, 189, 221, 222, 190, 190, 222, 223, 191, 191, 223, 192, 160, 192, 224, 225, 193, 193, 225, 226, 194, 194, 226, 227, 195, 195, 227, 228, 196, 196, 228, 229, 197, 197, 229, 230, 198, 198, 230, 231, 199, 199, 231, 232, 200, 200, 232, 233, 201, 201, 233, 234, 202, 202, 234, 235, 203, 203, 235, 236, 204, 204, 236, 237, 205, 205, 237, 238, 206, 206, 238, 239, 207, 207, 239, 240, 208, 208, 240, 241, 209, 209, 241, 242, 210, 210, 242, 243, 211, 211, 243, 244, 212, 212, 244, 245, 213, 213, 245, 246, 214, 214, 246, 247, 215, 215, 247, 248, 216, 216, 248, 249, 217, 217, 249, 250, 218, 218, 250, 251, 219, 219, 251, 252, 220, 220, 252, 253, 221, 221, 253, 254, 222, 222, 254, 255, 223, 223, 255, 224, 192, 224, 256, 257, 225, 225, 257, 258, 226, 226, 258, 259, 227, 227, 259, 260, 228, 228, 260, 261, 229, 229, 261, 262, 230, 230, 262, 263, 231, 231, 263, 264, 232, 232, 264, 265, 233, 233, 265, 266, 234, 234, 266, 267, 235, 235, 267, 268, 236, 236, 268, 269, 237, 237, 269, 270, 238, 238, 270, 271, 239, 239, 271, 272, 240, 240, 272, 273, 241, 241, 273, 274, 242, 242, 274, 275, 243, 243, 275, 276, 244, 244, 276, 277, 245, 245, 277, 278, 246, 246, 278, 279, 247, 247, 279, 280, 248, 248, 280, 281, 249, 249, 281, 282, 250, 250, 282, 283, 251, 251, 283, 284, 252, 252, 284, 285, 253, 253, 285, 286, 254, 254, 286, 287, 255, 255, 287, 256, 224, 256, 288, 289, 257, 257, 289, 290, 258, 258, 290, 291, 259, 259, 291, 292, 260, 260, 292, 293, 261, 261, 293, 294, 262, 262, 294, 295, 263, 263, 295, 296, 264, 264, 296, 297, 265, 265, 297, 298, 266, 266, 298, 299, 267, 267, 299, 300, 268, 268, 300, 301, 269, 269, 301, 302, 270, 270, 302, 303, 271, 271, 303, 304, 272, 272, 304, 305, 273, 273, 305, 306, 274, 274, 306, 307, 275, 275, 307, 308, 276, 276, 308, 309, 277, 277, 309, 310, 278, 278, 310, 311, 279, 279, 311, 312, 280, 280, 312, 313, 281, 281, 313, 314, 282, 282, 314, 315, 283, 283, 315, 316, 284, 284, 316, 317, 285, 285, 317, 318, 286, 286, 318, 319, 287, 287, 319, 288, 256, 288, 320, 321, 289, 289, 321, 322, 290, 290, 322, 323, 291, 291, 323, 324, 292, 292, 324, 325, 293, 293, 325, 326, 294, 294, 326, 327, 295, 295, 327, 328, 296, 296, 328, 329, 297, 297, 329, 330, 298, 298, 330, 331, 299, 299, 331, 332, 300, 300, 332, 333, 301, 301, 333, 334, 302, 302, 334, 335, 303, 303, 335, 336, 304, 304, 336, 337, 305, 305, 337, 338, 306, 306, 338, 339, 307, 307, 339, 340, 308, 308, 340, 341, 309, 309, 341, 342, 310, 310, 342, 343, 311, 311, 343, 344, 312, 312, 344, 345, 313, 313, 345, 346, 314, 314, 346, 347, 315, 315, 347, 348, 316, 316, 348, 349, 317, 317, 349, 350, 318, 318, 350, 351, 319, 319, 351, 320, 288, 320, 352, 353, 321, 321, 353, 354, 322, 322, 354, 355, 323, 323, 355, 356, 324, 324, 356, 357, 325, 325, 357, 358, 326, 326, 358, 359, 327, 327, 359, 360, 328, 328, 360, 361, 329, 329, 361, 362, 330, 330, 362, 363, 331, 331, 363, 364, 332, 332, 364, 365, 333, 333, 365, 366, 334, 334, 366, 367, 335, 335, 367, 368, 336, 336, 368, 369, 337, 337, 369, 370, 338, 338, 370, 371, 339, 339, 371, 372, 340, 340, 372, 373, 341, 341, 373, 374, 342, 342, 374, 375, 343, 343, 375, 376, 344, 344, 376, 377, 345, 345, 377, 378, 346, 346, 378, 379, 347, 347, 379, 380, 348, 348, 380, 381, 349, 349, 381, 382, 350, 350, 382, 383, 351, 351, 383, 352, 320, 352, 384, 385, 353, 353, 385, 386, 354, 354, 386, 387, 355, 355, 387, 388, 356, 356, 388, 389, 357, 357, 389, 390, 358, 358, 390, 391, 359, 359, 391, 392, 360, 360, 392, 393, 361, 361, 393, 394, 362, 362, 394, 395, 363, 363, 395, 396, 364, 364, 396, 397, 365, 365, 397, 398, 366, 366, 398, 399, 367, 367, 399, 400, 368, 368, 400, 401, 369, 369, 401, 402, 370, 370, 402, 403, 371, 371, 403, 404, 372, 372, 404, 405, 373, 373, 405, 406, 374, 374, 406, 407, 375, 375, 407, 408, 376, 376, 408, 409, 377, 377, 409, 410, 378, 378, 410, 411, 379, 379, 411, 412, 380, 380, 412, 413, 381, 381, 413, 414, 382, 382, 414, 415, 383, 383, 415, 384, 352, 384, 416, 417, 385, 385, 417, 418, 386, 386, 418, 419, 387, 387, 419, 420, 388, 388, 420, 421, 389, 389, 421, 422, 390, 390, 422, 423, 391, 391, 423, 424, 392, 392, 424, 425, 393, 393, 425, 426, 394, 394, 426, 427, 395, 395, 427, 428, 396, 396, 428, 429, 397, 397, 429, 430, 398, 398, 430, 431, 399, 399, 431, 432, 400, 400, 432, 433, 401, 401, 433, 434, 402, 402, 434, 435, 403, 403, 435, 436, 404, 404, 436, 437, 405, 405, 437, 438, 406, 406, 438, 439, 407, 407, 439, 440, 408, 408, 440, 441, 409, 409, 441, 442, 410, 410, 442, 443, 411, 411, 443, 444, 412, 412, 444, 445, 413, 413, 445, 446, 414, 414, 446, 447, 415, 415, 447, 416, 384, 416, 448, 449, 417, 417, 449, 450, 418, 418, 450, 451, 419, 419, 451, 452, 420, 420, 452, 453, 421, 421, 453, 454, 422, 422, 454, 455, 423, 423, 455, 456, 424, 424, 456, 457, 425, 425, 457, 458, 426, 426, 458, 459, 427, 427, 459, 460, 428, 428, 460, 461, 429, 429, 461, 462, 430, 430, 462, 463, 431, 431, 463, 464, 432, 432, 464, 465, 433, 433, 465, 466, 434, 434, 466, 467, 435, 435, 467, 468, 436, 436, 468, 469, 437, 437, 469, 470, 438, 438, 470, 471, 439, 439, 471, 472, 440, 440, 472, 473, 441, 441, 473, 474, 442, 442, 474, 475, 443, 443, 475, 476, 444, 444, 476, 477, 445, 445, 477, 478, 446, 446, 478, 479, 447, 447, 479, 448, 416, 448, 480, 481, 449, 449, 481, 482, 450, 450, 482, 483, 451, 451, 483, 484, 452, 452, 484, 485, 453, 453, 485, 486, 454, 454, 486, 487, 455, 455, 487, 488, 456, 456, 488, 489, 457, 457, 489, 490, 458, 458, 490, 491, 459, 459, 491, 492, 460, 460, 492, 493, 461, 461, 493, 494, 462, 462, 494, 495, 463, 463, 495, 496, 464, 464, 496, 497, 465, 465, 497, 498, 466, 466, 498, 499, 467, 467, 499, 500, 468, 468, 500, 501, 469, 469, 501, 502, 470, 470, 502, 503, 471, 471, 503, 504, 472, 472, 504, 505, 473, 473, 505, 506, 474, 474, 506, 507, 475, 475, 507, 508, 476, 476, 508, 509, 477, 477, 509, 510, 478, 478, 510, 511, 479, 479, 511, 480, 448, 480, 512, 513, 481, 481, 513, 514, 482, 482, 514, 515, 483, 483, 515, 516, 484, 484, 516, 517, 485, 485, 517, 518, 486, 486, 518, 519, 487, 487, 519, 520, 488, 488, 520, 521, 489, 489, 521, 522, 490, 490, 522, 523, 491, 491, 523, 524, 492, 492, 524, 525, 493, 493, 525, 526, 494, 494, 526, 527, 495, 495, 527, 528, 496, 496, 528, 529, 497, 497, 529, 530, 498, 498, 530, 531, 499, 499, 531, 532, 500, 500, 532, 533, 501, 501, 533, 534, 502, 502, 534, 535, 503, 503, 535, 536, 504, 504, 536, 537, 505, 505, 537, 538, 506, 506, 538, 539, 507, 507, 539, 540, 508, 508, 540, 541, 509, 509, 541, 542, 510, 510, 542, 543, 511, 511, 543, 512, 480, 512, 544, 545, 513, 513, 545, 546, 514, 514, 546, 547, 515, 515, 547, 548, 516, 516, 548, 549, 517, 517, 549, 550, 518, 518, 550, 551, 519, 519, 551, 552, 520, 520, 552, 553, 521, 521, 553, 554, 522, 522, 554, 555, 523, 523, 555, 556, 524, 524, 556, 557, 525, 525, 557, 558, 526, 526, 558, 559, 527, 527, 559, 560, 528, 528, 560, 561, 529, 529, 561, 562, 530, 530, 562, 563, 531, 531, 563, 564, 532, 532, 564, 565, 533, 533, 565, 566, 534, 534, 566, 567, 535, 535, 567, 568, 536, 536, 568, 569, 537, 537, 569, 570, 538, 538, 570, 571, 539, 539, 571, 572, 540, 540, 572, 573, 541, 541, 573, 574, 542, 542, 574, 575, 543, 543, 575, 544, 512, 544, 576, 577, 545, 545, 577, 578, 546, 546, 578, 579, 547, 547, 579, 580, 548, 548, 580, 581, 549, 549, 581, 582, 550, 550, 582, 583, 551, 551, 583, 584, 552, 552, 584, 585, 553, 553, 585, 586, 554, 554, 586, 587, 555, 555, 587, 588, 556, 556, 588, 589, 557, 557, 589, 590, 558, 558, 590, 591, 559, 559, 591, 592, 560, 560, 592, 593, 561, 561, 593, 594, 562, 562, 594, 595, 563, 563, 595, 596, 564, 564, 596, 597, 565, 565, 597, 598, 566, 566, 598, 599, 567, 567, 599, 600, 568, 568, 600, 601, 569, 569, 601, 602, 570, 570, 602, 603, 571, 571, 603, 604, 572, 572, 604, 605, 573, 573, 605, 606, 574, 574, 606, 607, 575, 575, 607, 576, 544, 576, 608, 609, 577, 577, 609, 610, 578, 578, 610, 611, 579, 579, 611, 612, 580, 580, 612, 613, 581, 581, 613, 614, 582, 582, 614, 615, 583, 583, 615, 616, 584, 584, 616, 617, 585, 585, 617, 618, 586, 586, 618, 619, 587, 587, 619, 620, 588, 588, 620, 621, 589, 589, 621, 622, 590, 590, 622, 623, 591, 591, 623, 624, 592, 592, 624, 625, 593, 593, 625, 626, 594, 594, 626, 627, 595, 595, 627, 628, 596, 596, 628, 629, 597, 597, 629, 630, 598, 598, 630, 631, 599, 599, 631, 632, 600, 600, 632, 633, 601, 601, 633, 634, 602, 602, 634, 635, 603, 603, 635, 636, 604, 604, 636, 637, 605, 605, 637, 638, 606, 606, 638, 639, 607, 607, 639, 608, 576, 608, 640, 641, 609, 609, 641, 642, 610, 610, 642, 643, 611, 611, 643, 644, 612, 612, 644, 645, 613, 613, 645, 646, 614, 614, 646, 647, 615, 615, 647, 648, 616, 616, 648, 649, 617, 617, 649, 650, 618, 618, 650, 651, 619, 619, 651, 652, 620, 620, 652, 653, 621, 621, 653, 654, 622, 622, 654, 655, 623, 623, 655, 656, 624, 624, 656, 657, 625, 625, 657, 658, 626, 626, 658, 659, 627, 627, 659, 660, 628, 628, 660, 661, 629, 629, 661, 662, 630, 630, 662, 663, 631, 631, 663, 664, 632, 632, 664, 665, 633, 633, 665, 666, 634, 634, 666, 667, 635, 635, 667, 668, 636, 636, 668, 669, 637, 637, 669, 670, 638, 638, 670, 671, 639, 639, 671, 640, 608, 640, 672, 673, 641, 641, 673, 674, 642, 642, 674, 675, 643, 643, 675, 676, 644, 644, 676, 677, 645, 645, 677, 678, 646, 646, 678, 679, 647, 647, 679, 680, 648, 648, 680, 681, 649, 649, 681, 682, 650, 650, 682, 683, 651, 651, 683, 684, 652, 652, 684, 685, 653, 653, 685, 686, 654, 654, 686, 687, 655, 655, 687, 688, 656, 656, 688, 689, 657, 657, 689, 690, 658, 658, 690, 691, 659, 659, 691, 692, 660, 660, 692, 693, 661, 661, 693, 694, 662, 662, 694, 695, 663, 663, 695, 696, 664, 664, 696, 697, 665, 665, 697, 698, 666, 666, 698, 699, 667, 667, 699, 700, 668, 668, 700, 701, 669, 669, 701, 702, 670, 670, 702, 703, 671, 671, 703, 672, 640, 672, 704, 705, 673, 673, 705, 706, 674, 674, 706, 707, 675, 675, 707, 708, 676, 676, 708, 709, 677, 677, 709, 710, 678, 678, 710, 711, 679, 679, 711, 712, 680, 680, 712, 713, 681, 681, 713, 714, 682, 682, 714, 715, 683, 683, 715, 716, 684, 684, 716, 717, 685, 685, 717, 718, 686, 686, 718, 719, 687, 687, 719, 720, 688, 688, 720, 721, 689, 689, 721, 722, 690, 690, 722, 723, 691, 691, 723, 724, 692, 692, 724, 725, 693, 693, 725, 726, 694, 694, 726, 727, 695, 695, 727, 728, 696, 696, 728, 729, 697, 697, 729, 730, 698, 698, 730, 731, 699, 699, 731, 732, 700, 700, 732, 733, 701, 701, 733, 734, 702, 702, 734, 735, 703, 703, 735, 704, 672, 704, 736, 737, 705, 705, 737, 738, 706, 706, 738, 739, 707, 707, 739, 740, 708, 708, 740, 741, 709, 709, 741, 742, 710, 710, 742, 743, 711, 711, 743, 744, 712, 712, 744, 745, 713, 713, 745, 746, 714, 714, 746, 747, 715, 715, 747, 748, 716, 716, 748, 749, 717, 717, 749, 750, 718, 718, 750, 751, 719, 719, 751, 752, 720, 720, 752, 753, 721, 721, 753, 754, 722, 722, 754, 755, 723, 723, 755, 756, 724, 724, 756, 757, 725, 725, 757, 758, 726, 726, 758, 759, 727, 727, 759, 760, 728, 728, 760, 761, 729, 729, 761, 762, 730, 730, 762, 763, 731, 731, 763, 764, 732, 732, 764, 765, 733, 733, 765, 766, 734, 734, 766, 767, 735, 735, 767, 736, 704, 736, 768, 769, 737, 737, 769, 770, 738, 738, 770, 771, 739, 739, 771, 772, 740, 740, 772, 773, 741, 741, 773, 774, 742, 742, 774, 775, 743, 743, 775, 776, 744, 744, 776, 777, 745, 745, 777, 778, 746, 746, 778, 779, 747, 747, 779, 780, 748, 748, 780, 781, 749, 749, 781, 782, 750, 750, 782, 783, 751, 751, 783, 784, 752, 752, 784, 785, 753, 753, 785, 786, 754, 754, 786, 787, 755, 755, 787, 788, 756, 756, 788, 789, 757, 757, 789, 790, 758, 758, 790, 791, 759, 759, 791, 792, 760, 760, 792, 793, 761, 761, 793, 794, 762, 762, 794, 795, 763, 763, 795, 796, 764, 764, 796, 797, 765, 765, 797, 798, 766, 766, 798, 799, 767, 767, 799, 768, 736, 768, 800, 801, 769, 769, 801, 802, 770, 770, 802, 803, 771, 771, 803, 804, 772, 772, 804, 805, 773, 773, 805, 806, 774, 774, 806, 807, 775, 775, 807, 808, 776, 776, 808, 809, 777, 777, 809, 810, 778, 778, 810, 811, 779, 779, 811, 812, 780, 780, 812, 813, 781, 781, 813, 814, 782, 782, 814, 815, 783, 783, 815, 816, 784, 784, 816, 817, 785, 785, 817, 818, 786, 786, 818, 819, 787, 787, 819, 820, 788, 788, 820, 821, 789, 789, 821, 822, 790, 790, 822, 823, 791, 791, 823, 824, 792, 792, 824, 825, 793, 793, 825, 826, 794, 794, 826, 827, 795, 795, 827, 828, 796, 796, 828, 829, 797, 797, 829, 830, 798, 798, 830, 831, 799, 799, 831, 800, 768, 800, 832, 833, 801, 801, 833, 834, 802, 802, 834, 835, 803, 803, 835, 836, 804, 804, 836, 837, 805, 805, 837, 838, 806, 806, 838, 839, 807, 807, 839, 840, 808, 808, 840, 841, 809, 809, 841, 842, 810, 810, 842, 843, 811, 811, 843, 844, 812, 812, 844, 845, 813, 813, 845, 846, 814, 814, 846, 847, 815, 815, 847, 848, 816, 816, 848, 849, 817, 817, 849, 850, 818, 818, 850, 851, 819, 819, 851, 852, 820, 820, 852, 853, 821, 821, 853, 854, 822, 822, 854, 855, 823, 823, 855, 856, 824, 824, 856, 857, 825, 825, 857, 858, 826, 826, 858, 859, 827, 827, 859, 860, 828, 828, 860, 861, 829, 829, 861, 862, 830, 830, 862, 863, 831, 831, 863, 832, 800, 832, 864, 865, 833, 833, 865, 866, 834, 834, 866, 867, 835, 835, 867, 868, 836, 836, 868, 869, 837, 837, 869, 870, 838, 838, 870, 871, 839, 839, 871, 872, 840, 840, 872, 873, 841, 841, 873, 874, 842, 842, 874, 875, 843, 843, 875, 876, 844, 844, 876, 877, 845, 845, 877, 878, 846, 846, 878, 879, 847, 847, 879, 880, 848, 848, 880, 881, 849, 849, 881, 882, 850, 850, 882, 883, 851, 851, 883, 884, 852, 852, 884, 885, 853, 853, 885, 886, 854, 854, 886, 887, 855, 855, 887, 888, 856, 856, 888, 889, 857, 857, 889, 890, 858, 858, 890, 891, 859, 859, 891, 892, 860, 860, 892, 893, 861, 861, 893, 894, 862, 862, 894, 895, 863, 863, 895, 864, 832, 864, 896, 897, 865, 865, 897, 898, 866, 866, 898, 899, 867, 867, 899, 900, 868, 868, 900, 901, 869, 869, 901, 902, 870, 870, 902, 903, 871, 871, 903, 904, 872, 872, 904, 905, 873, 873, 905, 906, 874, 874, 906, 907, 875, 875, 907, 908, 876, 876, 908, 909, 877, 877, 909, 910, 878, 878, 910, 911, 879, 879, 911, 912, 880, 880, 912, 913, 881, 881, 913, 914, 882, 882, 914, 915, 883, 883, 915, 916, 884, 884, 916, 917, 885, 885, 917, 918, 886, 886, 918, 919, 887, 887, 919, 920, 888, 888, 920, 921, 889, 889, 921, 922, 890, 890, 922, 923, 891, 891, 923, 924, 892, 892, 924, 925, 893, 893, 925, 926, 894, 894, 926, 927, 895, 895, 927, 896, 864, 896, 928, 929, 897, 897, 929, 930, 898, 898, 930, 931, 899, 899, 931, 932, 900, 900, 932, 933, 901, 901, 933, 934, 902, 902, 934, 935, 903, 903, 935, 936, 904, 904, 936, 937, 905, 905, 937, 938, 906, 906, 938, 939, 907, 907, 939, 940, 908, 908, 940, 941, 909, 909, 941, 942, 910, 910, 942, 943, 911, 911, 943, 944, 912, 912, 944, 945, 913, 913, 945, 946, 914, 914, 946, 947, 915, 915, 947, 948, 916, 916, 948, 949, 917, 917, 949, 950, 918, 918, 950, 951, 919, 919, 951, 952, 920, 920, 952, 953, 921, 921, 953, 954, 922, 922, 954, 955, 923, 923, 955, 956, 924, 924, 956, 957, 925, 925, 957, 958, 926, 926, 958, 959, 927, 927, 959, 928, 896, 928, 960, 961, 929, 929, 961, 962, 930, 930, 962, 963, 931, 931, 963, 964, 932, 932, 964, 965, 933, 933, 965, 966, 934, 934, 966, 967, 935, 935, 967, 968, 936, 936, 968, 969, 937, 937, 969, 970, 938, 938, 970, 971, 939, 939, 971, 972, 940, 940, 972, 973, 941, 941, 973, 974, 942, 942, 974, 975, 943, 943, 975, 976, 944, 944, 976, 977, 945, 945, 977, 978, 946, 946, 978, 979, 947, 947, 979, 980, 948, 948, 980, 981, 949, 949, 981, 982, 950, 950, 982, 983, 951, 951, 983, 984, 952, 952, 984, 985, 953, 953, 985, 986, 954, 954, 986, 987, 955, 955, 987, 988, 956, 956, 988, 989, 957, 957, 989, 990, 958, 958, 990, 991, 959, 959, 991, 960, 928, 960, 992, 993, 961, 961, 993, 994, 962, 962, 994, 995, 963, 963, 995, 996, 964, 964, 996, 997, 965, 965, 997, 998, 966, 966, 998, 999, 967, 967, 999, 1000, 968, 968, 1000, 1001, 969, 969, 1001, 1002, 970, 970, 1002, 1003, 971, 971, 1003, 1004, 972, 972, 1004, 1005, 973, 973, 1005, 1006, 974, 974, 1006, 1007, 975, 975, 1007, 1008, 976, 976, 1008, 1009, 977, 977, 1009, 1010, 978, 978, 1010, 1011, 979, 979, 1011, 1012, 980, 980, 1012, 1013, 981, 981, 1013, 1014, 982, 982, 1014, 1015, 983, 983, 1015, 1016, 984, 984, 1016, 1017, 985, 985, 1017, 1018, 986, 986, 1018, 1019, 987, 987, 1019, 1020, 988, 988, 1020, 1021, 989, 989, 1021, 1022, 990, 990, 1022, 1023, 991, 991, 1023, 992, 960, 992, 0, 1, 993, 993, 1, 2, 994, 994, 2, 3, 995, 995, 3, 4, 996, 996, 4, 5, 997, 997, 5, 6, 998, 998, 6, 7, 999, 999, 7, 8, 1000, 1000, 8, 9, 1001, 1001, 9, 10, 1002, 1002, 10, 11, 1003, 1003, 11, 12, 1004, 1004, 12, 13, 1005, 1005, 13, 14, 1006, 1006, 14, 15, 1007, 1007, 15, 16, 1008, 1008, 16, 17, 1009, 1009, 17, 18, 1010, 1010, 18, 19, 1011, 1011, 19, 20, 1012, 1012, 20, 21, 1013, 1013, 21, 22, 1014, 1014, 22, 23, 1015, 1015, 23, 24, 1016, 1016, 24, 25, 1017, 1017, 25, 26, 1018, 1018, 26, 27, 1019, 1019, 27, 28, 1020, 1020, 28, 29, 1021, 1021, 29, 30, 1022, 1022, 30, 31, 1023, 1023, 31, 0, 992] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(1, 0, 0), (0.98078525, 0.19509032, 0), (0.96193975, 0.19509032, 0.19134171), (0.98078525, 0, 0.19509032), (0.98078525, 0, 0.19509032), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.19509032, 0.37533027), (0.9238795, 0, 0.38268343), (0.9238795, 0, 0.38268343), (0.90612745, 0.19509032, 0.37533027), (0.81549317, 0.19509032, 0.5448951), (0.8314696, 0, 0.55557024), (0.8314696, 0, 0.55557024), (0.81549317, 0.19509032, 0.5448951), (0.69351995, 0.19509032, 0.69351995), (0.70710677, 0, 0.70710677), (0.70710677, 0, 0.70710677), (0.69351995, 0.19509032, 0.69351995), (0.5448951, 0.19509032, 0.81549317), (0.55557024, 0, 0.8314696), (0.55557024, 0, 0.8314696), (0.5448951, 0.19509032, 0.81549317), (0.37533027, 0.19509032, 0.90612745), (0.38268343, 0, 0.9238795), (0.38268343, 0, 0.9238795), (0.37533027, 0.19509032, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.19509032, 0, 0.98078525), (0.19509032, 0, 0.98078525), (0.19134171, 0.19509032, 0.96193975), (6.005578e-17, 0.19509032, 0.98078525), (6.123234e-17, 0, 1), (6.123234e-17, 0, 1), (6.005578e-17, 0.19509032, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.19509032, 0, 0.98078525), (-0.19509032, 0, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.37533027, 0.19509032, 0.90612745), (-0.38268343, 0, 0.9238795), (-0.38268343, 0, 0.9238795), (-0.37533027, 0.19509032, 0.90612745), (-0.5448951, 0.19509032, 0.81549317), (-0.55557024, 0, 0.8314696), (-0.55557024, 0, 0.8314696), (-0.5448951, 0.19509032, 0.81549317), (-0.69351995, 0.19509032, 0.69351995), (-0.70710677, 0, 0.70710677), (-0.70710677, 0, 0.70710677), (-0.69351995, 0.19509032, 0.69351995), (-0.81549317, 0.19509032, 0.5448951), (-0.8314696, 0, 0.55557024), (-0.8314696, 0, 0.55557024), (-0.81549317, 0.19509032, 0.5448951), (-0.90612745, 0.19509032, 0.37533027), (-0.9238795, 0, 0.38268343), (-0.9238795, 0, 0.38268343), (-0.90612745, 0.19509032, 0.37533027), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0, 0.19509032), (-0.98078525, 0, 0.19509032), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0.19509032, 1.2011156e-16), (-1, 0, 1.2246469e-16), (-1, 0, 1.2246469e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.96193975, 0.19509032, -0.19134171), (-0.98078525, 0, -0.19509032), (-0.98078525, 0, -0.19509032), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.19509032, -0.37533027), (-0.9238795, 0, -0.38268343), (-0.9238795, 0, -0.38268343), (-0.90612745, 0.19509032, -0.37533027), (-0.81549317, 0.19509032, -0.5448951), (-0.8314696, 0, -0.55557024), (-0.8314696, 0, -0.55557024), (-0.81549317, 0.19509032, -0.5448951), (-0.69351995, 0.19509032, -0.69351995), (-0.70710677, 0, -0.70710677), (-0.70710677, 0, -0.70710677), (-0.69351995, 0.19509032, -0.69351995), (-0.5448951, 0.19509032, -0.81549317), (-0.55557024, 0, -0.8314696), (-0.55557024, 0, -0.8314696), (-0.5448951, 0.19509032, -0.81549317), (-0.37533027, 0.19509032, -0.90612745), (-0.38268343, 0, -0.9238795), (-0.38268343, 0, -0.9238795), (-0.37533027, 0.19509032, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.19509032, 0, -0.98078525), (-0.19509032, 0, -0.98078525), (-0.19134171, 0.19509032, -0.96193975), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.8369701e-16, 0, -1), (-1.8369701e-16, 0, -1), (-1.8016734e-16, 0.19509032, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.19509032, 0, -0.98078525), (0.19509032, 0, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.37533027, 0.19509032, -0.90612745), (0.38268343, 0, -0.9238795), (0.38268343, 0, -0.9238795), (0.37533027, 0.19509032, -0.90612745), (0.5448951, 0.19509032, -0.81549317), (0.55557024, 0, -0.8314696), (0.55557024, 0, -0.8314696), (0.5448951, 0.19509032, -0.81549317), (0.69351995, 0.19509032, -0.69351995), (0.70710677, 0, -0.70710677), (0.70710677, 0, -0.70710677), (0.69351995, 0.19509032, -0.69351995), (0.81549317, 0.19509032, -0.5448951), (0.8314696, 0, -0.55557024), (0.8314696, 0, -0.55557024), (0.81549317, 0.19509032, -0.5448951), (0.90612745, 0.19509032, -0.37533027), (0.9238795, 0, -0.38268343), (0.9238795, 0, -0.38268343), (0.90612745, 0.19509032, -0.37533027), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0, -0.19509032), (0.98078525, 0, -0.19509032), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0.19509032, 0), (1, 0, 0), (0.98078525, 0.19509032, 0), (0.9238795, 0.38268343, 0), (0.90612745, 0.38268343, 0.18023996), (0.96193975, 0.19509032, 0.19134171), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.38268343, 0.18023996), (0.8535534, 0.38268343, 0.35355338), (0.90612745, 0.19509032, 0.37533027), (0.90612745, 0.19509032, 0.37533027), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.38268343, 0.51328), (0.81549317, 0.19509032, 0.5448951), (0.81549317, 0.19509032, 0.5448951), (0.76817775, 0.38268343, 0.51328), (0.6532815, 0.38268343, 0.6532815), (0.69351995, 0.19509032, 0.69351995), (0.69351995, 0.19509032, 0.69351995), (0.6532815, 0.38268343, 0.6532815), (0.51328, 0.38268343, 0.76817775), (0.5448951, 0.19509032, 0.81549317), (0.5448951, 0.19509032, 0.81549317), (0.51328, 0.38268343, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.37533027, 0.19509032, 0.90612745), (0.37533027, 0.19509032, 0.90612745), (0.35355338, 0.38268343, 0.8535534), (0.18023996, 0.38268343, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.19134171, 0.19509032, 0.96193975), (0.18023996, 0.38268343, 0.90612745), (5.6571306e-17, 0.38268343, 0.9238795), (6.005578e-17, 0.19509032, 0.98078525), (6.005578e-17, 0.19509032, 0.98078525), (5.6571306e-17, 0.38268343, 0.9238795), (-0.18023996, 0.38268343, 0.90612745), (-0.19134171, 0.19509032, 0.96193975), (-0.19134171, 0.19509032, 0.96193975), (-0.18023996, 0.38268343, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.37533027, 0.19509032, 0.90612745), (-0.37533027, 0.19509032, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.51328, 0.38268343, 0.76817775), (-0.5448951, 0.19509032, 0.81549317), (-0.5448951, 0.19509032, 0.81549317), (-0.51328, 0.38268343, 0.76817775), (-0.6532815, 0.38268343, 0.6532815), (-0.69351995, 0.19509032, 0.69351995), (-0.69351995, 0.19509032, 0.69351995), (-0.6532815, 0.38268343, 0.6532815), (-0.76817775, 0.38268343, 0.51328), (-0.81549317, 0.19509032, 0.5448951), (-0.81549317, 0.19509032, 0.5448951), (-0.76817775, 0.38268343, 0.51328), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.19509032, 0.37533027), (-0.90612745, 0.19509032, 0.37533027), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.38268343, 0.18023996), (-0.96193975, 0.19509032, 0.19134171), (-0.96193975, 0.19509032, 0.19134171), (-0.90612745, 0.38268343, 0.18023996), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.90612745, 0.38268343, -0.18023996), (-0.96193975, 0.19509032, -0.19134171), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.38268343, -0.18023996), (-0.8535534, 0.38268343, -0.35355338), (-0.90612745, 0.19509032, -0.37533027), (-0.90612745, 0.19509032, -0.37533027), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.38268343, -0.51328), (-0.81549317, 0.19509032, -0.5448951), (-0.81549317, 0.19509032, -0.5448951), (-0.76817775, 0.38268343, -0.51328), (-0.6532815, 0.38268343, -0.6532815), (-0.69351995, 0.19509032, -0.69351995), (-0.69351995, 0.19509032, -0.69351995), (-0.6532815, 0.38268343, -0.6532815), (-0.51328, 0.38268343, -0.76817775), (-0.5448951, 0.19509032, -0.81549317), (-0.5448951, 0.19509032, -0.81549317), (-0.51328, 0.38268343, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.37533027, 0.19509032, -0.90612745), (-0.37533027, 0.19509032, -0.90612745), (-0.35355338, 0.38268343, -0.8535534), (-0.18023996, 0.38268343, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.19134171, 0.19509032, -0.96193975), (-0.18023996, 0.38268343, -0.90612745), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.6971392e-16, 0.38268343, -0.9238795), (0.18023996, 0.38268343, -0.90612745), (0.19134171, 0.19509032, -0.96193975), (0.19134171, 0.19509032, -0.96193975), (0.18023996, 0.38268343, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.37533027, 0.19509032, -0.90612745), (0.37533027, 0.19509032, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.51328, 0.38268343, -0.76817775), (0.5448951, 0.19509032, -0.81549317), (0.5448951, 0.19509032, -0.81549317), (0.51328, 0.38268343, -0.76817775), (0.6532815, 0.38268343, -0.6532815), (0.69351995, 0.19509032, -0.69351995), (0.69351995, 0.19509032, -0.69351995), (0.6532815, 0.38268343, -0.6532815), (0.76817775, 0.38268343, -0.51328), (0.81549317, 0.19509032, -0.5448951), (0.81549317, 0.19509032, -0.5448951), (0.76817775, 0.38268343, -0.51328), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.19509032, -0.37533027), (0.90612745, 0.19509032, -0.37533027), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.38268343, -0.18023996), (0.96193975, 0.19509032, -0.19134171), (0.96193975, 0.19509032, -0.19134171), (0.90612745, 0.38268343, -0.18023996), (0.9238795, 0.38268343, 0), (0.98078525, 0.19509032, 0), (0.9238795, 0.38268343, 0), (0.8314696, 0.55557024, 0), (0.81549317, 0.55557024, 0.16221167), (0.90612745, 0.38268343, 0.18023996), (0.90612745, 0.38268343, 0.18023996), (0.81549317, 0.55557024, 0.16221167), (0.76817775, 0.55557024, 0.31818965), (0.8535534, 0.38268343, 0.35355338), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.55557024, 0.31818965), (0.6913417, 0.55557024, 0.46193975), (0.76817775, 0.38268343, 0.51328), (0.76817775, 0.38268343, 0.51328), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.55557024, 0.5879378), (0.6532815, 0.38268343, 0.6532815), (0.6532815, 0.38268343, 0.6532815), (0.5879378, 0.55557024, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.51328, 0.38268343, 0.76817775), (0.51328, 0.38268343, 0.76817775), (0.46193975, 0.55557024, 0.6913417), (0.31818965, 0.55557024, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.35355338, 0.38268343, 0.8535534), (0.31818965, 0.55557024, 0.76817775), (0.16221167, 0.55557024, 0.81549317), (0.18023996, 0.38268343, 0.90612745), (0.18023996, 0.38268343, 0.90612745), (0.16221167, 0.55557024, 0.81549317), (5.091283e-17, 0.55557024, 0.8314696), (5.6571306e-17, 0.38268343, 0.9238795), (5.6571306e-17, 0.38268343, 0.9238795), (5.091283e-17, 0.55557024, 0.8314696), (-0.16221167, 0.55557024, 0.81549317), (-0.18023996, 0.38268343, 0.90612745), (-0.18023996, 0.38268343, 0.90612745), (-0.16221167, 0.55557024, 0.81549317), (-0.31818965, 0.55557024, 0.76817775), (-0.35355338, 0.38268343, 0.8535534), (-0.35355338, 0.38268343, 0.8535534), (-0.31818965, 0.55557024, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.51328, 0.38268343, 0.76817775), (-0.51328, 0.38268343, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.5879378, 0.55557024, 0.5879378), (-0.6532815, 0.38268343, 0.6532815), (-0.6532815, 0.38268343, 0.6532815), (-0.5879378, 0.55557024, 0.5879378), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.38268343, 0.51328), (-0.76817775, 0.38268343, 0.51328), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.55557024, 0.31818965), (-0.8535534, 0.38268343, 0.35355338), (-0.8535534, 0.38268343, 0.35355338), (-0.76817775, 0.55557024, 0.31818965), (-0.81549317, 0.55557024, 0.16221167), (-0.90612745, 0.38268343, 0.18023996), (-0.90612745, 0.38268343, 0.18023996), (-0.81549317, 0.55557024, 0.16221167), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.81549317, 0.55557024, -0.16221167), (-0.90612745, 0.38268343, -0.18023996), (-0.90612745, 0.38268343, -0.18023996), (-0.81549317, 0.55557024, -0.16221167), (-0.76817775, 0.55557024, -0.31818965), (-0.8535534, 0.38268343, -0.35355338), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.55557024, -0.31818965), (-0.6913417, 0.55557024, -0.46193975), (-0.76817775, 0.38268343, -0.51328), (-0.76817775, 0.38268343, -0.51328), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.55557024, -0.5879378), (-0.6532815, 0.38268343, -0.6532815), (-0.6532815, 0.38268343, -0.6532815), (-0.5879378, 0.55557024, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.51328, 0.38268343, -0.76817775), (-0.51328, 0.38268343, -0.76817775), (-0.46193975, 0.55557024, -0.6913417), (-0.31818965, 0.55557024, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.35355338, 0.38268343, -0.8535534), (-0.31818965, 0.55557024, -0.76817775), (-0.16221167, 0.55557024, -0.81549317), (-0.18023996, 0.38268343, -0.90612745), (-0.18023996, 0.38268343, -0.90612745), (-0.16221167, 0.55557024, -0.81549317), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.5273849e-16, 0.55557024, -0.8314696), (0.16221167, 0.55557024, -0.81549317), (0.18023996, 0.38268343, -0.90612745), (0.18023996, 0.38268343, -0.90612745), (0.16221167, 0.55557024, -0.81549317), (0.31818965, 0.55557024, -0.76817775), (0.35355338, 0.38268343, -0.8535534), (0.35355338, 0.38268343, -0.8535534), (0.31818965, 0.55557024, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.51328, 0.38268343, -0.76817775), (0.51328, 0.38268343, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.5879378, 0.55557024, -0.5879378), (0.6532815, 0.38268343, -0.6532815), (0.6532815, 0.38268343, -0.6532815), (0.5879378, 0.55557024, -0.5879378), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.38268343, -0.51328), (0.76817775, 0.38268343, -0.51328), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.55557024, -0.31818965), (0.8535534, 0.38268343, -0.35355338), (0.8535534, 0.38268343, -0.35355338), (0.76817775, 0.55557024, -0.31818965), (0.81549317, 0.55557024, -0.16221167), (0.90612745, 0.38268343, -0.18023996), (0.90612745, 0.38268343, -0.18023996), (0.81549317, 0.55557024, -0.16221167), (0.8314696, 0.55557024, 0), (0.9238795, 0.38268343, 0), (0.8314696, 0.55557024, 0), (0.70710677, 0.70710677, 0), (0.69351995, 0.70710677, 0.13794969), (0.81549317, 0.55557024, 0.16221167), (0.81549317, 0.55557024, 0.16221167), (0.69351995, 0.70710677, 0.13794969), (0.6532815, 0.70710677, 0.27059805), (0.76817775, 0.55557024, 0.31818965), (0.76817775, 0.55557024, 0.31818965), (0.6532815, 0.70710677, 0.27059805), (0.5879378, 0.70710677, 0.39284748), (0.6913417, 0.55557024, 0.46193975), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.70710677, 0.39284748), (0.5, 0.70710677, 0.5), (0.5879378, 0.55557024, 0.5879378), (0.5879378, 0.55557024, 0.5879378), (0.5, 0.70710677, 0.5), (0.39284748, 0.70710677, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.46193975, 0.55557024, 0.6913417), (0.39284748, 0.70710677, 0.5879378), (0.27059805, 0.70710677, 0.6532815), (0.31818965, 0.55557024, 0.76817775), (0.31818965, 0.55557024, 0.76817775), (0.27059805, 0.70710677, 0.6532815), (0.13794969, 0.70710677, 0.69351995), (0.16221167, 0.55557024, 0.81549317), (0.16221167, 0.55557024, 0.81549317), (0.13794969, 0.70710677, 0.69351995), (4.3297803e-17, 0.70710677, 0.70710677), (5.091283e-17, 0.55557024, 0.8314696), (5.091283e-17, 0.55557024, 0.8314696), (4.3297803e-17, 0.70710677, 0.70710677), (-0.13794969, 0.70710677, 0.69351995), (-0.16221167, 0.55557024, 0.81549317), (-0.16221167, 0.55557024, 0.81549317), (-0.13794969, 0.70710677, 0.69351995), (-0.27059805, 0.70710677, 0.6532815), (-0.31818965, 0.55557024, 0.76817775), (-0.31818965, 0.55557024, 0.76817775), (-0.27059805, 0.70710677, 0.6532815), (-0.39284748, 0.70710677, 0.5879378), (-0.46193975, 0.55557024, 0.6913417), (-0.46193975, 0.55557024, 0.6913417), (-0.39284748, 0.70710677, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.55557024, 0.5879378), (-0.5879378, 0.55557024, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.70710677, 0.39284748), (-0.6913417, 0.55557024, 0.46193975), (-0.6913417, 0.55557024, 0.46193975), (-0.5879378, 0.70710677, 0.39284748), (-0.6532815, 0.70710677, 0.27059805), (-0.76817775, 0.55557024, 0.31818965), (-0.76817775, 0.55557024, 0.31818965), (-0.6532815, 0.70710677, 0.27059805), (-0.69351995, 0.70710677, 0.13794969), (-0.81549317, 0.55557024, 0.16221167), (-0.81549317, 0.55557024, 0.16221167), (-0.69351995, 0.70710677, 0.13794969), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.69351995, 0.70710677, -0.13794969), (-0.81549317, 0.55557024, -0.16221167), (-0.81549317, 0.55557024, -0.16221167), (-0.69351995, 0.70710677, -0.13794969), (-0.6532815, 0.70710677, -0.27059805), (-0.76817775, 0.55557024, -0.31818965), (-0.76817775, 0.55557024, -0.31818965), (-0.6532815, 0.70710677, -0.27059805), (-0.5879378, 0.70710677, -0.39284748), (-0.6913417, 0.55557024, -0.46193975), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.70710677, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.5879378, 0.55557024, -0.5879378), (-0.5879378, 0.55557024, -0.5879378), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.70710677, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.46193975, 0.55557024, -0.6913417), (-0.39284748, 0.70710677, -0.5879378), (-0.27059805, 0.70710677, -0.6532815), (-0.31818965, 0.55557024, -0.76817775), (-0.31818965, 0.55557024, -0.76817775), (-0.27059805, 0.70710677, -0.6532815), (-0.13794969, 0.70710677, -0.69351995), (-0.16221167, 0.55557024, -0.81549317), (-0.16221167, 0.55557024, -0.81549317), (-0.13794969, 0.70710677, -0.69351995), (-1.298934e-16, 0.70710677, -0.70710677), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.298934e-16, 0.70710677, -0.70710677), (0.13794969, 0.70710677, -0.69351995), (0.16221167, 0.55557024, -0.81549317), (0.16221167, 0.55557024, -0.81549317), (0.13794969, 0.70710677, -0.69351995), (0.27059805, 0.70710677, -0.6532815), (0.31818965, 0.55557024, -0.76817775), (0.31818965, 0.55557024, -0.76817775), (0.27059805, 0.70710677, -0.6532815), (0.39284748, 0.70710677, -0.5879378), (0.46193975, 0.55557024, -0.6913417), (0.46193975, 0.55557024, -0.6913417), (0.39284748, 0.70710677, -0.5879378), (0.5, 0.70710677, -0.5), (0.5879378, 0.55557024, -0.5879378), (0.5879378, 0.55557024, -0.5879378), (0.5, 0.70710677, -0.5), (0.5879378, 0.70710677, -0.39284748), (0.6913417, 0.55557024, -0.46193975), (0.6913417, 0.55557024, -0.46193975), (0.5879378, 0.70710677, -0.39284748), (0.6532815, 0.70710677, -0.27059805), (0.76817775, 0.55557024, -0.31818965), (0.76817775, 0.55557024, -0.31818965), (0.6532815, 0.70710677, -0.27059805), (0.69351995, 0.70710677, -0.13794969), (0.81549317, 0.55557024, -0.16221167), (0.81549317, 0.55557024, -0.16221167), (0.69351995, 0.70710677, -0.13794969), (0.70710677, 0.70710677, 0), (0.8314696, 0.55557024, 0), (0.70710677, 0.70710677, 0), (0.55557024, 0.8314696, 0), (0.5448951, 0.8314696, 0.108386375), (0.69351995, 0.70710677, 0.13794969), (0.69351995, 0.70710677, 0.13794969), (0.5448951, 0.8314696, 0.108386375), (0.51328, 0.8314696, 0.21260752), (0.6532815, 0.70710677, 0.27059805), (0.6532815, 0.70710677, 0.27059805), (0.51328, 0.8314696, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.5879378, 0.70710677, 0.39284748), (0.5879378, 0.70710677, 0.39284748), (0.46193975, 0.8314696, 0.30865827), (0.39284748, 0.8314696, 0.39284748), (0.5, 0.70710677, 0.5), (0.5, 0.70710677, 0.5), (0.39284748, 0.8314696, 0.39284748), (0.30865827, 0.8314696, 0.46193975), (0.39284748, 0.70710677, 0.5879378), (0.39284748, 0.70710677, 0.5879378), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.8314696, 0.51328), (0.27059805, 0.70710677, 0.6532815), (0.27059805, 0.70710677, 0.6532815), (0.21260752, 0.8314696, 0.51328), (0.108386375, 0.8314696, 0.5448951), (0.13794969, 0.70710677, 0.69351995), (0.13794969, 0.70710677, 0.69351995), (0.108386375, 0.8314696, 0.5448951), (3.4018865e-17, 0.8314696, 0.55557024), (4.3297803e-17, 0.70710677, 0.70710677), (4.3297803e-17, 0.70710677, 0.70710677), (3.4018865e-17, 0.8314696, 0.55557024), (-0.108386375, 0.8314696, 0.5448951), (-0.13794969, 0.70710677, 0.69351995), (-0.13794969, 0.70710677, 0.69351995), (-0.108386375, 0.8314696, 0.5448951), (-0.21260752, 0.8314696, 0.51328), (-0.27059805, 0.70710677, 0.6532815), (-0.27059805, 0.70710677, 0.6532815), (-0.21260752, 0.8314696, 0.51328), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.70710677, 0.5879378), (-0.39284748, 0.70710677, 0.5879378), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.8314696, 0.39284748), (-0.5, 0.70710677, 0.5), (-0.5, 0.70710677, 0.5), (-0.39284748, 0.8314696, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.5879378, 0.70710677, 0.39284748), (-0.5879378, 0.70710677, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.51328, 0.8314696, 0.21260752), (-0.6532815, 0.70710677, 0.27059805), (-0.6532815, 0.70710677, 0.27059805), (-0.51328, 0.8314696, 0.21260752), (-0.5448951, 0.8314696, 0.108386375), (-0.69351995, 0.70710677, 0.13794969), (-0.69351995, 0.70710677, 0.13794969), (-0.5448951, 0.8314696, 0.108386375), (-0.55557024, 0.8314696, 6.803773e-17), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.5448951, 0.8314696, -0.108386375), (-0.69351995, 0.70710677, -0.13794969), (-0.69351995, 0.70710677, -0.13794969), (-0.5448951, 0.8314696, -0.108386375), (-0.51328, 0.8314696, -0.21260752), (-0.6532815, 0.70710677, -0.27059805), (-0.6532815, 0.70710677, -0.27059805), (-0.51328, 0.8314696, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.5879378, 0.70710677, -0.39284748), (-0.5879378, 0.70710677, -0.39284748), (-0.46193975, 0.8314696, -0.30865827), (-0.39284748, 0.8314696, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.8314696, -0.39284748), (-0.30865827, 0.8314696, -0.46193975), (-0.39284748, 0.70710677, -0.5879378), (-0.39284748, 0.70710677, -0.5879378), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.8314696, -0.51328), (-0.27059805, 0.70710677, -0.6532815), (-0.27059805, 0.70710677, -0.6532815), (-0.21260752, 0.8314696, -0.51328), (-0.108386375, 0.8314696, -0.5448951), (-0.13794969, 0.70710677, -0.69351995), (-0.13794969, 0.70710677, -0.69351995), (-0.108386375, 0.8314696, -0.5448951), (-1.020566e-16, 0.8314696, -0.55557024), (-1.298934e-16, 0.70710677, -0.70710677), (-1.298934e-16, 0.70710677, -0.70710677), (-1.020566e-16, 0.8314696, -0.55557024), (0.108386375, 0.8314696, -0.5448951), (0.13794969, 0.70710677, -0.69351995), (0.13794969, 0.70710677, -0.69351995), (0.108386375, 0.8314696, -0.5448951), (0.21260752, 0.8314696, -0.51328), (0.27059805, 0.70710677, -0.6532815), (0.27059805, 0.70710677, -0.6532815), (0.21260752, 0.8314696, -0.51328), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.70710677, -0.5879378), (0.39284748, 0.70710677, -0.5879378), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.8314696, -0.39284748), (0.5, 0.70710677, -0.5), (0.5, 0.70710677, -0.5), (0.39284748, 0.8314696, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.5879378, 0.70710677, -0.39284748), (0.5879378, 0.70710677, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.51328, 0.8314696, -0.21260752), (0.6532815, 0.70710677, -0.27059805), (0.6532815, 0.70710677, -0.27059805), (0.51328, 0.8314696, -0.21260752), (0.5448951, 0.8314696, -0.108386375), (0.69351995, 0.70710677, -0.13794969), (0.69351995, 0.70710677, -0.13794969), (0.5448951, 0.8314696, -0.108386375), (0.55557024, 0.8314696, 0), (0.70710677, 0.70710677, 0), (0.55557024, 0.8314696, 0), (0.38268343, 0.9238795, 0), (0.37533027, 0.9238795, 0.074657835), (0.5448951, 0.8314696, 0.108386375), (0.5448951, 0.8314696, 0.108386375), (0.37533027, 0.9238795, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.51328, 0.8314696, 0.21260752), (0.51328, 0.8314696, 0.21260752), (0.35355338, 0.9238795, 0.14644662), (0.31818965, 0.9238795, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.46193975, 0.8314696, 0.30865827), (0.31818965, 0.9238795, 0.21260752), (0.27059805, 0.9238795, 0.27059805), (0.39284748, 0.8314696, 0.39284748), (0.39284748, 0.8314696, 0.39284748), (0.27059805, 0.9238795, 0.27059805), (0.21260752, 0.9238795, 0.31818965), (0.30865827, 0.8314696, 0.46193975), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.9238795, 0.31818965), (0.14644662, 0.9238795, 0.35355338), (0.21260752, 0.8314696, 0.51328), (0.21260752, 0.8314696, 0.51328), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.9238795, 0.37533027), (0.108386375, 0.8314696, 0.5448951), (0.108386375, 0.8314696, 0.5448951), (0.074657835, 0.9238795, 0.37533027), (2.3432602e-17, 0.9238795, 0.38268343), (3.4018865e-17, 0.8314696, 0.55557024), (3.4018865e-17, 0.8314696, 0.55557024), (2.3432602e-17, 0.9238795, 0.38268343), (-0.074657835, 0.9238795, 0.37533027), (-0.108386375, 0.8314696, 0.5448951), (-0.108386375, 0.8314696, 0.5448951), (-0.074657835, 0.9238795, 0.37533027), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.8314696, 0.51328), (-0.21260752, 0.8314696, 0.51328), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.9238795, 0.31818965), (-0.30865827, 0.8314696, 0.46193975), (-0.30865827, 0.8314696, 0.46193975), (-0.21260752, 0.9238795, 0.31818965), (-0.27059805, 0.9238795, 0.27059805), (-0.39284748, 0.8314696, 0.39284748), (-0.39284748, 0.8314696, 0.39284748), (-0.27059805, 0.9238795, 0.27059805), (-0.31818965, 0.9238795, 0.21260752), (-0.46193975, 0.8314696, 0.30865827), (-0.46193975, 0.8314696, 0.30865827), (-0.31818965, 0.9238795, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.51328, 0.8314696, 0.21260752), (-0.51328, 0.8314696, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.37533027, 0.9238795, 0.074657835), (-0.5448951, 0.8314696, 0.108386375), (-0.5448951, 0.8314696, 0.108386375), (-0.37533027, 0.9238795, 0.074657835), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.37533027, 0.9238795, -0.074657835), (-0.5448951, 0.8314696, -0.108386375), (-0.5448951, 0.8314696, -0.108386375), (-0.37533027, 0.9238795, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.51328, 0.8314696, -0.21260752), (-0.51328, 0.8314696, -0.21260752), (-0.35355338, 0.9238795, -0.14644662), (-0.31818965, 0.9238795, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.46193975, 0.8314696, -0.30865827), (-0.31818965, 0.9238795, -0.21260752), (-0.27059805, 0.9238795, -0.27059805), (-0.39284748, 0.8314696, -0.39284748), (-0.39284748, 0.8314696, -0.39284748), (-0.27059805, 0.9238795, -0.27059805), (-0.21260752, 0.9238795, -0.31818965), (-0.30865827, 0.8314696, -0.46193975), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.9238795, -0.31818965), (-0.14644662, 0.9238795, -0.35355338), (-0.21260752, 0.8314696, -0.51328), (-0.21260752, 0.8314696, -0.51328), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.9238795, -0.37533027), (-0.108386375, 0.8314696, -0.5448951), (-0.108386375, 0.8314696, -0.5448951), (-0.074657835, 0.9238795, -0.37533027), (-7.0297805e-17, 0.9238795, -0.38268343), (-1.020566e-16, 0.8314696, -0.55557024), (-1.020566e-16, 0.8314696, -0.55557024), (-7.0297805e-17, 0.9238795, -0.38268343), (0.074657835, 0.9238795, -0.37533027), (0.108386375, 0.8314696, -0.5448951), (0.108386375, 0.8314696, -0.5448951), (0.074657835, 0.9238795, -0.37533027), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.8314696, -0.51328), (0.21260752, 0.8314696, -0.51328), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.9238795, -0.31818965), (0.30865827, 0.8314696, -0.46193975), (0.30865827, 0.8314696, -0.46193975), (0.21260752, 0.9238795, -0.31818965), (0.27059805, 0.9238795, -0.27059805), (0.39284748, 0.8314696, -0.39284748), (0.39284748, 0.8314696, -0.39284748), (0.27059805, 0.9238795, -0.27059805), (0.31818965, 0.9238795, -0.21260752), (0.46193975, 0.8314696, -0.30865827), (0.46193975, 0.8314696, -0.30865827), (0.31818965, 0.9238795, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.51328, 0.8314696, -0.21260752), (0.51328, 0.8314696, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.37533027, 0.9238795, -0.074657835), (0.5448951, 0.8314696, -0.108386375), (0.5448951, 0.8314696, -0.108386375), (0.37533027, 0.9238795, -0.074657835), (0.38268343, 0.9238795, 0), (0.55557024, 0.8314696, 0), (0.38268343, 0.9238795, 0), (0.19509032, 0.98078525, 0), (0.19134171, 0.98078525, 0.038060233), (0.37533027, 0.9238795, 0.074657835), (0.37533027, 0.9238795, 0.074657835), (0.19134171, 0.98078525, 0.038060233), (0.18023996, 0.98078525, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.35355338, 0.9238795, 0.14644662), (0.18023996, 0.98078525, 0.074657835), (0.16221167, 0.98078525, 0.108386375), (0.31818965, 0.9238795, 0.21260752), (0.31818965, 0.9238795, 0.21260752), (0.16221167, 0.98078525, 0.108386375), (0.13794969, 0.98078525, 0.13794969), (0.27059805, 0.9238795, 0.27059805), (0.27059805, 0.9238795, 0.27059805), (0.13794969, 0.98078525, 0.13794969), (0.108386375, 0.98078525, 0.16221167), (0.21260752, 0.9238795, 0.31818965), (0.21260752, 0.9238795, 0.31818965), (0.108386375, 0.98078525, 0.16221167), (0.074657835, 0.98078525, 0.18023996), (0.14644662, 0.9238795, 0.35355338), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.98078525, 0.18023996), (0.038060233, 0.98078525, 0.19134171), (0.074657835, 0.9238795, 0.37533027), (0.074657835, 0.9238795, 0.37533027), (0.038060233, 0.98078525, 0.19134171), (1.1945837e-17, 0.98078525, 0.19509032), (2.3432602e-17, 0.9238795, 0.38268343), (2.3432602e-17, 0.9238795, 0.38268343), (1.1945837e-17, 0.98078525, 0.19509032), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.9238795, 0.37533027), (-0.074657835, 0.9238795, 0.37533027), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.98078525, 0.18023996), (-0.14644662, 0.9238795, 0.35355338), (-0.14644662, 0.9238795, 0.35355338), (-0.074657835, 0.98078525, 0.18023996), (-0.108386375, 0.98078525, 0.16221167), (-0.21260752, 0.9238795, 0.31818965), (-0.21260752, 0.9238795, 0.31818965), (-0.108386375, 0.98078525, 0.16221167), (-0.13794969, 0.98078525, 0.13794969), (-0.27059805, 0.9238795, 0.27059805), (-0.27059805, 0.9238795, 0.27059805), (-0.13794969, 0.98078525, 0.13794969), (-0.16221167, 0.98078525, 0.108386375), (-0.31818965, 0.9238795, 0.21260752), (-0.31818965, 0.9238795, 0.21260752), (-0.16221167, 0.98078525, 0.108386375), (-0.18023996, 0.98078525, 0.074657835), (-0.35355338, 0.9238795, 0.14644662), (-0.35355338, 0.9238795, 0.14644662), (-0.18023996, 0.98078525, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.37533027, 0.9238795, 0.074657835), (-0.37533027, 0.9238795, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.19134171, 0.98078525, -0.038060233), (-0.37533027, 0.9238795, -0.074657835), (-0.37533027, 0.9238795, -0.074657835), (-0.19134171, 0.98078525, -0.038060233), (-0.18023996, 0.98078525, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.35355338, 0.9238795, -0.14644662), (-0.18023996, 0.98078525, -0.074657835), (-0.16221167, 0.98078525, -0.108386375), (-0.31818965, 0.9238795, -0.21260752), (-0.31818965, 0.9238795, -0.21260752), (-0.16221167, 0.98078525, -0.108386375), (-0.13794969, 0.98078525, -0.13794969), (-0.27059805, 0.9238795, -0.27059805), (-0.27059805, 0.9238795, -0.27059805), (-0.13794969, 0.98078525, -0.13794969), (-0.108386375, 0.98078525, -0.16221167), (-0.21260752, 0.9238795, -0.31818965), (-0.21260752, 0.9238795, -0.31818965), (-0.108386375, 0.98078525, -0.16221167), (-0.074657835, 0.98078525, -0.18023996), (-0.14644662, 0.9238795, -0.35355338), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.98078525, -0.18023996), (-0.038060233, 0.98078525, -0.19134171), (-0.074657835, 0.9238795, -0.37533027), (-0.074657835, 0.9238795, -0.37533027), (-0.038060233, 0.98078525, -0.19134171), (-3.583751e-17, 0.98078525, -0.19509032), (-7.0297805e-17, 0.9238795, -0.38268343), (-7.0297805e-17, 0.9238795, -0.38268343), (-3.583751e-17, 0.98078525, -0.19509032), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.9238795, -0.37533027), (0.074657835, 0.9238795, -0.37533027), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.98078525, -0.18023996), (0.14644662, 0.9238795, -0.35355338), (0.14644662, 0.9238795, -0.35355338), (0.074657835, 0.98078525, -0.18023996), (0.108386375, 0.98078525, -0.16221167), (0.21260752, 0.9238795, -0.31818965), (0.21260752, 0.9238795, -0.31818965), (0.108386375, 0.98078525, -0.16221167), (0.13794969, 0.98078525, -0.13794969), (0.27059805, 0.9238795, -0.27059805), (0.27059805, 0.9238795, -0.27059805), (0.13794969, 0.98078525, -0.13794969), (0.16221167, 0.98078525, -0.108386375), (0.31818965, 0.9238795, -0.21260752), (0.31818965, 0.9238795, -0.21260752), (0.16221167, 0.98078525, -0.108386375), (0.18023996, 0.98078525, -0.074657835), (0.35355338, 0.9238795, -0.14644662), (0.35355338, 0.9238795, -0.14644662), (0.18023996, 0.98078525, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.37533027, 0.9238795, -0.074657835), (0.37533027, 0.9238795, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.19509032, 0.98078525, 0), (0.38268343, 0.9238795, 0), (0.19509032, 0.98078525, 0), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, 0.038060233), (0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, 0.074657835), (0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, 0.108386375), (0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, 0.13794969), (0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, 0.16221167), (0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, 0.18023996), (0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, 0.19134171), (0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (1.1945837e-17, 0.98078525, 0.19509032), (1.1945837e-17, 0.98078525, 0.19509032), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, 0.19134171), (-0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, 0.18023996), (-0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, 0.16221167), (-0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, 0.13794969), (-0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, 0.108386375), (-0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, 0.074657835), (-0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, 0.038060233), (-0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.19509032, 0.98078525, 2.3891674e-17), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, -0.038060233), (-0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, -0.074657835), (-0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, -0.108386375), (-0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, -0.13794969), (-0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, -0.16221167), (-0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, -0.18023996), (-0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, -0.19134171), (-0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (-3.583751e-17, 0.98078525, -0.19509032), (-3.583751e-17, 0.98078525, -0.19509032), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, -0.19134171), (0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, -0.18023996), (0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, -0.16221167), (0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, -0.13794969), (0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, -0.108386375), (0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, -0.074657835), (0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, -0.038060233), (0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (0.19509032, 0.98078525, 0), (0, 1, 0), (-0.19509032, 0.98078525, 0), (-0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, -0.038060233), (-0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, -0.074657835), (-0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, -0.108386375), (-0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, -0.13794969), (-0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, -0.16221167), (-0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, -0.18023996), (-0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, -0.19134171), (-1.1945837e-17, 0.98078525, -0.19509032), (0, 1, 0), (0, 1, 0), (-1.1945837e-17, 0.98078525, -0.19509032), (0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, -0.18023996), (0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, -0.16221167), (0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, -0.13794969), (0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, -0.108386375), (0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, -0.038060233), (0.19509032, 0.98078525, -2.3891674e-17), (0, 1, 0), (0, 1, 0), (0.19509032, 0.98078525, -2.3891674e-17), (0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, 0.038060233), (0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, 0.074657835), (0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, 0.108386375), (0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, 0.13794969), (0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, 0.16221167), (0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, 0.18023996), (0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, 0.19134171), (3.583751e-17, 0.98078525, 0.19509032), (0, 1, 0), (0, 1, 0), (3.583751e-17, 0.98078525, 0.19509032), (-0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, 0.18023996), (-0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, 0.16221167), (-0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, 0.13794969), (-0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, 0.108386375), (-0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, 0.038060233), (-0.19509032, 0.98078525, 0), (0, 1, 0), (-0.19509032, 0.98078525, 0), (-0.38268343, 0.9238795, 0), (-0.37533027, 0.9238795, -0.074657835), (-0.19134171, 0.98078525, -0.038060233), (-0.19134171, 0.98078525, -0.038060233), (-0.37533027, 0.9238795, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.18023996, 0.98078525, -0.074657835), (-0.18023996, 0.98078525, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.31818965, 0.9238795, -0.21260752), (-0.16221167, 0.98078525, -0.108386375), (-0.16221167, 0.98078525, -0.108386375), (-0.31818965, 0.9238795, -0.21260752), (-0.27059805, 0.9238795, -0.27059805), (-0.13794969, 0.98078525, -0.13794969), (-0.13794969, 0.98078525, -0.13794969), (-0.27059805, 0.9238795, -0.27059805), (-0.21260752, 0.9238795, -0.31818965), (-0.108386375, 0.98078525, -0.16221167), (-0.108386375, 0.98078525, -0.16221167), (-0.21260752, 0.9238795, -0.31818965), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.98078525, -0.18023996), (-0.074657835, 0.98078525, -0.18023996), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.9238795, -0.37533027), (-0.038060233, 0.98078525, -0.19134171), (-0.038060233, 0.98078525, -0.19134171), (-0.074657835, 0.9238795, -0.37533027), (-2.3432602e-17, 0.9238795, -0.38268343), (-1.1945837e-17, 0.98078525, -0.19509032), (-1.1945837e-17, 0.98078525, -0.19509032), (-2.3432602e-17, 0.9238795, -0.38268343), (0.074657835, 0.9238795, -0.37533027), (0.038060233, 0.98078525, -0.19134171), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.9238795, -0.37533027), (0.14644662, 0.9238795, -0.35355338), (0.074657835, 0.98078525, -0.18023996), (0.074657835, 0.98078525, -0.18023996), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.9238795, -0.31818965), (0.108386375, 0.98078525, -0.16221167), (0.108386375, 0.98078525, -0.16221167), (0.21260752, 0.9238795, -0.31818965), (0.27059805, 0.9238795, -0.27059805), (0.13794969, 0.98078525, -0.13794969), (0.13794969, 0.98078525, -0.13794969), (0.27059805, 0.9238795, -0.27059805), (0.31818965, 0.9238795, -0.21260752), (0.16221167, 0.98078525, -0.108386375), (0.16221167, 0.98078525, -0.108386375), (0.31818965, 0.9238795, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.18023996, 0.98078525, -0.074657835), (0.18023996, 0.98078525, -0.074657835), (0.35355338, 0.9238795, -0.14644662), (0.37533027, 0.9238795, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.19134171, 0.98078525, -0.038060233), (0.37533027, 0.9238795, -0.074657835), (0.38268343, 0.9238795, -4.6865205e-17), (0.19509032, 0.98078525, -2.3891674e-17), (0.19509032, 0.98078525, -2.3891674e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.37533027, 0.9238795, 0.074657835), (0.19134171, 0.98078525, 0.038060233), (0.19134171, 0.98078525, 0.038060233), (0.37533027, 0.9238795, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.18023996, 0.98078525, 0.074657835), (0.18023996, 0.98078525, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.31818965, 0.9238795, 0.21260752), (0.16221167, 0.98078525, 0.108386375), (0.16221167, 0.98078525, 0.108386375), (0.31818965, 0.9238795, 0.21260752), (0.27059805, 0.9238795, 0.27059805), (0.13794969, 0.98078525, 0.13794969), (0.13794969, 0.98078525, 0.13794969), (0.27059805, 0.9238795, 0.27059805), (0.21260752, 0.9238795, 0.31818965), (0.108386375, 0.98078525, 0.16221167), (0.108386375, 0.98078525, 0.16221167), (0.21260752, 0.9238795, 0.31818965), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.98078525, 0.18023996), (0.074657835, 0.98078525, 0.18023996), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.9238795, 0.37533027), (0.038060233, 0.98078525, 0.19134171), (0.038060233, 0.98078525, 0.19134171), (0.074657835, 0.9238795, 0.37533027), (7.0297805e-17, 0.9238795, 0.38268343), (3.583751e-17, 0.98078525, 0.19509032), (3.583751e-17, 0.98078525, 0.19509032), (7.0297805e-17, 0.9238795, 0.38268343), (-0.074657835, 0.9238795, 0.37533027), (-0.038060233, 0.98078525, 0.19134171), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.9238795, 0.37533027), (-0.14644662, 0.9238795, 0.35355338), (-0.074657835, 0.98078525, 0.18023996), (-0.074657835, 0.98078525, 0.18023996), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.9238795, 0.31818965), (-0.108386375, 0.98078525, 0.16221167), (-0.108386375, 0.98078525, 0.16221167), (-0.21260752, 0.9238795, 0.31818965), (-0.27059805, 0.9238795, 0.27059805), (-0.13794969, 0.98078525, 0.13794969), (-0.13794969, 0.98078525, 0.13794969), (-0.27059805, 0.9238795, 0.27059805), (-0.31818965, 0.9238795, 0.21260752), (-0.16221167, 0.98078525, 0.108386375), (-0.16221167, 0.98078525, 0.108386375), (-0.31818965, 0.9238795, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.18023996, 0.98078525, 0.074657835), (-0.18023996, 0.98078525, 0.074657835), (-0.35355338, 0.9238795, 0.14644662), (-0.37533027, 0.9238795, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.19134171, 0.98078525, 0.038060233), (-0.37533027, 0.9238795, 0.074657835), (-0.38268343, 0.9238795, 0), (-0.19509032, 0.98078525, 0), (-0.38268343, 0.9238795, 0), (-0.55557024, 0.8314696, 0), (-0.5448951, 0.8314696, -0.108386375), (-0.37533027, 0.9238795, -0.074657835), (-0.37533027, 0.9238795, -0.074657835), (-0.5448951, 0.8314696, -0.108386375), (-0.51328, 0.8314696, -0.21260752), (-0.35355338, 0.9238795, -0.14644662), (-0.35355338, 0.9238795, -0.14644662), (-0.51328, 0.8314696, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.31818965, 0.9238795, -0.21260752), (-0.31818965, 0.9238795, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.39284748, 0.8314696, -0.39284748), (-0.27059805, 0.9238795, -0.27059805), (-0.27059805, 0.9238795, -0.27059805), (-0.39284748, 0.8314696, -0.39284748), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.9238795, -0.31818965), (-0.21260752, 0.9238795, -0.31818965), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.8314696, -0.51328), (-0.14644662, 0.9238795, -0.35355338), (-0.14644662, 0.9238795, -0.35355338), (-0.21260752, 0.8314696, -0.51328), (-0.108386375, 0.8314696, -0.5448951), (-0.074657835, 0.9238795, -0.37533027), (-0.074657835, 0.9238795, -0.37533027), (-0.108386375, 0.8314696, -0.5448951), (-3.4018865e-17, 0.8314696, -0.55557024), (-2.3432602e-17, 0.9238795, -0.38268343), (-2.3432602e-17, 0.9238795, -0.38268343), (-3.4018865e-17, 0.8314696, -0.55557024), (0.108386375, 0.8314696, -0.5448951), (0.074657835, 0.9238795, -0.37533027), (0.074657835, 0.9238795, -0.37533027), (0.108386375, 0.8314696, -0.5448951), (0.21260752, 0.8314696, -0.51328), (0.14644662, 0.9238795, -0.35355338), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.8314696, -0.51328), (0.30865827, 0.8314696, -0.46193975), (0.21260752, 0.9238795, -0.31818965), (0.21260752, 0.9238795, -0.31818965), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.8314696, -0.39284748), (0.27059805, 0.9238795, -0.27059805), (0.27059805, 0.9238795, -0.27059805), (0.39284748, 0.8314696, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.31818965, 0.9238795, -0.21260752), (0.31818965, 0.9238795, -0.21260752), (0.46193975, 0.8314696, -0.30865827), (0.51328, 0.8314696, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.35355338, 0.9238795, -0.14644662), (0.51328, 0.8314696, -0.21260752), (0.5448951, 0.8314696, -0.108386375), (0.37533027, 0.9238795, -0.074657835), (0.37533027, 0.9238795, -0.074657835), (0.5448951, 0.8314696, -0.108386375), (0.55557024, 0.8314696, -6.803773e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.5448951, 0.8314696, 0.108386375), (0.37533027, 0.9238795, 0.074657835), (0.37533027, 0.9238795, 0.074657835), (0.5448951, 0.8314696, 0.108386375), (0.51328, 0.8314696, 0.21260752), (0.35355338, 0.9238795, 0.14644662), (0.35355338, 0.9238795, 0.14644662), (0.51328, 0.8314696, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.31818965, 0.9238795, 0.21260752), (0.31818965, 0.9238795, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.39284748, 0.8314696, 0.39284748), (0.27059805, 0.9238795, 0.27059805), (0.27059805, 0.9238795, 0.27059805), (0.39284748, 0.8314696, 0.39284748), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.9238795, 0.31818965), (0.21260752, 0.9238795, 0.31818965), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.8314696, 0.51328), (0.14644662, 0.9238795, 0.35355338), (0.14644662, 0.9238795, 0.35355338), (0.21260752, 0.8314696, 0.51328), (0.108386375, 0.8314696, 0.5448951), (0.074657835, 0.9238795, 0.37533027), (0.074657835, 0.9238795, 0.37533027), (0.108386375, 0.8314696, 0.5448951), (1.020566e-16, 0.8314696, 0.55557024), (7.0297805e-17, 0.9238795, 0.38268343), (7.0297805e-17, 0.9238795, 0.38268343), (1.020566e-16, 0.8314696, 0.55557024), (-0.108386375, 0.8314696, 0.5448951), (-0.074657835, 0.9238795, 0.37533027), (-0.074657835, 0.9238795, 0.37533027), (-0.108386375, 0.8314696, 0.5448951), (-0.21260752, 0.8314696, 0.51328), (-0.14644662, 0.9238795, 0.35355338), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.8314696, 0.51328), (-0.30865827, 0.8314696, 0.46193975), (-0.21260752, 0.9238795, 0.31818965), (-0.21260752, 0.9238795, 0.31818965), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.8314696, 0.39284748), (-0.27059805, 0.9238795, 0.27059805), (-0.27059805, 0.9238795, 0.27059805), (-0.39284748, 0.8314696, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.31818965, 0.9238795, 0.21260752), (-0.31818965, 0.9238795, 0.21260752), (-0.46193975, 0.8314696, 0.30865827), (-0.51328, 0.8314696, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.35355338, 0.9238795, 0.14644662), (-0.51328, 0.8314696, 0.21260752), (-0.5448951, 0.8314696, 0.108386375), (-0.37533027, 0.9238795, 0.074657835), (-0.37533027, 0.9238795, 0.074657835), (-0.5448951, 0.8314696, 0.108386375), (-0.55557024, 0.8314696, 0), (-0.38268343, 0.9238795, 0), (-0.55557024, 0.8314696, 0), (-0.70710677, 0.70710677, 0), (-0.69351995, 0.70710677, -0.13794969), (-0.5448951, 0.8314696, -0.108386375), (-0.5448951, 0.8314696, -0.108386375), (-0.69351995, 0.70710677, -0.13794969), (-0.6532815, 0.70710677, -0.27059805), (-0.51328, 0.8314696, -0.21260752), (-0.51328, 0.8314696, -0.21260752), (-0.6532815, 0.70710677, -0.27059805), (-0.5879378, 0.70710677, -0.39284748), (-0.46193975, 0.8314696, -0.30865827), (-0.46193975, 0.8314696, -0.30865827), (-0.5879378, 0.70710677, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.8314696, -0.39284748), (-0.39284748, 0.8314696, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.70710677, -0.5879378), (-0.30865827, 0.8314696, -0.46193975), (-0.30865827, 0.8314696, -0.46193975), (-0.39284748, 0.70710677, -0.5879378), (-0.27059805, 0.70710677, -0.6532815), (-0.21260752, 0.8314696, -0.51328), (-0.21260752, 0.8314696, -0.51328), (-0.27059805, 0.70710677, -0.6532815), (-0.13794969, 0.70710677, -0.69351995), (-0.108386375, 0.8314696, -0.5448951), (-0.108386375, 0.8314696, -0.5448951), (-0.13794969, 0.70710677, -0.69351995), (-4.3297803e-17, 0.70710677, -0.70710677), (-3.4018865e-17, 0.8314696, -0.55557024), (-3.4018865e-17, 0.8314696, -0.55557024), (-4.3297803e-17, 0.70710677, -0.70710677), (0.13794969, 0.70710677, -0.69351995), (0.108386375, 0.8314696, -0.5448951), (0.108386375, 0.8314696, -0.5448951), (0.13794969, 0.70710677, -0.69351995), (0.27059805, 0.70710677, -0.6532815), (0.21260752, 0.8314696, -0.51328), (0.21260752, 0.8314696, -0.51328), (0.27059805, 0.70710677, -0.6532815), (0.39284748, 0.70710677, -0.5879378), (0.30865827, 0.8314696, -0.46193975), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.70710677, -0.5879378), (0.5, 0.70710677, -0.5), (0.39284748, 0.8314696, -0.39284748), (0.39284748, 0.8314696, -0.39284748), (0.5, 0.70710677, -0.5), (0.5879378, 0.70710677, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.46193975, 0.8314696, -0.30865827), (0.5879378, 0.70710677, -0.39284748), (0.6532815, 0.70710677, -0.27059805), (0.51328, 0.8314696, -0.21260752), (0.51328, 0.8314696, -0.21260752), (0.6532815, 0.70710677, -0.27059805), (0.69351995, 0.70710677, -0.13794969), (0.5448951, 0.8314696, -0.108386375), (0.5448951, 0.8314696, -0.108386375), (0.69351995, 0.70710677, -0.13794969), (0.70710677, 0.70710677, -8.6595606e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.70710677, 0.70710677, -8.6595606e-17), (0.69351995, 0.70710677, 0.13794969), (0.5448951, 0.8314696, 0.108386375), (0.5448951, 0.8314696, 0.108386375), (0.69351995, 0.70710677, 0.13794969), (0.6532815, 0.70710677, 0.27059805), (0.51328, 0.8314696, 0.21260752), (0.51328, 0.8314696, 0.21260752), (0.6532815, 0.70710677, 0.27059805), (0.5879378, 0.70710677, 0.39284748), (0.46193975, 0.8314696, 0.30865827), (0.46193975, 0.8314696, 0.30865827), (0.5879378, 0.70710677, 0.39284748), (0.5, 0.70710677, 0.5), (0.39284748, 0.8314696, 0.39284748), (0.39284748, 0.8314696, 0.39284748), (0.5, 0.70710677, 0.5), (0.39284748, 0.70710677, 0.5879378), (0.30865827, 0.8314696, 0.46193975), (0.30865827, 0.8314696, 0.46193975), (0.39284748, 0.70710677, 0.5879378), (0.27059805, 0.70710677, 0.6532815), (0.21260752, 0.8314696, 0.51328), (0.21260752, 0.8314696, 0.51328), (0.27059805, 0.70710677, 0.6532815), (0.13794969, 0.70710677, 0.69351995), (0.108386375, 0.8314696, 0.5448951), (0.108386375, 0.8314696, 0.5448951), (0.13794969, 0.70710677, 0.69351995), (1.298934e-16, 0.70710677, 0.70710677), (1.020566e-16, 0.8314696, 0.55557024), (1.020566e-16, 0.8314696, 0.55557024), (1.298934e-16, 0.70710677, 0.70710677), (-0.13794969, 0.70710677, 0.69351995), (-0.108386375, 0.8314696, 0.5448951), (-0.108386375, 0.8314696, 0.5448951), (-0.13794969, 0.70710677, 0.69351995), (-0.27059805, 0.70710677, 0.6532815), (-0.21260752, 0.8314696, 0.51328), (-0.21260752, 0.8314696, 0.51328), (-0.27059805, 0.70710677, 0.6532815), (-0.39284748, 0.70710677, 0.5879378), (-0.30865827, 0.8314696, 0.46193975), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.70710677, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.39284748, 0.8314696, 0.39284748), (-0.39284748, 0.8314696, 0.39284748), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.70710677, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.46193975, 0.8314696, 0.30865827), (-0.5879378, 0.70710677, 0.39284748), (-0.6532815, 0.70710677, 0.27059805), (-0.51328, 0.8314696, 0.21260752), (-0.51328, 0.8314696, 0.21260752), (-0.6532815, 0.70710677, 0.27059805), (-0.69351995, 0.70710677, 0.13794969), (-0.5448951, 0.8314696, 0.108386375), (-0.5448951, 0.8314696, 0.108386375), (-0.69351995, 0.70710677, 0.13794969), (-0.70710677, 0.70710677, 0), (-0.55557024, 0.8314696, 0), (-0.70710677, 0.70710677, 0), (-0.8314696, 0.55557024, 0), (-0.81549317, 0.55557024, -0.16221167), (-0.69351995, 0.70710677, -0.13794969), (-0.69351995, 0.70710677, -0.13794969), (-0.81549317, 0.55557024, -0.16221167), (-0.76817775, 0.55557024, -0.31818965), (-0.6532815, 0.70710677, -0.27059805), (-0.6532815, 0.70710677, -0.27059805), (-0.76817775, 0.55557024, -0.31818965), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.70710677, -0.39284748), (-0.5879378, 0.70710677, -0.39284748), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.55557024, -0.5879378), (-0.5, 0.70710677, -0.5), (-0.5, 0.70710677, -0.5), (-0.5879378, 0.55557024, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.39284748, 0.70710677, -0.5879378), (-0.39284748, 0.70710677, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.31818965, 0.55557024, -0.76817775), (-0.27059805, 0.70710677, -0.6532815), (-0.27059805, 0.70710677, -0.6532815), (-0.31818965, 0.55557024, -0.76817775), (-0.16221167, 0.55557024, -0.81549317), (-0.13794969, 0.70710677, -0.69351995), (-0.13794969, 0.70710677, -0.69351995), (-0.16221167, 0.55557024, -0.81549317), (-5.091283e-17, 0.55557024, -0.8314696), (-4.3297803e-17, 0.70710677, -0.70710677), (-4.3297803e-17, 0.70710677, -0.70710677), (-5.091283e-17, 0.55557024, -0.8314696), (0.16221167, 0.55557024, -0.81549317), (0.13794969, 0.70710677, -0.69351995), (0.13794969, 0.70710677, -0.69351995), (0.16221167, 0.55557024, -0.81549317), (0.31818965, 0.55557024, -0.76817775), (0.27059805, 0.70710677, -0.6532815), (0.27059805, 0.70710677, -0.6532815), (0.31818965, 0.55557024, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.39284748, 0.70710677, -0.5879378), (0.39284748, 0.70710677, -0.5879378), (0.46193975, 0.55557024, -0.6913417), (0.5879378, 0.55557024, -0.5879378), (0.5, 0.70710677, -0.5), (0.5, 0.70710677, -0.5), (0.5879378, 0.55557024, -0.5879378), (0.6913417, 0.55557024, -0.46193975), (0.5879378, 0.70710677, -0.39284748), (0.5879378, 0.70710677, -0.39284748), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.55557024, -0.31818965), (0.6532815, 0.70710677, -0.27059805), (0.6532815, 0.70710677, -0.27059805), (0.76817775, 0.55557024, -0.31818965), (0.81549317, 0.55557024, -0.16221167), (0.69351995, 0.70710677, -0.13794969), (0.69351995, 0.70710677, -0.13794969), (0.81549317, 0.55557024, -0.16221167), (0.8314696, 0.55557024, -1.0182566e-16), (0.70710677, 0.70710677, -8.6595606e-17), (0.70710677, 0.70710677, -8.6595606e-17), (0.8314696, 0.55557024, -1.0182566e-16), (0.81549317, 0.55557024, 0.16221167), (0.69351995, 0.70710677, 0.13794969), (0.69351995, 0.70710677, 0.13794969), (0.81549317, 0.55557024, 0.16221167), (0.76817775, 0.55557024, 0.31818965), (0.6532815, 0.70710677, 0.27059805), (0.6532815, 0.70710677, 0.27059805), (0.76817775, 0.55557024, 0.31818965), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.70710677, 0.39284748), (0.5879378, 0.70710677, 0.39284748), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.55557024, 0.5879378), (0.5, 0.70710677, 0.5), (0.5, 0.70710677, 0.5), (0.5879378, 0.55557024, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.39284748, 0.70710677, 0.5879378), (0.39284748, 0.70710677, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.31818965, 0.55557024, 0.76817775), (0.27059805, 0.70710677, 0.6532815), (0.27059805, 0.70710677, 0.6532815), (0.31818965, 0.55557024, 0.76817775), (0.16221167, 0.55557024, 0.81549317), (0.13794969, 0.70710677, 0.69351995), (0.13794969, 0.70710677, 0.69351995), (0.16221167, 0.55557024, 0.81549317), (1.5273849e-16, 0.55557024, 0.8314696), (1.298934e-16, 0.70710677, 0.70710677), (1.298934e-16, 0.70710677, 0.70710677), (1.5273849e-16, 0.55557024, 0.8314696), (-0.16221167, 0.55557024, 0.81549317), (-0.13794969, 0.70710677, 0.69351995), (-0.13794969, 0.70710677, 0.69351995), (-0.16221167, 0.55557024, 0.81549317), (-0.31818965, 0.55557024, 0.76817775), (-0.27059805, 0.70710677, 0.6532815), (-0.27059805, 0.70710677, 0.6532815), (-0.31818965, 0.55557024, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.39284748, 0.70710677, 0.5879378), (-0.39284748, 0.70710677, 0.5879378), (-0.46193975, 0.55557024, 0.6913417), (-0.5879378, 0.55557024, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.55557024, 0.5879378), (-0.6913417, 0.55557024, 0.46193975), (-0.5879378, 0.70710677, 0.39284748), (-0.5879378, 0.70710677, 0.39284748), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.55557024, 0.31818965), (-0.6532815, 0.70710677, 0.27059805), (-0.6532815, 0.70710677, 0.27059805), (-0.76817775, 0.55557024, 0.31818965), (-0.81549317, 0.55557024, 0.16221167), (-0.69351995, 0.70710677, 0.13794969), (-0.69351995, 0.70710677, 0.13794969), (-0.81549317, 0.55557024, 0.16221167), (-0.8314696, 0.55557024, 0), (-0.70710677, 0.70710677, 0), (-0.8314696, 0.55557024, 0), (-0.9238795, 0.38268343, 0), (-0.90612745, 0.38268343, -0.18023996), (-0.81549317, 0.55557024, -0.16221167), (-0.81549317, 0.55557024, -0.16221167), (-0.90612745, 0.38268343, -0.18023996), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.55557024, -0.31818965), (-0.76817775, 0.55557024, -0.31818965), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.38268343, -0.51328), (-0.6913417, 0.55557024, -0.46193975), (-0.6913417, 0.55557024, -0.46193975), (-0.76817775, 0.38268343, -0.51328), (-0.6532815, 0.38268343, -0.6532815), (-0.5879378, 0.55557024, -0.5879378), (-0.5879378, 0.55557024, -0.5879378), (-0.6532815, 0.38268343, -0.6532815), (-0.51328, 0.38268343, -0.76817775), (-0.46193975, 0.55557024, -0.6913417), (-0.46193975, 0.55557024, -0.6913417), (-0.51328, 0.38268343, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.31818965, 0.55557024, -0.76817775), (-0.31818965, 0.55557024, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.18023996, 0.38268343, -0.90612745), (-0.16221167, 0.55557024, -0.81549317), (-0.16221167, 0.55557024, -0.81549317), (-0.18023996, 0.38268343, -0.90612745), (-5.6571306e-17, 0.38268343, -0.9238795), (-5.091283e-17, 0.55557024, -0.8314696), (-5.091283e-17, 0.55557024, -0.8314696), (-5.6571306e-17, 0.38268343, -0.9238795), (0.18023996, 0.38268343, -0.90612745), (0.16221167, 0.55557024, -0.81549317), (0.16221167, 0.55557024, -0.81549317), (0.18023996, 0.38268343, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.31818965, 0.55557024, -0.76817775), (0.31818965, 0.55557024, -0.76817775), (0.35355338, 0.38268343, -0.8535534), (0.51328, 0.38268343, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.46193975, 0.55557024, -0.6913417), (0.51328, 0.38268343, -0.76817775), (0.6532815, 0.38268343, -0.6532815), (0.5879378, 0.55557024, -0.5879378), (0.5879378, 0.55557024, -0.5879378), (0.6532815, 0.38268343, -0.6532815), (0.76817775, 0.38268343, -0.51328), (0.6913417, 0.55557024, -0.46193975), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.38268343, -0.51328), (0.8535534, 0.38268343, -0.35355338), (0.76817775, 0.55557024, -0.31818965), (0.76817775, 0.55557024, -0.31818965), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.38268343, -0.18023996), (0.81549317, 0.55557024, -0.16221167), (0.81549317, 0.55557024, -0.16221167), (0.90612745, 0.38268343, -0.18023996), (0.9238795, 0.38268343, -1.1314261e-16), (0.8314696, 0.55557024, -1.0182566e-16), (0.8314696, 0.55557024, -1.0182566e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.90612745, 0.38268343, 0.18023996), (0.81549317, 0.55557024, 0.16221167), (0.81549317, 0.55557024, 0.16221167), (0.90612745, 0.38268343, 0.18023996), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.55557024, 0.31818965), (0.76817775, 0.55557024, 0.31818965), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.38268343, 0.51328), (0.6913417, 0.55557024, 0.46193975), (0.6913417, 0.55557024, 0.46193975), (0.76817775, 0.38268343, 0.51328), (0.6532815, 0.38268343, 0.6532815), (0.5879378, 0.55557024, 0.5879378), (0.5879378, 0.55557024, 0.5879378), (0.6532815, 0.38268343, 0.6532815), (0.51328, 0.38268343, 0.76817775), (0.46193975, 0.55557024, 0.6913417), (0.46193975, 0.55557024, 0.6913417), (0.51328, 0.38268343, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.31818965, 0.55557024, 0.76817775), (0.31818965, 0.55557024, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.18023996, 0.38268343, 0.90612745), (0.16221167, 0.55557024, 0.81549317), (0.16221167, 0.55557024, 0.81549317), (0.18023996, 0.38268343, 0.90612745), (1.6971392e-16, 0.38268343, 0.9238795), (1.5273849e-16, 0.55557024, 0.8314696), (1.5273849e-16, 0.55557024, 0.8314696), (1.6971392e-16, 0.38268343, 0.9238795), (-0.18023996, 0.38268343, 0.90612745), (-0.16221167, 0.55557024, 0.81549317), (-0.16221167, 0.55557024, 0.81549317), (-0.18023996, 0.38268343, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.31818965, 0.55557024, 0.76817775), (-0.31818965, 0.55557024, 0.76817775), (-0.35355338, 0.38268343, 0.8535534), (-0.51328, 0.38268343, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.46193975, 0.55557024, 0.6913417), (-0.51328, 0.38268343, 0.76817775), (-0.6532815, 0.38268343, 0.6532815), (-0.5879378, 0.55557024, 0.5879378), (-0.5879378, 0.55557024, 0.5879378), (-0.6532815, 0.38268343, 0.6532815), (-0.76817775, 0.38268343, 0.51328), (-0.6913417, 0.55557024, 0.46193975), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.38268343, 0.51328), (-0.8535534, 0.38268343, 0.35355338), (-0.76817775, 0.55557024, 0.31818965), (-0.76817775, 0.55557024, 0.31818965), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.38268343, 0.18023996), (-0.81549317, 0.55557024, 0.16221167), (-0.81549317, 0.55557024, 0.16221167), (-0.90612745, 0.38268343, 0.18023996), (-0.9238795, 0.38268343, 0), (-0.8314696, 0.55557024, 0), (-0.9238795, 0.38268343, 0), (-0.98078525, 0.19509032, 0), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.38268343, -0.18023996), (-0.90612745, 0.38268343, -0.18023996), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.19509032, -0.37533027), (-0.8535534, 0.38268343, -0.35355338), (-0.8535534, 0.38268343, -0.35355338), (-0.90612745, 0.19509032, -0.37533027), (-0.81549317, 0.19509032, -0.5448951), (-0.76817775, 0.38268343, -0.51328), (-0.76817775, 0.38268343, -0.51328), (-0.81549317, 0.19509032, -0.5448951), (-0.69351995, 0.19509032, -0.69351995), (-0.6532815, 0.38268343, -0.6532815), (-0.6532815, 0.38268343, -0.6532815), (-0.69351995, 0.19509032, -0.69351995), (-0.5448951, 0.19509032, -0.81549317), (-0.51328, 0.38268343, -0.76817775), (-0.51328, 0.38268343, -0.76817775), (-0.5448951, 0.19509032, -0.81549317), (-0.37533027, 0.19509032, -0.90612745), (-0.35355338, 0.38268343, -0.8535534), (-0.35355338, 0.38268343, -0.8535534), (-0.37533027, 0.19509032, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.18023996, 0.38268343, -0.90612745), (-0.18023996, 0.38268343, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-6.005578e-17, 0.19509032, -0.98078525), (-5.6571306e-17, 0.38268343, -0.9238795), (-5.6571306e-17, 0.38268343, -0.9238795), (-6.005578e-17, 0.19509032, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.18023996, 0.38268343, -0.90612745), (0.18023996, 0.38268343, -0.90612745), (0.19134171, 0.19509032, -0.96193975), (0.37533027, 0.19509032, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.35355338, 0.38268343, -0.8535534), (0.37533027, 0.19509032, -0.90612745), (0.5448951, 0.19509032, -0.81549317), (0.51328, 0.38268343, -0.76817775), (0.51328, 0.38268343, -0.76817775), (0.5448951, 0.19509032, -0.81549317), (0.69351995, 0.19509032, -0.69351995), (0.6532815, 0.38268343, -0.6532815), (0.6532815, 0.38268343, -0.6532815), (0.69351995, 0.19509032, -0.69351995), (0.81549317, 0.19509032, -0.5448951), (0.76817775, 0.38268343, -0.51328), (0.76817775, 0.38268343, -0.51328), (0.81549317, 0.19509032, -0.5448951), (0.90612745, 0.19509032, -0.37533027), (0.8535534, 0.38268343, -0.35355338), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.19509032, -0.37533027), (0.96193975, 0.19509032, -0.19134171), (0.90612745, 0.38268343, -0.18023996), (0.90612745, 0.38268343, -0.18023996), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0.19509032, -1.2011156e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.98078525, 0.19509032, -1.2011156e-16), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.38268343, 0.18023996), (0.90612745, 0.38268343, 0.18023996), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.19509032, 0.37533027), (0.8535534, 0.38268343, 0.35355338), (0.8535534, 0.38268343, 0.35355338), (0.90612745, 0.19509032, 0.37533027), (0.81549317, 0.19509032, 0.5448951), (0.76817775, 0.38268343, 0.51328), (0.76817775, 0.38268343, 0.51328), (0.81549317, 0.19509032, 0.5448951), (0.69351995, 0.19509032, 0.69351995), (0.6532815, 0.38268343, 0.6532815), (0.6532815, 0.38268343, 0.6532815), (0.69351995, 0.19509032, 0.69351995), (0.5448951, 0.19509032, 0.81549317), (0.51328, 0.38268343, 0.76817775), (0.51328, 0.38268343, 0.76817775), (0.5448951, 0.19509032, 0.81549317), (0.37533027, 0.19509032, 0.90612745), (0.35355338, 0.38268343, 0.8535534), (0.35355338, 0.38268343, 0.8535534), (0.37533027, 0.19509032, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.18023996, 0.38268343, 0.90612745), (0.18023996, 0.38268343, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (1.8016734e-16, 0.19509032, 0.98078525), (1.6971392e-16, 0.38268343, 0.9238795), (1.6971392e-16, 0.38268343, 0.9238795), (1.8016734e-16, 0.19509032, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.18023996, 0.38268343, 0.90612745), (-0.18023996, 0.38268343, 0.90612745), (-0.19134171, 0.19509032, 0.96193975), (-0.37533027, 0.19509032, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.35355338, 0.38268343, 0.8535534), (-0.37533027, 0.19509032, 0.90612745), (-0.5448951, 0.19509032, 0.81549317), (-0.51328, 0.38268343, 0.76817775), (-0.51328, 0.38268343, 0.76817775), (-0.5448951, 0.19509032, 0.81549317), (-0.69351995, 0.19509032, 0.69351995), (-0.6532815, 0.38268343, 0.6532815), (-0.6532815, 0.38268343, 0.6532815), (-0.69351995, 0.19509032, 0.69351995), (-0.81549317, 0.19509032, 0.5448951), (-0.76817775, 0.38268343, 0.51328), (-0.76817775, 0.38268343, 0.51328), (-0.81549317, 0.19509032, 0.5448951), (-0.90612745, 0.19509032, 0.37533027), (-0.8535534, 0.38268343, 0.35355338), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.19509032, 0.37533027), (-0.96193975, 0.19509032, 0.19134171), (-0.90612745, 0.38268343, 0.18023996), (-0.90612745, 0.38268343, 0.18023996), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0.19509032, 0), (-0.9238795, 0.38268343, 0), (-0.98078525, 0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.96193975, 0.19509032, -0.19134171), (-0.96193975, 0.19509032, -0.19134171), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.90612745, 0.19509032, -0.37533027), (-0.90612745, 0.19509032, -0.37533027), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.81549317, 0.19509032, -0.5448951), (-0.81549317, 0.19509032, -0.5448951), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.69351995, 0.19509032, -0.69351995), (-0.69351995, 0.19509032, -0.69351995), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.5448951, 0.19509032, -0.81549317), (-0.5448951, 0.19509032, -0.81549317), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.37533027, 0.19509032, -0.90612745), (-0.37533027, 0.19509032, -0.90612745), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19134171, 0.19509032, -0.96193975), (-0.19134171, 0.19509032, -0.96193975), (-0.19509032, 1.2246469e-16, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (-6.005578e-17, 0.19509032, -0.98078525), (-6.005578e-17, 0.19509032, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (0.19509032, 1.2246469e-16, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.19134171, 0.19509032, -0.96193975), (0.19509032, 1.2246469e-16, -0.98078525), (0.38268343, 1.2246469e-16, -0.9238795), (0.37533027, 0.19509032, -0.90612745), (0.37533027, 0.19509032, -0.90612745), (0.38268343, 1.2246469e-16, -0.9238795), (0.55557024, 1.2246469e-16, -0.8314696), (0.5448951, 0.19509032, -0.81549317), (0.5448951, 0.19509032, -0.81549317), (0.55557024, 1.2246469e-16, -0.8314696), (0.70710677, 1.2246469e-16, -0.70710677), (0.69351995, 0.19509032, -0.69351995), (0.69351995, 0.19509032, -0.69351995), (0.70710677, 1.2246469e-16, -0.70710677), (0.8314696, 1.2246469e-16, -0.55557024), (0.81549317, 0.19509032, -0.5448951), (0.81549317, 0.19509032, -0.5448951), (0.8314696, 1.2246469e-16, -0.55557024), (0.9238795, 1.2246469e-16, -0.38268343), (0.90612745, 0.19509032, -0.37533027), (0.90612745, 0.19509032, -0.37533027), (0.9238795, 1.2246469e-16, -0.38268343), (0.98078525, 1.2246469e-16, -0.19509032), (0.96193975, 0.19509032, -0.19134171), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 1.2246469e-16, -0.19509032), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, 0.19509032, -1.2011156e-16), (0.98078525, 0.19509032, -1.2011156e-16), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, 1.2246469e-16, 0.19509032), (0.96193975, 0.19509032, 0.19134171), (0.96193975, 0.19509032, 0.19134171), (0.98078525, 1.2246469e-16, 0.19509032), (0.9238795, 1.2246469e-16, 0.38268343), (0.90612745, 0.19509032, 0.37533027), (0.90612745, 0.19509032, 0.37533027), (0.9238795, 1.2246469e-16, 0.38268343), (0.8314696, 1.2246469e-16, 0.55557024), (0.81549317, 0.19509032, 0.5448951), (0.81549317, 0.19509032, 0.5448951), (0.8314696, 1.2246469e-16, 0.55557024), (0.70710677, 1.2246469e-16, 0.70710677), (0.69351995, 0.19509032, 0.69351995), (0.69351995, 0.19509032, 0.69351995), (0.70710677, 1.2246469e-16, 0.70710677), (0.55557024, 1.2246469e-16, 0.8314696), (0.5448951, 0.19509032, 0.81549317), (0.5448951, 0.19509032, 0.81549317), (0.55557024, 1.2246469e-16, 0.8314696), (0.38268343, 1.2246469e-16, 0.9238795), (0.37533027, 0.19509032, 0.90612745), (0.37533027, 0.19509032, 0.90612745), (0.38268343, 1.2246469e-16, 0.9238795), (0.19509032, 1.2246469e-16, 0.98078525), (0.19134171, 0.19509032, 0.96193975), (0.19134171, 0.19509032, 0.96193975), (0.19509032, 1.2246469e-16, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (1.8016734e-16, 0.19509032, 0.98078525), (1.8016734e-16, 0.19509032, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.19134171, 0.19509032, 0.96193975), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.37533027, 0.19509032, 0.90612745), (-0.37533027, 0.19509032, 0.90612745), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.5448951, 0.19509032, 0.81549317), (-0.5448951, 0.19509032, 0.81549317), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.69351995, 0.19509032, 0.69351995), (-0.69351995, 0.19509032, 0.69351995), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.81549317, 0.19509032, 0.5448951), (-0.81549317, 0.19509032, 0.5448951), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.90612745, 0.19509032, 0.37533027), (-0.90612745, 0.19509032, 0.37533027), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.96193975, 0.19509032, 0.19134171), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 1.2246469e-16, 0.19509032), (-1, 1.2246469e-16, 0), (-0.98078525, 0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, -0.19509032, 0), (-0.96193975, -0.19509032, -0.19134171), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.19509032, -0.37533027), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.90612745, -0.19509032, -0.37533027), (-0.81549317, -0.19509032, -0.5448951), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.81549317, -0.19509032, -0.5448951), (-0.69351995, -0.19509032, -0.69351995), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.69351995, -0.19509032, -0.69351995), (-0.5448951, -0.19509032, -0.81549317), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.5448951, -0.19509032, -0.81549317), (-0.37533027, -0.19509032, -0.90612745), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.37533027, -0.19509032, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19134171, -0.19509032, -0.96193975), (-6.005578e-17, -0.19509032, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (-6.123234e-17, 1.2246469e-16, -1), (-6.005578e-17, -0.19509032, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.19509032, 1.2246469e-16, -0.98078525), (0.19509032, 1.2246469e-16, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.37533027, -0.19509032, -0.90612745), (0.38268343, 1.2246469e-16, -0.9238795), (0.38268343, 1.2246469e-16, -0.9238795), (0.37533027, -0.19509032, -0.90612745), (0.5448951, -0.19509032, -0.81549317), (0.55557024, 1.2246469e-16, -0.8314696), (0.55557024, 1.2246469e-16, -0.8314696), (0.5448951, -0.19509032, -0.81549317), (0.69351995, -0.19509032, -0.69351995), (0.70710677, 1.2246469e-16, -0.70710677), (0.70710677, 1.2246469e-16, -0.70710677), (0.69351995, -0.19509032, -0.69351995), (0.81549317, -0.19509032, -0.5448951), (0.8314696, 1.2246469e-16, -0.55557024), (0.8314696, 1.2246469e-16, -0.55557024), (0.81549317, -0.19509032, -0.5448951), (0.90612745, -0.19509032, -0.37533027), (0.9238795, 1.2246469e-16, -0.38268343), (0.9238795, 1.2246469e-16, -0.38268343), (0.90612745, -0.19509032, -0.37533027), (0.96193975, -0.19509032, -0.19134171), (0.98078525, 1.2246469e-16, -0.19509032), (0.98078525, 1.2246469e-16, -0.19509032), (0.96193975, -0.19509032, -0.19134171), (0.98078525, -0.19509032, -1.2011156e-16), (1, 1.2246469e-16, -1.2246469e-16), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.96193975, -0.19509032, 0.19134171), (0.98078525, 1.2246469e-16, 0.19509032), (0.98078525, 1.2246469e-16, 0.19509032), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.19509032, 0.37533027), (0.9238795, 1.2246469e-16, 0.38268343), (0.9238795, 1.2246469e-16, 0.38268343), (0.90612745, -0.19509032, 0.37533027), (0.81549317, -0.19509032, 0.5448951), (0.8314696, 1.2246469e-16, 0.55557024), (0.8314696, 1.2246469e-16, 0.55557024), (0.81549317, -0.19509032, 0.5448951), (0.69351995, -0.19509032, 0.69351995), (0.70710677, 1.2246469e-16, 0.70710677), (0.70710677, 1.2246469e-16, 0.70710677), (0.69351995, -0.19509032, 0.69351995), (0.5448951, -0.19509032, 0.81549317), (0.55557024, 1.2246469e-16, 0.8314696), (0.55557024, 1.2246469e-16, 0.8314696), (0.5448951, -0.19509032, 0.81549317), (0.37533027, -0.19509032, 0.90612745), (0.38268343, 1.2246469e-16, 0.9238795), (0.38268343, 1.2246469e-16, 0.9238795), (0.37533027, -0.19509032, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.19509032, 1.2246469e-16, 0.98078525), (0.19509032, 1.2246469e-16, 0.98078525), (0.19134171, -0.19509032, 0.96193975), (1.8016734e-16, -0.19509032, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (1.8369701e-16, 1.2246469e-16, 1), (1.8016734e-16, -0.19509032, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.37533027, -0.19509032, 0.90612745), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.37533027, -0.19509032, 0.90612745), (-0.5448951, -0.19509032, 0.81549317), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.5448951, -0.19509032, 0.81549317), (-0.69351995, -0.19509032, 0.69351995), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.69351995, -0.19509032, 0.69351995), (-0.81549317, -0.19509032, 0.5448951), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.81549317, -0.19509032, 0.5448951), (-0.90612745, -0.19509032, 0.37533027), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.90612745, -0.19509032, 0.37533027), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, -0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, -0.19509032, 0), (-0.9238795, -0.38268343, 0), (-0.90612745, -0.38268343, -0.18023996), (-0.96193975, -0.19509032, -0.19134171), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.38268343, -0.18023996), (-0.8535534, -0.38268343, -0.35355338), (-0.90612745, -0.19509032, -0.37533027), (-0.90612745, -0.19509032, -0.37533027), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.38268343, -0.51328), (-0.81549317, -0.19509032, -0.5448951), (-0.81549317, -0.19509032, -0.5448951), (-0.76817775, -0.38268343, -0.51328), (-0.6532815, -0.38268343, -0.6532815), (-0.69351995, -0.19509032, -0.69351995), (-0.69351995, -0.19509032, -0.69351995), (-0.6532815, -0.38268343, -0.6532815), (-0.51328, -0.38268343, -0.76817775), (-0.5448951, -0.19509032, -0.81549317), (-0.5448951, -0.19509032, -0.81549317), (-0.51328, -0.38268343, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.37533027, -0.19509032, -0.90612745), (-0.37533027, -0.19509032, -0.90612745), (-0.35355338, -0.38268343, -0.8535534), (-0.18023996, -0.38268343, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.19134171, -0.19509032, -0.96193975), (-0.18023996, -0.38268343, -0.90612745), (-5.6571306e-17, -0.38268343, -0.9238795), (-6.005578e-17, -0.19509032, -0.98078525), (-6.005578e-17, -0.19509032, -0.98078525), (-5.6571306e-17, -0.38268343, -0.9238795), (0.18023996, -0.38268343, -0.90612745), (0.19134171, -0.19509032, -0.96193975), (0.19134171, -0.19509032, -0.96193975), (0.18023996, -0.38268343, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.37533027, -0.19509032, -0.90612745), (0.37533027, -0.19509032, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.51328, -0.38268343, -0.76817775), (0.5448951, -0.19509032, -0.81549317), (0.5448951, -0.19509032, -0.81549317), (0.51328, -0.38268343, -0.76817775), (0.6532815, -0.38268343, -0.6532815), (0.69351995, -0.19509032, -0.69351995), (0.69351995, -0.19509032, -0.69351995), (0.6532815, -0.38268343, -0.6532815), (0.76817775, -0.38268343, -0.51328), (0.81549317, -0.19509032, -0.5448951), (0.81549317, -0.19509032, -0.5448951), (0.76817775, -0.38268343, -0.51328), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.19509032, -0.37533027), (0.90612745, -0.19509032, -0.37533027), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.38268343, -0.18023996), (0.96193975, -0.19509032, -0.19134171), (0.96193975, -0.19509032, -0.19134171), (0.90612745, -0.38268343, -0.18023996), (0.9238795, -0.38268343, -1.1314261e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.90612745, -0.38268343, 0.18023996), (0.96193975, -0.19509032, 0.19134171), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.38268343, 0.18023996), (0.8535534, -0.38268343, 0.35355338), (0.90612745, -0.19509032, 0.37533027), (0.90612745, -0.19509032, 0.37533027), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.38268343, 0.51328), (0.81549317, -0.19509032, 0.5448951), (0.81549317, -0.19509032, 0.5448951), (0.76817775, -0.38268343, 0.51328), (0.6532815, -0.38268343, 0.6532815), (0.69351995, -0.19509032, 0.69351995), (0.69351995, -0.19509032, 0.69351995), (0.6532815, -0.38268343, 0.6532815), (0.51328, -0.38268343, 0.76817775), (0.5448951, -0.19509032, 0.81549317), (0.5448951, -0.19509032, 0.81549317), (0.51328, -0.38268343, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.37533027, -0.19509032, 0.90612745), (0.37533027, -0.19509032, 0.90612745), (0.35355338, -0.38268343, 0.8535534), (0.18023996, -0.38268343, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.19134171, -0.19509032, 0.96193975), (0.18023996, -0.38268343, 0.90612745), (1.6971392e-16, -0.38268343, 0.9238795), (1.8016734e-16, -0.19509032, 0.98078525), (1.8016734e-16, -0.19509032, 0.98078525), (1.6971392e-16, -0.38268343, 0.9238795), (-0.18023996, -0.38268343, 0.90612745), (-0.19134171, -0.19509032, 0.96193975), (-0.19134171, -0.19509032, 0.96193975), (-0.18023996, -0.38268343, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.37533027, -0.19509032, 0.90612745), (-0.37533027, -0.19509032, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.51328, -0.38268343, 0.76817775), (-0.5448951, -0.19509032, 0.81549317), (-0.5448951, -0.19509032, 0.81549317), (-0.51328, -0.38268343, 0.76817775), (-0.6532815, -0.38268343, 0.6532815), (-0.69351995, -0.19509032, 0.69351995), (-0.69351995, -0.19509032, 0.69351995), (-0.6532815, -0.38268343, 0.6532815), (-0.76817775, -0.38268343, 0.51328), (-0.81549317, -0.19509032, 0.5448951), (-0.81549317, -0.19509032, 0.5448951), (-0.76817775, -0.38268343, 0.51328), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.19509032, 0.37533027), (-0.90612745, -0.19509032, 0.37533027), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.38268343, 0.18023996), (-0.96193975, -0.19509032, 0.19134171), (-0.96193975, -0.19509032, 0.19134171), (-0.90612745, -0.38268343, 0.18023996), (-0.9238795, -0.38268343, 0), (-0.98078525, -0.19509032, 0), (-0.9238795, -0.38268343, 0), (-0.8314696, -0.55557024, 0), (-0.81549317, -0.55557024, -0.16221167), (-0.90612745, -0.38268343, -0.18023996), (-0.90612745, -0.38268343, -0.18023996), (-0.81549317, -0.55557024, -0.16221167), (-0.76817775, -0.55557024, -0.31818965), (-0.8535534, -0.38268343, -0.35355338), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.55557024, -0.31818965), (-0.6913417, -0.55557024, -0.46193975), (-0.76817775, -0.38268343, -0.51328), (-0.76817775, -0.38268343, -0.51328), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.55557024, -0.5879378), (-0.6532815, -0.38268343, -0.6532815), (-0.6532815, -0.38268343, -0.6532815), (-0.5879378, -0.55557024, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.51328, -0.38268343, -0.76817775), (-0.51328, -0.38268343, -0.76817775), (-0.46193975, -0.55557024, -0.6913417), (-0.31818965, -0.55557024, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.35355338, -0.38268343, -0.8535534), (-0.31818965, -0.55557024, -0.76817775), (-0.16221167, -0.55557024, -0.81549317), (-0.18023996, -0.38268343, -0.90612745), (-0.18023996, -0.38268343, -0.90612745), (-0.16221167, -0.55557024, -0.81549317), (-5.091283e-17, -0.55557024, -0.8314696), (-5.6571306e-17, -0.38268343, -0.9238795), (-5.6571306e-17, -0.38268343, -0.9238795), (-5.091283e-17, -0.55557024, -0.8314696), (0.16221167, -0.55557024, -0.81549317), (0.18023996, -0.38268343, -0.90612745), (0.18023996, -0.38268343, -0.90612745), (0.16221167, -0.55557024, -0.81549317), (0.31818965, -0.55557024, -0.76817775), (0.35355338, -0.38268343, -0.8535534), (0.35355338, -0.38268343, -0.8535534), (0.31818965, -0.55557024, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.51328, -0.38268343, -0.76817775), (0.51328, -0.38268343, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.5879378, -0.55557024, -0.5879378), (0.6532815, -0.38268343, -0.6532815), (0.6532815, -0.38268343, -0.6532815), (0.5879378, -0.55557024, -0.5879378), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.38268343, -0.51328), (0.76817775, -0.38268343, -0.51328), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.55557024, -0.31818965), (0.8535534, -0.38268343, -0.35355338), (0.8535534, -0.38268343, -0.35355338), (0.76817775, -0.55557024, -0.31818965), (0.81549317, -0.55557024, -0.16221167), (0.90612745, -0.38268343, -0.18023996), (0.90612745, -0.38268343, -0.18023996), (0.81549317, -0.55557024, -0.16221167), (0.8314696, -0.55557024, -1.0182566e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.8314696, -0.55557024, -1.0182566e-16), (0.81549317, -0.55557024, 0.16221167), (0.90612745, -0.38268343, 0.18023996), (0.90612745, -0.38268343, 0.18023996), (0.81549317, -0.55557024, 0.16221167), (0.76817775, -0.55557024, 0.31818965), (0.8535534, -0.38268343, 0.35355338), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.55557024, 0.31818965), (0.6913417, -0.55557024, 0.46193975), (0.76817775, -0.38268343, 0.51328), (0.76817775, -0.38268343, 0.51328), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.55557024, 0.5879378), (0.6532815, -0.38268343, 0.6532815), (0.6532815, -0.38268343, 0.6532815), (0.5879378, -0.55557024, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.51328, -0.38268343, 0.76817775), (0.51328, -0.38268343, 0.76817775), (0.46193975, -0.55557024, 0.6913417), (0.31818965, -0.55557024, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.35355338, -0.38268343, 0.8535534), (0.31818965, -0.55557024, 0.76817775), (0.16221167, -0.55557024, 0.81549317), (0.18023996, -0.38268343, 0.90612745), (0.18023996, -0.38268343, 0.90612745), (0.16221167, -0.55557024, 0.81549317), (1.5273849e-16, -0.55557024, 0.8314696), (1.6971392e-16, -0.38268343, 0.9238795), (1.6971392e-16, -0.38268343, 0.9238795), (1.5273849e-16, -0.55557024, 0.8314696), (-0.16221167, -0.55557024, 0.81549317), (-0.18023996, -0.38268343, 0.90612745), (-0.18023996, -0.38268343, 0.90612745), (-0.16221167, -0.55557024, 0.81549317), (-0.31818965, -0.55557024, 0.76817775), (-0.35355338, -0.38268343, 0.8535534), (-0.35355338, -0.38268343, 0.8535534), (-0.31818965, -0.55557024, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.51328, -0.38268343, 0.76817775), (-0.51328, -0.38268343, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.5879378, -0.55557024, 0.5879378), (-0.6532815, -0.38268343, 0.6532815), (-0.6532815, -0.38268343, 0.6532815), (-0.5879378, -0.55557024, 0.5879378), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.38268343, 0.51328), (-0.76817775, -0.38268343, 0.51328), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.55557024, 0.31818965), (-0.8535534, -0.38268343, 0.35355338), (-0.8535534, -0.38268343, 0.35355338), (-0.76817775, -0.55557024, 0.31818965), (-0.81549317, -0.55557024, 0.16221167), (-0.90612745, -0.38268343, 0.18023996), (-0.90612745, -0.38268343, 0.18023996), (-0.81549317, -0.55557024, 0.16221167), (-0.8314696, -0.55557024, 0), (-0.9238795, -0.38268343, 0), (-0.8314696, -0.55557024, 0), (-0.70710677, -0.70710677, 0), (-0.69351995, -0.70710677, -0.13794969), (-0.81549317, -0.55557024, -0.16221167), (-0.81549317, -0.55557024, -0.16221167), (-0.69351995, -0.70710677, -0.13794969), (-0.6532815, -0.70710677, -0.27059805), (-0.76817775, -0.55557024, -0.31818965), (-0.76817775, -0.55557024, -0.31818965), (-0.6532815, -0.70710677, -0.27059805), (-0.5879378, -0.70710677, -0.39284748), (-0.6913417, -0.55557024, -0.46193975), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.70710677, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.5879378, -0.55557024, -0.5879378), (-0.5879378, -0.55557024, -0.5879378), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.70710677, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.46193975, -0.55557024, -0.6913417), (-0.39284748, -0.70710677, -0.5879378), (-0.27059805, -0.70710677, -0.6532815), (-0.31818965, -0.55557024, -0.76817775), (-0.31818965, -0.55557024, -0.76817775), (-0.27059805, -0.70710677, -0.6532815), (-0.13794969, -0.70710677, -0.69351995), (-0.16221167, -0.55557024, -0.81549317), (-0.16221167, -0.55557024, -0.81549317), (-0.13794969, -0.70710677, -0.69351995), (-4.3297803e-17, -0.70710677, -0.70710677), (-5.091283e-17, -0.55557024, -0.8314696), (-5.091283e-17, -0.55557024, -0.8314696), (-4.3297803e-17, -0.70710677, -0.70710677), (0.13794969, -0.70710677, -0.69351995), (0.16221167, -0.55557024, -0.81549317), (0.16221167, -0.55557024, -0.81549317), (0.13794969, -0.70710677, -0.69351995), (0.27059805, -0.70710677, -0.6532815), (0.31818965, -0.55557024, -0.76817775), (0.31818965, -0.55557024, -0.76817775), (0.27059805, -0.70710677, -0.6532815), (0.39284748, -0.70710677, -0.5879378), (0.46193975, -0.55557024, -0.6913417), (0.46193975, -0.55557024, -0.6913417), (0.39284748, -0.70710677, -0.5879378), (0.5, -0.70710677, -0.5), (0.5879378, -0.55557024, -0.5879378), (0.5879378, -0.55557024, -0.5879378), (0.5, -0.70710677, -0.5), (0.5879378, -0.70710677, -0.39284748), (0.6913417, -0.55557024, -0.46193975), (0.6913417, -0.55557024, -0.46193975), (0.5879378, -0.70710677, -0.39284748), (0.6532815, -0.70710677, -0.27059805), (0.76817775, -0.55557024, -0.31818965), (0.76817775, -0.55557024, -0.31818965), (0.6532815, -0.70710677, -0.27059805), (0.69351995, -0.70710677, -0.13794969), (0.81549317, -0.55557024, -0.16221167), (0.81549317, -0.55557024, -0.16221167), (0.69351995, -0.70710677, -0.13794969), (0.70710677, -0.70710677, -8.6595606e-17), (0.8314696, -0.55557024, -1.0182566e-16), (0.8314696, -0.55557024, -1.0182566e-16), (0.70710677, -0.70710677, -8.6595606e-17), (0.69351995, -0.70710677, 0.13794969), (0.81549317, -0.55557024, 0.16221167), (0.81549317, -0.55557024, 0.16221167), (0.69351995, -0.70710677, 0.13794969), (0.6532815, -0.70710677, 0.27059805), (0.76817775, -0.55557024, 0.31818965), (0.76817775, -0.55557024, 0.31818965), (0.6532815, -0.70710677, 0.27059805), (0.5879378, -0.70710677, 0.39284748), (0.6913417, -0.55557024, 0.46193975), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.70710677, 0.39284748), (0.5, -0.70710677, 0.5), (0.5879378, -0.55557024, 0.5879378), (0.5879378, -0.55557024, 0.5879378), (0.5, -0.70710677, 0.5), (0.39284748, -0.70710677, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.46193975, -0.55557024, 0.6913417), (0.39284748, -0.70710677, 0.5879378), (0.27059805, -0.70710677, 0.6532815), (0.31818965, -0.55557024, 0.76817775), (0.31818965, -0.55557024, 0.76817775), (0.27059805, -0.70710677, 0.6532815), (0.13794969, -0.70710677, 0.69351995), (0.16221167, -0.55557024, 0.81549317), (0.16221167, -0.55557024, 0.81549317), (0.13794969, -0.70710677, 0.69351995), (1.298934e-16, -0.70710677, 0.70710677), (1.5273849e-16, -0.55557024, 0.8314696), (1.5273849e-16, -0.55557024, 0.8314696), (1.298934e-16, -0.70710677, 0.70710677), (-0.13794969, -0.70710677, 0.69351995), (-0.16221167, -0.55557024, 0.81549317), (-0.16221167, -0.55557024, 0.81549317), (-0.13794969, -0.70710677, 0.69351995), (-0.27059805, -0.70710677, 0.6532815), (-0.31818965, -0.55557024, 0.76817775), (-0.31818965, -0.55557024, 0.76817775), (-0.27059805, -0.70710677, 0.6532815), (-0.39284748, -0.70710677, 0.5879378), (-0.46193975, -0.55557024, 0.6913417), (-0.46193975, -0.55557024, 0.6913417), (-0.39284748, -0.70710677, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.55557024, 0.5879378), (-0.5879378, -0.55557024, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.70710677, 0.39284748), (-0.6913417, -0.55557024, 0.46193975), (-0.6913417, -0.55557024, 0.46193975), (-0.5879378, -0.70710677, 0.39284748), (-0.6532815, -0.70710677, 0.27059805), (-0.76817775, -0.55557024, 0.31818965), (-0.76817775, -0.55557024, 0.31818965), (-0.6532815, -0.70710677, 0.27059805), (-0.69351995, -0.70710677, 0.13794969), (-0.81549317, -0.55557024, 0.16221167), (-0.81549317, -0.55557024, 0.16221167), (-0.69351995, -0.70710677, 0.13794969), (-0.70710677, -0.70710677, 0), (-0.8314696, -0.55557024, 0), (-0.70710677, -0.70710677, 0), (-0.55557024, -0.8314696, 0), (-0.5448951, -0.8314696, -0.108386375), (-0.69351995, -0.70710677, -0.13794969), (-0.69351995, -0.70710677, -0.13794969), (-0.5448951, -0.8314696, -0.108386375), (-0.51328, -0.8314696, -0.21260752), (-0.6532815, -0.70710677, -0.27059805), (-0.6532815, -0.70710677, -0.27059805), (-0.51328, -0.8314696, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.5879378, -0.70710677, -0.39284748), (-0.5879378, -0.70710677, -0.39284748), (-0.46193975, -0.8314696, -0.30865827), (-0.39284748, -0.8314696, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.8314696, -0.39284748), (-0.30865827, -0.8314696, -0.46193975), (-0.39284748, -0.70710677, -0.5879378), (-0.39284748, -0.70710677, -0.5879378), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.8314696, -0.51328), (-0.27059805, -0.70710677, -0.6532815), (-0.27059805, -0.70710677, -0.6532815), (-0.21260752, -0.8314696, -0.51328), (-0.108386375, -0.8314696, -0.5448951), (-0.13794969, -0.70710677, -0.69351995), (-0.13794969, -0.70710677, -0.69351995), (-0.108386375, -0.8314696, -0.5448951), (-3.4018865e-17, -0.8314696, -0.55557024), (-4.3297803e-17, -0.70710677, -0.70710677), (-4.3297803e-17, -0.70710677, -0.70710677), (-3.4018865e-17, -0.8314696, -0.55557024), (0.108386375, -0.8314696, -0.5448951), (0.13794969, -0.70710677, -0.69351995), (0.13794969, -0.70710677, -0.69351995), (0.108386375, -0.8314696, -0.5448951), (0.21260752, -0.8314696, -0.51328), (0.27059805, -0.70710677, -0.6532815), (0.27059805, -0.70710677, -0.6532815), (0.21260752, -0.8314696, -0.51328), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.70710677, -0.5879378), (0.39284748, -0.70710677, -0.5879378), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.8314696, -0.39284748), (0.5, -0.70710677, -0.5), (0.5, -0.70710677, -0.5), (0.39284748, -0.8314696, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.5879378, -0.70710677, -0.39284748), (0.5879378, -0.70710677, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.51328, -0.8314696, -0.21260752), (0.6532815, -0.70710677, -0.27059805), (0.6532815, -0.70710677, -0.27059805), (0.51328, -0.8314696, -0.21260752), (0.5448951, -0.8314696, -0.108386375), (0.69351995, -0.70710677, -0.13794969), (0.69351995, -0.70710677, -0.13794969), (0.5448951, -0.8314696, -0.108386375), (0.55557024, -0.8314696, -6.803773e-17), (0.70710677, -0.70710677, -8.6595606e-17), (0.70710677, -0.70710677, -8.6595606e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.5448951, -0.8314696, 0.108386375), (0.69351995, -0.70710677, 0.13794969), (0.69351995, -0.70710677, 0.13794969), (0.5448951, -0.8314696, 0.108386375), (0.51328, -0.8314696, 0.21260752), (0.6532815, -0.70710677, 0.27059805), (0.6532815, -0.70710677, 0.27059805), (0.51328, -0.8314696, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.5879378, -0.70710677, 0.39284748), (0.5879378, -0.70710677, 0.39284748), (0.46193975, -0.8314696, 0.30865827), (0.39284748, -0.8314696, 0.39284748), (0.5, -0.70710677, 0.5), (0.5, -0.70710677, 0.5), (0.39284748, -0.8314696, 0.39284748), (0.30865827, -0.8314696, 0.46193975), (0.39284748, -0.70710677, 0.5879378), (0.39284748, -0.70710677, 0.5879378), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.8314696, 0.51328), (0.27059805, -0.70710677, 0.6532815), (0.27059805, -0.70710677, 0.6532815), (0.21260752, -0.8314696, 0.51328), (0.108386375, -0.8314696, 0.5448951), (0.13794969, -0.70710677, 0.69351995), (0.13794969, -0.70710677, 0.69351995), (0.108386375, -0.8314696, 0.5448951), (1.020566e-16, -0.8314696, 0.55557024), (1.298934e-16, -0.70710677, 0.70710677), (1.298934e-16, -0.70710677, 0.70710677), (1.020566e-16, -0.8314696, 0.55557024), (-0.108386375, -0.8314696, 0.5448951), (-0.13794969, -0.70710677, 0.69351995), (-0.13794969, -0.70710677, 0.69351995), (-0.108386375, -0.8314696, 0.5448951), (-0.21260752, -0.8314696, 0.51328), (-0.27059805, -0.70710677, 0.6532815), (-0.27059805, -0.70710677, 0.6532815), (-0.21260752, -0.8314696, 0.51328), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.70710677, 0.5879378), (-0.39284748, -0.70710677, 0.5879378), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.8314696, 0.39284748), (-0.5, -0.70710677, 0.5), (-0.5, -0.70710677, 0.5), (-0.39284748, -0.8314696, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.5879378, -0.70710677, 0.39284748), (-0.5879378, -0.70710677, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.51328, -0.8314696, 0.21260752), (-0.6532815, -0.70710677, 0.27059805), (-0.6532815, -0.70710677, 0.27059805), (-0.51328, -0.8314696, 0.21260752), (-0.5448951, -0.8314696, 0.108386375), (-0.69351995, -0.70710677, 0.13794969), (-0.69351995, -0.70710677, 0.13794969), (-0.5448951, -0.8314696, 0.108386375), (-0.55557024, -0.8314696, 0), (-0.70710677, -0.70710677, 0), (-0.55557024, -0.8314696, 0), (-0.38268343, -0.9238795, 0), (-0.37533027, -0.9238795, -0.074657835), (-0.5448951, -0.8314696, -0.108386375), (-0.5448951, -0.8314696, -0.108386375), (-0.37533027, -0.9238795, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.51328, -0.8314696, -0.21260752), (-0.51328, -0.8314696, -0.21260752), (-0.35355338, -0.9238795, -0.14644662), (-0.31818965, -0.9238795, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.46193975, -0.8314696, -0.30865827), (-0.31818965, -0.9238795, -0.21260752), (-0.27059805, -0.9238795, -0.27059805), (-0.39284748, -0.8314696, -0.39284748), (-0.39284748, -0.8314696, -0.39284748), (-0.27059805, -0.9238795, -0.27059805), (-0.21260752, -0.9238795, -0.31818965), (-0.30865827, -0.8314696, -0.46193975), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.9238795, -0.31818965), (-0.14644662, -0.9238795, -0.35355338), (-0.21260752, -0.8314696, -0.51328), (-0.21260752, -0.8314696, -0.51328), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.9238795, -0.37533027), (-0.108386375, -0.8314696, -0.5448951), (-0.108386375, -0.8314696, -0.5448951), (-0.074657835, -0.9238795, -0.37533027), (-2.3432602e-17, -0.9238795, -0.38268343), (-3.4018865e-17, -0.8314696, -0.55557024), (-3.4018865e-17, -0.8314696, -0.55557024), (-2.3432602e-17, -0.9238795, -0.38268343), (0.074657835, -0.9238795, -0.37533027), (0.108386375, -0.8314696, -0.5448951), (0.108386375, -0.8314696, -0.5448951), (0.074657835, -0.9238795, -0.37533027), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.8314696, -0.51328), (0.21260752, -0.8314696, -0.51328), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.9238795, -0.31818965), (0.30865827, -0.8314696, -0.46193975), (0.30865827, -0.8314696, -0.46193975), (0.21260752, -0.9238795, -0.31818965), (0.27059805, -0.9238795, -0.27059805), (0.39284748, -0.8314696, -0.39284748), (0.39284748, -0.8314696, -0.39284748), (0.27059805, -0.9238795, -0.27059805), (0.31818965, -0.9238795, -0.21260752), (0.46193975, -0.8314696, -0.30865827), (0.46193975, -0.8314696, -0.30865827), (0.31818965, -0.9238795, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.51328, -0.8314696, -0.21260752), (0.51328, -0.8314696, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.37533027, -0.9238795, -0.074657835), (0.5448951, -0.8314696, -0.108386375), (0.5448951, -0.8314696, -0.108386375), (0.37533027, -0.9238795, -0.074657835), (0.38268343, -0.9238795, -4.6865205e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.37533027, -0.9238795, 0.074657835), (0.5448951, -0.8314696, 0.108386375), (0.5448951, -0.8314696, 0.108386375), (0.37533027, -0.9238795, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.51328, -0.8314696, 0.21260752), (0.51328, -0.8314696, 0.21260752), (0.35355338, -0.9238795, 0.14644662), (0.31818965, -0.9238795, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.46193975, -0.8314696, 0.30865827), (0.31818965, -0.9238795, 0.21260752), (0.27059805, -0.9238795, 0.27059805), (0.39284748, -0.8314696, 0.39284748), (0.39284748, -0.8314696, 0.39284748), (0.27059805, -0.9238795, 0.27059805), (0.21260752, -0.9238795, 0.31818965), (0.30865827, -0.8314696, 0.46193975), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.9238795, 0.31818965), (0.14644662, -0.9238795, 0.35355338), (0.21260752, -0.8314696, 0.51328), (0.21260752, -0.8314696, 0.51328), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.9238795, 0.37533027), (0.108386375, -0.8314696, 0.5448951), (0.108386375, -0.8314696, 0.5448951), (0.074657835, -0.9238795, 0.37533027), (7.0297805e-17, -0.9238795, 0.38268343), (1.020566e-16, -0.8314696, 0.55557024), (1.020566e-16, -0.8314696, 0.55557024), (7.0297805e-17, -0.9238795, 0.38268343), (-0.074657835, -0.9238795, 0.37533027), (-0.108386375, -0.8314696, 0.5448951), (-0.108386375, -0.8314696, 0.5448951), (-0.074657835, -0.9238795, 0.37533027), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.8314696, 0.51328), (-0.21260752, -0.8314696, 0.51328), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.9238795, 0.31818965), (-0.30865827, -0.8314696, 0.46193975), (-0.30865827, -0.8314696, 0.46193975), (-0.21260752, -0.9238795, 0.31818965), (-0.27059805, -0.9238795, 0.27059805), (-0.39284748, -0.8314696, 0.39284748), (-0.39284748, -0.8314696, 0.39284748), (-0.27059805, -0.9238795, 0.27059805), (-0.31818965, -0.9238795, 0.21260752), (-0.46193975, -0.8314696, 0.30865827), (-0.46193975, -0.8314696, 0.30865827), (-0.31818965, -0.9238795, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.51328, -0.8314696, 0.21260752), (-0.51328, -0.8314696, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.37533027, -0.9238795, 0.074657835), (-0.5448951, -0.8314696, 0.108386375), (-0.5448951, -0.8314696, 0.108386375), (-0.37533027, -0.9238795, 0.074657835), (-0.38268343, -0.9238795, 0), (-0.55557024, -0.8314696, 0), (-0.38268343, -0.9238795, 0), (-0.19509032, -0.98078525, 0), (-0.19134171, -0.98078525, -0.038060233), (-0.37533027, -0.9238795, -0.074657835), (-0.37533027, -0.9238795, -0.074657835), (-0.19134171, -0.98078525, -0.038060233), (-0.18023996, -0.98078525, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.35355338, -0.9238795, -0.14644662), (-0.18023996, -0.98078525, -0.074657835), (-0.16221167, -0.98078525, -0.108386375), (-0.31818965, -0.9238795, -0.21260752), (-0.31818965, -0.9238795, -0.21260752), (-0.16221167, -0.98078525, -0.108386375), (-0.13794969, -0.98078525, -0.13794969), (-0.27059805, -0.9238795, -0.27059805), (-0.27059805, -0.9238795, -0.27059805), (-0.13794969, -0.98078525, -0.13794969), (-0.108386375, -0.98078525, -0.16221167), (-0.21260752, -0.9238795, -0.31818965), (-0.21260752, -0.9238795, -0.31818965), (-0.108386375, -0.98078525, -0.16221167), (-0.074657835, -0.98078525, -0.18023996), (-0.14644662, -0.9238795, -0.35355338), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.98078525, -0.18023996), (-0.038060233, -0.98078525, -0.19134171), (-0.074657835, -0.9238795, -0.37533027), (-0.074657835, -0.9238795, -0.37533027), (-0.038060233, -0.98078525, -0.19134171), (-1.1945837e-17, -0.98078525, -0.19509032), (-2.3432602e-17, -0.9238795, -0.38268343), (-2.3432602e-17, -0.9238795, -0.38268343), (-1.1945837e-17, -0.98078525, -0.19509032), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.9238795, -0.37533027), (0.074657835, -0.9238795, -0.37533027), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.98078525, -0.18023996), (0.14644662, -0.9238795, -0.35355338), (0.14644662, -0.9238795, -0.35355338), (0.074657835, -0.98078525, -0.18023996), (0.108386375, -0.98078525, -0.16221167), (0.21260752, -0.9238795, -0.31818965), (0.21260752, -0.9238795, -0.31818965), (0.108386375, -0.98078525, -0.16221167), (0.13794969, -0.98078525, -0.13794969), (0.27059805, -0.9238795, -0.27059805), (0.27059805, -0.9238795, -0.27059805), (0.13794969, -0.98078525, -0.13794969), (0.16221167, -0.98078525, -0.108386375), (0.31818965, -0.9238795, -0.21260752), (0.31818965, -0.9238795, -0.21260752), (0.16221167, -0.98078525, -0.108386375), (0.18023996, -0.98078525, -0.074657835), (0.35355338, -0.9238795, -0.14644662), (0.35355338, -0.9238795, -0.14644662), (0.18023996, -0.98078525, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.37533027, -0.9238795, -0.074657835), (0.37533027, -0.9238795, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.19509032, -0.98078525, -2.3891674e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.19509032, -0.98078525, -2.3891674e-17), (0.19134171, -0.98078525, 0.038060233), (0.37533027, -0.9238795, 0.074657835), (0.37533027, -0.9238795, 0.074657835), (0.19134171, -0.98078525, 0.038060233), (0.18023996, -0.98078525, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.35355338, -0.9238795, 0.14644662), (0.18023996, -0.98078525, 0.074657835), (0.16221167, -0.98078525, 0.108386375), (0.31818965, -0.9238795, 0.21260752), (0.31818965, -0.9238795, 0.21260752), (0.16221167, -0.98078525, 0.108386375), (0.13794969, -0.98078525, 0.13794969), (0.27059805, -0.9238795, 0.27059805), (0.27059805, -0.9238795, 0.27059805), (0.13794969, -0.98078525, 0.13794969), (0.108386375, -0.98078525, 0.16221167), (0.21260752, -0.9238795, 0.31818965), (0.21260752, -0.9238795, 0.31818965), (0.108386375, -0.98078525, 0.16221167), (0.074657835, -0.98078525, 0.18023996), (0.14644662, -0.9238795, 0.35355338), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.98078525, 0.18023996), (0.038060233, -0.98078525, 0.19134171), (0.074657835, -0.9238795, 0.37533027), (0.074657835, -0.9238795, 0.37533027), (0.038060233, -0.98078525, 0.19134171), (3.583751e-17, -0.98078525, 0.19509032), (7.0297805e-17, -0.9238795, 0.38268343), (7.0297805e-17, -0.9238795, 0.38268343), (3.583751e-17, -0.98078525, 0.19509032), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.9238795, 0.37533027), (-0.074657835, -0.9238795, 0.37533027), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.98078525, 0.18023996), (-0.14644662, -0.9238795, 0.35355338), (-0.14644662, -0.9238795, 0.35355338), (-0.074657835, -0.98078525, 0.18023996), (-0.108386375, -0.98078525, 0.16221167), (-0.21260752, -0.9238795, 0.31818965), (-0.21260752, -0.9238795, 0.31818965), (-0.108386375, -0.98078525, 0.16221167), (-0.13794969, -0.98078525, 0.13794969), (-0.27059805, -0.9238795, 0.27059805), (-0.27059805, -0.9238795, 0.27059805), (-0.13794969, -0.98078525, 0.13794969), (-0.16221167, -0.98078525, 0.108386375), (-0.31818965, -0.9238795, 0.21260752), (-0.31818965, -0.9238795, 0.21260752), (-0.16221167, -0.98078525, 0.108386375), (-0.18023996, -0.98078525, 0.074657835), (-0.35355338, -0.9238795, 0.14644662), (-0.35355338, -0.9238795, 0.14644662), (-0.18023996, -0.98078525, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.37533027, -0.9238795, 0.074657835), (-0.37533027, -0.9238795, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.19509032, -0.98078525, 0), (-0.38268343, -0.9238795, 0), (-0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (-2.220446e-16, -1, -5.551115e-17), (-0.19134171, -0.98078525, -0.038060233), (-0.19134171, -0.98078525, -0.038060233), (-2.220446e-16, -1, -5.551115e-17), (-2.220446e-16, -1, -1.110223e-16), (-0.18023996, -0.98078525, -0.074657835), (-0.18023996, -0.98078525, -0.074657835), (-2.220446e-16, -1, -1.110223e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.16221167, -0.98078525, -0.108386375), (-0.16221167, -0.98078525, -0.108386375), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.13794969, -0.98078525, -0.13794969), (-0.13794969, -0.98078525, -0.13794969), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.108386375, -0.98078525, -0.16221167), (-0.108386375, -0.98078525, -0.16221167), (-2.220446e-16, -1, -2.220446e-16), (-1.110223e-16, -1, -2.220446e-16), (-0.074657835, -0.98078525, -0.18023996), (-0.074657835, -0.98078525, -0.18023996), (-1.110223e-16, -1, -2.220446e-16), (-5.551115e-17, -1, -2.220446e-16), (-0.038060233, -0.98078525, -0.19134171), (-0.038060233, -0.98078525, -0.19134171), (-5.551115e-17, -1, -2.220446e-16), (-2.4651903e-32, -1, -2.220446e-16), (-1.1945837e-17, -0.98078525, -0.19509032), (-1.1945837e-17, -0.98078525, -0.19509032), (-2.4651903e-32, -1, -2.220446e-16), (5.551115e-17, -1, -2.220446e-16), (0.038060233, -0.98078525, -0.19134171), (0.038060233, -0.98078525, -0.19134171), (5.551115e-17, -1, -2.220446e-16), (1.110223e-16, -1, -2.220446e-16), (0.074657835, -0.98078525, -0.18023996), (0.074657835, -0.98078525, -0.18023996), (1.110223e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.108386375, -0.98078525, -0.16221167), (0.108386375, -0.98078525, -0.16221167), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.13794969, -0.98078525, -0.13794969), (0.13794969, -0.98078525, -0.13794969), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.16221167, -0.98078525, -0.108386375), (0.16221167, -0.98078525, -0.108386375), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -1.110223e-16), (0.18023996, -0.98078525, -0.074657835), (0.18023996, -0.98078525, -0.074657835), (2.220446e-16, -1, -1.110223e-16), (2.220446e-16, -1, -5.551115e-17), (0.19134171, -0.98078525, -0.038060233), (0.19134171, -0.98078525, -0.038060233), (2.220446e-16, -1, -5.551115e-17), (2.220446e-16, -1, -4.9303807e-32), (0.19509032, -0.98078525, -2.3891674e-17), (0.19509032, -0.98078525, -2.3891674e-17), (2.220446e-16, -1, -4.9303807e-32), (2.220446e-16, -1, 5.551115e-17), (0.19134171, -0.98078525, 0.038060233), (0.19134171, -0.98078525, 0.038060233), (2.220446e-16, -1, 5.551115e-17), (2.220446e-16, -1, 1.110223e-16), (0.18023996, -0.98078525, 0.074657835), (0.18023996, -0.98078525, 0.074657835), (2.220446e-16, -1, 1.110223e-16), (2.220446e-16, -1, 2.220446e-16), (0.16221167, -0.98078525, 0.108386375), (0.16221167, -0.98078525, 0.108386375), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (0.13794969, -0.98078525, 0.13794969), (0.13794969, -0.98078525, 0.13794969), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (0.108386375, -0.98078525, 0.16221167), (0.108386375, -0.98078525, 0.16221167), (2.220446e-16, -1, 2.220446e-16), (1.110223e-16, -1, 2.220446e-16), (0.074657835, -0.98078525, 0.18023996), (0.074657835, -0.98078525, 0.18023996), (1.110223e-16, -1, 2.220446e-16), (5.551115e-17, -1, 2.220446e-16), (0.038060233, -0.98078525, 0.19134171), (0.038060233, -0.98078525, 0.19134171), (5.551115e-17, -1, 2.220446e-16), (4.9303807e-32, -1, 2.220446e-16), (3.583751e-17, -0.98078525, 0.19509032), (3.583751e-17, -0.98078525, 0.19509032), (4.9303807e-32, -1, 2.220446e-16), (-5.551115e-17, -1, 2.220446e-16), (-0.038060233, -0.98078525, 0.19134171), (-0.038060233, -0.98078525, 0.19134171), (-5.551115e-17, -1, 2.220446e-16), (-1.110223e-16, -1, 2.220446e-16), (-0.074657835, -0.98078525, 0.18023996), (-0.074657835, -0.98078525, 0.18023996), (-1.110223e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.108386375, -0.98078525, 0.16221167), (-0.108386375, -0.98078525, 0.16221167), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.13794969, -0.98078525, 0.13794969), (-0.13794969, -0.98078525, 0.13794969), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.16221167, -0.98078525, 0.108386375), (-0.16221167, -0.98078525, 0.108386375), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 1.110223e-16), (-0.18023996, -0.98078525, 0.074657835), (-0.18023996, -0.98078525, 0.074657835), (-2.220446e-16, -1, 1.110223e-16), (-2.220446e-16, -1, 5.551115e-17), (-0.19134171, -0.98078525, 0.038060233), (-0.19134171, -0.98078525, 0.038060233), (-2.220446e-16, -1, 5.551115e-17), (-2.220446e-16, -1, 0), (-0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (0.19509032, -0.98078525, 0), (0.19134171, -0.98078525, 0.038060233), (-2.220446e-16, -1, -5.551115e-17), (-2.220446e-16, -1, -5.551115e-17), (0.19134171, -0.98078525, 0.038060233), (0.18023996, -0.98078525, 0.074657835), (-2.220446e-16, -1, -1.110223e-16), (-2.220446e-16, -1, -1.110223e-16), (0.18023996, -0.98078525, 0.074657835), (0.16221167, -0.98078525, 0.108386375), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.16221167, -0.98078525, 0.108386375), (0.13794969, -0.98078525, 0.13794969), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.13794969, -0.98078525, 0.13794969), (0.108386375, -0.98078525, 0.16221167), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.108386375, -0.98078525, 0.16221167), (0.074657835, -0.98078525, 0.18023996), (-1.110223e-16, -1, -2.220446e-16), (-1.110223e-16, -1, -2.220446e-16), (0.074657835, -0.98078525, 0.18023996), (0.038060233, -0.98078525, 0.19134171), (-5.551115e-17, -1, -2.220446e-16), (-5.551115e-17, -1, -2.220446e-16), (0.038060233, -0.98078525, 0.19134171), (1.1945837e-17, -0.98078525, 0.19509032), (-2.4651903e-32, -1, -2.220446e-16), (-2.4651903e-32, -1, -2.220446e-16), (1.1945837e-17, -0.98078525, 0.19509032), (-0.038060233, -0.98078525, 0.19134171), (5.551115e-17, -1, -2.220446e-16), (5.551115e-17, -1, -2.220446e-16), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.98078525, 0.18023996), (1.110223e-16, -1, -2.220446e-16), (1.110223e-16, -1, -2.220446e-16), (-0.074657835, -0.98078525, 0.18023996), (-0.108386375, -0.98078525, 0.16221167), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.108386375, -0.98078525, 0.16221167), (-0.13794969, -0.98078525, 0.13794969), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.13794969, -0.98078525, 0.13794969), (-0.16221167, -0.98078525, 0.108386375), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.16221167, -0.98078525, 0.108386375), (-0.18023996, -0.98078525, 0.074657835), (2.220446e-16, -1, -1.110223e-16), (2.220446e-16, -1, -1.110223e-16), (-0.18023996, -0.98078525, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (2.220446e-16, -1, -5.551115e-17), (2.220446e-16, -1, -5.551115e-17), (-0.19134171, -0.98078525, 0.038060233), (-0.19509032, -0.98078525, 2.3891674e-17), (2.220446e-16, -1, -4.9303807e-32), (2.220446e-16, -1, -4.9303807e-32), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.19134171, -0.98078525, -0.038060233), (2.220446e-16, -1, 5.551115e-17), (2.220446e-16, -1, 5.551115e-17), (-0.19134171, -0.98078525, -0.038060233), (-0.18023996, -0.98078525, -0.074657835), (2.220446e-16, -1, 1.110223e-16), (2.220446e-16, -1, 1.110223e-16), (-0.18023996, -0.98078525, -0.074657835), (-0.16221167, -0.98078525, -0.108386375), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.16221167, -0.98078525, -0.108386375), (-0.13794969, -0.98078525, -0.13794969), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.13794969, -0.98078525, -0.13794969), (-0.108386375, -0.98078525, -0.16221167), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.108386375, -0.98078525, -0.16221167), (-0.074657835, -0.98078525, -0.18023996), (1.110223e-16, -1, 2.220446e-16), (1.110223e-16, -1, 2.220446e-16), (-0.074657835, -0.98078525, -0.18023996), (-0.038060233, -0.98078525, -0.19134171), (5.551115e-17, -1, 2.220446e-16), (5.551115e-17, -1, 2.220446e-16), (-0.038060233, -0.98078525, -0.19134171), (-3.583751e-17, -0.98078525, -0.19509032), (4.9303807e-32, -1, 2.220446e-16), (4.9303807e-32, -1, 2.220446e-16), (-3.583751e-17, -0.98078525, -0.19509032), (0.038060233, -0.98078525, -0.19134171), (-5.551115e-17, -1, 2.220446e-16), (-5.551115e-17, -1, 2.220446e-16), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.98078525, -0.18023996), (-1.110223e-16, -1, 2.220446e-16), (-1.110223e-16, -1, 2.220446e-16), (0.074657835, -0.98078525, -0.18023996), (0.108386375, -0.98078525, -0.16221167), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.108386375, -0.98078525, -0.16221167), (0.13794969, -0.98078525, -0.13794969), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.13794969, -0.98078525, -0.13794969), (0.16221167, -0.98078525, -0.108386375), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.16221167, -0.98078525, -0.108386375), (0.18023996, -0.98078525, -0.074657835), (-2.220446e-16, -1, 1.110223e-16), (-2.220446e-16, -1, 1.110223e-16), (0.18023996, -0.98078525, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (-2.220446e-16, -1, 5.551115e-17), (-2.220446e-16, -1, 5.551115e-17), (0.19134171, -0.98078525, -0.038060233), (0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (0.19509032, -0.98078525, 0), (0.38268343, -0.9238795, 0), (0.37533027, -0.9238795, 0.074657835), (0.19134171, -0.98078525, 0.038060233), (0.19134171, -0.98078525, 0.038060233), (0.37533027, -0.9238795, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.18023996, -0.98078525, 0.074657835), (0.18023996, -0.98078525, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.31818965, -0.9238795, 0.21260752), (0.16221167, -0.98078525, 0.108386375), (0.16221167, -0.98078525, 0.108386375), (0.31818965, -0.9238795, 0.21260752), (0.27059805, -0.9238795, 0.27059805), (0.13794969, -0.98078525, 0.13794969), (0.13794969, -0.98078525, 0.13794969), (0.27059805, -0.9238795, 0.27059805), (0.21260752, -0.9238795, 0.31818965), (0.108386375, -0.98078525, 0.16221167), (0.108386375, -0.98078525, 0.16221167), (0.21260752, -0.9238795, 0.31818965), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.98078525, 0.18023996), (0.074657835, -0.98078525, 0.18023996), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.9238795, 0.37533027), (0.038060233, -0.98078525, 0.19134171), (0.038060233, -0.98078525, 0.19134171), (0.074657835, -0.9238795, 0.37533027), (2.3432602e-17, -0.9238795, 0.38268343), (1.1945837e-17, -0.98078525, 0.19509032), (1.1945837e-17, -0.98078525, 0.19509032), (2.3432602e-17, -0.9238795, 0.38268343), (-0.074657835, -0.9238795, 0.37533027), (-0.038060233, -0.98078525, 0.19134171), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.9238795, 0.37533027), (-0.14644662, -0.9238795, 0.35355338), (-0.074657835, -0.98078525, 0.18023996), (-0.074657835, -0.98078525, 0.18023996), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.9238795, 0.31818965), (-0.108386375, -0.98078525, 0.16221167), (-0.108386375, -0.98078525, 0.16221167), (-0.21260752, -0.9238795, 0.31818965), (-0.27059805, -0.9238795, 0.27059805), (-0.13794969, -0.98078525, 0.13794969), (-0.13794969, -0.98078525, 0.13794969), (-0.27059805, -0.9238795, 0.27059805), (-0.31818965, -0.9238795, 0.21260752), (-0.16221167, -0.98078525, 0.108386375), (-0.16221167, -0.98078525, 0.108386375), (-0.31818965, -0.9238795, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.18023996, -0.98078525, 0.074657835), (-0.18023996, -0.98078525, 0.074657835), (-0.35355338, -0.9238795, 0.14644662), (-0.37533027, -0.9238795, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.19134171, -0.98078525, 0.038060233), (-0.37533027, -0.9238795, 0.074657835), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.37533027, -0.9238795, -0.074657835), (-0.19134171, -0.98078525, -0.038060233), (-0.19134171, -0.98078525, -0.038060233), (-0.37533027, -0.9238795, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.18023996, -0.98078525, -0.074657835), (-0.18023996, -0.98078525, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.31818965, -0.9238795, -0.21260752), (-0.16221167, -0.98078525, -0.108386375), (-0.16221167, -0.98078525, -0.108386375), (-0.31818965, -0.9238795, -0.21260752), (-0.27059805, -0.9238795, -0.27059805), (-0.13794969, -0.98078525, -0.13794969), (-0.13794969, -0.98078525, -0.13794969), (-0.27059805, -0.9238795, -0.27059805), (-0.21260752, -0.9238795, -0.31818965), (-0.108386375, -0.98078525, -0.16221167), (-0.108386375, -0.98078525, -0.16221167), (-0.21260752, -0.9238795, -0.31818965), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.98078525, -0.18023996), (-0.074657835, -0.98078525, -0.18023996), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.9238795, -0.37533027), (-0.038060233, -0.98078525, -0.19134171), (-0.038060233, -0.98078525, -0.19134171), (-0.074657835, -0.9238795, -0.37533027), (-7.0297805e-17, -0.9238795, -0.38268343), (-3.583751e-17, -0.98078525, -0.19509032), (-3.583751e-17, -0.98078525, -0.19509032), (-7.0297805e-17, -0.9238795, -0.38268343), (0.074657835, -0.9238795, -0.37533027), (0.038060233, -0.98078525, -0.19134171), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.9238795, -0.37533027), (0.14644662, -0.9238795, -0.35355338), (0.074657835, -0.98078525, -0.18023996), (0.074657835, -0.98078525, -0.18023996), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.9238795, -0.31818965), (0.108386375, -0.98078525, -0.16221167), (0.108386375, -0.98078525, -0.16221167), (0.21260752, -0.9238795, -0.31818965), (0.27059805, -0.9238795, -0.27059805), (0.13794969, -0.98078525, -0.13794969), (0.13794969, -0.98078525, -0.13794969), (0.27059805, -0.9238795, -0.27059805), (0.31818965, -0.9238795, -0.21260752), (0.16221167, -0.98078525, -0.108386375), (0.16221167, -0.98078525, -0.108386375), (0.31818965, -0.9238795, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.18023996, -0.98078525, -0.074657835), (0.18023996, -0.98078525, -0.074657835), (0.35355338, -0.9238795, -0.14644662), (0.37533027, -0.9238795, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.19134171, -0.98078525, -0.038060233), (0.37533027, -0.9238795, -0.074657835), (0.38268343, -0.9238795, 0), (0.19509032, -0.98078525, 0), (0.38268343, -0.9238795, 0), (0.55557024, -0.8314696, 0), (0.5448951, -0.8314696, 0.108386375), (0.37533027, -0.9238795, 0.074657835), (0.37533027, -0.9238795, 0.074657835), (0.5448951, -0.8314696, 0.108386375), (0.51328, -0.8314696, 0.21260752), (0.35355338, -0.9238795, 0.14644662), (0.35355338, -0.9238795, 0.14644662), (0.51328, -0.8314696, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.31818965, -0.9238795, 0.21260752), (0.31818965, -0.9238795, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.39284748, -0.8314696, 0.39284748), (0.27059805, -0.9238795, 0.27059805), (0.27059805, -0.9238795, 0.27059805), (0.39284748, -0.8314696, 0.39284748), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.9238795, 0.31818965), (0.21260752, -0.9238795, 0.31818965), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.8314696, 0.51328), (0.14644662, -0.9238795, 0.35355338), (0.14644662, -0.9238795, 0.35355338), (0.21260752, -0.8314696, 0.51328), (0.108386375, -0.8314696, 0.5448951), (0.074657835, -0.9238795, 0.37533027), (0.074657835, -0.9238795, 0.37533027), (0.108386375, -0.8314696, 0.5448951), (3.4018865e-17, -0.8314696, 0.55557024), (2.3432602e-17, -0.9238795, 0.38268343), (2.3432602e-17, -0.9238795, 0.38268343), (3.4018865e-17, -0.8314696, 0.55557024), (-0.108386375, -0.8314696, 0.5448951), (-0.074657835, -0.9238795, 0.37533027), (-0.074657835, -0.9238795, 0.37533027), (-0.108386375, -0.8314696, 0.5448951), (-0.21260752, -0.8314696, 0.51328), (-0.14644662, -0.9238795, 0.35355338), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.8314696, 0.51328), (-0.30865827, -0.8314696, 0.46193975), (-0.21260752, -0.9238795, 0.31818965), (-0.21260752, -0.9238795, 0.31818965), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.8314696, 0.39284748), (-0.27059805, -0.9238795, 0.27059805), (-0.27059805, -0.9238795, 0.27059805), (-0.39284748, -0.8314696, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.31818965, -0.9238795, 0.21260752), (-0.31818965, -0.9238795, 0.21260752), (-0.46193975, -0.8314696, 0.30865827), (-0.51328, -0.8314696, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.35355338, -0.9238795, 0.14644662), (-0.51328, -0.8314696, 0.21260752), (-0.5448951, -0.8314696, 0.108386375), (-0.37533027, -0.9238795, 0.074657835), (-0.37533027, -0.9238795, 0.074657835), (-0.5448951, -0.8314696, 0.108386375), (-0.55557024, -0.8314696, 6.803773e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.5448951, -0.8314696, -0.108386375), (-0.37533027, -0.9238795, -0.074657835), (-0.37533027, -0.9238795, -0.074657835), (-0.5448951, -0.8314696, -0.108386375), (-0.51328, -0.8314696, -0.21260752), (-0.35355338, -0.9238795, -0.14644662), (-0.35355338, -0.9238795, -0.14644662), (-0.51328, -0.8314696, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.31818965, -0.9238795, -0.21260752), (-0.31818965, -0.9238795, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.39284748, -0.8314696, -0.39284748), (-0.27059805, -0.9238795, -0.27059805), (-0.27059805, -0.9238795, -0.27059805), (-0.39284748, -0.8314696, -0.39284748), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.9238795, -0.31818965), (-0.21260752, -0.9238795, -0.31818965), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.8314696, -0.51328), (-0.14644662, -0.9238795, -0.35355338), (-0.14644662, -0.9238795, -0.35355338), (-0.21260752, -0.8314696, -0.51328), (-0.108386375, -0.8314696, -0.5448951), (-0.074657835, -0.9238795, -0.37533027), (-0.074657835, -0.9238795, -0.37533027), (-0.108386375, -0.8314696, -0.5448951), (-1.020566e-16, -0.8314696, -0.55557024), (-7.0297805e-17, -0.9238795, -0.38268343), (-7.0297805e-17, -0.9238795, -0.38268343), (-1.020566e-16, -0.8314696, -0.55557024), (0.108386375, -0.8314696, -0.5448951), (0.074657835, -0.9238795, -0.37533027), (0.074657835, -0.9238795, -0.37533027), (0.108386375, -0.8314696, -0.5448951), (0.21260752, -0.8314696, -0.51328), (0.14644662, -0.9238795, -0.35355338), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.8314696, -0.51328), (0.30865827, -0.8314696, -0.46193975), (0.21260752, -0.9238795, -0.31818965), (0.21260752, -0.9238795, -0.31818965), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.8314696, -0.39284748), (0.27059805, -0.9238795, -0.27059805), (0.27059805, -0.9238795, -0.27059805), (0.39284748, -0.8314696, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.31818965, -0.9238795, -0.21260752), (0.31818965, -0.9238795, -0.21260752), (0.46193975, -0.8314696, -0.30865827), (0.51328, -0.8314696, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.35355338, -0.9238795, -0.14644662), (0.51328, -0.8314696, -0.21260752), (0.5448951, -0.8314696, -0.108386375), (0.37533027, -0.9238795, -0.074657835), (0.37533027, -0.9238795, -0.074657835), (0.5448951, -0.8314696, -0.108386375), (0.55557024, -0.8314696, 0), (0.38268343, -0.9238795, 0), (0.55557024, -0.8314696, 0), (0.70710677, -0.70710677, 0), (0.69351995, -0.70710677, 0.13794969), (0.5448951, -0.8314696, 0.108386375), (0.5448951, -0.8314696, 0.108386375), (0.69351995, -0.70710677, 0.13794969), (0.6532815, -0.70710677, 0.27059805), (0.51328, -0.8314696, 0.21260752), (0.51328, -0.8314696, 0.21260752), (0.6532815, -0.70710677, 0.27059805), (0.5879378, -0.70710677, 0.39284748), (0.46193975, -0.8314696, 0.30865827), (0.46193975, -0.8314696, 0.30865827), (0.5879378, -0.70710677, 0.39284748), (0.5, -0.70710677, 0.5), (0.39284748, -0.8314696, 0.39284748), (0.39284748, -0.8314696, 0.39284748), (0.5, -0.70710677, 0.5), (0.39284748, -0.70710677, 0.5879378), (0.30865827, -0.8314696, 0.46193975), (0.30865827, -0.8314696, 0.46193975), (0.39284748, -0.70710677, 0.5879378), (0.27059805, -0.70710677, 0.6532815), (0.21260752, -0.8314696, 0.51328), (0.21260752, -0.8314696, 0.51328), (0.27059805, -0.70710677, 0.6532815), (0.13794969, -0.70710677, 0.69351995), (0.108386375, -0.8314696, 0.5448951), (0.108386375, -0.8314696, 0.5448951), (0.13794969, -0.70710677, 0.69351995), (4.3297803e-17, -0.70710677, 0.70710677), (3.4018865e-17, -0.8314696, 0.55557024), (3.4018865e-17, -0.8314696, 0.55557024), (4.3297803e-17, -0.70710677, 0.70710677), (-0.13794969, -0.70710677, 0.69351995), (-0.108386375, -0.8314696, 0.5448951), (-0.108386375, -0.8314696, 0.5448951), (-0.13794969, -0.70710677, 0.69351995), (-0.27059805, -0.70710677, 0.6532815), (-0.21260752, -0.8314696, 0.51328), (-0.21260752, -0.8314696, 0.51328), (-0.27059805, -0.70710677, 0.6532815), (-0.39284748, -0.70710677, 0.5879378), (-0.30865827, -0.8314696, 0.46193975), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.70710677, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.39284748, -0.8314696, 0.39284748), (-0.39284748, -0.8314696, 0.39284748), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.70710677, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.46193975, -0.8314696, 0.30865827), (-0.5879378, -0.70710677, 0.39284748), (-0.6532815, -0.70710677, 0.27059805), (-0.51328, -0.8314696, 0.21260752), (-0.51328, -0.8314696, 0.21260752), (-0.6532815, -0.70710677, 0.27059805), (-0.69351995, -0.70710677, 0.13794969), (-0.5448951, -0.8314696, 0.108386375), (-0.5448951, -0.8314696, 0.108386375), (-0.69351995, -0.70710677, 0.13794969), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.69351995, -0.70710677, -0.13794969), (-0.5448951, -0.8314696, -0.108386375), (-0.5448951, -0.8314696, -0.108386375), (-0.69351995, -0.70710677, -0.13794969), (-0.6532815, -0.70710677, -0.27059805), (-0.51328, -0.8314696, -0.21260752), (-0.51328, -0.8314696, -0.21260752), (-0.6532815, -0.70710677, -0.27059805), (-0.5879378, -0.70710677, -0.39284748), (-0.46193975, -0.8314696, -0.30865827), (-0.46193975, -0.8314696, -0.30865827), (-0.5879378, -0.70710677, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.8314696, -0.39284748), (-0.39284748, -0.8314696, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.70710677, -0.5879378), (-0.30865827, -0.8314696, -0.46193975), (-0.30865827, -0.8314696, -0.46193975), (-0.39284748, -0.70710677, -0.5879378), (-0.27059805, -0.70710677, -0.6532815), (-0.21260752, -0.8314696, -0.51328), (-0.21260752, -0.8314696, -0.51328), (-0.27059805, -0.70710677, -0.6532815), (-0.13794969, -0.70710677, -0.69351995), (-0.108386375, -0.8314696, -0.5448951), (-0.108386375, -0.8314696, -0.5448951), (-0.13794969, -0.70710677, -0.69351995), (-1.298934e-16, -0.70710677, -0.70710677), (-1.020566e-16, -0.8314696, -0.55557024), (-1.020566e-16, -0.8314696, -0.55557024), (-1.298934e-16, -0.70710677, -0.70710677), (0.13794969, -0.70710677, -0.69351995), (0.108386375, -0.8314696, -0.5448951), (0.108386375, -0.8314696, -0.5448951), (0.13794969, -0.70710677, -0.69351995), (0.27059805, -0.70710677, -0.6532815), (0.21260752, -0.8314696, -0.51328), (0.21260752, -0.8314696, -0.51328), (0.27059805, -0.70710677, -0.6532815), (0.39284748, -0.70710677, -0.5879378), (0.30865827, -0.8314696, -0.46193975), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.70710677, -0.5879378), (0.5, -0.70710677, -0.5), (0.39284748, -0.8314696, -0.39284748), (0.39284748, -0.8314696, -0.39284748), (0.5, -0.70710677, -0.5), (0.5879378, -0.70710677, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.46193975, -0.8314696, -0.30865827), (0.5879378, -0.70710677, -0.39284748), (0.6532815, -0.70710677, -0.27059805), (0.51328, -0.8314696, -0.21260752), (0.51328, -0.8314696, -0.21260752), (0.6532815, -0.70710677, -0.27059805), (0.69351995, -0.70710677, -0.13794969), (0.5448951, -0.8314696, -0.108386375), (0.5448951, -0.8314696, -0.108386375), (0.69351995, -0.70710677, -0.13794969), (0.70710677, -0.70710677, 0), (0.55557024, -0.8314696, 0), (0.70710677, -0.70710677, 0), (0.8314696, -0.55557024, 0), (0.81549317, -0.55557024, 0.16221167), (0.69351995, -0.70710677, 0.13794969), (0.69351995, -0.70710677, 0.13794969), (0.81549317, -0.55557024, 0.16221167), (0.76817775, -0.55557024, 0.31818965), (0.6532815, -0.70710677, 0.27059805), (0.6532815, -0.70710677, 0.27059805), (0.76817775, -0.55557024, 0.31818965), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.70710677, 0.39284748), (0.5879378, -0.70710677, 0.39284748), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.55557024, 0.5879378), (0.5, -0.70710677, 0.5), (0.5, -0.70710677, 0.5), (0.5879378, -0.55557024, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.39284748, -0.70710677, 0.5879378), (0.39284748, -0.70710677, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.31818965, -0.55557024, 0.76817775), (0.27059805, -0.70710677, 0.6532815), (0.27059805, -0.70710677, 0.6532815), (0.31818965, -0.55557024, 0.76817775), (0.16221167, -0.55557024, 0.81549317), (0.13794969, -0.70710677, 0.69351995), (0.13794969, -0.70710677, 0.69351995), (0.16221167, -0.55557024, 0.81549317), (5.091283e-17, -0.55557024, 0.8314696), (4.3297803e-17, -0.70710677, 0.70710677), (4.3297803e-17, -0.70710677, 0.70710677), (5.091283e-17, -0.55557024, 0.8314696), (-0.16221167, -0.55557024, 0.81549317), (-0.13794969, -0.70710677, 0.69351995), (-0.13794969, -0.70710677, 0.69351995), (-0.16221167, -0.55557024, 0.81549317), (-0.31818965, -0.55557024, 0.76817775), (-0.27059805, -0.70710677, 0.6532815), (-0.27059805, -0.70710677, 0.6532815), (-0.31818965, -0.55557024, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.39284748, -0.70710677, 0.5879378), (-0.39284748, -0.70710677, 0.5879378), (-0.46193975, -0.55557024, 0.6913417), (-0.5879378, -0.55557024, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.55557024, 0.5879378), (-0.6913417, -0.55557024, 0.46193975), (-0.5879378, -0.70710677, 0.39284748), (-0.5879378, -0.70710677, 0.39284748), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.55557024, 0.31818965), (-0.6532815, -0.70710677, 0.27059805), (-0.6532815, -0.70710677, 0.27059805), (-0.76817775, -0.55557024, 0.31818965), (-0.81549317, -0.55557024, 0.16221167), (-0.69351995, -0.70710677, 0.13794969), (-0.69351995, -0.70710677, 0.13794969), (-0.81549317, -0.55557024, 0.16221167), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.81549317, -0.55557024, -0.16221167), (-0.69351995, -0.70710677, -0.13794969), (-0.69351995, -0.70710677, -0.13794969), (-0.81549317, -0.55557024, -0.16221167), (-0.76817775, -0.55557024, -0.31818965), (-0.6532815, -0.70710677, -0.27059805), (-0.6532815, -0.70710677, -0.27059805), (-0.76817775, -0.55557024, -0.31818965), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.70710677, -0.39284748), (-0.5879378, -0.70710677, -0.39284748), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.55557024, -0.5879378), (-0.5, -0.70710677, -0.5), (-0.5, -0.70710677, -0.5), (-0.5879378, -0.55557024, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.39284748, -0.70710677, -0.5879378), (-0.39284748, -0.70710677, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.31818965, -0.55557024, -0.76817775), (-0.27059805, -0.70710677, -0.6532815), (-0.27059805, -0.70710677, -0.6532815), (-0.31818965, -0.55557024, -0.76817775), (-0.16221167, -0.55557024, -0.81549317), (-0.13794969, -0.70710677, -0.69351995), (-0.13794969, -0.70710677, -0.69351995), (-0.16221167, -0.55557024, -0.81549317), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.298934e-16, -0.70710677, -0.70710677), (-1.298934e-16, -0.70710677, -0.70710677), (-1.5273849e-16, -0.55557024, -0.8314696), (0.16221167, -0.55557024, -0.81549317), (0.13794969, -0.70710677, -0.69351995), (0.13794969, -0.70710677, -0.69351995), (0.16221167, -0.55557024, -0.81549317), (0.31818965, -0.55557024, -0.76817775), (0.27059805, -0.70710677, -0.6532815), (0.27059805, -0.70710677, -0.6532815), (0.31818965, -0.55557024, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.39284748, -0.70710677, -0.5879378), (0.39284748, -0.70710677, -0.5879378), (0.46193975, -0.55557024, -0.6913417), (0.5879378, -0.55557024, -0.5879378), (0.5, -0.70710677, -0.5), (0.5, -0.70710677, -0.5), (0.5879378, -0.55557024, -0.5879378), (0.6913417, -0.55557024, -0.46193975), (0.5879378, -0.70710677, -0.39284748), (0.5879378, -0.70710677, -0.39284748), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.55557024, -0.31818965), (0.6532815, -0.70710677, -0.27059805), (0.6532815, -0.70710677, -0.27059805), (0.76817775, -0.55557024, -0.31818965), (0.81549317, -0.55557024, -0.16221167), (0.69351995, -0.70710677, -0.13794969), (0.69351995, -0.70710677, -0.13794969), (0.81549317, -0.55557024, -0.16221167), (0.8314696, -0.55557024, 0), (0.70710677, -0.70710677, 0), (0.8314696, -0.55557024, 0), (0.9238795, -0.38268343, 0), (0.90612745, -0.38268343, 0.18023996), (0.81549317, -0.55557024, 0.16221167), (0.81549317, -0.55557024, 0.16221167), (0.90612745, -0.38268343, 0.18023996), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.55557024, 0.31818965), (0.76817775, -0.55557024, 0.31818965), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.38268343, 0.51328), (0.6913417, -0.55557024, 0.46193975), (0.6913417, -0.55557024, 0.46193975), (0.76817775, -0.38268343, 0.51328), (0.6532815, -0.38268343, 0.6532815), (0.5879378, -0.55557024, 0.5879378), (0.5879378, -0.55557024, 0.5879378), (0.6532815, -0.38268343, 0.6532815), (0.51328, -0.38268343, 0.76817775), (0.46193975, -0.55557024, 0.6913417), (0.46193975, -0.55557024, 0.6913417), (0.51328, -0.38268343, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.31818965, -0.55557024, 0.76817775), (0.31818965, -0.55557024, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.18023996, -0.38268343, 0.90612745), (0.16221167, -0.55557024, 0.81549317), (0.16221167, -0.55557024, 0.81549317), (0.18023996, -0.38268343, 0.90612745), (5.6571306e-17, -0.38268343, 0.9238795), (5.091283e-17, -0.55557024, 0.8314696), (5.091283e-17, -0.55557024, 0.8314696), (5.6571306e-17, -0.38268343, 0.9238795), (-0.18023996, -0.38268343, 0.90612745), (-0.16221167, -0.55557024, 0.81549317), (-0.16221167, -0.55557024, 0.81549317), (-0.18023996, -0.38268343, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.31818965, -0.55557024, 0.76817775), (-0.31818965, -0.55557024, 0.76817775), (-0.35355338, -0.38268343, 0.8535534), (-0.51328, -0.38268343, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.46193975, -0.55557024, 0.6913417), (-0.51328, -0.38268343, 0.76817775), (-0.6532815, -0.38268343, 0.6532815), (-0.5879378, -0.55557024, 0.5879378), (-0.5879378, -0.55557024, 0.5879378), (-0.6532815, -0.38268343, 0.6532815), (-0.76817775, -0.38268343, 0.51328), (-0.6913417, -0.55557024, 0.46193975), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.38268343, 0.51328), (-0.8535534, -0.38268343, 0.35355338), (-0.76817775, -0.55557024, 0.31818965), (-0.76817775, -0.55557024, 0.31818965), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.38268343, 0.18023996), (-0.81549317, -0.55557024, 0.16221167), (-0.81549317, -0.55557024, 0.16221167), (-0.90612745, -0.38268343, 0.18023996), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.90612745, -0.38268343, -0.18023996), (-0.81549317, -0.55557024, -0.16221167), (-0.81549317, -0.55557024, -0.16221167), (-0.90612745, -0.38268343, -0.18023996), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.55557024, -0.31818965), (-0.76817775, -0.55557024, -0.31818965), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.38268343, -0.51328), (-0.6913417, -0.55557024, -0.46193975), (-0.6913417, -0.55557024, -0.46193975), (-0.76817775, -0.38268343, -0.51328), (-0.6532815, -0.38268343, -0.6532815), (-0.5879378, -0.55557024, -0.5879378), (-0.5879378, -0.55557024, -0.5879378), (-0.6532815, -0.38268343, -0.6532815), (-0.51328, -0.38268343, -0.76817775), (-0.46193975, -0.55557024, -0.6913417), (-0.46193975, -0.55557024, -0.6913417), (-0.51328, -0.38268343, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.31818965, -0.55557024, -0.76817775), (-0.31818965, -0.55557024, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.18023996, -0.38268343, -0.90612745), (-0.16221167, -0.55557024, -0.81549317), (-0.16221167, -0.55557024, -0.81549317), (-0.18023996, -0.38268343, -0.90612745), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.6971392e-16, -0.38268343, -0.9238795), (0.18023996, -0.38268343, -0.90612745), (0.16221167, -0.55557024, -0.81549317), (0.16221167, -0.55557024, -0.81549317), (0.18023996, -0.38268343, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.31818965, -0.55557024, -0.76817775), (0.31818965, -0.55557024, -0.76817775), (0.35355338, -0.38268343, -0.8535534), (0.51328, -0.38268343, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.46193975, -0.55557024, -0.6913417), (0.51328, -0.38268343, -0.76817775), (0.6532815, -0.38268343, -0.6532815), (0.5879378, -0.55557024, -0.5879378), (0.5879378, -0.55557024, -0.5879378), (0.6532815, -0.38268343, -0.6532815), (0.76817775, -0.38268343, -0.51328), (0.6913417, -0.55557024, -0.46193975), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.38268343, -0.51328), (0.8535534, -0.38268343, -0.35355338), (0.76817775, -0.55557024, -0.31818965), (0.76817775, -0.55557024, -0.31818965), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.38268343, -0.18023996), (0.81549317, -0.55557024, -0.16221167), (0.81549317, -0.55557024, -0.16221167), (0.90612745, -0.38268343, -0.18023996), (0.9238795, -0.38268343, 0), (0.8314696, -0.55557024, 0), (0.9238795, -0.38268343, 0), (0.98078525, -0.19509032, 0), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.38268343, 0.18023996), (0.90612745, -0.38268343, 0.18023996), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.19509032, 0.37533027), (0.8535534, -0.38268343, 0.35355338), (0.8535534, -0.38268343, 0.35355338), (0.90612745, -0.19509032, 0.37533027), (0.81549317, -0.19509032, 0.5448951), (0.76817775, -0.38268343, 0.51328), (0.76817775, -0.38268343, 0.51328), (0.81549317, -0.19509032, 0.5448951), (0.69351995, -0.19509032, 0.69351995), (0.6532815, -0.38268343, 0.6532815), (0.6532815, -0.38268343, 0.6532815), (0.69351995, -0.19509032, 0.69351995), (0.5448951, -0.19509032, 0.81549317), (0.51328, -0.38268343, 0.76817775), (0.51328, -0.38268343, 0.76817775), (0.5448951, -0.19509032, 0.81549317), (0.37533027, -0.19509032, 0.90612745), (0.35355338, -0.38268343, 0.8535534), (0.35355338, -0.38268343, 0.8535534), (0.37533027, -0.19509032, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.18023996, -0.38268343, 0.90612745), (0.18023996, -0.38268343, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (6.005578e-17, -0.19509032, 0.98078525), (5.6571306e-17, -0.38268343, 0.9238795), (5.6571306e-17, -0.38268343, 0.9238795), (6.005578e-17, -0.19509032, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.18023996, -0.38268343, 0.90612745), (-0.18023996, -0.38268343, 0.90612745), (-0.19134171, -0.19509032, 0.96193975), (-0.37533027, -0.19509032, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.35355338, -0.38268343, 0.8535534), (-0.37533027, -0.19509032, 0.90612745), (-0.5448951, -0.19509032, 0.81549317), (-0.51328, -0.38268343, 0.76817775), (-0.51328, -0.38268343, 0.76817775), (-0.5448951, -0.19509032, 0.81549317), (-0.69351995, -0.19509032, 0.69351995), (-0.6532815, -0.38268343, 0.6532815), (-0.6532815, -0.38268343, 0.6532815), (-0.69351995, -0.19509032, 0.69351995), (-0.81549317, -0.19509032, 0.5448951), (-0.76817775, -0.38268343, 0.51328), (-0.76817775, -0.38268343, 0.51328), (-0.81549317, -0.19509032, 0.5448951), (-0.90612745, -0.19509032, 0.37533027), (-0.8535534, -0.38268343, 0.35355338), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.19509032, 0.37533027), (-0.96193975, -0.19509032, 0.19134171), (-0.90612745, -0.38268343, 0.18023996), (-0.90612745, -0.38268343, 0.18023996), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.38268343, -0.18023996), (-0.90612745, -0.38268343, -0.18023996), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.19509032, -0.37533027), (-0.8535534, -0.38268343, -0.35355338), (-0.8535534, -0.38268343, -0.35355338), (-0.90612745, -0.19509032, -0.37533027), (-0.81549317, -0.19509032, -0.5448951), (-0.76817775, -0.38268343, -0.51328), (-0.76817775, -0.38268343, -0.51328), (-0.81549317, -0.19509032, -0.5448951), (-0.69351995, -0.19509032, -0.69351995), (-0.6532815, -0.38268343, -0.6532815), (-0.6532815, -0.38268343, -0.6532815), (-0.69351995, -0.19509032, -0.69351995), (-0.5448951, -0.19509032, -0.81549317), (-0.51328, -0.38268343, -0.76817775), (-0.51328, -0.38268343, -0.76817775), (-0.5448951, -0.19509032, -0.81549317), (-0.37533027, -0.19509032, -0.90612745), (-0.35355338, -0.38268343, -0.8535534), (-0.35355338, -0.38268343, -0.8535534), (-0.37533027, -0.19509032, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.18023996, -0.38268343, -0.90612745), (-0.18023996, -0.38268343, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.8016734e-16, -0.19509032, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.18023996, -0.38268343, -0.90612745), (0.18023996, -0.38268343, -0.90612745), (0.19134171, -0.19509032, -0.96193975), (0.37533027, -0.19509032, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.35355338, -0.38268343, -0.8535534), (0.37533027, -0.19509032, -0.90612745), (0.5448951, -0.19509032, -0.81549317), (0.51328, -0.38268343, -0.76817775), (0.51328, -0.38268343, -0.76817775), (0.5448951, -0.19509032, -0.81549317), (0.69351995, -0.19509032, -0.69351995), (0.6532815, -0.38268343, -0.6532815), (0.6532815, -0.38268343, -0.6532815), (0.69351995, -0.19509032, -0.69351995), (0.81549317, -0.19509032, -0.5448951), (0.76817775, -0.38268343, -0.51328), (0.76817775, -0.38268343, -0.51328), (0.81549317, -0.19509032, -0.5448951), (0.90612745, -0.19509032, -0.37533027), (0.8535534, -0.38268343, -0.35355338), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.19509032, -0.37533027), (0.96193975, -0.19509032, -0.19134171), (0.90612745, -0.38268343, -0.18023996), (0.90612745, -0.38268343, -0.18023996), (0.96193975, -0.19509032, -0.19134171), (0.98078525, -0.19509032, 0), (0.9238795, -0.38268343, 0), (0.98078525, -0.19509032, 0), (1, 0, 0), (0.98078525, 0, 0.19509032), (0.96193975, -0.19509032, 0.19134171), (0.96193975, -0.19509032, 0.19134171), (0.98078525, 0, 0.19509032), (0.9238795, 0, 0.38268343), (0.90612745, -0.19509032, 0.37533027), (0.90612745, -0.19509032, 0.37533027), (0.9238795, 0, 0.38268343), (0.8314696, 0, 0.55557024), (0.81549317, -0.19509032, 0.5448951), (0.81549317, -0.19509032, 0.5448951), (0.8314696, 0, 0.55557024), (0.70710677, 0, 0.70710677), (0.69351995, -0.19509032, 0.69351995), (0.69351995, -0.19509032, 0.69351995), (0.70710677, 0, 0.70710677), (0.55557024, 0, 0.8314696), (0.5448951, -0.19509032, 0.81549317), (0.5448951, -0.19509032, 0.81549317), (0.55557024, 0, 0.8314696), (0.38268343, 0, 0.9238795), (0.37533027, -0.19509032, 0.90612745), (0.37533027, -0.19509032, 0.90612745), (0.38268343, 0, 0.9238795), (0.19509032, 0, 0.98078525), (0.19134171, -0.19509032, 0.96193975), (0.19134171, -0.19509032, 0.96193975), (0.19509032, 0, 0.98078525), (6.123234e-17, 0, 1), (6.005578e-17, -0.19509032, 0.98078525), (6.005578e-17, -0.19509032, 0.98078525), (6.123234e-17, 0, 1), (-0.19509032, 0, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.19134171, -0.19509032, 0.96193975), (-0.19509032, 0, 0.98078525), (-0.38268343, 0, 0.9238795), (-0.37533027, -0.19509032, 0.90612745), (-0.37533027, -0.19509032, 0.90612745), (-0.38268343, 0, 0.9238795), (-0.55557024, 0, 0.8314696), (-0.5448951, -0.19509032, 0.81549317), (-0.5448951, -0.19509032, 0.81549317), (-0.55557024, 0, 0.8314696), (-0.70710677, 0, 0.70710677), (-0.69351995, -0.19509032, 0.69351995), (-0.69351995, -0.19509032, 0.69351995), (-0.70710677, 0, 0.70710677), (-0.8314696, 0, 0.55557024), (-0.81549317, -0.19509032, 0.5448951), (-0.81549317, -0.19509032, 0.5448951), (-0.8314696, 0, 0.55557024), (-0.9238795, 0, 0.38268343), (-0.90612745, -0.19509032, 0.37533027), (-0.90612745, -0.19509032, 0.37533027), (-0.9238795, 0, 0.38268343), (-0.98078525, 0, 0.19509032), (-0.96193975, -0.19509032, 0.19134171), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, 0, 0.19509032), (-1, 0, 1.2246469e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-1, 0, 1.2246469e-16), (-0.98078525, 0, -0.19509032), (-0.96193975, -0.19509032, -0.19134171), (-0.96193975, -0.19509032, -0.19134171), (-0.98078525, 0, -0.19509032), (-0.9238795, 0, -0.38268343), (-0.90612745, -0.19509032, -0.37533027), (-0.90612745, -0.19509032, -0.37533027), (-0.9238795, 0, -0.38268343), (-0.8314696, 0, -0.55557024), (-0.81549317, -0.19509032, -0.5448951), (-0.81549317, -0.19509032, -0.5448951), (-0.8314696, 0, -0.55557024), (-0.70710677, 0, -0.70710677), (-0.69351995, -0.19509032, -0.69351995), (-0.69351995, -0.19509032, -0.69351995), (-0.70710677, 0, -0.70710677), (-0.55557024, 0, -0.8314696), (-0.5448951, -0.19509032, -0.81549317), (-0.5448951, -0.19509032, -0.81549317), (-0.55557024, 0, -0.8314696), (-0.38268343, 0, -0.9238795), (-0.37533027, -0.19509032, -0.90612745), (-0.37533027, -0.19509032, -0.90612745), (-0.38268343, 0, -0.9238795), (-0.19509032, 0, -0.98078525), (-0.19134171, -0.19509032, -0.96193975), (-0.19134171, -0.19509032, -0.96193975), (-0.19509032, 0, -0.98078525), (-1.8369701e-16, 0, -1), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.8369701e-16, 0, -1), (0.19509032, 0, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.19134171, -0.19509032, -0.96193975), (0.19509032, 0, -0.98078525), (0.38268343, 0, -0.9238795), (0.37533027, -0.19509032, -0.90612745), (0.37533027, -0.19509032, -0.90612745), (0.38268343, 0, -0.9238795), (0.55557024, 0, -0.8314696), (0.5448951, -0.19509032, -0.81549317), (0.5448951, -0.19509032, -0.81549317), (0.55557024, 0, -0.8314696), (0.70710677, 0, -0.70710677), (0.69351995, -0.19509032, -0.69351995), (0.69351995, -0.19509032, -0.69351995), (0.70710677, 0, -0.70710677), (0.8314696, 0, -0.55557024), (0.81549317, -0.19509032, -0.5448951), (0.81549317, -0.19509032, -0.5448951), (0.8314696, 0, -0.55557024), (0.9238795, 0, -0.38268343), (0.90612745, -0.19509032, -0.37533027), (0.90612745, -0.19509032, -0.37533027), (0.9238795, 0, -0.38268343), (0.98078525, 0, -0.19509032), (0.96193975, -0.19509032, -0.19134171), (0.96193975, -0.19509032, -0.19134171), (0.98078525, 0, -0.19509032), (1, 0, 0), (0.98078525, -0.19509032, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(75, 0, 0), (73.5589, 0, 14.631774), (69.29096, 0, 28.701258), (62.36022, 0, 41.667767), (53.03301, 0, 53.03301), (41.667767, 0, 62.36022), (28.701258, 0, 69.29096), (14.631774, 0, 73.5589), (4.5924254e-15, 0, 75), (-14.631774, 0, 73.5589), (-28.701258, 0, 69.29096), (-41.667767, 0, 62.36022), (-53.03301, 0, 53.03301), (-62.36022, 0, 41.667767), (-69.29096, 0, 28.701258), (-73.5589, 0, 14.631774), (-75, 0, 9.184851e-15), (-73.5589, 0, -14.631774), (-69.29096, 0, -28.701258), (-62.36022, 0, -41.667767), (-53.03301, 0, -53.03301), (-41.667767, 0, -62.36022), (-28.701258, 0, -69.29096), (-14.631774, 0, -73.5589), (-1.3777276e-14, 0, -75), (14.631774, 0, -73.5589), (28.701258, 0, -69.29096), (41.667767, 0, -62.36022), (53.03301, 0, -53.03301), (62.36022, 0, -41.667767), (69.29096, 0, -28.701258), (73.5589, 0, -14.631774), (74.51963, 4.877258, 0), (73.08776, 4.877258, 14.538059), (68.84716, 4.877258, 28.51743), (61.960808, 4.877258, 41.40089), (52.693336, 4.877258, 52.693336), (41.40089, 4.877258, 61.960808), (28.51743, 4.877258, 68.84716), (14.538059, 4.877258, 73.08776), (4.5630114e-15, 4.877258, 74.51963), (-14.538059, 4.877258, 73.08776), (-28.51743, 4.877258, 68.84716), (-41.40089, 4.877258, 61.960808), (-52.693336, 4.877258, 52.693336), (-61.960808, 4.877258, 41.40089), (-68.84716, 4.877258, 28.51743), (-73.08776, 4.877258, 14.538059), (-74.51963, 4.877258, 9.126023e-15), (-73.08776, 4.877258, -14.538059), (-68.84716, 4.877258, -28.51743), (-61.960808, 4.877258, -41.40089), (-52.693336, 4.877258, -52.693336), (-41.40089, 4.877258, -61.960808), (-28.51743, 4.877258, -68.84716), (-14.538059, 4.877258, -73.08776), (-1.3689034e-14, 4.877258, -74.51963), (14.538059, 4.877258, -73.08776), (28.51743, 4.877258, -68.84716), (41.40089, 4.877258, -61.960808), (52.693336, 4.877258, -52.693336), (61.960808, 4.877258, -41.40089), (68.84716, 4.877258, -28.51743), (73.08776, 4.877258, -14.538059), (73.096985, 9.567086, 0), (71.69245, 9.567086, 14.260515), (67.532814, 9.567086, 27.973007), (60.777924, 9.567086, 40.61051), (51.687378, 9.567086, 51.687378), (40.61051, 9.567086, 60.777924), (27.973007, 9.567086, 67.532814), (14.260515, 9.567086, 71.69245), (4.4758995e-15, 9.567086, 73.096985), (-14.260515, 9.567086, 71.69245), (-27.973007, 9.567086, 67.532814), (-40.61051, 9.567086, 60.777924), (-51.687378, 9.567086, 51.687378), (-60.777924, 9.567086, 40.61051), (-67.532814, 9.567086, 27.973007), (-71.69245, 9.567086, 14.260515), (-73.096985, 9.567086, 8.951799e-15), (-71.69245, 9.567086, -14.260515), (-67.532814, 9.567086, -27.973007), (-60.777924, 9.567086, -40.61051), (-51.687378, 9.567086, -51.687378), (-40.61051, 9.567086, -60.777924), (-27.973007, 9.567086, -67.532814), (-14.260515, 9.567086, -71.69245), (-1.3427699e-14, 9.567086, -73.096985), (14.260515, 9.567086, -71.69245), (27.973007, 9.567086, -67.532814), (40.61051, 9.567086, -60.777924), (51.687378, 9.567086, -51.687378), (60.777924, 9.567086, -40.61051), (67.532814, 9.567086, -27.973007), (71.69245, 9.567086, -14.260515), (70.78674, 13.889256, 0), (69.42659, 13.889256, 13.809808), (65.39842, 13.889256, 27.088913), (58.857025, 13.889256, 39.327007), (50.053783, 13.889256, 50.053783), (39.327007, 13.889256, 58.857025), (27.088913, 13.889256, 65.39842), (13.809808, 13.889256, 69.42659), (4.334438e-15, 13.889256, 70.78674), (-13.809808, 13.889256, 69.42659), (-27.088913, 13.889256, 65.39842), (-39.327007, 13.889256, 58.857025), (-50.053783, 13.889256, 50.053783), (-58.857025, 13.889256, 39.327007), (-65.39842, 13.889256, 27.088913), (-69.42659, 13.889256, 13.809808), (-70.78674, 13.889256, 8.668876e-15), (-69.42659, 13.889256, -13.809808), (-65.39842, 13.889256, -27.088913), (-58.857025, 13.889256, -39.327007), (-50.053783, 13.889256, -50.053783), (-39.327007, 13.889256, -58.857025), (-27.088913, 13.889256, -65.39842), (-13.809808, 13.889256, -69.42659), (-1.30033135e-14, 13.889256, -70.78674), (13.809808, 13.889256, -69.42659), (27.088913, 13.889256, -65.39842), (39.327007, 13.889256, -58.857025), (50.053783, 13.889256, -50.053783), (58.857025, 13.889256, -39.327007), (65.39842, 13.889256, -27.088913), (69.42659, 13.889256, -13.809808), (67.67767, 17.67767, 0), (66.37726, 17.67767, 13.2032585), (62.526012, 17.67767, 25.899122), (56.271927, 17.67767, 37.599697), (47.85534, 17.67767, 47.85534), (37.599697, 17.67767, 56.271927), (25.899122, 17.67767, 62.526012), (13.2032585, 17.67767, 66.37726), (4.144062e-15, 17.67767, 67.67767), (-13.2032585, 17.67767, 66.37726), (-25.899122, 17.67767, 62.526012), (-37.599697, 17.67767, 56.271927), (-47.85534, 17.67767, 47.85534), (-56.271927, 17.67767, 37.599697), (-62.526012, 17.67767, 25.899122), (-66.37726, 17.67767, 13.2032585), (-67.67767, 17.67767, 8.288124e-15), (-66.37726, 17.67767, -13.2032585), (-62.526012, 17.67767, -25.899122), (-56.271927, 17.67767, -37.599697), (-47.85534, 17.67767, -47.85534), (-37.599697, 17.67767, -56.271927), (-25.899122, 17.67767, -62.526012), (-13.2032585, 17.67767, -66.37726), (-1.2432186e-14, 17.67767, -67.67767), (13.2032585, 17.67767, -66.37726), (25.899122, 17.67767, -62.526012), (37.599697, 17.67767, -56.271927), (47.85534, 17.67767, -47.85534), (56.271927, 17.67767, -37.599697), (62.526012, 17.67767, -25.899122), (66.37726, 17.67767, -13.2032585), (63.889256, 20.786741, 0), (62.66164, 20.786741, 12.464175), (59.025974, 20.786741, 24.44936), (53.121975, 20.786741, 35.49497), (45.176525, 20.786741, 45.176525), (35.49497, 20.786741, 53.121975), (24.44936, 20.786741, 59.025974), (12.464175, 20.786741, 62.66164), (3.9120886e-15, 20.786741, 63.889256), (-12.464175, 20.786741, 62.66164), (-24.44936, 20.786741, 59.025974), (-35.49497, 20.786741, 53.121975), (-45.176525, 20.786741, 45.176525), (-53.121975, 20.786741, 35.49497), (-59.025974, 20.786741, 24.44936), (-62.66164, 20.786741, 12.464175), (-63.889256, 20.786741, 7.824177e-15), (-62.66164, 20.786741, -12.464175), (-59.025974, 20.786741, -24.44936), (-53.121975, 20.786741, -35.49497), (-45.176525, 20.786741, -45.176525), (-35.49497, 20.786741, -53.121975), (-24.44936, 20.786741, -59.025974), (-12.464175, 20.786741, -62.66164), (-1.1736266e-14, 20.786741, -63.889256), (12.464175, 20.786741, -62.66164), (24.44936, 20.786741, -59.025974), (35.49497, 20.786741, -53.121975), (45.176525, 20.786741, -45.176525), (53.121975, 20.786741, -35.49497), (59.025974, 20.786741, -24.44936), (62.66164, 20.786741, -12.464175), (59.567085, 23.096989, 0), (58.42252, 23.096989, 11.620962), (55.03281, 23.096989, 22.795338), (49.52822, 23.096989, 33.0937), (42.12029, 23.096989, 42.12029), (33.0937, 23.096989, 49.52822), (22.795338, 23.096989, 55.03281), (11.620962, 23.096989, 58.42252), (3.647432e-15, 23.096989, 59.567085), (-11.620962, 23.096989, 58.42252), (-22.795338, 23.096989, 55.03281), (-33.0937, 23.096989, 49.52822), (-42.12029, 23.096989, 42.12029), (-49.52822, 23.096989, 33.0937), (-55.03281, 23.096989, 22.795338), (-58.42252, 23.096989, 11.620962), (-59.567085, 23.096989, 7.294864e-15), (-58.42252, 23.096989, -11.620962), (-55.03281, 23.096989, -22.795338), (-49.52822, 23.096989, -33.0937), (-42.12029, 23.096989, -42.12029), (-33.0937, 23.096989, -49.52822), (-22.795338, 23.096989, -55.03281), (-11.620962, 23.096989, -58.42252), (-1.0942296e-14, 23.096989, -59.567085), (11.620962, 23.096989, -58.42252), (22.795338, 23.096989, -55.03281), (33.0937, 23.096989, -49.52822), (42.12029, 23.096989, -42.12029), (49.52822, 23.096989, -33.0937), (55.03281, 23.096989, -22.795338), (58.42252, 23.096989, -11.620962), (54.87726, 24.519632, 0), (53.822807, 24.519632, 10.706022), (50.699974, 24.519632, 21.000618), (45.628773, 24.519632, 30.48817), (38.80408, 24.519632, 38.80408), (30.48817, 24.519632, 45.628773), (21.000618, 24.519632, 50.699974), (10.706022, 24.519632, 53.822807), (3.360263e-15, 24.519632, 54.87726), (-10.706022, 24.519632, 53.822807), (-21.000618, 24.519632, 50.699974), (-30.48817, 24.519632, 45.628773), (-38.80408, 24.519632, 38.80408), (-45.628773, 24.519632, 30.48817), (-50.699974, 24.519632, 21.000618), (-53.822807, 24.519632, 10.706022), (-54.87726, 24.519632, 6.720526e-15), (-53.822807, 24.519632, -10.706022), (-50.699974, 24.519632, -21.000618), (-45.628773, 24.519632, -30.48817), (-38.80408, 24.519632, -38.80408), (-30.48817, 24.519632, -45.628773), (-21.000618, 24.519632, -50.699974), (-10.706022, 24.519632, -53.822807), (-1.0080789e-14, 24.519632, -54.87726), (10.706022, 24.519632, -53.822807), (21.000618, 24.519632, -50.699974), (30.48817, 24.519632, -45.628773), (38.80408, 24.519632, -38.80408), (45.628773, 24.519632, -30.48817), (50.699974, 24.519632, -21.000618), (53.822807, 24.519632, -10.706022), (50, 25, 0), (49.039265, 25, 9.754516), (46.193977, 25, 19.134172), (41.573483, 25, 27.778511), (35.35534, 25, 35.35534), (27.778511, 25, 41.573483), (19.134172, 25, 46.193977), (9.754516, 25, 49.039265), (3.0616169e-15, 25, 50), (-9.754516, 25, 49.039265), (-19.134172, 25, 46.193977), (-27.778511, 25, 41.573483), (-35.35534, 25, 35.35534), (-41.573483, 25, 27.778511), (-46.193977, 25, 19.134172), (-49.039265, 25, 9.754516), (-50, 25, 6.1232338e-15), (-49.039265, 25, -9.754516), (-46.193977, 25, -19.134172), (-41.573483, 25, -27.778511), (-35.35534, 25, -35.35534), (-27.778511, 25, -41.573483), (-19.134172, 25, -46.193977), (-9.754516, 25, -49.039265), (-9.184851e-15, 25, -50), (9.754516, 25, -49.039265), (19.134172, 25, -46.193977), (27.778511, 25, -41.573483), (35.35534, 25, -35.35534), (41.573483, 25, -27.778511), (46.193977, 25, -19.134172), (49.039265, 25, -9.754516), (45.12274, 24.519632, 0), (44.255722, 24.519632, 8.80301), (41.687977, 24.519632, 17.267725), (37.51819, 24.519632, 25.068851), (31.906597, 24.519632, 31.906597), (25.068851, 24.519632, 37.51819), (17.267725, 24.519632, 41.687977), (8.80301, 24.519632, 44.255722), (2.762971e-15, 24.519632, 45.12274), (-8.80301, 24.519632, 44.255722), (-17.267725, 24.519632, 41.687977), (-25.068851, 24.519632, 37.51819), (-31.906597, 24.519632, 31.906597), (-37.51819, 24.519632, 25.068851), (-41.687977, 24.519632, 17.267725), (-44.255722, 24.519632, 8.80301), (-45.12274, 24.519632, 5.525942e-15), (-44.255722, 24.519632, -8.80301), (-41.687977, 24.519632, -17.267725), (-37.51819, 24.519632, -25.068851), (-31.906597, 24.519632, -31.906597), (-25.068851, 24.519632, -37.51819), (-17.267725, 24.519632, -41.687977), (-8.80301, 24.519632, -44.255722), (-8.288913e-15, 24.519632, -45.12274), (8.80301, 24.519632, -44.255722), (17.267725, 24.519632, -41.687977), (25.068851, 24.519632, -37.51819), (31.906597, 24.519632, -31.906597), (37.51819, 24.519632, -25.068851), (41.687977, 24.519632, -17.267725), (44.255722, 24.519632, -8.80301), (40.432915, 23.096989, 0), (39.656006, 23.096989, 7.88807), (37.35514, 23.096989, 15.473006), (33.61874, 23.096989, 22.463324), (28.590387, 23.096989, 28.590387), (22.463324, 23.096989, 33.61874), (15.473006, 23.096989, 37.35514), (7.88807, 23.096989, 39.656006), (2.475802e-15, 23.096989, 40.432915), (-7.88807, 23.096989, 39.656006), (-15.473006, 23.096989, 37.35514), (-22.463324, 23.096989, 33.61874), (-28.590387, 23.096989, 28.590387), (-33.61874, 23.096989, 22.463324), (-37.35514, 23.096989, 15.473006), (-39.656006, 23.096989, 7.88807), (-40.432915, 23.096989, 4.951604e-15), (-39.656006, 23.096989, -7.88807), (-37.35514, 23.096989, -15.473006), (-33.61874, 23.096989, -22.463324), (-28.590387, 23.096989, -28.590387), (-22.463324, 23.096989, -33.61874), (-15.473006, 23.096989, -37.35514), (-7.88807, 23.096989, -39.656006), (-7.427406e-15, 23.096989, -40.432915), (7.88807, 23.096989, -39.656006), (15.473006, 23.096989, -37.35514), (22.463324, 23.096989, -33.61874), (28.590387, 23.096989, -28.590387), (33.61874, 23.096989, -22.463324), (37.35514, 23.096989, -15.473006), (39.656006, 23.096989, -7.88807), (36.110744, 20.786741, 0), (35.416885, 20.786741, 7.0448565), (33.361977, 20.786741, 13.818983), (30.024986, 20.786741, 20.062054), (25.534153, 20.786741, 25.534153), (20.062054, 20.786741, 30.024986), (13.818983, 20.786741, 33.361977), (7.0448565, 20.786741, 35.416885), (2.2111454e-15, 20.786741, 36.110744), (-7.0448565, 20.786741, 35.416885), (-13.818983, 20.786741, 33.361977), (-20.062054, 20.786741, 30.024986), (-25.534153, 20.786741, 25.534153), (-30.024986, 20.786741, 20.062054), (-33.361977, 20.786741, 13.818983), (-35.416885, 20.786741, 7.0448565), (-36.110744, 20.786741, 4.422291e-15), (-35.416885, 20.786741, -7.0448565), (-33.361977, 20.786741, -13.818983), (-30.024986, 20.786741, -20.062054), (-25.534153, 20.786741, -25.534153), (-20.062054, 20.786741, -30.024986), (-13.818983, 20.786741, -33.361977), (-7.0448565, 20.786741, -35.416885), (-6.633436e-15, 20.786741, -36.110744), (7.0448565, 20.786741, -35.416885), (13.818983, 20.786741, -33.361977), (20.062054, 20.786741, -30.024986), (25.534153, 20.786741, -25.534153), (30.024986, 20.786741, -20.062054), (33.361977, 20.786741, -13.818983), (35.416885, 20.786741, -7.0448565), (32.32233, 17.67767, 0), (31.701265, 17.67767, 6.3057737), (29.86194, 17.67767, 12.369221), (26.875036, 17.67767, 17.957325), (22.85534, 17.67767, 22.85534), (17.957325, 17.67767, 26.875036), (12.369221, 17.67767, 29.86194), (6.3057737, 17.67767, 31.701265), (1.9791719e-15, 17.67767, 32.32233), (-6.3057737, 17.67767, 31.701265), (-12.369221, 17.67767, 29.86194), (-17.957325, 17.67767, 26.875036), (-22.85534, 17.67767, 22.85534), (-26.875036, 17.67767, 17.957325), (-29.86194, 17.67767, 12.369221), (-31.701265, 17.67767, 6.3057737), (-32.32233, 17.67767, 3.9583438e-15), (-31.701265, 17.67767, -6.3057737), (-29.86194, 17.67767, -12.369221), (-26.875036, 17.67767, -17.957325), (-22.85534, 17.67767, -22.85534), (-17.957325, 17.67767, -26.875036), (-12.369221, 17.67767, -29.86194), (-6.3057737, 17.67767, -31.701265), (-5.937516e-15, 17.67767, -32.32233), (6.3057737, 17.67767, -31.701265), (12.369221, 17.67767, -29.86194), (17.957325, 17.67767, -26.875036), (22.85534, 17.67767, -22.85534), (26.875036, 17.67767, -17.957325), (29.86194, 17.67767, -12.369221), (31.701265, 17.67767, -6.3057737), (29.213259, 13.889256, 0), (28.651936, 13.889256, 5.6992245), (26.989532, 13.889256, 11.179431), (24.289938, 13.889256, 16.230017), (20.656895, 13.889256, 20.656895), (16.230017, 13.889256, 24.289938), (11.179431, 13.889256, 26.989532), (5.6992245, 13.889256, 28.651936), (1.7887962e-15, 13.889256, 29.213259), (-5.6992245, 13.889256, 28.651936), (-11.179431, 13.889256, 26.989532), (-16.230017, 13.889256, 24.289938), (-20.656895, 13.889256, 20.656895), (-24.289938, 13.889256, 16.230017), (-26.989532, 13.889256, 11.179431), (-28.651936, 13.889256, 5.6992245), (-29.213259, 13.889256, 3.5775923e-15), (-28.651936, 13.889256, -5.6992245), (-26.989532, 13.889256, -11.179431), (-24.289938, 13.889256, -16.230017), (-20.656895, 13.889256, -20.656895), (-16.230017, 13.889256, -24.289938), (-11.179431, 13.889256, -26.989532), (-5.6992245, 13.889256, -28.651936), (-5.3663887e-15, 13.889256, -29.213259), (5.6992245, 13.889256, -28.651936), (11.179431, 13.889256, -26.989532), (16.230017, 13.889256, -24.289938), (20.656895, 13.889256, -20.656895), (24.289938, 13.889256, -16.230017), (26.989532, 13.889256, -11.179431), (28.651936, 13.889256, -5.6992245), (26.903011, 9.567086, 0), (26.386078, 9.567086, 5.248517), (24.855143, 9.567086, 10.295337), (22.369038, 9.567086, 14.946512), (19.023302, 9.567086, 19.023302), (14.946512, 9.567086, 22.369038), (10.295337, 9.567086, 24.855143), (5.248517, 9.567086, 26.386078), (1.6473343e-15, 9.567086, 26.903011), (-5.248517, 9.567086, 26.386078), (-10.295337, 9.567086, 24.855143), (-14.946512, 9.567086, 22.369038), (-19.023302, 9.567086, 19.023302), (-22.369038, 9.567086, 14.946512), (-24.855143, 9.567086, 10.295337), (-26.386078, 9.567086, 5.248517), (-26.903011, 9.567086, 3.2946687e-15), (-26.386078, 9.567086, -5.248517), (-24.855143, 9.567086, -10.295337), (-22.369038, 9.567086, -14.946512), (-19.023302, 9.567086, -19.023302), (-14.946512, 9.567086, -22.369038), (-10.295337, 9.567086, -24.855143), (-5.248517, 9.567086, -26.386078), (-4.942003e-15, 9.567086, -26.903011), (5.248517, 9.567086, -26.386078), (10.295337, 9.567086, -24.855143), (14.946512, 9.567086, -22.369038), (19.023302, 9.567086, -19.023302), (22.369038, 9.567086, -14.946512), (24.855143, 9.567086, -10.295337), (26.386078, 9.567086, -5.248517), (25.480368, 4.877258, 0), (24.99077, 4.877258, 4.970973), (23.54079, 4.877258, 9.750915), (21.186152, 4.877258, 14.156134), (18.017342, 4.877258, 18.017342), (14.156134, 4.877258, 21.186152), (9.750915, 4.877258, 23.54079), (4.970973, 4.877258, 24.99077), (1.5602225e-15, 4.877258, 25.480368), (-4.970973, 4.877258, 24.99077), (-9.750915, 4.877258, 23.54079), (-14.156134, 4.877258, 21.186152), (-18.017342, 4.877258, 18.017342), (-21.186152, 4.877258, 14.156134), (-23.54079, 4.877258, 9.750915), (-24.99077, 4.877258, 4.970973), (-25.480368, 4.877258, 3.120445e-15), (-24.99077, 4.877258, -4.970973), (-23.54079, 4.877258, -9.750915), (-21.186152, 4.877258, -14.156134), (-18.017342, 4.877258, -18.017342), (-14.156134, 4.877258, -21.186152), (-9.750915, 4.877258, -23.54079), (-4.970973, 4.877258, -24.99077), (-4.6806676e-15, 4.877258, -25.480368), (4.970973, 4.877258, -24.99077), (9.750915, 4.877258, -23.54079), (14.156134, 4.877258, -21.186152), (18.017342, 4.877258, -18.017342), (21.186152, 4.877258, -14.156134), (23.54079, 4.877258, -9.750915), (24.99077, 4.877258, -4.970973), (25, 3.0616169e-15, 0), (24.519632, 3.0616169e-15, 4.877258), (23.096989, 3.0616169e-15, 9.567086), (20.786741, 3.0616169e-15, 13.889256), (17.67767, 3.0616169e-15, 17.67767), (13.889256, 3.0616169e-15, 20.786741), (9.567086, 3.0616169e-15, 23.096989), (4.877258, 3.0616169e-15, 24.519632), (1.5308084e-15, 3.0616169e-15, 25), (-4.877258, 3.0616169e-15, 24.519632), (-9.567086, 3.0616169e-15, 23.096989), (-13.889256, 3.0616169e-15, 20.786741), (-17.67767, 3.0616169e-15, 17.67767), (-20.786741, 3.0616169e-15, 13.889256), (-23.096989, 3.0616169e-15, 9.567086), (-24.519632, 3.0616169e-15, 4.877258), (-25, 3.0616169e-15, 3.0616169e-15), (-24.519632, 3.0616169e-15, -4.877258), (-23.096989, 3.0616169e-15, -9.567086), (-20.786741, 3.0616169e-15, -13.889256), (-17.67767, 3.0616169e-15, -17.67767), (-13.889256, 3.0616169e-15, -20.786741), (-9.567086, 3.0616169e-15, -23.096989), (-4.877258, 3.0616169e-15, -24.519632), (-4.5924254e-15, 3.0616169e-15, -25), (4.877258, 3.0616169e-15, -24.519632), (9.567086, 3.0616169e-15, -23.096989), (13.889256, 3.0616169e-15, -20.786741), (17.67767, 3.0616169e-15, -17.67767), (20.786741, 3.0616169e-15, -13.889256), (23.096989, 3.0616169e-15, -9.567086), (24.519632, 3.0616169e-15, -4.877258), (25.480368, -4.877258, 0), (24.99077, -4.877258, 4.970973), (23.54079, -4.877258, 9.750915), (21.186152, -4.877258, 14.156134), (18.017342, -4.877258, 18.017342), (14.156134, -4.877258, 21.186152), (9.750915, -4.877258, 23.54079), (4.970973, -4.877258, 24.99077), (1.5602225e-15, -4.877258, 25.480368), (-4.970973, -4.877258, 24.99077), (-9.750915, -4.877258, 23.54079), (-14.156134, -4.877258, 21.186152), (-18.017342, -4.877258, 18.017342), (-21.186152, -4.877258, 14.156134), (-23.54079, -4.877258, 9.750915), (-24.99077, -4.877258, 4.970973), (-25.480368, -4.877258, 3.120445e-15), (-24.99077, -4.877258, -4.970973), (-23.54079, -4.877258, -9.750915), (-21.186152, -4.877258, -14.156134), (-18.017342, -4.877258, -18.017342), (-14.156134, -4.877258, -21.186152), (-9.750915, -4.877258, -23.54079), (-4.970973, -4.877258, -24.99077), (-4.6806676e-15, -4.877258, -25.480368), (4.970973, -4.877258, -24.99077), (9.750915, -4.877258, -23.54079), (14.156134, -4.877258, -21.186152), (18.017342, -4.877258, -18.017342), (21.186152, -4.877258, -14.156134), (23.54079, -4.877258, -9.750915), (24.99077, -4.877258, -4.970973), (26.903011, -9.567086, 0), (26.386078, -9.567086, 5.248517), (24.855143, -9.567086, 10.295337), (22.369038, -9.567086, 14.946512), (19.023302, -9.567086, 19.023302), (14.946512, -9.567086, 22.369038), (10.295337, -9.567086, 24.855143), (5.248517, -9.567086, 26.386078), (1.6473343e-15, -9.567086, 26.903011), (-5.248517, -9.567086, 26.386078), (-10.295337, -9.567086, 24.855143), (-14.946512, -9.567086, 22.369038), (-19.023302, -9.567086, 19.023302), (-22.369038, -9.567086, 14.946512), (-24.855143, -9.567086, 10.295337), (-26.386078, -9.567086, 5.248517), (-26.903011, -9.567086, 3.2946687e-15), (-26.386078, -9.567086, -5.248517), (-24.855143, -9.567086, -10.295337), (-22.369038, -9.567086, -14.946512), (-19.023302, -9.567086, -19.023302), (-14.946512, -9.567086, -22.369038), (-10.295337, -9.567086, -24.855143), (-5.248517, -9.567086, -26.386078), (-4.942003e-15, -9.567086, -26.903011), (5.248517, -9.567086, -26.386078), (10.295337, -9.567086, -24.855143), (14.946512, -9.567086, -22.369038), (19.023302, -9.567086, -19.023302), (22.369038, -9.567086, -14.946512), (24.855143, -9.567086, -10.295337), (26.386078, -9.567086, -5.248517), (29.213259, -13.889256, 0), (28.651936, -13.889256, 5.6992245), (26.989532, -13.889256, 11.179431), (24.289938, -13.889256, 16.230017), (20.656895, -13.889256, 20.656895), (16.230017, -13.889256, 24.289938), (11.179431, -13.889256, 26.989532), (5.6992245, -13.889256, 28.651936), (1.7887962e-15, -13.889256, 29.213259), (-5.6992245, -13.889256, 28.651936), (-11.179431, -13.889256, 26.989532), (-16.230017, -13.889256, 24.289938), (-20.656895, -13.889256, 20.656895), (-24.289938, -13.889256, 16.230017), (-26.989532, -13.889256, 11.179431), (-28.651936, -13.889256, 5.6992245), (-29.213259, -13.889256, 3.5775923e-15), (-28.651936, -13.889256, -5.6992245), (-26.989532, -13.889256, -11.179431), (-24.289938, -13.889256, -16.230017), (-20.656895, -13.889256, -20.656895), (-16.230017, -13.889256, -24.289938), (-11.179431, -13.889256, -26.989532), (-5.6992245, -13.889256, -28.651936), (-5.3663887e-15, -13.889256, -29.213259), (5.6992245, -13.889256, -28.651936), (11.179431, -13.889256, -26.989532), (16.230017, -13.889256, -24.289938), (20.656895, -13.889256, -20.656895), (24.289938, -13.889256, -16.230017), (26.989532, -13.889256, -11.179431), (28.651936, -13.889256, -5.6992245), (32.32233, -17.67767, 0), (31.701265, -17.67767, 6.3057737), (29.86194, -17.67767, 12.369221), (26.875036, -17.67767, 17.957325), (22.85534, -17.67767, 22.85534), (17.957325, -17.67767, 26.875036), (12.369221, -17.67767, 29.86194), (6.3057737, -17.67767, 31.701265), (1.9791719e-15, -17.67767, 32.32233), (-6.3057737, -17.67767, 31.701265), (-12.369221, -17.67767, 29.86194), (-17.957325, -17.67767, 26.875036), (-22.85534, -17.67767, 22.85534), (-26.875036, -17.67767, 17.957325), (-29.86194, -17.67767, 12.369221), (-31.701265, -17.67767, 6.3057737), (-32.32233, -17.67767, 3.9583438e-15), (-31.701265, -17.67767, -6.3057737), (-29.86194, -17.67767, -12.369221), (-26.875036, -17.67767, -17.957325), (-22.85534, -17.67767, -22.85534), (-17.957325, -17.67767, -26.875036), (-12.369221, -17.67767, -29.86194), (-6.3057737, -17.67767, -31.701265), (-5.937516e-15, -17.67767, -32.32233), (6.3057737, -17.67767, -31.701265), (12.369221, -17.67767, -29.86194), (17.957325, -17.67767, -26.875036), (22.85534, -17.67767, -22.85534), (26.875036, -17.67767, -17.957325), (29.86194, -17.67767, -12.369221), (31.701265, -17.67767, -6.3057737), (36.110744, -20.786741, 0), (35.416885, -20.786741, 7.0448565), (33.361977, -20.786741, 13.818983), (30.024986, -20.786741, 20.062054), (25.534153, -20.786741, 25.534153), (20.062054, -20.786741, 30.024986), (13.818983, -20.786741, 33.361977), (7.0448565, -20.786741, 35.416885), (2.2111454e-15, -20.786741, 36.110744), (-7.0448565, -20.786741, 35.416885), (-13.818983, -20.786741, 33.361977), (-20.062054, -20.786741, 30.024986), (-25.534153, -20.786741, 25.534153), (-30.024986, -20.786741, 20.062054), (-33.361977, -20.786741, 13.818983), (-35.416885, -20.786741, 7.0448565), (-36.110744, -20.786741, 4.422291e-15), (-35.416885, -20.786741, -7.0448565), (-33.361977, -20.786741, -13.818983), (-30.024986, -20.786741, -20.062054), (-25.534153, -20.786741, -25.534153), (-20.062054, -20.786741, -30.024986), (-13.818983, -20.786741, -33.361977), (-7.0448565, -20.786741, -35.416885), (-6.633436e-15, -20.786741, -36.110744), (7.0448565, -20.786741, -35.416885), (13.818983, -20.786741, -33.361977), (20.062054, -20.786741, -30.024986), (25.534153, -20.786741, -25.534153), (30.024986, -20.786741, -20.062054), (33.361977, -20.786741, -13.818983), (35.416885, -20.786741, -7.0448565), (40.432915, -23.096989, 0), (39.656006, -23.096989, 7.88807), (37.35514, -23.096989, 15.473006), (33.61874, -23.096989, 22.463324), (28.590387, -23.096989, 28.590387), (22.463324, -23.096989, 33.61874), (15.473006, -23.096989, 37.35514), (7.88807, -23.096989, 39.656006), (2.475802e-15, -23.096989, 40.432915), (-7.88807, -23.096989, 39.656006), (-15.473006, -23.096989, 37.35514), (-22.463324, -23.096989, 33.61874), (-28.590387, -23.096989, 28.590387), (-33.61874, -23.096989, 22.463324), (-37.35514, -23.096989, 15.473006), (-39.656006, -23.096989, 7.88807), (-40.432915, -23.096989, 4.951604e-15), (-39.656006, -23.096989, -7.88807), (-37.35514, -23.096989, -15.473006), (-33.61874, -23.096989, -22.463324), (-28.590387, -23.096989, -28.590387), (-22.463324, -23.096989, -33.61874), (-15.473006, -23.096989, -37.35514), (-7.88807, -23.096989, -39.656006), (-7.427406e-15, -23.096989, -40.432915), (7.88807, -23.096989, -39.656006), (15.473006, -23.096989, -37.35514), (22.463324, -23.096989, -33.61874), (28.590387, -23.096989, -28.590387), (33.61874, -23.096989, -22.463324), (37.35514, -23.096989, -15.473006), (39.656006, -23.096989, -7.88807), (45.12274, -24.519632, 0), (44.255722, -24.519632, 8.80301), (41.687977, -24.519632, 17.267725), (37.51819, -24.519632, 25.068851), (31.906597, -24.519632, 31.906597), (25.068851, -24.519632, 37.51819), (17.267725, -24.519632, 41.687977), (8.80301, -24.519632, 44.255722), (2.762971e-15, -24.519632, 45.12274), (-8.80301, -24.519632, 44.255722), (-17.267725, -24.519632, 41.687977), (-25.068851, -24.519632, 37.51819), (-31.906597, -24.519632, 31.906597), (-37.51819, -24.519632, 25.068851), (-41.687977, -24.519632, 17.267725), (-44.255722, -24.519632, 8.80301), (-45.12274, -24.519632, 5.525942e-15), (-44.255722, -24.519632, -8.80301), (-41.687977, -24.519632, -17.267725), (-37.51819, -24.519632, -25.068851), (-31.906597, -24.519632, -31.906597), (-25.068851, -24.519632, -37.51819), (-17.267725, -24.519632, -41.687977), (-8.80301, -24.519632, -44.255722), (-8.288913e-15, -24.519632, -45.12274), (8.80301, -24.519632, -44.255722), (17.267725, -24.519632, -41.687977), (25.068851, -24.519632, -37.51819), (31.906597, -24.519632, -31.906597), (37.51819, -24.519632, -25.068851), (41.687977, -24.519632, -17.267725), (44.255722, -24.519632, -8.80301), (50, -25, 0), (49.039265, -25, 9.754516), (46.193977, -25, 19.134172), (41.573483, -25, 27.778511), (35.35534, -25, 35.35534), (27.778511, -25, 41.573483), (19.134172, -25, 46.193977), (9.754516, -25, 49.039265), (3.0616169e-15, -25, 50), (-9.754516, -25, 49.039265), (-19.134172, -25, 46.193977), (-27.778511, -25, 41.573483), (-35.35534, -25, 35.35534), (-41.573483, -25, 27.778511), (-46.193977, -25, 19.134172), (-49.039265, -25, 9.754516), (-50, -25, 6.1232338e-15), (-49.039265, -25, -9.754516), (-46.193977, -25, -19.134172), (-41.573483, -25, -27.778511), (-35.35534, -25, -35.35534), (-27.778511, -25, -41.573483), (-19.134172, -25, -46.193977), (-9.754516, -25, -49.039265), (-9.184851e-15, -25, -50), (9.754516, -25, -49.039265), (19.134172, -25, -46.193977), (27.778511, -25, -41.573483), (35.35534, -25, -35.35534), (41.573483, -25, -27.778511), (46.193977, -25, -19.134172), (49.039265, -25, -9.754516), (54.87726, -24.519632, 0), (53.822807, -24.519632, 10.706022), (50.699974, -24.519632, 21.000618), (45.628773, -24.519632, 30.48817), (38.80408, -24.519632, 38.80408), (30.48817, -24.519632, 45.628773), (21.000618, -24.519632, 50.699974), (10.706022, -24.519632, 53.822807), (3.360263e-15, -24.519632, 54.87726), (-10.706022, -24.519632, 53.822807), (-21.000618, -24.519632, 50.699974), (-30.48817, -24.519632, 45.628773), (-38.80408, -24.519632, 38.80408), (-45.628773, -24.519632, 30.48817), (-50.699974, -24.519632, 21.000618), (-53.822807, -24.519632, 10.706022), (-54.87726, -24.519632, 6.720526e-15), (-53.822807, -24.519632, -10.706022), (-50.699974, -24.519632, -21.000618), (-45.628773, -24.519632, -30.48817), (-38.80408, -24.519632, -38.80408), (-30.48817, -24.519632, -45.628773), (-21.000618, -24.519632, -50.699974), (-10.706022, -24.519632, -53.822807), (-1.0080789e-14, -24.519632, -54.87726), (10.706022, -24.519632, -53.822807), (21.000618, -24.519632, -50.699974), (30.48817, -24.519632, -45.628773), (38.80408, -24.519632, -38.80408), (45.628773, -24.519632, -30.48817), (50.699974, -24.519632, -21.000618), (53.822807, -24.519632, -10.706022), (59.567085, -23.096989, 0), (58.42252, -23.096989, 11.620962), (55.03281, -23.096989, 22.795338), (49.52822, -23.096989, 33.0937), (42.12029, -23.096989, 42.12029), (33.0937, -23.096989, 49.52822), (22.795338, -23.096989, 55.03281), (11.620962, -23.096989, 58.42252), (3.647432e-15, -23.096989, 59.567085), (-11.620962, -23.096989, 58.42252), (-22.795338, -23.096989, 55.03281), (-33.0937, -23.096989, 49.52822), (-42.12029, -23.096989, 42.12029), (-49.52822, -23.096989, 33.0937), (-55.03281, -23.096989, 22.795338), (-58.42252, -23.096989, 11.620962), (-59.567085, -23.096989, 7.294864e-15), (-58.42252, -23.096989, -11.620962), (-55.03281, -23.096989, -22.795338), (-49.52822, -23.096989, -33.0937), (-42.12029, -23.096989, -42.12029), (-33.0937, -23.096989, -49.52822), (-22.795338, -23.096989, -55.03281), (-11.620962, -23.096989, -58.42252), (-1.0942296e-14, -23.096989, -59.567085), (11.620962, -23.096989, -58.42252), (22.795338, -23.096989, -55.03281), (33.0937, -23.096989, -49.52822), (42.12029, -23.096989, -42.12029), (49.52822, -23.096989, -33.0937), (55.03281, -23.096989, -22.795338), (58.42252, -23.096989, -11.620962), (63.889256, -20.786741, 0), (62.66164, -20.786741, 12.464175), (59.025974, -20.786741, 24.44936), (53.121975, -20.786741, 35.49497), (45.176525, -20.786741, 45.176525), (35.49497, -20.786741, 53.121975), (24.44936, -20.786741, 59.025974), (12.464175, -20.786741, 62.66164), (3.9120886e-15, -20.786741, 63.889256), (-12.464175, -20.786741, 62.66164), (-24.44936, -20.786741, 59.025974), (-35.49497, -20.786741, 53.121975), (-45.176525, -20.786741, 45.176525), (-53.121975, -20.786741, 35.49497), (-59.025974, -20.786741, 24.44936), (-62.66164, -20.786741, 12.464175), (-63.889256, -20.786741, 7.824177e-15), (-62.66164, -20.786741, -12.464175), (-59.025974, -20.786741, -24.44936), (-53.121975, -20.786741, -35.49497), (-45.176525, -20.786741, -45.176525), (-35.49497, -20.786741, -53.121975), (-24.44936, -20.786741, -59.025974), (-12.464175, -20.786741, -62.66164), (-1.1736266e-14, -20.786741, -63.889256), (12.464175, -20.786741, -62.66164), (24.44936, -20.786741, -59.025974), (35.49497, -20.786741, -53.121975), (45.176525, -20.786741, -45.176525), (53.121975, -20.786741, -35.49497), (59.025974, -20.786741, -24.44936), (62.66164, -20.786741, -12.464175), (67.67767, -17.67767, 0), (66.37726, -17.67767, 13.2032585), (62.526012, -17.67767, 25.899122), (56.271927, -17.67767, 37.599697), (47.85534, -17.67767, 47.85534), (37.599697, -17.67767, 56.271927), (25.899122, -17.67767, 62.526012), (13.2032585, -17.67767, 66.37726), (4.144062e-15, -17.67767, 67.67767), (-13.2032585, -17.67767, 66.37726), (-25.899122, -17.67767, 62.526012), (-37.599697, -17.67767, 56.271927), (-47.85534, -17.67767, 47.85534), (-56.271927, -17.67767, 37.599697), (-62.526012, -17.67767, 25.899122), (-66.37726, -17.67767, 13.2032585), (-67.67767, -17.67767, 8.288124e-15), (-66.37726, -17.67767, -13.2032585), (-62.526012, -17.67767, -25.899122), (-56.271927, -17.67767, -37.599697), (-47.85534, -17.67767, -47.85534), (-37.599697, -17.67767, -56.271927), (-25.899122, -17.67767, -62.526012), (-13.2032585, -17.67767, -66.37726), (-1.2432186e-14, -17.67767, -67.67767), (13.2032585, -17.67767, -66.37726), (25.899122, -17.67767, -62.526012), (37.599697, -17.67767, -56.271927), (47.85534, -17.67767, -47.85534), (56.271927, -17.67767, -37.599697), (62.526012, -17.67767, -25.899122), (66.37726, -17.67767, -13.2032585), (70.78674, -13.889256, 0), (69.42659, -13.889256, 13.809808), (65.39842, -13.889256, 27.088913), (58.857025, -13.889256, 39.327007), (50.053783, -13.889256, 50.053783), (39.327007, -13.889256, 58.857025), (27.088913, -13.889256, 65.39842), (13.809808, -13.889256, 69.42659), (4.334438e-15, -13.889256, 70.78674), (-13.809808, -13.889256, 69.42659), (-27.088913, -13.889256, 65.39842), (-39.327007, -13.889256, 58.857025), (-50.053783, -13.889256, 50.053783), (-58.857025, -13.889256, 39.327007), (-65.39842, -13.889256, 27.088913), (-69.42659, -13.889256, 13.809808), (-70.78674, -13.889256, 8.668876e-15), (-69.42659, -13.889256, -13.809808), (-65.39842, -13.889256, -27.088913), (-58.857025, -13.889256, -39.327007), (-50.053783, -13.889256, -50.053783), (-39.327007, -13.889256, -58.857025), (-27.088913, -13.889256, -65.39842), (-13.809808, -13.889256, -69.42659), (-1.30033135e-14, -13.889256, -70.78674), (13.809808, -13.889256, -69.42659), (27.088913, -13.889256, -65.39842), (39.327007, -13.889256, -58.857025), (50.053783, -13.889256, -50.053783), (58.857025, -13.889256, -39.327007), (65.39842, -13.889256, -27.088913), (69.42659, -13.889256, -13.809808), (73.096985, -9.567086, 0), (71.69245, -9.567086, 14.260515), (67.532814, -9.567086, 27.973007), (60.777924, -9.567086, 40.61051), (51.687378, -9.567086, 51.687378), (40.61051, -9.567086, 60.777924), (27.973007, -9.567086, 67.532814), (14.260515, -9.567086, 71.69245), (4.4758995e-15, -9.567086, 73.096985), (-14.260515, -9.567086, 71.69245), (-27.973007, -9.567086, 67.532814), (-40.61051, -9.567086, 60.777924), (-51.687378, -9.567086, 51.687378), (-60.777924, -9.567086, 40.61051), (-67.532814, -9.567086, 27.973007), (-71.69245, -9.567086, 14.260515), (-73.096985, -9.567086, 8.951799e-15), (-71.69245, -9.567086, -14.260515), (-67.532814, -9.567086, -27.973007), (-60.777924, -9.567086, -40.61051), (-51.687378, -9.567086, -51.687378), (-40.61051, -9.567086, -60.777924), (-27.973007, -9.567086, -67.532814), (-14.260515, -9.567086, -71.69245), (-1.3427699e-14, -9.567086, -73.096985), (14.260515, -9.567086, -71.69245), (27.973007, -9.567086, -67.532814), (40.61051, -9.567086, -60.777924), (51.687378, -9.567086, -51.687378), (60.777924, -9.567086, -40.61051), (67.532814, -9.567086, -27.973007), (71.69245, -9.567086, -14.260515), (74.51963, -4.877258, 0), (73.08776, -4.877258, 14.538059), (68.84716, -4.877258, 28.51743), (61.960808, -4.877258, 41.40089), (52.693336, -4.877258, 52.693336), (41.40089, -4.877258, 61.960808), (28.51743, -4.877258, 68.84716), (14.538059, -4.877258, 73.08776), (4.5630114e-15, -4.877258, 74.51963), (-14.538059, -4.877258, 73.08776), (-28.51743, -4.877258, 68.84716), (-41.40089, -4.877258, 61.960808), (-52.693336, -4.877258, 52.693336), (-61.960808, -4.877258, 41.40089), (-68.84716, -4.877258, 28.51743), (-73.08776, -4.877258, 14.538059), (-74.51963, -4.877258, 9.126023e-15), (-73.08776, -4.877258, -14.538059), (-68.84716, -4.877258, -28.51743), (-61.960808, -4.877258, -41.40089), (-52.693336, -4.877258, -52.693336), (-41.40089, -4.877258, -61.960808), (-28.51743, -4.877258, -68.84716), (-14.538059, -4.877258, -73.08776), (-1.3689034e-14, -4.877258, -74.51963), (14.538059, -4.877258, -73.08776), (28.51743, -4.877258, -68.84716), (41.40089, -4.877258, -61.960808), (52.693336, -4.877258, -52.693336), (61.960808, -4.877258, -41.40089), (68.84716, -4.877258, -28.51743), (73.08776, -4.877258, -14.538059)] + float2[] primvars:st = [(1, 0), (1, 0.03125), (0.96875, 0.03125), (0.96875, 0), (0.96875, 0), (0.96875, 0.03125), (0.9375, 0.03125), (0.9375, 0), (0.9375, 0), (0.9375, 0.03125), (0.90625, 0.03125), (0.90625, 0), (0.90625, 0), (0.90625, 0.03125), (0.875, 0.03125), (0.875, 0), (0.875, 0), (0.875, 0.03125), (0.84375, 0.03125), (0.84375, 0), (0.84375, 0), (0.84375, 0.03125), (0.8125, 0.03125), (0.8125, 0), (0.8125, 0), (0.8125, 0.03125), (0.78125, 0.03125), (0.78125, 0), (0.78125, 0), (0.78125, 0.03125), (0.75, 0.03125), (0.75, 0), (0.75, 0), (0.75, 0.03125), (0.71875, 0.03125), (0.71875, 0), (0.71875, 0), (0.71875, 0.03125), (0.6875, 0.03125), (0.6875, 0), (0.6875, 0), (0.6875, 0.03125), (0.65625, 0.03125), (0.65625, 0), (0.65625, 0), (0.65625, 0.03125), (0.625, 0.03125), (0.625, 0), (0.625, 0), (0.625, 0.03125), (0.59375, 0.03125), (0.59375, 0), (0.59375, 0), (0.59375, 0.03125), (0.5625, 0.03125), (0.5625, 0), (0.5625, 0), (0.5625, 0.03125), (0.53125, 0.03125), (0.53125, 0), (0.53125, 0), (0.53125, 0.03125), (0.5, 0.03125), (0.5, 0), (0.5, 0), (0.5, 0.03125), (0.46875, 0.03125), (0.46875, 0), (0.46875, 0), (0.46875, 0.03125), (0.4375, 0.03125), (0.4375, 0), (0.4375, 0), (0.4375, 0.03125), (0.40625, 0.03125), (0.40625, 0), (0.40625, 0), (0.40625, 0.03125), (0.375, 0.03125), (0.375, 0), (0.375, 0), (0.375, 0.03125), (0.34375, 0.03125), (0.34375, 0), (0.34375, 0), (0.34375, 0.03125), (0.3125, 0.03125), (0.3125, 0), (0.3125, 0), (0.3125, 0.03125), (0.28125, 0.03125), (0.28125, 0), (0.28125, 0), (0.28125, 0.03125), (0.25, 0.03125), (0.25, 0), (0.25, 0), (0.25, 0.03125), (0.21875, 0.03125), (0.21875, 0), (0.21875, 0), (0.21875, 0.03125), (0.1875, 0.03125), (0.1875, 0), (0.1875, 0), (0.1875, 0.03125), (0.15625, 0.03125), (0.15625, 0), (0.15625, 0), (0.15625, 0.03125), (0.125, 0.03125), (0.125, 0), (0.125, 0), (0.125, 0.03125), (0.09375, 0.03125), (0.09375, 0), (0.09375, 0), (0.09375, 0.03125), (0.0625, 0.03125), (0.0625, 0), (0.0625, 0), (0.0625, 0.03125), (0.03125, 0.03125), (0.03125, 0), (0.03125, 0), (0.03125, 0.03125), (1, 0.03125), (1, 0), (1, 0.03125), (1, 0.0625), (0.96875, 0.0625), (0.96875, 0.03125), (0.96875, 0.03125), (0.96875, 0.0625), (0.9375, 0.0625), (0.9375, 0.03125), (0.9375, 0.03125), (0.9375, 0.0625), (0.90625, 0.0625), (0.90625, 0.03125), (0.90625, 0.03125), (0.90625, 0.0625), (0.875, 0.0625), (0.875, 0.03125), (0.875, 0.03125), (0.875, 0.0625), (0.84375, 0.0625), (0.84375, 0.03125), (0.84375, 0.03125), (0.84375, 0.0625), (0.8125, 0.0625), (0.8125, 0.03125), (0.8125, 0.03125), (0.8125, 0.0625), (0.78125, 0.0625), (0.78125, 0.03125), (0.78125, 0.03125), (0.78125, 0.0625), (0.75, 0.0625), (0.75, 0.03125), (0.75, 0.03125), (0.75, 0.0625), (0.71875, 0.0625), (0.71875, 0.03125), (0.71875, 0.03125), (0.71875, 0.0625), (0.6875, 0.0625), (0.6875, 0.03125), (0.6875, 0.03125), (0.6875, 0.0625), (0.65625, 0.0625), (0.65625, 0.03125), (0.65625, 0.03125), (0.65625, 0.0625), (0.625, 0.0625), (0.625, 0.03125), (0.625, 0.03125), (0.625, 0.0625), (0.59375, 0.0625), (0.59375, 0.03125), (0.59375, 0.03125), (0.59375, 0.0625), (0.5625, 0.0625), (0.5625, 0.03125), (0.5625, 0.03125), (0.5625, 0.0625), (0.53125, 0.0625), (0.53125, 0.03125), (0.53125, 0.03125), (0.53125, 0.0625), (0.5, 0.0625), (0.5, 0.03125), (0.5, 0.03125), (0.5, 0.0625), (0.46875, 0.0625), (0.46875, 0.03125), (0.46875, 0.03125), (0.46875, 0.0625), (0.4375, 0.0625), (0.4375, 0.03125), (0.4375, 0.03125), (0.4375, 0.0625), (0.40625, 0.0625), (0.40625, 0.03125), (0.40625, 0.03125), (0.40625, 0.0625), (0.375, 0.0625), (0.375, 0.03125), (0.375, 0.03125), (0.375, 0.0625), (0.34375, 0.0625), (0.34375, 0.03125), (0.34375, 0.03125), (0.34375, 0.0625), (0.3125, 0.0625), (0.3125, 0.03125), (0.3125, 0.03125), (0.3125, 0.0625), (0.28125, 0.0625), (0.28125, 0.03125), (0.28125, 0.03125), (0.28125, 0.0625), (0.25, 0.0625), (0.25, 0.03125), (0.25, 0.03125), (0.25, 0.0625), (0.21875, 0.0625), (0.21875, 0.03125), (0.21875, 0.03125), (0.21875, 0.0625), (0.1875, 0.0625), (0.1875, 0.03125), (0.1875, 0.03125), (0.1875, 0.0625), (0.15625, 0.0625), (0.15625, 0.03125), (0.15625, 0.03125), (0.15625, 0.0625), (0.125, 0.0625), (0.125, 0.03125), (0.125, 0.03125), (0.125, 0.0625), (0.09375, 0.0625), (0.09375, 0.03125), (0.09375, 0.03125), (0.09375, 0.0625), (0.0625, 0.0625), (0.0625, 0.03125), (0.0625, 0.03125), (0.0625, 0.0625), (0.03125, 0.0625), (0.03125, 0.03125), (0.03125, 0.03125), (0.03125, 0.0625), (1, 0.0625), (1, 0.03125), (1, 0.0625), (1, 0.09375), (0.96875, 0.09375), (0.96875, 0.0625), (0.96875, 0.0625), (0.96875, 0.09375), (0.9375, 0.09375), (0.9375, 0.0625), (0.9375, 0.0625), (0.9375, 0.09375), (0.90625, 0.09375), (0.90625, 0.0625), (0.90625, 0.0625), (0.90625, 0.09375), (0.875, 0.09375), (0.875, 0.0625), (0.875, 0.0625), (0.875, 0.09375), (0.84375, 0.09375), (0.84375, 0.0625), (0.84375, 0.0625), (0.84375, 0.09375), (0.8125, 0.09375), (0.8125, 0.0625), (0.8125, 0.0625), (0.8125, 0.09375), (0.78125, 0.09375), (0.78125, 0.0625), (0.78125, 0.0625), (0.78125, 0.09375), (0.75, 0.09375), (0.75, 0.0625), (0.75, 0.0625), (0.75, 0.09375), (0.71875, 0.09375), (0.71875, 0.0625), (0.71875, 0.0625), (0.71875, 0.09375), (0.6875, 0.09375), (0.6875, 0.0625), (0.6875, 0.0625), (0.6875, 0.09375), (0.65625, 0.09375), (0.65625, 0.0625), (0.65625, 0.0625), (0.65625, 0.09375), (0.625, 0.09375), (0.625, 0.0625), (0.625, 0.0625), (0.625, 0.09375), (0.59375, 0.09375), (0.59375, 0.0625), (0.59375, 0.0625), (0.59375, 0.09375), (0.5625, 0.09375), (0.5625, 0.0625), (0.5625, 0.0625), (0.5625, 0.09375), (0.53125, 0.09375), (0.53125, 0.0625), (0.53125, 0.0625), (0.53125, 0.09375), (0.5, 0.09375), (0.5, 0.0625), (0.5, 0.0625), (0.5, 0.09375), (0.46875, 0.09375), (0.46875, 0.0625), (0.46875, 0.0625), (0.46875, 0.09375), (0.4375, 0.09375), (0.4375, 0.0625), (0.4375, 0.0625), (0.4375, 0.09375), (0.40625, 0.09375), (0.40625, 0.0625), (0.40625, 0.0625), (0.40625, 0.09375), (0.375, 0.09375), (0.375, 0.0625), (0.375, 0.0625), (0.375, 0.09375), (0.34375, 0.09375), (0.34375, 0.0625), (0.34375, 0.0625), (0.34375, 0.09375), (0.3125, 0.09375), (0.3125, 0.0625), (0.3125, 0.0625), (0.3125, 0.09375), (0.28125, 0.09375), (0.28125, 0.0625), (0.28125, 0.0625), (0.28125, 0.09375), (0.25, 0.09375), (0.25, 0.0625), (0.25, 0.0625), (0.25, 0.09375), (0.21875, 0.09375), (0.21875, 0.0625), (0.21875, 0.0625), (0.21875, 0.09375), (0.1875, 0.09375), (0.1875, 0.0625), (0.1875, 0.0625), (0.1875, 0.09375), (0.15625, 0.09375), (0.15625, 0.0625), (0.15625, 0.0625), (0.15625, 0.09375), (0.125, 0.09375), (0.125, 0.0625), (0.125, 0.0625), (0.125, 0.09375), (0.09375, 0.09375), (0.09375, 0.0625), (0.09375, 0.0625), (0.09375, 0.09375), (0.0625, 0.09375), (0.0625, 0.0625), (0.0625, 0.0625), (0.0625, 0.09375), (0.03125, 0.09375), (0.03125, 0.0625), (0.03125, 0.0625), (0.03125, 0.09375), (1, 0.09375), (1, 0.0625), (1, 0.09375), (1, 0.125), (0.96875, 0.125), (0.96875, 0.09375), (0.96875, 0.09375), (0.96875, 0.125), (0.9375, 0.125), (0.9375, 0.09375), (0.9375, 0.09375), (0.9375, 0.125), (0.90625, 0.125), (0.90625, 0.09375), (0.90625, 0.09375), (0.90625, 0.125), (0.875, 0.125), (0.875, 0.09375), (0.875, 0.09375), (0.875, 0.125), (0.84375, 0.125), (0.84375, 0.09375), (0.84375, 0.09375), (0.84375, 0.125), (0.8125, 0.125), (0.8125, 0.09375), (0.8125, 0.09375), (0.8125, 0.125), (0.78125, 0.125), (0.78125, 0.09375), (0.78125, 0.09375), (0.78125, 0.125), (0.75, 0.125), (0.75, 0.09375), (0.75, 0.09375), (0.75, 0.125), (0.71875, 0.125), (0.71875, 0.09375), (0.71875, 0.09375), (0.71875, 0.125), (0.6875, 0.125), (0.6875, 0.09375), (0.6875, 0.09375), (0.6875, 0.125), (0.65625, 0.125), (0.65625, 0.09375), (0.65625, 0.09375), (0.65625, 0.125), (0.625, 0.125), (0.625, 0.09375), (0.625, 0.09375), (0.625, 0.125), (0.59375, 0.125), (0.59375, 0.09375), (0.59375, 0.09375), (0.59375, 0.125), (0.5625, 0.125), (0.5625, 0.09375), (0.5625, 0.09375), (0.5625, 0.125), (0.53125, 0.125), (0.53125, 0.09375), (0.53125, 0.09375), (0.53125, 0.125), (0.5, 0.125), (0.5, 0.09375), (0.5, 0.09375), (0.5, 0.125), (0.46875, 0.125), (0.46875, 0.09375), (0.46875, 0.09375), (0.46875, 0.125), (0.4375, 0.125), (0.4375, 0.09375), (0.4375, 0.09375), (0.4375, 0.125), (0.40625, 0.125), (0.40625, 0.09375), (0.40625, 0.09375), (0.40625, 0.125), (0.375, 0.125), (0.375, 0.09375), (0.375, 0.09375), (0.375, 0.125), (0.34375, 0.125), (0.34375, 0.09375), (0.34375, 0.09375), (0.34375, 0.125), (0.3125, 0.125), (0.3125, 0.09375), (0.3125, 0.09375), (0.3125, 0.125), (0.28125, 0.125), (0.28125, 0.09375), (0.28125, 0.09375), (0.28125, 0.125), (0.25, 0.125), (0.25, 0.09375), (0.25, 0.09375), (0.25, 0.125), (0.21875, 0.125), (0.21875, 0.09375), (0.21875, 0.09375), (0.21875, 0.125), (0.1875, 0.125), (0.1875, 0.09375), (0.1875, 0.09375), (0.1875, 0.125), (0.15625, 0.125), (0.15625, 0.09375), (0.15625, 0.09375), (0.15625, 0.125), (0.125, 0.125), (0.125, 0.09375), (0.125, 0.09375), (0.125, 0.125), (0.09375, 0.125), (0.09375, 0.09375), (0.09375, 0.09375), (0.09375, 0.125), (0.0625, 0.125), (0.0625, 0.09375), (0.0625, 0.09375), (0.0625, 0.125), (0.03125, 0.125), (0.03125, 0.09375), (0.03125, 0.09375), (0.03125, 0.125), (1, 0.125), (1, 0.09375), (1, 0.125), (1, 0.15625), (0.96875, 0.15625), (0.96875, 0.125), (0.96875, 0.125), (0.96875, 0.15625), (0.9375, 0.15625), (0.9375, 0.125), (0.9375, 0.125), (0.9375, 0.15625), (0.90625, 0.15625), (0.90625, 0.125), (0.90625, 0.125), (0.90625, 0.15625), (0.875, 0.15625), (0.875, 0.125), (0.875, 0.125), (0.875, 0.15625), (0.84375, 0.15625), (0.84375, 0.125), (0.84375, 0.125), (0.84375, 0.15625), (0.8125, 0.15625), (0.8125, 0.125), (0.8125, 0.125), (0.8125, 0.15625), (0.78125, 0.15625), (0.78125, 0.125), (0.78125, 0.125), (0.78125, 0.15625), (0.75, 0.15625), (0.75, 0.125), (0.75, 0.125), (0.75, 0.15625), (0.71875, 0.15625), (0.71875, 0.125), (0.71875, 0.125), (0.71875, 0.15625), (0.6875, 0.15625), (0.6875, 0.125), (0.6875, 0.125), (0.6875, 0.15625), (0.65625, 0.15625), (0.65625, 0.125), (0.65625, 0.125), (0.65625, 0.15625), (0.625, 0.15625), (0.625, 0.125), (0.625, 0.125), (0.625, 0.15625), (0.59375, 0.15625), (0.59375, 0.125), (0.59375, 0.125), (0.59375, 0.15625), (0.5625, 0.15625), (0.5625, 0.125), (0.5625, 0.125), (0.5625, 0.15625), (0.53125, 0.15625), (0.53125, 0.125), (0.53125, 0.125), (0.53125, 0.15625), (0.5, 0.15625), (0.5, 0.125), (0.5, 0.125), (0.5, 0.15625), (0.46875, 0.15625), (0.46875, 0.125), (0.46875, 0.125), (0.46875, 0.15625), (0.4375, 0.15625), (0.4375, 0.125), (0.4375, 0.125), (0.4375, 0.15625), (0.40625, 0.15625), (0.40625, 0.125), (0.40625, 0.125), (0.40625, 0.15625), (0.375, 0.15625), (0.375, 0.125), (0.375, 0.125), (0.375, 0.15625), (0.34375, 0.15625), (0.34375, 0.125), (0.34375, 0.125), (0.34375, 0.15625), (0.3125, 0.15625), (0.3125, 0.125), (0.3125, 0.125), (0.3125, 0.15625), (0.28125, 0.15625), (0.28125, 0.125), (0.28125, 0.125), (0.28125, 0.15625), (0.25, 0.15625), (0.25, 0.125), (0.25, 0.125), (0.25, 0.15625), (0.21875, 0.15625), (0.21875, 0.125), (0.21875, 0.125), (0.21875, 0.15625), (0.1875, 0.15625), (0.1875, 0.125), (0.1875, 0.125), (0.1875, 0.15625), (0.15625, 0.15625), (0.15625, 0.125), (0.15625, 0.125), (0.15625, 0.15625), (0.125, 0.15625), (0.125, 0.125), (0.125, 0.125), (0.125, 0.15625), (0.09375, 0.15625), (0.09375, 0.125), (0.09375, 0.125), (0.09375, 0.15625), (0.0625, 0.15625), (0.0625, 0.125), (0.0625, 0.125), (0.0625, 0.15625), (0.03125, 0.15625), (0.03125, 0.125), (0.03125, 0.125), (0.03125, 0.15625), (1, 0.15625), (1, 0.125), (1, 0.15625), (1, 0.1875), (0.96875, 0.1875), (0.96875, 0.15625), (0.96875, 0.15625), (0.96875, 0.1875), (0.9375, 0.1875), (0.9375, 0.15625), (0.9375, 0.15625), (0.9375, 0.1875), (0.90625, 0.1875), (0.90625, 0.15625), (0.90625, 0.15625), (0.90625, 0.1875), (0.875, 0.1875), (0.875, 0.15625), (0.875, 0.15625), (0.875, 0.1875), (0.84375, 0.1875), (0.84375, 0.15625), (0.84375, 0.15625), (0.84375, 0.1875), (0.8125, 0.1875), (0.8125, 0.15625), (0.8125, 0.15625), (0.8125, 0.1875), (0.78125, 0.1875), (0.78125, 0.15625), (0.78125, 0.15625), (0.78125, 0.1875), (0.75, 0.1875), (0.75, 0.15625), (0.75, 0.15625), (0.75, 0.1875), (0.71875, 0.1875), (0.71875, 0.15625), (0.71875, 0.15625), (0.71875, 0.1875), (0.6875, 0.1875), (0.6875, 0.15625), (0.6875, 0.15625), (0.6875, 0.1875), (0.65625, 0.1875), (0.65625, 0.15625), (0.65625, 0.15625), (0.65625, 0.1875), (0.625, 0.1875), (0.625, 0.15625), (0.625, 0.15625), (0.625, 0.1875), (0.59375, 0.1875), (0.59375, 0.15625), (0.59375, 0.15625), (0.59375, 0.1875), (0.5625, 0.1875), (0.5625, 0.15625), (0.5625, 0.15625), (0.5625, 0.1875), (0.53125, 0.1875), (0.53125, 0.15625), (0.53125, 0.15625), (0.53125, 0.1875), (0.5, 0.1875), (0.5, 0.15625), (0.5, 0.15625), (0.5, 0.1875), (0.46875, 0.1875), (0.46875, 0.15625), (0.46875, 0.15625), (0.46875, 0.1875), (0.4375, 0.1875), (0.4375, 0.15625), (0.4375, 0.15625), (0.4375, 0.1875), (0.40625, 0.1875), (0.40625, 0.15625), (0.40625, 0.15625), (0.40625, 0.1875), (0.375, 0.1875), (0.375, 0.15625), (0.375, 0.15625), (0.375, 0.1875), (0.34375, 0.1875), (0.34375, 0.15625), (0.34375, 0.15625), (0.34375, 0.1875), (0.3125, 0.1875), (0.3125, 0.15625), (0.3125, 0.15625), (0.3125, 0.1875), (0.28125, 0.1875), (0.28125, 0.15625), (0.28125, 0.15625), (0.28125, 0.1875), (0.25, 0.1875), (0.25, 0.15625), (0.25, 0.15625), (0.25, 0.1875), (0.21875, 0.1875), (0.21875, 0.15625), (0.21875, 0.15625), (0.21875, 0.1875), (0.1875, 0.1875), (0.1875, 0.15625), (0.1875, 0.15625), (0.1875, 0.1875), (0.15625, 0.1875), (0.15625, 0.15625), (0.15625, 0.15625), (0.15625, 0.1875), (0.125, 0.1875), (0.125, 0.15625), (0.125, 0.15625), (0.125, 0.1875), (0.09375, 0.1875), (0.09375, 0.15625), (0.09375, 0.15625), (0.09375, 0.1875), (0.0625, 0.1875), (0.0625, 0.15625), (0.0625, 0.15625), (0.0625, 0.1875), (0.03125, 0.1875), (0.03125, 0.15625), (0.03125, 0.15625), (0.03125, 0.1875), (1, 0.1875), (1, 0.15625), (1, 0.1875), (1, 0.21875), (0.96875, 0.21875), (0.96875, 0.1875), (0.96875, 0.1875), (0.96875, 0.21875), (0.9375, 0.21875), (0.9375, 0.1875), (0.9375, 0.1875), (0.9375, 0.21875), (0.90625, 0.21875), (0.90625, 0.1875), (0.90625, 0.1875), (0.90625, 0.21875), (0.875, 0.21875), (0.875, 0.1875), (0.875, 0.1875), (0.875, 0.21875), (0.84375, 0.21875), (0.84375, 0.1875), (0.84375, 0.1875), (0.84375, 0.21875), (0.8125, 0.21875), (0.8125, 0.1875), (0.8125, 0.1875), (0.8125, 0.21875), (0.78125, 0.21875), (0.78125, 0.1875), (0.78125, 0.1875), (0.78125, 0.21875), (0.75, 0.21875), (0.75, 0.1875), (0.75, 0.1875), (0.75, 0.21875), (0.71875, 0.21875), (0.71875, 0.1875), (0.71875, 0.1875), (0.71875, 0.21875), (0.6875, 0.21875), (0.6875, 0.1875), (0.6875, 0.1875), (0.6875, 0.21875), (0.65625, 0.21875), (0.65625, 0.1875), (0.65625, 0.1875), (0.65625, 0.21875), (0.625, 0.21875), (0.625, 0.1875), (0.625, 0.1875), (0.625, 0.21875), (0.59375, 0.21875), (0.59375, 0.1875), (0.59375, 0.1875), (0.59375, 0.21875), (0.5625, 0.21875), (0.5625, 0.1875), (0.5625, 0.1875), (0.5625, 0.21875), (0.53125, 0.21875), (0.53125, 0.1875), (0.53125, 0.1875), (0.53125, 0.21875), (0.5, 0.21875), (0.5, 0.1875), (0.5, 0.1875), (0.5, 0.21875), (0.46875, 0.21875), (0.46875, 0.1875), (0.46875, 0.1875), (0.46875, 0.21875), (0.4375, 0.21875), (0.4375, 0.1875), (0.4375, 0.1875), (0.4375, 0.21875), (0.40625, 0.21875), (0.40625, 0.1875), (0.40625, 0.1875), (0.40625, 0.21875), (0.375, 0.21875), (0.375, 0.1875), (0.375, 0.1875), (0.375, 0.21875), (0.34375, 0.21875), (0.34375, 0.1875), (0.34375, 0.1875), (0.34375, 0.21875), (0.3125, 0.21875), (0.3125, 0.1875), (0.3125, 0.1875), (0.3125, 0.21875), (0.28125, 0.21875), (0.28125, 0.1875), (0.28125, 0.1875), (0.28125, 0.21875), (0.25, 0.21875), (0.25, 0.1875), (0.25, 0.1875), (0.25, 0.21875), (0.21875, 0.21875), (0.21875, 0.1875), (0.21875, 0.1875), (0.21875, 0.21875), (0.1875, 0.21875), (0.1875, 0.1875), (0.1875, 0.1875), (0.1875, 0.21875), (0.15625, 0.21875), (0.15625, 0.1875), (0.15625, 0.1875), (0.15625, 0.21875), (0.125, 0.21875), (0.125, 0.1875), (0.125, 0.1875), (0.125, 0.21875), (0.09375, 0.21875), (0.09375, 0.1875), (0.09375, 0.1875), (0.09375, 0.21875), (0.0625, 0.21875), (0.0625, 0.1875), (0.0625, 0.1875), (0.0625, 0.21875), (0.03125, 0.21875), (0.03125, 0.1875), (0.03125, 0.1875), (0.03125, 0.21875), (1, 0.21875), (1, 0.1875), (1, 0.21875), (1, 0.25), (0.96875, 0.25), (0.96875, 0.21875), (0.96875, 0.21875), (0.96875, 0.25), (0.9375, 0.25), (0.9375, 0.21875), (0.9375, 0.21875), (0.9375, 0.25), (0.90625, 0.25), (0.90625, 0.21875), (0.90625, 0.21875), (0.90625, 0.25), (0.875, 0.25), (0.875, 0.21875), (0.875, 0.21875), (0.875, 0.25), (0.84375, 0.25), (0.84375, 0.21875), (0.84375, 0.21875), (0.84375, 0.25), (0.8125, 0.25), (0.8125, 0.21875), (0.8125, 0.21875), (0.8125, 0.25), (0.78125, 0.25), (0.78125, 0.21875), (0.78125, 0.21875), (0.78125, 0.25), (0.75, 0.25), (0.75, 0.21875), (0.75, 0.21875), (0.75, 0.25), (0.71875, 0.25), (0.71875, 0.21875), (0.71875, 0.21875), (0.71875, 0.25), (0.6875, 0.25), (0.6875, 0.21875), (0.6875, 0.21875), (0.6875, 0.25), (0.65625, 0.25), (0.65625, 0.21875), (0.65625, 0.21875), (0.65625, 0.25), (0.625, 0.25), (0.625, 0.21875), (0.625, 0.21875), (0.625, 0.25), (0.59375, 0.25), (0.59375, 0.21875), (0.59375, 0.21875), (0.59375, 0.25), (0.5625, 0.25), (0.5625, 0.21875), (0.5625, 0.21875), (0.5625, 0.25), (0.53125, 0.25), (0.53125, 0.21875), (0.53125, 0.21875), (0.53125, 0.25), (0.5, 0.25), (0.5, 0.21875), (0.5, 0.21875), (0.5, 0.25), (0.46875, 0.25), (0.46875, 0.21875), (0.46875, 0.21875), (0.46875, 0.25), (0.4375, 0.25), (0.4375, 0.21875), (0.4375, 0.21875), (0.4375, 0.25), (0.40625, 0.25), (0.40625, 0.21875), (0.40625, 0.21875), (0.40625, 0.25), (0.375, 0.25), (0.375, 0.21875), (0.375, 0.21875), (0.375, 0.25), (0.34375, 0.25), (0.34375, 0.21875), (0.34375, 0.21875), (0.34375, 0.25), (0.3125, 0.25), (0.3125, 0.21875), (0.3125, 0.21875), (0.3125, 0.25), (0.28125, 0.25), (0.28125, 0.21875), (0.28125, 0.21875), (0.28125, 0.25), (0.25, 0.25), (0.25, 0.21875), (0.25, 0.21875), (0.25, 0.25), (0.21875, 0.25), (0.21875, 0.21875), (0.21875, 0.21875), (0.21875, 0.25), (0.1875, 0.25), (0.1875, 0.21875), (0.1875, 0.21875), (0.1875, 0.25), (0.15625, 0.25), (0.15625, 0.21875), (0.15625, 0.21875), (0.15625, 0.25), (0.125, 0.25), (0.125, 0.21875), (0.125, 0.21875), (0.125, 0.25), (0.09375, 0.25), (0.09375, 0.21875), (0.09375, 0.21875), (0.09375, 0.25), (0.0625, 0.25), (0.0625, 0.21875), (0.0625, 0.21875), (0.0625, 0.25), (0.03125, 0.25), (0.03125, 0.21875), (0.03125, 0.21875), (0.03125, 0.25), (1, 0.25), (1, 0.21875), (1, 0.25), (1, 0.28125), (0.96875, 0.28125), (0.96875, 0.25), (0.96875, 0.25), (0.96875, 0.28125), (0.9375, 0.28125), (0.9375, 0.25), (0.9375, 0.25), (0.9375, 0.28125), (0.90625, 0.28125), (0.90625, 0.25), (0.90625, 0.25), (0.90625, 0.28125), (0.875, 0.28125), (0.875, 0.25), (0.875, 0.25), (0.875, 0.28125), (0.84375, 0.28125), (0.84375, 0.25), (0.84375, 0.25), (0.84375, 0.28125), (0.8125, 0.28125), (0.8125, 0.25), (0.8125, 0.25), (0.8125, 0.28125), (0.78125, 0.28125), (0.78125, 0.25), (0.78125, 0.25), (0.78125, 0.28125), (0.75, 0.28125), (0.75, 0.25), (0.75, 0.25), (0.75, 0.28125), (0.71875, 0.28125), (0.71875, 0.25), (0.71875, 0.25), (0.71875, 0.28125), (0.6875, 0.28125), (0.6875, 0.25), (0.6875, 0.25), (0.6875, 0.28125), (0.65625, 0.28125), (0.65625, 0.25), (0.65625, 0.25), (0.65625, 0.28125), (0.625, 0.28125), (0.625, 0.25), (0.625, 0.25), (0.625, 0.28125), (0.59375, 0.28125), (0.59375, 0.25), (0.59375, 0.25), (0.59375, 0.28125), (0.5625, 0.28125), (0.5625, 0.25), (0.5625, 0.25), (0.5625, 0.28125), (0.53125, 0.28125), (0.53125, 0.25), (0.53125, 0.25), (0.53125, 0.28125), (0.5, 0.28125), (0.5, 0.25), (0.5, 0.25), (0.5, 0.28125), (0.46875, 0.28125), (0.46875, 0.25), (0.46875, 0.25), (0.46875, 0.28125), (0.4375, 0.28125), (0.4375, 0.25), (0.4375, 0.25), (0.4375, 0.28125), (0.40625, 0.28125), (0.40625, 0.25), (0.40625, 0.25), (0.40625, 0.28125), (0.375, 0.28125), (0.375, 0.25), (0.375, 0.25), (0.375, 0.28125), (0.34375, 0.28125), (0.34375, 0.25), (0.34375, 0.25), (0.34375, 0.28125), (0.3125, 0.28125), (0.3125, 0.25), (0.3125, 0.25), (0.3125, 0.28125), (0.28125, 0.28125), (0.28125, 0.25), (0.28125, 0.25), (0.28125, 0.28125), (0.25, 0.28125), (0.25, 0.25), (0.25, 0.25), (0.25, 0.28125), (0.21875, 0.28125), (0.21875, 0.25), (0.21875, 0.25), (0.21875, 0.28125), (0.1875, 0.28125), (0.1875, 0.25), (0.1875, 0.25), (0.1875, 0.28125), (0.15625, 0.28125), (0.15625, 0.25), (0.15625, 0.25), (0.15625, 0.28125), (0.125, 0.28125), (0.125, 0.25), (0.125, 0.25), (0.125, 0.28125), (0.09375, 0.28125), (0.09375, 0.25), (0.09375, 0.25), (0.09375, 0.28125), (0.0625, 0.28125), (0.0625, 0.25), (0.0625, 0.25), (0.0625, 0.28125), (0.03125, 0.28125), (0.03125, 0.25), (0.03125, 0.25), (0.03125, 0.28125), (1, 0.28125), (1, 0.25), (1, 0.28125), (1, 0.3125), (0.96875, 0.3125), (0.96875, 0.28125), (0.96875, 0.28125), (0.96875, 0.3125), (0.9375, 0.3125), (0.9375, 0.28125), (0.9375, 0.28125), (0.9375, 0.3125), (0.90625, 0.3125), (0.90625, 0.28125), (0.90625, 0.28125), (0.90625, 0.3125), (0.875, 0.3125), (0.875, 0.28125), (0.875, 0.28125), (0.875, 0.3125), (0.84375, 0.3125), (0.84375, 0.28125), (0.84375, 0.28125), (0.84375, 0.3125), (0.8125, 0.3125), (0.8125, 0.28125), (0.8125, 0.28125), (0.8125, 0.3125), (0.78125, 0.3125), (0.78125, 0.28125), (0.78125, 0.28125), (0.78125, 0.3125), (0.75, 0.3125), (0.75, 0.28125), (0.75, 0.28125), (0.75, 0.3125), (0.71875, 0.3125), (0.71875, 0.28125), (0.71875, 0.28125), (0.71875, 0.3125), (0.6875, 0.3125), (0.6875, 0.28125), (0.6875, 0.28125), (0.6875, 0.3125), (0.65625, 0.3125), (0.65625, 0.28125), (0.65625, 0.28125), (0.65625, 0.3125), (0.625, 0.3125), (0.625, 0.28125), (0.625, 0.28125), (0.625, 0.3125), (0.59375, 0.3125), (0.59375, 0.28125), (0.59375, 0.28125), (0.59375, 0.3125), (0.5625, 0.3125), (0.5625, 0.28125), (0.5625, 0.28125), (0.5625, 0.3125), (0.53125, 0.3125), (0.53125, 0.28125), (0.53125, 0.28125), (0.53125, 0.3125), (0.5, 0.3125), (0.5, 0.28125), (0.5, 0.28125), (0.5, 0.3125), (0.46875, 0.3125), (0.46875, 0.28125), (0.46875, 0.28125), (0.46875, 0.3125), (0.4375, 0.3125), (0.4375, 0.28125), (0.4375, 0.28125), (0.4375, 0.3125), (0.40625, 0.3125), (0.40625, 0.28125), (0.40625, 0.28125), (0.40625, 0.3125), (0.375, 0.3125), (0.375, 0.28125), (0.375, 0.28125), (0.375, 0.3125), (0.34375, 0.3125), (0.34375, 0.28125), (0.34375, 0.28125), (0.34375, 0.3125), (0.3125, 0.3125), (0.3125, 0.28125), (0.3125, 0.28125), (0.3125, 0.3125), (0.28125, 0.3125), (0.28125, 0.28125), (0.28125, 0.28125), (0.28125, 0.3125), (0.25, 0.3125), (0.25, 0.28125), (0.25, 0.28125), (0.25, 0.3125), (0.21875, 0.3125), (0.21875, 0.28125), (0.21875, 0.28125), (0.21875, 0.3125), (0.1875, 0.3125), (0.1875, 0.28125), (0.1875, 0.28125), (0.1875, 0.3125), (0.15625, 0.3125), (0.15625, 0.28125), (0.15625, 0.28125), (0.15625, 0.3125), (0.125, 0.3125), (0.125, 0.28125), (0.125, 0.28125), (0.125, 0.3125), (0.09375, 0.3125), (0.09375, 0.28125), (0.09375, 0.28125), (0.09375, 0.3125), (0.0625, 0.3125), (0.0625, 0.28125), (0.0625, 0.28125), (0.0625, 0.3125), (0.03125, 0.3125), (0.03125, 0.28125), (0.03125, 0.28125), (0.03125, 0.3125), (1, 0.3125), (1, 0.28125), (1, 0.3125), (1, 0.34375), (0.96875, 0.34375), (0.96875, 0.3125), (0.96875, 0.3125), (0.96875, 0.34375), (0.9375, 0.34375), (0.9375, 0.3125), (0.9375, 0.3125), (0.9375, 0.34375), (0.90625, 0.34375), (0.90625, 0.3125), (0.90625, 0.3125), (0.90625, 0.34375), (0.875, 0.34375), (0.875, 0.3125), (0.875, 0.3125), (0.875, 0.34375), (0.84375, 0.34375), (0.84375, 0.3125), (0.84375, 0.3125), (0.84375, 0.34375), (0.8125, 0.34375), (0.8125, 0.3125), (0.8125, 0.3125), (0.8125, 0.34375), (0.78125, 0.34375), (0.78125, 0.3125), (0.78125, 0.3125), (0.78125, 0.34375), (0.75, 0.34375), (0.75, 0.3125), (0.75, 0.3125), (0.75, 0.34375), (0.71875, 0.34375), (0.71875, 0.3125), (0.71875, 0.3125), (0.71875, 0.34375), (0.6875, 0.34375), (0.6875, 0.3125), (0.6875, 0.3125), (0.6875, 0.34375), (0.65625, 0.34375), (0.65625, 0.3125), (0.65625, 0.3125), (0.65625, 0.34375), (0.625, 0.34375), (0.625, 0.3125), (0.625, 0.3125), (0.625, 0.34375), (0.59375, 0.34375), (0.59375, 0.3125), (0.59375, 0.3125), (0.59375, 0.34375), (0.5625, 0.34375), (0.5625, 0.3125), (0.5625, 0.3125), (0.5625, 0.34375), (0.53125, 0.34375), (0.53125, 0.3125), (0.53125, 0.3125), (0.53125, 0.34375), (0.5, 0.34375), (0.5, 0.3125), (0.5, 0.3125), (0.5, 0.34375), (0.46875, 0.34375), (0.46875, 0.3125), (0.46875, 0.3125), (0.46875, 0.34375), (0.4375, 0.34375), (0.4375, 0.3125), (0.4375, 0.3125), (0.4375, 0.34375), (0.40625, 0.34375), (0.40625, 0.3125), (0.40625, 0.3125), (0.40625, 0.34375), (0.375, 0.34375), (0.375, 0.3125), (0.375, 0.3125), (0.375, 0.34375), (0.34375, 0.34375), (0.34375, 0.3125), (0.34375, 0.3125), (0.34375, 0.34375), (0.3125, 0.34375), (0.3125, 0.3125), (0.3125, 0.3125), (0.3125, 0.34375), (0.28125, 0.34375), (0.28125, 0.3125), (0.28125, 0.3125), (0.28125, 0.34375), (0.25, 0.34375), (0.25, 0.3125), (0.25, 0.3125), (0.25, 0.34375), (0.21875, 0.34375), (0.21875, 0.3125), (0.21875, 0.3125), (0.21875, 0.34375), (0.1875, 0.34375), (0.1875, 0.3125), (0.1875, 0.3125), (0.1875, 0.34375), (0.15625, 0.34375), (0.15625, 0.3125), (0.15625, 0.3125), (0.15625, 0.34375), (0.125, 0.34375), (0.125, 0.3125), (0.125, 0.3125), (0.125, 0.34375), (0.09375, 0.34375), (0.09375, 0.3125), (0.09375, 0.3125), (0.09375, 0.34375), (0.0625, 0.34375), (0.0625, 0.3125), (0.0625, 0.3125), (0.0625, 0.34375), (0.03125, 0.34375), (0.03125, 0.3125), (0.03125, 0.3125), (0.03125, 0.34375), (1, 0.34375), (1, 0.3125), (1, 0.34375), (1, 0.375), (0.96875, 0.375), (0.96875, 0.34375), (0.96875, 0.34375), (0.96875, 0.375), (0.9375, 0.375), (0.9375, 0.34375), (0.9375, 0.34375), (0.9375, 0.375), (0.90625, 0.375), (0.90625, 0.34375), (0.90625, 0.34375), (0.90625, 0.375), (0.875, 0.375), (0.875, 0.34375), (0.875, 0.34375), (0.875, 0.375), (0.84375, 0.375), (0.84375, 0.34375), (0.84375, 0.34375), (0.84375, 0.375), (0.8125, 0.375), (0.8125, 0.34375), (0.8125, 0.34375), (0.8125, 0.375), (0.78125, 0.375), (0.78125, 0.34375), (0.78125, 0.34375), (0.78125, 0.375), (0.75, 0.375), (0.75, 0.34375), (0.75, 0.34375), (0.75, 0.375), (0.71875, 0.375), (0.71875, 0.34375), (0.71875, 0.34375), (0.71875, 0.375), (0.6875, 0.375), (0.6875, 0.34375), (0.6875, 0.34375), (0.6875, 0.375), (0.65625, 0.375), (0.65625, 0.34375), (0.65625, 0.34375), (0.65625, 0.375), (0.625, 0.375), (0.625, 0.34375), (0.625, 0.34375), (0.625, 0.375), (0.59375, 0.375), (0.59375, 0.34375), (0.59375, 0.34375), (0.59375, 0.375), (0.5625, 0.375), (0.5625, 0.34375), (0.5625, 0.34375), (0.5625, 0.375), (0.53125, 0.375), (0.53125, 0.34375), (0.53125, 0.34375), (0.53125, 0.375), (0.5, 0.375), (0.5, 0.34375), (0.5, 0.34375), (0.5, 0.375), (0.46875, 0.375), (0.46875, 0.34375), (0.46875, 0.34375), (0.46875, 0.375), (0.4375, 0.375), (0.4375, 0.34375), (0.4375, 0.34375), (0.4375, 0.375), (0.40625, 0.375), (0.40625, 0.34375), (0.40625, 0.34375), (0.40625, 0.375), (0.375, 0.375), (0.375, 0.34375), (0.375, 0.34375), (0.375, 0.375), (0.34375, 0.375), (0.34375, 0.34375), (0.34375, 0.34375), (0.34375, 0.375), (0.3125, 0.375), (0.3125, 0.34375), (0.3125, 0.34375), (0.3125, 0.375), (0.28125, 0.375), (0.28125, 0.34375), (0.28125, 0.34375), (0.28125, 0.375), (0.25, 0.375), (0.25, 0.34375), (0.25, 0.34375), (0.25, 0.375), (0.21875, 0.375), (0.21875, 0.34375), (0.21875, 0.34375), (0.21875, 0.375), (0.1875, 0.375), (0.1875, 0.34375), (0.1875, 0.34375), (0.1875, 0.375), (0.15625, 0.375), (0.15625, 0.34375), (0.15625, 0.34375), (0.15625, 0.375), (0.125, 0.375), (0.125, 0.34375), (0.125, 0.34375), (0.125, 0.375), (0.09375, 0.375), (0.09375, 0.34375), (0.09375, 0.34375), (0.09375, 0.375), (0.0625, 0.375), (0.0625, 0.34375), (0.0625, 0.34375), (0.0625, 0.375), (0.03125, 0.375), (0.03125, 0.34375), (0.03125, 0.34375), (0.03125, 0.375), (1, 0.375), (1, 0.34375), (1, 0.375), (1, 0.40625), (0.96875, 0.40625), (0.96875, 0.375), (0.96875, 0.375), (0.96875, 0.40625), (0.9375, 0.40625), (0.9375, 0.375), (0.9375, 0.375), (0.9375, 0.40625), (0.90625, 0.40625), (0.90625, 0.375), (0.90625, 0.375), (0.90625, 0.40625), (0.875, 0.40625), (0.875, 0.375), (0.875, 0.375), (0.875, 0.40625), (0.84375, 0.40625), (0.84375, 0.375), (0.84375, 0.375), (0.84375, 0.40625), (0.8125, 0.40625), (0.8125, 0.375), (0.8125, 0.375), (0.8125, 0.40625), (0.78125, 0.40625), (0.78125, 0.375), (0.78125, 0.375), (0.78125, 0.40625), (0.75, 0.40625), (0.75, 0.375), (0.75, 0.375), (0.75, 0.40625), (0.71875, 0.40625), (0.71875, 0.375), (0.71875, 0.375), (0.71875, 0.40625), (0.6875, 0.40625), (0.6875, 0.375), (0.6875, 0.375), (0.6875, 0.40625), (0.65625, 0.40625), (0.65625, 0.375), (0.65625, 0.375), (0.65625, 0.40625), (0.625, 0.40625), (0.625, 0.375), (0.625, 0.375), (0.625, 0.40625), (0.59375, 0.40625), (0.59375, 0.375), (0.59375, 0.375), (0.59375, 0.40625), (0.5625, 0.40625), (0.5625, 0.375), (0.5625, 0.375), (0.5625, 0.40625), (0.53125, 0.40625), (0.53125, 0.375), (0.53125, 0.375), (0.53125, 0.40625), (0.5, 0.40625), (0.5, 0.375), (0.5, 0.375), (0.5, 0.40625), (0.46875, 0.40625), (0.46875, 0.375), (0.46875, 0.375), (0.46875, 0.40625), (0.4375, 0.40625), (0.4375, 0.375), (0.4375, 0.375), (0.4375, 0.40625), (0.40625, 0.40625), (0.40625, 0.375), (0.40625, 0.375), (0.40625, 0.40625), (0.375, 0.40625), (0.375, 0.375), (0.375, 0.375), (0.375, 0.40625), (0.34375, 0.40625), (0.34375, 0.375), (0.34375, 0.375), (0.34375, 0.40625), (0.3125, 0.40625), (0.3125, 0.375), (0.3125, 0.375), (0.3125, 0.40625), (0.28125, 0.40625), (0.28125, 0.375), (0.28125, 0.375), (0.28125, 0.40625), (0.25, 0.40625), (0.25, 0.375), (0.25, 0.375), (0.25, 0.40625), (0.21875, 0.40625), (0.21875, 0.375), (0.21875, 0.375), (0.21875, 0.40625), (0.1875, 0.40625), (0.1875, 0.375), (0.1875, 0.375), (0.1875, 0.40625), (0.15625, 0.40625), (0.15625, 0.375), (0.15625, 0.375), (0.15625, 0.40625), (0.125, 0.40625), (0.125, 0.375), (0.125, 0.375), (0.125, 0.40625), (0.09375, 0.40625), (0.09375, 0.375), (0.09375, 0.375), (0.09375, 0.40625), (0.0625, 0.40625), (0.0625, 0.375), (0.0625, 0.375), (0.0625, 0.40625), (0.03125, 0.40625), (0.03125, 0.375), (0.03125, 0.375), (0.03125, 0.40625), (1, 0.40625), (1, 0.375), (1, 0.40625), (1, 0.4375), (0.96875, 0.4375), (0.96875, 0.40625), (0.96875, 0.40625), (0.96875, 0.4375), (0.9375, 0.4375), (0.9375, 0.40625), (0.9375, 0.40625), (0.9375, 0.4375), (0.90625, 0.4375), (0.90625, 0.40625), (0.90625, 0.40625), (0.90625, 0.4375), (0.875, 0.4375), (0.875, 0.40625), (0.875, 0.40625), (0.875, 0.4375), (0.84375, 0.4375), (0.84375, 0.40625), (0.84375, 0.40625), (0.84375, 0.4375), (0.8125, 0.4375), (0.8125, 0.40625), (0.8125, 0.40625), (0.8125, 0.4375), (0.78125, 0.4375), (0.78125, 0.40625), (0.78125, 0.40625), (0.78125, 0.4375), (0.75, 0.4375), (0.75, 0.40625), (0.75, 0.40625), (0.75, 0.4375), (0.71875, 0.4375), (0.71875, 0.40625), (0.71875, 0.40625), (0.71875, 0.4375), (0.6875, 0.4375), (0.6875, 0.40625), (0.6875, 0.40625), (0.6875, 0.4375), (0.65625, 0.4375), (0.65625, 0.40625), (0.65625, 0.40625), (0.65625, 0.4375), (0.625, 0.4375), (0.625, 0.40625), (0.625, 0.40625), (0.625, 0.4375), (0.59375, 0.4375), (0.59375, 0.40625), (0.59375, 0.40625), (0.59375, 0.4375), (0.5625, 0.4375), (0.5625, 0.40625), (0.5625, 0.40625), (0.5625, 0.4375), (0.53125, 0.4375), (0.53125, 0.40625), (0.53125, 0.40625), (0.53125, 0.4375), (0.5, 0.4375), (0.5, 0.40625), (0.5, 0.40625), (0.5, 0.4375), (0.46875, 0.4375), (0.46875, 0.40625), (0.46875, 0.40625), (0.46875, 0.4375), (0.4375, 0.4375), (0.4375, 0.40625), (0.4375, 0.40625), (0.4375, 0.4375), (0.40625, 0.4375), (0.40625, 0.40625), (0.40625, 0.40625), (0.40625, 0.4375), (0.375, 0.4375), (0.375, 0.40625), (0.375, 0.40625), (0.375, 0.4375), (0.34375, 0.4375), (0.34375, 0.40625), (0.34375, 0.40625), (0.34375, 0.4375), (0.3125, 0.4375), (0.3125, 0.40625), (0.3125, 0.40625), (0.3125, 0.4375), (0.28125, 0.4375), (0.28125, 0.40625), (0.28125, 0.40625), (0.28125, 0.4375), (0.25, 0.4375), (0.25, 0.40625), (0.25, 0.40625), (0.25, 0.4375), (0.21875, 0.4375), (0.21875, 0.40625), (0.21875, 0.40625), (0.21875, 0.4375), (0.1875, 0.4375), (0.1875, 0.40625), (0.1875, 0.40625), (0.1875, 0.4375), (0.15625, 0.4375), (0.15625, 0.40625), (0.15625, 0.40625), (0.15625, 0.4375), (0.125, 0.4375), (0.125, 0.40625), (0.125, 0.40625), (0.125, 0.4375), (0.09375, 0.4375), (0.09375, 0.40625), (0.09375, 0.40625), (0.09375, 0.4375), (0.0625, 0.4375), (0.0625, 0.40625), (0.0625, 0.40625), (0.0625, 0.4375), (0.03125, 0.4375), (0.03125, 0.40625), (0.03125, 0.40625), (0.03125, 0.4375), (1, 0.4375), (1, 0.40625), (1, 0.4375), (1, 0.46875), (0.96875, 0.46875), (0.96875, 0.4375), (0.96875, 0.4375), (0.96875, 0.46875), (0.9375, 0.46875), (0.9375, 0.4375), (0.9375, 0.4375), (0.9375, 0.46875), (0.90625, 0.46875), (0.90625, 0.4375), (0.90625, 0.4375), (0.90625, 0.46875), (0.875, 0.46875), (0.875, 0.4375), (0.875, 0.4375), (0.875, 0.46875), (0.84375, 0.46875), (0.84375, 0.4375), (0.84375, 0.4375), (0.84375, 0.46875), (0.8125, 0.46875), (0.8125, 0.4375), (0.8125, 0.4375), (0.8125, 0.46875), (0.78125, 0.46875), (0.78125, 0.4375), (0.78125, 0.4375), (0.78125, 0.46875), (0.75, 0.46875), (0.75, 0.4375), (0.75, 0.4375), (0.75, 0.46875), (0.71875, 0.46875), (0.71875, 0.4375), (0.71875, 0.4375), (0.71875, 0.46875), (0.6875, 0.46875), (0.6875, 0.4375), (0.6875, 0.4375), (0.6875, 0.46875), (0.65625, 0.46875), (0.65625, 0.4375), (0.65625, 0.4375), (0.65625, 0.46875), (0.625, 0.46875), (0.625, 0.4375), (0.625, 0.4375), (0.625, 0.46875), (0.59375, 0.46875), (0.59375, 0.4375), (0.59375, 0.4375), (0.59375, 0.46875), (0.5625, 0.46875), (0.5625, 0.4375), (0.5625, 0.4375), (0.5625, 0.46875), (0.53125, 0.46875), (0.53125, 0.4375), (0.53125, 0.4375), (0.53125, 0.46875), (0.5, 0.46875), (0.5, 0.4375), (0.5, 0.4375), (0.5, 0.46875), (0.46875, 0.46875), (0.46875, 0.4375), (0.46875, 0.4375), (0.46875, 0.46875), (0.4375, 0.46875), (0.4375, 0.4375), (0.4375, 0.4375), (0.4375, 0.46875), (0.40625, 0.46875), (0.40625, 0.4375), (0.40625, 0.4375), (0.40625, 0.46875), (0.375, 0.46875), (0.375, 0.4375), (0.375, 0.4375), (0.375, 0.46875), (0.34375, 0.46875), (0.34375, 0.4375), (0.34375, 0.4375), (0.34375, 0.46875), (0.3125, 0.46875), (0.3125, 0.4375), (0.3125, 0.4375), (0.3125, 0.46875), (0.28125, 0.46875), (0.28125, 0.4375), (0.28125, 0.4375), (0.28125, 0.46875), (0.25, 0.46875), (0.25, 0.4375), (0.25, 0.4375), (0.25, 0.46875), (0.21875, 0.46875), (0.21875, 0.4375), (0.21875, 0.4375), (0.21875, 0.46875), (0.1875, 0.46875), (0.1875, 0.4375), (0.1875, 0.4375), (0.1875, 0.46875), (0.15625, 0.46875), (0.15625, 0.4375), (0.15625, 0.4375), (0.15625, 0.46875), (0.125, 0.46875), (0.125, 0.4375), (0.125, 0.4375), (0.125, 0.46875), (0.09375, 0.46875), (0.09375, 0.4375), (0.09375, 0.4375), (0.09375, 0.46875), (0.0625, 0.46875), (0.0625, 0.4375), (0.0625, 0.4375), (0.0625, 0.46875), (0.03125, 0.46875), (0.03125, 0.4375), (0.03125, 0.4375), (0.03125, 0.46875), (1, 0.46875), (1, 0.4375), (1, 0.46875), (1, 0.5), (0.96875, 0.5), (0.96875, 0.46875), (0.96875, 0.46875), (0.96875, 0.5), (0.9375, 0.5), (0.9375, 0.46875), (0.9375, 0.46875), (0.9375, 0.5), (0.90625, 0.5), (0.90625, 0.46875), (0.90625, 0.46875), (0.90625, 0.5), (0.875, 0.5), (0.875, 0.46875), (0.875, 0.46875), (0.875, 0.5), (0.84375, 0.5), (0.84375, 0.46875), (0.84375, 0.46875), (0.84375, 0.5), (0.8125, 0.5), (0.8125, 0.46875), (0.8125, 0.46875), (0.8125, 0.5), (0.78125, 0.5), (0.78125, 0.46875), (0.78125, 0.46875), (0.78125, 0.5), (0.75, 0.5), (0.75, 0.46875), (0.75, 0.46875), (0.75, 0.5), (0.71875, 0.5), (0.71875, 0.46875), (0.71875, 0.46875), (0.71875, 0.5), (0.6875, 0.5), (0.6875, 0.46875), (0.6875, 0.46875), (0.6875, 0.5), (0.65625, 0.5), (0.65625, 0.46875), (0.65625, 0.46875), (0.65625, 0.5), (0.625, 0.5), (0.625, 0.46875), (0.625, 0.46875), (0.625, 0.5), (0.59375, 0.5), (0.59375, 0.46875), (0.59375, 0.46875), (0.59375, 0.5), (0.5625, 0.5), (0.5625, 0.46875), (0.5625, 0.46875), (0.5625, 0.5), (0.53125, 0.5), (0.53125, 0.46875), (0.53125, 0.46875), (0.53125, 0.5), (0.5, 0.5), (0.5, 0.46875), (0.5, 0.46875), (0.5, 0.5), (0.46875, 0.5), (0.46875, 0.46875), (0.46875, 0.46875), (0.46875, 0.5), (0.4375, 0.5), (0.4375, 0.46875), (0.4375, 0.46875), (0.4375, 0.5), (0.40625, 0.5), (0.40625, 0.46875), (0.40625, 0.46875), (0.40625, 0.5), (0.375, 0.5), (0.375, 0.46875), (0.375, 0.46875), (0.375, 0.5), (0.34375, 0.5), (0.34375, 0.46875), (0.34375, 0.46875), (0.34375, 0.5), (0.3125, 0.5), (0.3125, 0.46875), (0.3125, 0.46875), (0.3125, 0.5), (0.28125, 0.5), (0.28125, 0.46875), (0.28125, 0.46875), (0.28125, 0.5), (0.25, 0.5), (0.25, 0.46875), (0.25, 0.46875), (0.25, 0.5), (0.21875, 0.5), (0.21875, 0.46875), (0.21875, 0.46875), (0.21875, 0.5), (0.1875, 0.5), (0.1875, 0.46875), (0.1875, 0.46875), (0.1875, 0.5), (0.15625, 0.5), (0.15625, 0.46875), (0.15625, 0.46875), (0.15625, 0.5), (0.125, 0.5), (0.125, 0.46875), (0.125, 0.46875), (0.125, 0.5), (0.09375, 0.5), (0.09375, 0.46875), (0.09375, 0.46875), (0.09375, 0.5), (0.0625, 0.5), (0.0625, 0.46875), (0.0625, 0.46875), (0.0625, 0.5), (0.03125, 0.5), (0.03125, 0.46875), (0.03125, 0.46875), (0.03125, 0.5), (1, 0.5), (1, 0.46875), (1, 0.5), (1, 0.53125), (0.96875, 0.53125), (0.96875, 0.5), (0.96875, 0.5), (0.96875, 0.53125), (0.9375, 0.53125), (0.9375, 0.5), (0.9375, 0.5), (0.9375, 0.53125), (0.90625, 0.53125), (0.90625, 0.5), (0.90625, 0.5), (0.90625, 0.53125), (0.875, 0.53125), (0.875, 0.5), (0.875, 0.5), (0.875, 0.53125), (0.84375, 0.53125), (0.84375, 0.5), (0.84375, 0.5), (0.84375, 0.53125), (0.8125, 0.53125), (0.8125, 0.5), (0.8125, 0.5), (0.8125, 0.53125), (0.78125, 0.53125), (0.78125, 0.5), (0.78125, 0.5), (0.78125, 0.53125), (0.75, 0.53125), (0.75, 0.5), (0.75, 0.5), (0.75, 0.53125), (0.71875, 0.53125), (0.71875, 0.5), (0.71875, 0.5), (0.71875, 0.53125), (0.6875, 0.53125), (0.6875, 0.5), (0.6875, 0.5), (0.6875, 0.53125), (0.65625, 0.53125), (0.65625, 0.5), (0.65625, 0.5), (0.65625, 0.53125), (0.625, 0.53125), (0.625, 0.5), (0.625, 0.5), (0.625, 0.53125), (0.59375, 0.53125), (0.59375, 0.5), (0.59375, 0.5), (0.59375, 0.53125), (0.5625, 0.53125), (0.5625, 0.5), (0.5625, 0.5), (0.5625, 0.53125), (0.53125, 0.53125), (0.53125, 0.5), (0.53125, 0.5), (0.53125, 0.53125), (0.5, 0.53125), (0.5, 0.5), (0.5, 0.5), (0.5, 0.53125), (0.46875, 0.53125), (0.46875, 0.5), (0.46875, 0.5), (0.46875, 0.53125), (0.4375, 0.53125), (0.4375, 0.5), (0.4375, 0.5), (0.4375, 0.53125), (0.40625, 0.53125), (0.40625, 0.5), (0.40625, 0.5), (0.40625, 0.53125), (0.375, 0.53125), (0.375, 0.5), (0.375, 0.5), (0.375, 0.53125), (0.34375, 0.53125), (0.34375, 0.5), (0.34375, 0.5), (0.34375, 0.53125), (0.3125, 0.53125), (0.3125, 0.5), (0.3125, 0.5), (0.3125, 0.53125), (0.28125, 0.53125), (0.28125, 0.5), (0.28125, 0.5), (0.28125, 0.53125), (0.25, 0.53125), (0.25, 0.5), (0.25, 0.5), (0.25, 0.53125), (0.21875, 0.53125), (0.21875, 0.5), (0.21875, 0.5), (0.21875, 0.53125), (0.1875, 0.53125), (0.1875, 0.5), (0.1875, 0.5), (0.1875, 0.53125), (0.15625, 0.53125), (0.15625, 0.5), (0.15625, 0.5), (0.15625, 0.53125), (0.125, 0.53125), (0.125, 0.5), (0.125, 0.5), (0.125, 0.53125), (0.09375, 0.53125), (0.09375, 0.5), (0.09375, 0.5), (0.09375, 0.53125), (0.0625, 0.53125), (0.0625, 0.5), (0.0625, 0.5), (0.0625, 0.53125), (0.03125, 0.53125), (0.03125, 0.5), (0.03125, 0.5), (0.03125, 0.53125), (1, 0.53125), (1, 0.5), (1, 0.53125), (1, 0.5625), (0.96875, 0.5625), (0.96875, 0.53125), (0.96875, 0.53125), (0.96875, 0.5625), (0.9375, 0.5625), (0.9375, 0.53125), (0.9375, 0.53125), (0.9375, 0.5625), (0.90625, 0.5625), (0.90625, 0.53125), (0.90625, 0.53125), (0.90625, 0.5625), (0.875, 0.5625), (0.875, 0.53125), (0.875, 0.53125), (0.875, 0.5625), (0.84375, 0.5625), (0.84375, 0.53125), (0.84375, 0.53125), (0.84375, 0.5625), (0.8125, 0.5625), (0.8125, 0.53125), (0.8125, 0.53125), (0.8125, 0.5625), (0.78125, 0.5625), (0.78125, 0.53125), (0.78125, 0.53125), (0.78125, 0.5625), (0.75, 0.5625), (0.75, 0.53125), (0.75, 0.53125), (0.75, 0.5625), (0.71875, 0.5625), (0.71875, 0.53125), (0.71875, 0.53125), (0.71875, 0.5625), (0.6875, 0.5625), (0.6875, 0.53125), (0.6875, 0.53125), (0.6875, 0.5625), (0.65625, 0.5625), (0.65625, 0.53125), (0.65625, 0.53125), (0.65625, 0.5625), (0.625, 0.5625), (0.625, 0.53125), (0.625, 0.53125), (0.625, 0.5625), (0.59375, 0.5625), (0.59375, 0.53125), (0.59375, 0.53125), (0.59375, 0.5625), (0.5625, 0.5625), (0.5625, 0.53125), (0.5625, 0.53125), (0.5625, 0.5625), (0.53125, 0.5625), (0.53125, 0.53125), (0.53125, 0.53125), (0.53125, 0.5625), (0.5, 0.5625), (0.5, 0.53125), (0.5, 0.53125), (0.5, 0.5625), (0.46875, 0.5625), (0.46875, 0.53125), (0.46875, 0.53125), (0.46875, 0.5625), (0.4375, 0.5625), (0.4375, 0.53125), (0.4375, 0.53125), (0.4375, 0.5625), (0.40625, 0.5625), (0.40625, 0.53125), (0.40625, 0.53125), (0.40625, 0.5625), (0.375, 0.5625), (0.375, 0.53125), (0.375, 0.53125), (0.375, 0.5625), (0.34375, 0.5625), (0.34375, 0.53125), (0.34375, 0.53125), (0.34375, 0.5625), (0.3125, 0.5625), (0.3125, 0.53125), (0.3125, 0.53125), (0.3125, 0.5625), (0.28125, 0.5625), (0.28125, 0.53125), (0.28125, 0.53125), (0.28125, 0.5625), (0.25, 0.5625), (0.25, 0.53125), (0.25, 0.53125), (0.25, 0.5625), (0.21875, 0.5625), (0.21875, 0.53125), (0.21875, 0.53125), (0.21875, 0.5625), (0.1875, 0.5625), (0.1875, 0.53125), (0.1875, 0.53125), (0.1875, 0.5625), (0.15625, 0.5625), (0.15625, 0.53125), (0.15625, 0.53125), (0.15625, 0.5625), (0.125, 0.5625), (0.125, 0.53125), (0.125, 0.53125), (0.125, 0.5625), (0.09375, 0.5625), (0.09375, 0.53125), (0.09375, 0.53125), (0.09375, 0.5625), (0.0625, 0.5625), (0.0625, 0.53125), (0.0625, 0.53125), (0.0625, 0.5625), (0.03125, 0.5625), (0.03125, 0.53125), (0.03125, 0.53125), (0.03125, 0.5625), (1, 0.5625), (1, 0.53125), (1, 0.5625), (1, 0.59375), (0.96875, 0.59375), (0.96875, 0.5625), (0.96875, 0.5625), (0.96875, 0.59375), (0.9375, 0.59375), (0.9375, 0.5625), (0.9375, 0.5625), (0.9375, 0.59375), (0.90625, 0.59375), (0.90625, 0.5625), (0.90625, 0.5625), (0.90625, 0.59375), (0.875, 0.59375), (0.875, 0.5625), (0.875, 0.5625), (0.875, 0.59375), (0.84375, 0.59375), (0.84375, 0.5625), (0.84375, 0.5625), (0.84375, 0.59375), (0.8125, 0.59375), (0.8125, 0.5625), (0.8125, 0.5625), (0.8125, 0.59375), (0.78125, 0.59375), (0.78125, 0.5625), (0.78125, 0.5625), (0.78125, 0.59375), (0.75, 0.59375), (0.75, 0.5625), (0.75, 0.5625), (0.75, 0.59375), (0.71875, 0.59375), (0.71875, 0.5625), (0.71875, 0.5625), (0.71875, 0.59375), (0.6875, 0.59375), (0.6875, 0.5625), (0.6875, 0.5625), (0.6875, 0.59375), (0.65625, 0.59375), (0.65625, 0.5625), (0.65625, 0.5625), (0.65625, 0.59375), (0.625, 0.59375), (0.625, 0.5625), (0.625, 0.5625), (0.625, 0.59375), (0.59375, 0.59375), (0.59375, 0.5625), (0.59375, 0.5625), (0.59375, 0.59375), (0.5625, 0.59375), (0.5625, 0.5625), (0.5625, 0.5625), (0.5625, 0.59375), (0.53125, 0.59375), (0.53125, 0.5625), (0.53125, 0.5625), (0.53125, 0.59375), (0.5, 0.59375), (0.5, 0.5625), (0.5, 0.5625), (0.5, 0.59375), (0.46875, 0.59375), (0.46875, 0.5625), (0.46875, 0.5625), (0.46875, 0.59375), (0.4375, 0.59375), (0.4375, 0.5625), (0.4375, 0.5625), (0.4375, 0.59375), (0.40625, 0.59375), (0.40625, 0.5625), (0.40625, 0.5625), (0.40625, 0.59375), (0.375, 0.59375), (0.375, 0.5625), (0.375, 0.5625), (0.375, 0.59375), (0.34375, 0.59375), (0.34375, 0.5625), (0.34375, 0.5625), (0.34375, 0.59375), (0.3125, 0.59375), (0.3125, 0.5625), (0.3125, 0.5625), (0.3125, 0.59375), (0.28125, 0.59375), (0.28125, 0.5625), (0.28125, 0.5625), (0.28125, 0.59375), (0.25, 0.59375), (0.25, 0.5625), (0.25, 0.5625), (0.25, 0.59375), (0.21875, 0.59375), (0.21875, 0.5625), (0.21875, 0.5625), (0.21875, 0.59375), (0.1875, 0.59375), (0.1875, 0.5625), (0.1875, 0.5625), (0.1875, 0.59375), (0.15625, 0.59375), (0.15625, 0.5625), (0.15625, 0.5625), (0.15625, 0.59375), (0.125, 0.59375), (0.125, 0.5625), (0.125, 0.5625), (0.125, 0.59375), (0.09375, 0.59375), (0.09375, 0.5625), (0.09375, 0.5625), (0.09375, 0.59375), (0.0625, 0.59375), (0.0625, 0.5625), (0.0625, 0.5625), (0.0625, 0.59375), (0.03125, 0.59375), (0.03125, 0.5625), (0.03125, 0.5625), (0.03125, 0.59375), (1, 0.59375), (1, 0.5625), (1, 0.59375), (1, 0.625), (0.96875, 0.625), (0.96875, 0.59375), (0.96875, 0.59375), (0.96875, 0.625), (0.9375, 0.625), (0.9375, 0.59375), (0.9375, 0.59375), (0.9375, 0.625), (0.90625, 0.625), (0.90625, 0.59375), (0.90625, 0.59375), (0.90625, 0.625), (0.875, 0.625), (0.875, 0.59375), (0.875, 0.59375), (0.875, 0.625), (0.84375, 0.625), (0.84375, 0.59375), (0.84375, 0.59375), (0.84375, 0.625), (0.8125, 0.625), (0.8125, 0.59375), (0.8125, 0.59375), (0.8125, 0.625), (0.78125, 0.625), (0.78125, 0.59375), (0.78125, 0.59375), (0.78125, 0.625), (0.75, 0.625), (0.75, 0.59375), (0.75, 0.59375), (0.75, 0.625), (0.71875, 0.625), (0.71875, 0.59375), (0.71875, 0.59375), (0.71875, 0.625), (0.6875, 0.625), (0.6875, 0.59375), (0.6875, 0.59375), (0.6875, 0.625), (0.65625, 0.625), (0.65625, 0.59375), (0.65625, 0.59375), (0.65625, 0.625), (0.625, 0.625), (0.625, 0.59375), (0.625, 0.59375), (0.625, 0.625), (0.59375, 0.625), (0.59375, 0.59375), (0.59375, 0.59375), (0.59375, 0.625), (0.5625, 0.625), (0.5625, 0.59375), (0.5625, 0.59375), (0.5625, 0.625), (0.53125, 0.625), (0.53125, 0.59375), (0.53125, 0.59375), (0.53125, 0.625), (0.5, 0.625), (0.5, 0.59375), (0.5, 0.59375), (0.5, 0.625), (0.46875, 0.625), (0.46875, 0.59375), (0.46875, 0.59375), (0.46875, 0.625), (0.4375, 0.625), (0.4375, 0.59375), (0.4375, 0.59375), (0.4375, 0.625), (0.40625, 0.625), (0.40625, 0.59375), (0.40625, 0.59375), (0.40625, 0.625), (0.375, 0.625), (0.375, 0.59375), (0.375, 0.59375), (0.375, 0.625), (0.34375, 0.625), (0.34375, 0.59375), (0.34375, 0.59375), (0.34375, 0.625), (0.3125, 0.625), (0.3125, 0.59375), (0.3125, 0.59375), (0.3125, 0.625), (0.28125, 0.625), (0.28125, 0.59375), (0.28125, 0.59375), (0.28125, 0.625), (0.25, 0.625), (0.25, 0.59375), (0.25, 0.59375), (0.25, 0.625), (0.21875, 0.625), (0.21875, 0.59375), (0.21875, 0.59375), (0.21875, 0.625), (0.1875, 0.625), (0.1875, 0.59375), (0.1875, 0.59375), (0.1875, 0.625), (0.15625, 0.625), (0.15625, 0.59375), (0.15625, 0.59375), (0.15625, 0.625), (0.125, 0.625), (0.125, 0.59375), (0.125, 0.59375), (0.125, 0.625), (0.09375, 0.625), (0.09375, 0.59375), (0.09375, 0.59375), (0.09375, 0.625), (0.0625, 0.625), (0.0625, 0.59375), (0.0625, 0.59375), (0.0625, 0.625), (0.03125, 0.625), (0.03125, 0.59375), (0.03125, 0.59375), (0.03125, 0.625), (1, 0.625), (1, 0.59375), (1, 0.625), (1, 0.65625), (0.96875, 0.65625), (0.96875, 0.625), (0.96875, 0.625), (0.96875, 0.65625), (0.9375, 0.65625), (0.9375, 0.625), (0.9375, 0.625), (0.9375, 0.65625), (0.90625, 0.65625), (0.90625, 0.625), (0.90625, 0.625), (0.90625, 0.65625), (0.875, 0.65625), (0.875, 0.625), (0.875, 0.625), (0.875, 0.65625), (0.84375, 0.65625), (0.84375, 0.625), (0.84375, 0.625), (0.84375, 0.65625), (0.8125, 0.65625), (0.8125, 0.625), (0.8125, 0.625), (0.8125, 0.65625), (0.78125, 0.65625), (0.78125, 0.625), (0.78125, 0.625), (0.78125, 0.65625), (0.75, 0.65625), (0.75, 0.625), (0.75, 0.625), (0.75, 0.65625), (0.71875, 0.65625), (0.71875, 0.625), (0.71875, 0.625), (0.71875, 0.65625), (0.6875, 0.65625), (0.6875, 0.625), (0.6875, 0.625), (0.6875, 0.65625), (0.65625, 0.65625), (0.65625, 0.625), (0.65625, 0.625), (0.65625, 0.65625), (0.625, 0.65625), (0.625, 0.625), (0.625, 0.625), (0.625, 0.65625), (0.59375, 0.65625), (0.59375, 0.625), (0.59375, 0.625), (0.59375, 0.65625), (0.5625, 0.65625), (0.5625, 0.625), (0.5625, 0.625), (0.5625, 0.65625), (0.53125, 0.65625), (0.53125, 0.625), (0.53125, 0.625), (0.53125, 0.65625), (0.5, 0.65625), (0.5, 0.625), (0.5, 0.625), (0.5, 0.65625), (0.46875, 0.65625), (0.46875, 0.625), (0.46875, 0.625), (0.46875, 0.65625), (0.4375, 0.65625), (0.4375, 0.625), (0.4375, 0.625), (0.4375, 0.65625), (0.40625, 0.65625), (0.40625, 0.625), (0.40625, 0.625), (0.40625, 0.65625), (0.375, 0.65625), (0.375, 0.625), (0.375, 0.625), (0.375, 0.65625), (0.34375, 0.65625), (0.34375, 0.625), (0.34375, 0.625), (0.34375, 0.65625), (0.3125, 0.65625), (0.3125, 0.625), (0.3125, 0.625), (0.3125, 0.65625), (0.28125, 0.65625), (0.28125, 0.625), (0.28125, 0.625), (0.28125, 0.65625), (0.25, 0.65625), (0.25, 0.625), (0.25, 0.625), (0.25, 0.65625), (0.21875, 0.65625), (0.21875, 0.625), (0.21875, 0.625), (0.21875, 0.65625), (0.1875, 0.65625), (0.1875, 0.625), (0.1875, 0.625), (0.1875, 0.65625), (0.15625, 0.65625), (0.15625, 0.625), (0.15625, 0.625), (0.15625, 0.65625), (0.125, 0.65625), (0.125, 0.625), (0.125, 0.625), (0.125, 0.65625), (0.09375, 0.65625), (0.09375, 0.625), (0.09375, 0.625), (0.09375, 0.65625), (0.0625, 0.65625), (0.0625, 0.625), (0.0625, 0.625), (0.0625, 0.65625), (0.03125, 0.65625), (0.03125, 0.625), (0.03125, 0.625), (0.03125, 0.65625), (1, 0.65625), (1, 0.625), (1, 0.65625), (1, 0.6875), (0.96875, 0.6875), (0.96875, 0.65625), (0.96875, 0.65625), (0.96875, 0.6875), (0.9375, 0.6875), (0.9375, 0.65625), (0.9375, 0.65625), (0.9375, 0.6875), (0.90625, 0.6875), (0.90625, 0.65625), (0.90625, 0.65625), (0.90625, 0.6875), (0.875, 0.6875), (0.875, 0.65625), (0.875, 0.65625), (0.875, 0.6875), (0.84375, 0.6875), (0.84375, 0.65625), (0.84375, 0.65625), (0.84375, 0.6875), (0.8125, 0.6875), (0.8125, 0.65625), (0.8125, 0.65625), (0.8125, 0.6875), (0.78125, 0.6875), (0.78125, 0.65625), (0.78125, 0.65625), (0.78125, 0.6875), (0.75, 0.6875), (0.75, 0.65625), (0.75, 0.65625), (0.75, 0.6875), (0.71875, 0.6875), (0.71875, 0.65625), (0.71875, 0.65625), (0.71875, 0.6875), (0.6875, 0.6875), (0.6875, 0.65625), (0.6875, 0.65625), (0.6875, 0.6875), (0.65625, 0.6875), (0.65625, 0.65625), (0.65625, 0.65625), (0.65625, 0.6875), (0.625, 0.6875), (0.625, 0.65625), (0.625, 0.65625), (0.625, 0.6875), (0.59375, 0.6875), (0.59375, 0.65625), (0.59375, 0.65625), (0.59375, 0.6875), (0.5625, 0.6875), (0.5625, 0.65625), (0.5625, 0.65625), (0.5625, 0.6875), (0.53125, 0.6875), (0.53125, 0.65625), (0.53125, 0.65625), (0.53125, 0.6875), (0.5, 0.6875), (0.5, 0.65625), (0.5, 0.65625), (0.5, 0.6875), (0.46875, 0.6875), (0.46875, 0.65625), (0.46875, 0.65625), (0.46875, 0.6875), (0.4375, 0.6875), (0.4375, 0.65625), (0.4375, 0.65625), (0.4375, 0.6875), (0.40625, 0.6875), (0.40625, 0.65625), (0.40625, 0.65625), (0.40625, 0.6875), (0.375, 0.6875), (0.375, 0.65625), (0.375, 0.65625), (0.375, 0.6875), (0.34375, 0.6875), (0.34375, 0.65625), (0.34375, 0.65625), (0.34375, 0.6875), (0.3125, 0.6875), (0.3125, 0.65625), (0.3125, 0.65625), (0.3125, 0.6875), (0.28125, 0.6875), (0.28125, 0.65625), (0.28125, 0.65625), (0.28125, 0.6875), (0.25, 0.6875), (0.25, 0.65625), (0.25, 0.65625), (0.25, 0.6875), (0.21875, 0.6875), (0.21875, 0.65625), (0.21875, 0.65625), (0.21875, 0.6875), (0.1875, 0.6875), (0.1875, 0.65625), (0.1875, 0.65625), (0.1875, 0.6875), (0.15625, 0.6875), (0.15625, 0.65625), (0.15625, 0.65625), (0.15625, 0.6875), (0.125, 0.6875), (0.125, 0.65625), (0.125, 0.65625), (0.125, 0.6875), (0.09375, 0.6875), (0.09375, 0.65625), (0.09375, 0.65625), (0.09375, 0.6875), (0.0625, 0.6875), (0.0625, 0.65625), (0.0625, 0.65625), (0.0625, 0.6875), (0.03125, 0.6875), (0.03125, 0.65625), (0.03125, 0.65625), (0.03125, 0.6875), (1, 0.6875), (1, 0.65625), (1, 0.6875), (1, 0.71875), (0.96875, 0.71875), (0.96875, 0.6875), (0.96875, 0.6875), (0.96875, 0.71875), (0.9375, 0.71875), (0.9375, 0.6875), (0.9375, 0.6875), (0.9375, 0.71875), (0.90625, 0.71875), (0.90625, 0.6875), (0.90625, 0.6875), (0.90625, 0.71875), (0.875, 0.71875), (0.875, 0.6875), (0.875, 0.6875), (0.875, 0.71875), (0.84375, 0.71875), (0.84375, 0.6875), (0.84375, 0.6875), (0.84375, 0.71875), (0.8125, 0.71875), (0.8125, 0.6875), (0.8125, 0.6875), (0.8125, 0.71875), (0.78125, 0.71875), (0.78125, 0.6875), (0.78125, 0.6875), (0.78125, 0.71875), (0.75, 0.71875), (0.75, 0.6875), (0.75, 0.6875), (0.75, 0.71875), (0.71875, 0.71875), (0.71875, 0.6875), (0.71875, 0.6875), (0.71875, 0.71875), (0.6875, 0.71875), (0.6875, 0.6875), (0.6875, 0.6875), (0.6875, 0.71875), (0.65625, 0.71875), (0.65625, 0.6875), (0.65625, 0.6875), (0.65625, 0.71875), (0.625, 0.71875), (0.625, 0.6875), (0.625, 0.6875), (0.625, 0.71875), (0.59375, 0.71875), (0.59375, 0.6875), (0.59375, 0.6875), (0.59375, 0.71875), (0.5625, 0.71875), (0.5625, 0.6875), (0.5625, 0.6875), (0.5625, 0.71875), (0.53125, 0.71875), (0.53125, 0.6875), (0.53125, 0.6875), (0.53125, 0.71875), (0.5, 0.71875), (0.5, 0.6875), (0.5, 0.6875), (0.5, 0.71875), (0.46875, 0.71875), (0.46875, 0.6875), (0.46875, 0.6875), (0.46875, 0.71875), (0.4375, 0.71875), (0.4375, 0.6875), (0.4375, 0.6875), (0.4375, 0.71875), (0.40625, 0.71875), (0.40625, 0.6875), (0.40625, 0.6875), (0.40625, 0.71875), (0.375, 0.71875), (0.375, 0.6875), (0.375, 0.6875), (0.375, 0.71875), (0.34375, 0.71875), (0.34375, 0.6875), (0.34375, 0.6875), (0.34375, 0.71875), (0.3125, 0.71875), (0.3125, 0.6875), (0.3125, 0.6875), (0.3125, 0.71875), (0.28125, 0.71875), (0.28125, 0.6875), (0.28125, 0.6875), (0.28125, 0.71875), (0.25, 0.71875), (0.25, 0.6875), (0.25, 0.6875), (0.25, 0.71875), (0.21875, 0.71875), (0.21875, 0.6875), (0.21875, 0.6875), (0.21875, 0.71875), (0.1875, 0.71875), (0.1875, 0.6875), (0.1875, 0.6875), (0.1875, 0.71875), (0.15625, 0.71875), (0.15625, 0.6875), (0.15625, 0.6875), (0.15625, 0.71875), (0.125, 0.71875), (0.125, 0.6875), (0.125, 0.6875), (0.125, 0.71875), (0.09375, 0.71875), (0.09375, 0.6875), (0.09375, 0.6875), (0.09375, 0.71875), (0.0625, 0.71875), (0.0625, 0.6875), (0.0625, 0.6875), (0.0625, 0.71875), (0.03125, 0.71875), (0.03125, 0.6875), (0.03125, 0.6875), (0.03125, 0.71875), (1, 0.71875), (1, 0.6875), (1, 0.71875), (1, 0.75), (0.96875, 0.75), (0.96875, 0.71875), (0.96875, 0.71875), (0.96875, 0.75), (0.9375, 0.75), (0.9375, 0.71875), (0.9375, 0.71875), (0.9375, 0.75), (0.90625, 0.75), (0.90625, 0.71875), (0.90625, 0.71875), (0.90625, 0.75), (0.875, 0.75), (0.875, 0.71875), (0.875, 0.71875), (0.875, 0.75), (0.84375, 0.75), (0.84375, 0.71875), (0.84375, 0.71875), (0.84375, 0.75), (0.8125, 0.75), (0.8125, 0.71875), (0.8125, 0.71875), (0.8125, 0.75), (0.78125, 0.75), (0.78125, 0.71875), (0.78125, 0.71875), (0.78125, 0.75), (0.75, 0.75), (0.75, 0.71875), (0.75, 0.71875), (0.75, 0.75), (0.71875, 0.75), (0.71875, 0.71875), (0.71875, 0.71875), (0.71875, 0.75), (0.6875, 0.75), (0.6875, 0.71875), (0.6875, 0.71875), (0.6875, 0.75), (0.65625, 0.75), (0.65625, 0.71875), (0.65625, 0.71875), (0.65625, 0.75), (0.625, 0.75), (0.625, 0.71875), (0.625, 0.71875), (0.625, 0.75), (0.59375, 0.75), (0.59375, 0.71875), (0.59375, 0.71875), (0.59375, 0.75), (0.5625, 0.75), (0.5625, 0.71875), (0.5625, 0.71875), (0.5625, 0.75), (0.53125, 0.75), (0.53125, 0.71875), (0.53125, 0.71875), (0.53125, 0.75), (0.5, 0.75), (0.5, 0.71875), (0.5, 0.71875), (0.5, 0.75), (0.46875, 0.75), (0.46875, 0.71875), (0.46875, 0.71875), (0.46875, 0.75), (0.4375, 0.75), (0.4375, 0.71875), (0.4375, 0.71875), (0.4375, 0.75), (0.40625, 0.75), (0.40625, 0.71875), (0.40625, 0.71875), (0.40625, 0.75), (0.375, 0.75), (0.375, 0.71875), (0.375, 0.71875), (0.375, 0.75), (0.34375, 0.75), (0.34375, 0.71875), (0.34375, 0.71875), (0.34375, 0.75), (0.3125, 0.75), (0.3125, 0.71875), (0.3125, 0.71875), (0.3125, 0.75), (0.28125, 0.75), (0.28125, 0.71875), (0.28125, 0.71875), (0.28125, 0.75), (0.25, 0.75), (0.25, 0.71875), (0.25, 0.71875), (0.25, 0.75), (0.21875, 0.75), (0.21875, 0.71875), (0.21875, 0.71875), (0.21875, 0.75), (0.1875, 0.75), (0.1875, 0.71875), (0.1875, 0.71875), (0.1875, 0.75), (0.15625, 0.75), (0.15625, 0.71875), (0.15625, 0.71875), (0.15625, 0.75), (0.125, 0.75), (0.125, 0.71875), (0.125, 0.71875), (0.125, 0.75), (0.09375, 0.75), (0.09375, 0.71875), (0.09375, 0.71875), (0.09375, 0.75), (0.0625, 0.75), (0.0625, 0.71875), (0.0625, 0.71875), (0.0625, 0.75), (0.03125, 0.75), (0.03125, 0.71875), (0.03125, 0.71875), (0.03125, 0.75), (1, 0.75), (1, 0.71875), (1, 0.75), (1, 0.78125), (0.96875, 0.78125), (0.96875, 0.75), (0.96875, 0.75), (0.96875, 0.78125), (0.9375, 0.78125), (0.9375, 0.75), (0.9375, 0.75), (0.9375, 0.78125), (0.90625, 0.78125), (0.90625, 0.75), (0.90625, 0.75), (0.90625, 0.78125), (0.875, 0.78125), (0.875, 0.75), (0.875, 0.75), (0.875, 0.78125), (0.84375, 0.78125), (0.84375, 0.75), (0.84375, 0.75), (0.84375, 0.78125), (0.8125, 0.78125), (0.8125, 0.75), (0.8125, 0.75), (0.8125, 0.78125), (0.78125, 0.78125), (0.78125, 0.75), (0.78125, 0.75), (0.78125, 0.78125), (0.75, 0.78125), (0.75, 0.75), (0.75, 0.75), (0.75, 0.78125), (0.71875, 0.78125), (0.71875, 0.75), (0.71875, 0.75), (0.71875, 0.78125), (0.6875, 0.78125), (0.6875, 0.75), (0.6875, 0.75), (0.6875, 0.78125), (0.65625, 0.78125), (0.65625, 0.75), (0.65625, 0.75), (0.65625, 0.78125), (0.625, 0.78125), (0.625, 0.75), (0.625, 0.75), (0.625, 0.78125), (0.59375, 0.78125), (0.59375, 0.75), (0.59375, 0.75), (0.59375, 0.78125), (0.5625, 0.78125), (0.5625, 0.75), (0.5625, 0.75), (0.5625, 0.78125), (0.53125, 0.78125), (0.53125, 0.75), (0.53125, 0.75), (0.53125, 0.78125), (0.5, 0.78125), (0.5, 0.75), (0.5, 0.75), (0.5, 0.78125), (0.46875, 0.78125), (0.46875, 0.75), (0.46875, 0.75), (0.46875, 0.78125), (0.4375, 0.78125), (0.4375, 0.75), (0.4375, 0.75), (0.4375, 0.78125), (0.40625, 0.78125), (0.40625, 0.75), (0.40625, 0.75), (0.40625, 0.78125), (0.375, 0.78125), (0.375, 0.75), (0.375, 0.75), (0.375, 0.78125), (0.34375, 0.78125), (0.34375, 0.75), (0.34375, 0.75), (0.34375, 0.78125), (0.3125, 0.78125), (0.3125, 0.75), (0.3125, 0.75), (0.3125, 0.78125), (0.28125, 0.78125), (0.28125, 0.75), (0.28125, 0.75), (0.28125, 0.78125), (0.25, 0.78125), (0.25, 0.75), (0.25, 0.75), (0.25, 0.78125), (0.21875, 0.78125), (0.21875, 0.75), (0.21875, 0.75), (0.21875, 0.78125), (0.1875, 0.78125), (0.1875, 0.75), (0.1875, 0.75), (0.1875, 0.78125), (0.15625, 0.78125), (0.15625, 0.75), (0.15625, 0.75), (0.15625, 0.78125), (0.125, 0.78125), (0.125, 0.75), (0.125, 0.75), (0.125, 0.78125), (0.09375, 0.78125), (0.09375, 0.75), (0.09375, 0.75), (0.09375, 0.78125), (0.0625, 0.78125), (0.0625, 0.75), (0.0625, 0.75), (0.0625, 0.78125), (0.03125, 0.78125), (0.03125, 0.75), (0.03125, 0.75), (0.03125, 0.78125), (1, 0.78125), (1, 0.75), (1, 0.78125), (1, 0.8125), (0.96875, 0.8125), (0.96875, 0.78125), (0.96875, 0.78125), (0.96875, 0.8125), (0.9375, 0.8125), (0.9375, 0.78125), (0.9375, 0.78125), (0.9375, 0.8125), (0.90625, 0.8125), (0.90625, 0.78125), (0.90625, 0.78125), (0.90625, 0.8125), (0.875, 0.8125), (0.875, 0.78125), (0.875, 0.78125), (0.875, 0.8125), (0.84375, 0.8125), (0.84375, 0.78125), (0.84375, 0.78125), (0.84375, 0.8125), (0.8125, 0.8125), (0.8125, 0.78125), (0.8125, 0.78125), (0.8125, 0.8125), (0.78125, 0.8125), (0.78125, 0.78125), (0.78125, 0.78125), (0.78125, 0.8125), (0.75, 0.8125), (0.75, 0.78125), (0.75, 0.78125), (0.75, 0.8125), (0.71875, 0.8125), (0.71875, 0.78125), (0.71875, 0.78125), (0.71875, 0.8125), (0.6875, 0.8125), (0.6875, 0.78125), (0.6875, 0.78125), (0.6875, 0.8125), (0.65625, 0.8125), (0.65625, 0.78125), (0.65625, 0.78125), (0.65625, 0.8125), (0.625, 0.8125), (0.625, 0.78125), (0.625, 0.78125), (0.625, 0.8125), (0.59375, 0.8125), (0.59375, 0.78125), (0.59375, 0.78125), (0.59375, 0.8125), (0.5625, 0.8125), (0.5625, 0.78125), (0.5625, 0.78125), (0.5625, 0.8125), (0.53125, 0.8125), (0.53125, 0.78125), (0.53125, 0.78125), (0.53125, 0.8125), (0.5, 0.8125), (0.5, 0.78125), (0.5, 0.78125), (0.5, 0.8125), (0.46875, 0.8125), (0.46875, 0.78125), (0.46875, 0.78125), (0.46875, 0.8125), (0.4375, 0.8125), (0.4375, 0.78125), (0.4375, 0.78125), (0.4375, 0.8125), (0.40625, 0.8125), (0.40625, 0.78125), (0.40625, 0.78125), (0.40625, 0.8125), (0.375, 0.8125), (0.375, 0.78125), (0.375, 0.78125), (0.375, 0.8125), (0.34375, 0.8125), (0.34375, 0.78125), (0.34375, 0.78125), (0.34375, 0.8125), (0.3125, 0.8125), (0.3125, 0.78125), (0.3125, 0.78125), (0.3125, 0.8125), (0.28125, 0.8125), (0.28125, 0.78125), (0.28125, 0.78125), (0.28125, 0.8125), (0.25, 0.8125), (0.25, 0.78125), (0.25, 0.78125), (0.25, 0.8125), (0.21875, 0.8125), (0.21875, 0.78125), (0.21875, 0.78125), (0.21875, 0.8125), (0.1875, 0.8125), (0.1875, 0.78125), (0.1875, 0.78125), (0.1875, 0.8125), (0.15625, 0.8125), (0.15625, 0.78125), (0.15625, 0.78125), (0.15625, 0.8125), (0.125, 0.8125), (0.125, 0.78125), (0.125, 0.78125), (0.125, 0.8125), (0.09375, 0.8125), (0.09375, 0.78125), (0.09375, 0.78125), (0.09375, 0.8125), (0.0625, 0.8125), (0.0625, 0.78125), (0.0625, 0.78125), (0.0625, 0.8125), (0.03125, 0.8125), (0.03125, 0.78125), (0.03125, 0.78125), (0.03125, 0.8125), (1, 0.8125), (1, 0.78125), (1, 0.8125), (1, 0.84375), (0.96875, 0.84375), (0.96875, 0.8125), (0.96875, 0.8125), (0.96875, 0.84375), (0.9375, 0.84375), (0.9375, 0.8125), (0.9375, 0.8125), (0.9375, 0.84375), (0.90625, 0.84375), (0.90625, 0.8125), (0.90625, 0.8125), (0.90625, 0.84375), (0.875, 0.84375), (0.875, 0.8125), (0.875, 0.8125), (0.875, 0.84375), (0.84375, 0.84375), (0.84375, 0.8125), (0.84375, 0.8125), (0.84375, 0.84375), (0.8125, 0.84375), (0.8125, 0.8125), (0.8125, 0.8125), (0.8125, 0.84375), (0.78125, 0.84375), (0.78125, 0.8125), (0.78125, 0.8125), (0.78125, 0.84375), (0.75, 0.84375), (0.75, 0.8125), (0.75, 0.8125), (0.75, 0.84375), (0.71875, 0.84375), (0.71875, 0.8125), (0.71875, 0.8125), (0.71875, 0.84375), (0.6875, 0.84375), (0.6875, 0.8125), (0.6875, 0.8125), (0.6875, 0.84375), (0.65625, 0.84375), (0.65625, 0.8125), (0.65625, 0.8125), (0.65625, 0.84375), (0.625, 0.84375), (0.625, 0.8125), (0.625, 0.8125), (0.625, 0.84375), (0.59375, 0.84375), (0.59375, 0.8125), (0.59375, 0.8125), (0.59375, 0.84375), (0.5625, 0.84375), (0.5625, 0.8125), (0.5625, 0.8125), (0.5625, 0.84375), (0.53125, 0.84375), (0.53125, 0.8125), (0.53125, 0.8125), (0.53125, 0.84375), (0.5, 0.84375), (0.5, 0.8125), (0.5, 0.8125), (0.5, 0.84375), (0.46875, 0.84375), (0.46875, 0.8125), (0.46875, 0.8125), (0.46875, 0.84375), (0.4375, 0.84375), (0.4375, 0.8125), (0.4375, 0.8125), (0.4375, 0.84375), (0.40625, 0.84375), (0.40625, 0.8125), (0.40625, 0.8125), (0.40625, 0.84375), (0.375, 0.84375), (0.375, 0.8125), (0.375, 0.8125), (0.375, 0.84375), (0.34375, 0.84375), (0.34375, 0.8125), (0.34375, 0.8125), (0.34375, 0.84375), (0.3125, 0.84375), (0.3125, 0.8125), (0.3125, 0.8125), (0.3125, 0.84375), (0.28125, 0.84375), (0.28125, 0.8125), (0.28125, 0.8125), (0.28125, 0.84375), (0.25, 0.84375), (0.25, 0.8125), (0.25, 0.8125), (0.25, 0.84375), (0.21875, 0.84375), (0.21875, 0.8125), (0.21875, 0.8125), (0.21875, 0.84375), (0.1875, 0.84375), (0.1875, 0.8125), (0.1875, 0.8125), (0.1875, 0.84375), (0.15625, 0.84375), (0.15625, 0.8125), (0.15625, 0.8125), (0.15625, 0.84375), (0.125, 0.84375), (0.125, 0.8125), (0.125, 0.8125), (0.125, 0.84375), (0.09375, 0.84375), (0.09375, 0.8125), (0.09375, 0.8125), (0.09375, 0.84375), (0.0625, 0.84375), (0.0625, 0.8125), (0.0625, 0.8125), (0.0625, 0.84375), (0.03125, 0.84375), (0.03125, 0.8125), (0.03125, 0.8125), (0.03125, 0.84375), (1, 0.84375), (1, 0.8125), (1, 0.84375), (1, 0.875), (0.96875, 0.875), (0.96875, 0.84375), (0.96875, 0.84375), (0.96875, 0.875), (0.9375, 0.875), (0.9375, 0.84375), (0.9375, 0.84375), (0.9375, 0.875), (0.90625, 0.875), (0.90625, 0.84375), (0.90625, 0.84375), (0.90625, 0.875), (0.875, 0.875), (0.875, 0.84375), (0.875, 0.84375), (0.875, 0.875), (0.84375, 0.875), (0.84375, 0.84375), (0.84375, 0.84375), (0.84375, 0.875), (0.8125, 0.875), (0.8125, 0.84375), (0.8125, 0.84375), (0.8125, 0.875), (0.78125, 0.875), (0.78125, 0.84375), (0.78125, 0.84375), (0.78125, 0.875), (0.75, 0.875), (0.75, 0.84375), (0.75, 0.84375), (0.75, 0.875), (0.71875, 0.875), (0.71875, 0.84375), (0.71875, 0.84375), (0.71875, 0.875), (0.6875, 0.875), (0.6875, 0.84375), (0.6875, 0.84375), (0.6875, 0.875), (0.65625, 0.875), (0.65625, 0.84375), (0.65625, 0.84375), (0.65625, 0.875), (0.625, 0.875), (0.625, 0.84375), (0.625, 0.84375), (0.625, 0.875), (0.59375, 0.875), (0.59375, 0.84375), (0.59375, 0.84375), (0.59375, 0.875), (0.5625, 0.875), (0.5625, 0.84375), (0.5625, 0.84375), (0.5625, 0.875), (0.53125, 0.875), (0.53125, 0.84375), (0.53125, 0.84375), (0.53125, 0.875), (0.5, 0.875), (0.5, 0.84375), (0.5, 0.84375), (0.5, 0.875), (0.46875, 0.875), (0.46875, 0.84375), (0.46875, 0.84375), (0.46875, 0.875), (0.4375, 0.875), (0.4375, 0.84375), (0.4375, 0.84375), (0.4375, 0.875), (0.40625, 0.875), (0.40625, 0.84375), (0.40625, 0.84375), (0.40625, 0.875), (0.375, 0.875), (0.375, 0.84375), (0.375, 0.84375), (0.375, 0.875), (0.34375, 0.875), (0.34375, 0.84375), (0.34375, 0.84375), (0.34375, 0.875), (0.3125, 0.875), (0.3125, 0.84375), (0.3125, 0.84375), (0.3125, 0.875), (0.28125, 0.875), (0.28125, 0.84375), (0.28125, 0.84375), (0.28125, 0.875), (0.25, 0.875), (0.25, 0.84375), (0.25, 0.84375), (0.25, 0.875), (0.21875, 0.875), (0.21875, 0.84375), (0.21875, 0.84375), (0.21875, 0.875), (0.1875, 0.875), (0.1875, 0.84375), (0.1875, 0.84375), (0.1875, 0.875), (0.15625, 0.875), (0.15625, 0.84375), (0.15625, 0.84375), (0.15625, 0.875), (0.125, 0.875), (0.125, 0.84375), (0.125, 0.84375), (0.125, 0.875), (0.09375, 0.875), (0.09375, 0.84375), (0.09375, 0.84375), (0.09375, 0.875), (0.0625, 0.875), (0.0625, 0.84375), (0.0625, 0.84375), (0.0625, 0.875), (0.03125, 0.875), (0.03125, 0.84375), (0.03125, 0.84375), (0.03125, 0.875), (1, 0.875), (1, 0.84375), (1, 0.875), (1, 0.90625), (0.96875, 0.90625), (0.96875, 0.875), (0.96875, 0.875), (0.96875, 0.90625), (0.9375, 0.90625), (0.9375, 0.875), (0.9375, 0.875), (0.9375, 0.90625), (0.90625, 0.90625), (0.90625, 0.875), (0.90625, 0.875), (0.90625, 0.90625), (0.875, 0.90625), (0.875, 0.875), (0.875, 0.875), (0.875, 0.90625), (0.84375, 0.90625), (0.84375, 0.875), (0.84375, 0.875), (0.84375, 0.90625), (0.8125, 0.90625), (0.8125, 0.875), (0.8125, 0.875), (0.8125, 0.90625), (0.78125, 0.90625), (0.78125, 0.875), (0.78125, 0.875), (0.78125, 0.90625), (0.75, 0.90625), (0.75, 0.875), (0.75, 0.875), (0.75, 0.90625), (0.71875, 0.90625), (0.71875, 0.875), (0.71875, 0.875), (0.71875, 0.90625), (0.6875, 0.90625), (0.6875, 0.875), (0.6875, 0.875), (0.6875, 0.90625), (0.65625, 0.90625), (0.65625, 0.875), (0.65625, 0.875), (0.65625, 0.90625), (0.625, 0.90625), (0.625, 0.875), (0.625, 0.875), (0.625, 0.90625), (0.59375, 0.90625), (0.59375, 0.875), (0.59375, 0.875), (0.59375, 0.90625), (0.5625, 0.90625), (0.5625, 0.875), (0.5625, 0.875), (0.5625, 0.90625), (0.53125, 0.90625), (0.53125, 0.875), (0.53125, 0.875), (0.53125, 0.90625), (0.5, 0.90625), (0.5, 0.875), (0.5, 0.875), (0.5, 0.90625), (0.46875, 0.90625), (0.46875, 0.875), (0.46875, 0.875), (0.46875, 0.90625), (0.4375, 0.90625), (0.4375, 0.875), (0.4375, 0.875), (0.4375, 0.90625), (0.40625, 0.90625), (0.40625, 0.875), (0.40625, 0.875), (0.40625, 0.90625), (0.375, 0.90625), (0.375, 0.875), (0.375, 0.875), (0.375, 0.90625), (0.34375, 0.90625), (0.34375, 0.875), (0.34375, 0.875), (0.34375, 0.90625), (0.3125, 0.90625), (0.3125, 0.875), (0.3125, 0.875), (0.3125, 0.90625), (0.28125, 0.90625), (0.28125, 0.875), (0.28125, 0.875), (0.28125, 0.90625), (0.25, 0.90625), (0.25, 0.875), (0.25, 0.875), (0.25, 0.90625), (0.21875, 0.90625), (0.21875, 0.875), (0.21875, 0.875), (0.21875, 0.90625), (0.1875, 0.90625), (0.1875, 0.875), (0.1875, 0.875), (0.1875, 0.90625), (0.15625, 0.90625), (0.15625, 0.875), (0.15625, 0.875), (0.15625, 0.90625), (0.125, 0.90625), (0.125, 0.875), (0.125, 0.875), (0.125, 0.90625), (0.09375, 0.90625), (0.09375, 0.875), (0.09375, 0.875), (0.09375, 0.90625), (0.0625, 0.90625), (0.0625, 0.875), (0.0625, 0.875), (0.0625, 0.90625), (0.03125, 0.90625), (0.03125, 0.875), (0.03125, 0.875), (0.03125, 0.90625), (1, 0.90625), (1, 0.875), (1, 0.90625), (1, 0.9375), (0.96875, 0.9375), (0.96875, 0.90625), (0.96875, 0.90625), (0.96875, 0.9375), (0.9375, 0.9375), (0.9375, 0.90625), (0.9375, 0.90625), (0.9375, 0.9375), (0.90625, 0.9375), (0.90625, 0.90625), (0.90625, 0.90625), (0.90625, 0.9375), (0.875, 0.9375), (0.875, 0.90625), (0.875, 0.90625), (0.875, 0.9375), (0.84375, 0.9375), (0.84375, 0.90625), (0.84375, 0.90625), (0.84375, 0.9375), (0.8125, 0.9375), (0.8125, 0.90625), (0.8125, 0.90625), (0.8125, 0.9375), (0.78125, 0.9375), (0.78125, 0.90625), (0.78125, 0.90625), (0.78125, 0.9375), (0.75, 0.9375), (0.75, 0.90625), (0.75, 0.90625), (0.75, 0.9375), (0.71875, 0.9375), (0.71875, 0.90625), (0.71875, 0.90625), (0.71875, 0.9375), (0.6875, 0.9375), (0.6875, 0.90625), (0.6875, 0.90625), (0.6875, 0.9375), (0.65625, 0.9375), (0.65625, 0.90625), (0.65625, 0.90625), (0.65625, 0.9375), (0.625, 0.9375), (0.625, 0.90625), (0.625, 0.90625), (0.625, 0.9375), (0.59375, 0.9375), (0.59375, 0.90625), (0.59375, 0.90625), (0.59375, 0.9375), (0.5625, 0.9375), (0.5625, 0.90625), (0.5625, 0.90625), (0.5625, 0.9375), (0.53125, 0.9375), (0.53125, 0.90625), (0.53125, 0.90625), (0.53125, 0.9375), (0.5, 0.9375), (0.5, 0.90625), (0.5, 0.90625), (0.5, 0.9375), (0.46875, 0.9375), (0.46875, 0.90625), (0.46875, 0.90625), (0.46875, 0.9375), (0.4375, 0.9375), (0.4375, 0.90625), (0.4375, 0.90625), (0.4375, 0.9375), (0.40625, 0.9375), (0.40625, 0.90625), (0.40625, 0.90625), (0.40625, 0.9375), (0.375, 0.9375), (0.375, 0.90625), (0.375, 0.90625), (0.375, 0.9375), (0.34375, 0.9375), (0.34375, 0.90625), (0.34375, 0.90625), (0.34375, 0.9375), (0.3125, 0.9375), (0.3125, 0.90625), (0.3125, 0.90625), (0.3125, 0.9375), (0.28125, 0.9375), (0.28125, 0.90625), (0.28125, 0.90625), (0.28125, 0.9375), (0.25, 0.9375), (0.25, 0.90625), (0.25, 0.90625), (0.25, 0.9375), (0.21875, 0.9375), (0.21875, 0.90625), (0.21875, 0.90625), (0.21875, 0.9375), (0.1875, 0.9375), (0.1875, 0.90625), (0.1875, 0.90625), (0.1875, 0.9375), (0.15625, 0.9375), (0.15625, 0.90625), (0.15625, 0.90625), (0.15625, 0.9375), (0.125, 0.9375), (0.125, 0.90625), (0.125, 0.90625), (0.125, 0.9375), (0.09375, 0.9375), (0.09375, 0.90625), (0.09375, 0.90625), (0.09375, 0.9375), (0.0625, 0.9375), (0.0625, 0.90625), (0.0625, 0.90625), (0.0625, 0.9375), (0.03125, 0.9375), (0.03125, 0.90625), (0.03125, 0.90625), (0.03125, 0.9375), (1, 0.9375), (1, 0.90625), (1, 0.9375), (1, 0.96875), (0.96875, 0.96875), (0.96875, 0.9375), (0.96875, 0.9375), (0.96875, 0.96875), (0.9375, 0.96875), (0.9375, 0.9375), (0.9375, 0.9375), (0.9375, 0.96875), (0.90625, 0.96875), (0.90625, 0.9375), (0.90625, 0.9375), (0.90625, 0.96875), (0.875, 0.96875), (0.875, 0.9375), (0.875, 0.9375), (0.875, 0.96875), (0.84375, 0.96875), (0.84375, 0.9375), (0.84375, 0.9375), (0.84375, 0.96875), (0.8125, 0.96875), (0.8125, 0.9375), (0.8125, 0.9375), (0.8125, 0.96875), (0.78125, 0.96875), (0.78125, 0.9375), (0.78125, 0.9375), (0.78125, 0.96875), (0.75, 0.96875), (0.75, 0.9375), (0.75, 0.9375), (0.75, 0.96875), (0.71875, 0.96875), (0.71875, 0.9375), (0.71875, 0.9375), (0.71875, 0.96875), (0.6875, 0.96875), (0.6875, 0.9375), (0.6875, 0.9375), (0.6875, 0.96875), (0.65625, 0.96875), (0.65625, 0.9375), (0.65625, 0.9375), (0.65625, 0.96875), (0.625, 0.96875), (0.625, 0.9375), (0.625, 0.9375), (0.625, 0.96875), (0.59375, 0.96875), (0.59375, 0.9375), (0.59375, 0.9375), (0.59375, 0.96875), (0.5625, 0.96875), (0.5625, 0.9375), (0.5625, 0.9375), (0.5625, 0.96875), (0.53125, 0.96875), (0.53125, 0.9375), (0.53125, 0.9375), (0.53125, 0.96875), (0.5, 0.96875), (0.5, 0.9375), (0.5, 0.9375), (0.5, 0.96875), (0.46875, 0.96875), (0.46875, 0.9375), (0.46875, 0.9375), (0.46875, 0.96875), (0.4375, 0.96875), (0.4375, 0.9375), (0.4375, 0.9375), (0.4375, 0.96875), (0.40625, 0.96875), (0.40625, 0.9375), (0.40625, 0.9375), (0.40625, 0.96875), (0.375, 0.96875), (0.375, 0.9375), (0.375, 0.9375), (0.375, 0.96875), (0.34375, 0.96875), (0.34375, 0.9375), (0.34375, 0.9375), (0.34375, 0.96875), (0.3125, 0.96875), (0.3125, 0.9375), (0.3125, 0.9375), (0.3125, 0.96875), (0.28125, 0.96875), (0.28125, 0.9375), (0.28125, 0.9375), (0.28125, 0.96875), (0.25, 0.96875), (0.25, 0.9375), (0.25, 0.9375), (0.25, 0.96875), (0.21875, 0.96875), (0.21875, 0.9375), (0.21875, 0.9375), (0.21875, 0.96875), (0.1875, 0.96875), (0.1875, 0.9375), (0.1875, 0.9375), (0.1875, 0.96875), (0.15625, 0.96875), (0.15625, 0.9375), (0.15625, 0.9375), (0.15625, 0.96875), (0.125, 0.96875), (0.125, 0.9375), (0.125, 0.9375), (0.125, 0.96875), (0.09375, 0.96875), (0.09375, 0.9375), (0.09375, 0.9375), (0.09375, 0.96875), (0.0625, 0.96875), (0.0625, 0.9375), (0.0625, 0.9375), (0.0625, 0.96875), (0.03125, 0.96875), (0.03125, 0.9375), (0.03125, 0.9375), (0.03125, 0.96875), (1, 0.96875), (1, 0.9375), (1, 0.96875), (1, 1), (0.96875, 1), (0.96875, 0.96875), (0.96875, 0.96875), (0.96875, 1), (0.9375, 1), (0.9375, 0.96875), (0.9375, 0.96875), (0.9375, 1), (0.90625, 1), (0.90625, 0.96875), (0.90625, 0.96875), (0.90625, 1), (0.875, 1), (0.875, 0.96875), (0.875, 0.96875), (0.875, 1), (0.84375, 1), (0.84375, 0.96875), (0.84375, 0.96875), (0.84375, 1), (0.8125, 1), (0.8125, 0.96875), (0.8125, 0.96875), (0.8125, 1), (0.78125, 1), (0.78125, 0.96875), (0.78125, 0.96875), (0.78125, 1), (0.75, 1), (0.75, 0.96875), (0.75, 0.96875), (0.75, 1), (0.71875, 1), (0.71875, 0.96875), (0.71875, 0.96875), (0.71875, 1), (0.6875, 1), (0.6875, 0.96875), (0.6875, 0.96875), (0.6875, 1), (0.65625, 1), (0.65625, 0.96875), (0.65625, 0.96875), (0.65625, 1), (0.625, 1), (0.625, 0.96875), (0.625, 0.96875), (0.625, 1), (0.59375, 1), (0.59375, 0.96875), (0.59375, 0.96875), (0.59375, 1), (0.5625, 1), (0.5625, 0.96875), (0.5625, 0.96875), (0.5625, 1), (0.53125, 1), (0.53125, 0.96875), (0.53125, 0.96875), (0.53125, 1), (0.5, 1), (0.5, 0.96875), (0.5, 0.96875), (0.5, 1), (0.46875, 1), (0.46875, 0.96875), (0.46875, 0.96875), (0.46875, 1), (0.4375, 1), (0.4375, 0.96875), (0.4375, 0.96875), (0.4375, 1), (0.40625, 1), (0.40625, 0.96875), (0.40625, 0.96875), (0.40625, 1), (0.375, 1), (0.375, 0.96875), (0.375, 0.96875), (0.375, 1), (0.34375, 1), (0.34375, 0.96875), (0.34375, 0.96875), (0.34375, 1), (0.3125, 1), (0.3125, 0.96875), (0.3125, 0.96875), (0.3125, 1), (0.28125, 1), (0.28125, 0.96875), (0.28125, 0.96875), (0.28125, 1), (0.25, 1), (0.25, 0.96875), (0.25, 0.96875), (0.25, 1), (0.21875, 1), (0.21875, 0.96875), (0.21875, 0.96875), (0.21875, 1), (0.1875, 1), (0.1875, 0.96875), (0.1875, 0.96875), (0.1875, 1), (0.15625, 1), (0.15625, 0.96875), (0.15625, 0.96875), (0.15625, 1), (0.125, 1), (0.125, 0.96875), (0.125, 0.96875), (0.125, 1), (0.09375, 1), (0.09375, 0.96875), (0.09375, 0.96875), (0.09375, 1), (0.0625, 1), (0.0625, 0.96875), (0.0625, 0.96875), (0.0625, 1), (0.03125, 1), (0.03125, 0.96875), (0.03125, 0.96875), (0.03125, 1), (1, 1), (1, 0.96875)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (191.829495, 0, 193.258567) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Cube_02" ( + kind = "model" + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 4, 5, 1, 4, 0, 2, 6, 5, 4, 6, 7, 1, 5, 7, 3, 0, 1, 3, 2, 3, 7, 6, 2] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (-50, -50, 50), (-50, 50, -50), (-50, 50, 50), (50, -50, -50), (50, -50, 50), (50, 50, -50), (50, 50, 50)] + float2[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateZYX = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-212.165768, 0, 190.799459) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Cube_03" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (196.331, 0, -195.614) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniSurface_Cube" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-283.52087292432554, -1.6370904631912708e-11, -221.57136403754635) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniSurface_Cube_01" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-192.6883712993065, -1.6370904631912708e-11, -221.57136403754635) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def BasisCurves "OmniHair_BasisCurves" ( + prepend apiSchemas = ["MaterialBindingAPI"] + doc = "basisCurves from maya XGen-groom" + ) + { + uniform token basis = "bspline" + int[] curveVertexCounts = [6, 6, 6, 6] + float3[] extent = [(-46.947018, 3.6487765, 0.8009007), (40.807438, 51.74496, 20.45557)] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + point3f[] points = [(32.945724, 5.988041, 1.6308595), (34.137173, 10.148499, 1.3009007), (36.233295, 14.192265, 1.9558597), (36.296688, 17.675957, 2.4883246), (38.503635, 21.709782, 1.667905), (40.307438, 25.821293, 2.5520527), (-38.29307, 4.1487765, 3.3738482), (-39.96345, 9.926143, 3.413236), (-41.56703, 15.577562, 3.3603835), (-43.884335, 20.371292, 3.6131015), (-44.77227, 26.43213, 4.1838765), (-46.447018, 31.399565, 4.4703255), (8.541511, 21.105211, 2.5770526), (12.117597, 23.706623, 3.7534091), (16.399153, 33.008896, 5.090405), (20.606, 36.174828, 5.8582), (23.601883, 45.069645, 5.251637), (22.881294, 51.24496, 8.579195), (-12.140077, 16.870716, 7.574891), (-15.955103, 23.039955, 10.669359), (-19.113739, 25.761543, 16.080956), (-24.594814, 36.63467, 18.58584), (-30.864456, 42.528637, 19.731884), (-31.6773, 43.52253, 19.95557)] + color3f[] primvars:displayColor = [(1, 1, 1)] ( + interpolation = "constant" + ) + int primvars:endcaps = 0 + texCoord2f[] primvars:st1 = [(0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108)] ( + interpolation = "vertex" + ) + texCoord2f[] primvars:st2 = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)] ( + interpolation = "vertex" + ) + uniform token type = "cubic" + token ui:displayGroup = "Material Graphs" + token ui:displayName = "hair_basisCurves" + int ui:order = 1024 + float[] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ( + interpolation = "vertex" + ) + uniform token wrap = "pinned" + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-120, 0, -100) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniHair_Cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 4, 6, 7, 5, 6, 2, 3, 7, 4, 5, 1, 0, 4, 0, 2, 6, 5, 7, 3, 1] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, 50), (50, -50, 50), (-50, 50, 50), (50, 50, 50), (-50, -50, -50), (50, -50, -50), (-50, 50, -50), (50, 50, -50)] + texCoord2f[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 0), (0, 1), (0, 0), (1, 0), (1, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-90, 0, -221) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "PreviewSurface_mono_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-283.52087292432554, -1.6370904631912708e-11, 315.4231402711175) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "PreviewSurface_mono_lite_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-175.5202052948077, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "DebugWhite_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-67.89003031098687, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "Default_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (184.19079372412423, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "DebugWhiteEmissive_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (44.18136069402303, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } +} + diff --git a/source/extensions/iot_samples.panel_extension.setup/data/icon.png b/source/extensions/iot_samples.panel_extension.setup/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/icon.png differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/icons/caret_s2_left_dark.svg b/source/extensions/iot_samples.panel_extension.setup/data/icons/caret_s2_left_dark.svg new file mode 100644 index 0000000..c2529a3 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/data/icons/caret_s2_left_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/source/extensions/iot_samples.panel_extension.setup/data/icons/caret_s2_right_dark.svg b/source/extensions/iot_samples.panel_extension.setup/data/icons/caret_s2_right_dark.svg new file mode 100644 index 0000000..9a0b309 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/data/icons/caret_s2_right_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/source/extensions/iot_samples.panel_extension.setup/data/icons/navOpen_dark.svg b/source/extensions/iot_samples.panel_extension.setup/data/icons/navOpen_dark.svg new file mode 100644 index 0000000..10be3db --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/data/icons/navOpen_dark.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Blue_Sky.usd b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Blue_Sky.usd new file mode 100644 index 0000000..04c4089 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Blue_Sky.usd differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Grey_Sky.usd b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Grey_Sky.usd new file mode 100644 index 0000000..e0044d1 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Grey_Sky.usd differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/CarLight_512x256.hdr b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/CarLight_512x256.hdr new file mode 100644 index 0000000..c036907 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/CarLight_512x256.hdr differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/Env_Gradient_001.png b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/Env_Gradient_001.png new file mode 100644 index 0000000..856a5a5 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/Env_Gradient_001.png differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/partly_cloudy.hdr b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/partly_cloudy.hdr new file mode 100644 index 0000000..943e466 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/HDR/partly_cloudy.hdr differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/High_Contrast.usd b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/High_Contrast.usd new file mode 100644 index 0000000..bf69aa8 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/High_Contrast.usd differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Neutral_Lighting.usd b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Neutral_Lighting.usd new file mode 100644 index 0000000..8002791 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Neutral_Lighting.usd differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Sunny_Sky.usd b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Sunny_Sky.usd new file mode 100644 index 0000000..a70499a Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/Sunny_Sky.usd differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/CarLight_512x256.hdr b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/CarLight_512x256.hdr new file mode 100644 index 0000000..c036907 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/CarLight_512x256.hdr differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/Gradient_Backdrop.exr b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/Gradient_Backdrop.exr new file mode 100644 index 0000000..5f8b89d Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/Gradient_Backdrop.exr differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/partly_cloudy.hdr b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/partly_cloudy.hdr new file mode 100644 index 0000000..943e466 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/light_rigs/subusds/partly_cloudy.hdr differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer.ico b/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer.ico new file mode 100644 index 0000000..3f1140f Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer.ico differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer.png b/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer.png new file mode 100644 index 0000000..537b92d Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer.png differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer_about.png b/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer_about.png new file mode 100644 index 0000000..42e0f37 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/nvidia-omniverse-usd_explorer_about.png differ diff --git a/source/extensions/iot_samples.panel_extension.setup/data/preview.png b/source/extensions/iot_samples.panel_extension.setup/data/preview.png new file mode 100644 index 0000000..9653535 Binary files /dev/null and b/source/extensions/iot_samples.panel_extension.setup/data/preview.png differ diff --git a/source/extensions/iot_samples.panel_extension.setup/docs/CHANGELOG.md b/source/extensions/iot_samples.panel_extension.setup/docs/CHANGELOG.md new file mode 100644 index 0000000..f6a49d2 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/docs/CHANGELOG.md @@ -0,0 +1,134 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [1.0.32] - 2023-11-02 +### Changed +- OMFP-3224: Added regression test +- Added unit tests for state manager + +## [1.0.31] - 2023-10-25 +### Changed +- OMFP-3094: Restored Window/Viewport menu + +## [1.0.30] - 2023-10-26 +### Changed +- OMFP-2904: Show "Examples" by default in Layout mode + +## [1.0.29] - 2023-10-25 +### Changed +- OMFP-3224: Fix stage template light directions. + +## [1.0.28] - 2023-10-23 +### Changed +- OMFP-2654: Upgraded carb.imgui with omni.kit.imgui + +## [1.0.27] - 2023-10-20 +### Changed +- OMFP-2649: Missed the Layout item, it is now hidden as requested. + +## [1.0.26] - 2023-10-20 +### Changed +- Update embedded light rigs and textures + +## [1.0.25] - 2023-10-19 +### Changed +- Added regression test for OMFP-2304 + +## [1.0.24] - 2023-10-19 +### Changed +- OMFP-1981: always load the default layout when startup the app + +## [1.0.23] - 2023-10-18 +### Changed +- OMFP-2649: Hiding menu entries. + +## [1.0.22] - 2023-10-18 +### Changed +- Updated About dialog PNG to match the new application icon. + +## [1.0.21] - 2023-10-18 +### Changed +- OMFP-2737: Do no rebuild menu (change menu layout) if layout is same + +## [1.0.20] - 2023-10-18 +### Changed +- make windows invisible which are not desired to be in Review mode, OMFP-2252 activity progress window and OMFP-1981 scene optimizer window. +- OMFP-1981: when user switch between modes, make sure the user defined layout in Layout mode is kept. + +## [1.0.19] - 2023-10-17 +### Changed +- OMFP-2547 - remove markup from modal list, markup window visibility is now handled in omni.kit.markup.core + +## [1.0.18] - 2023-10-17 +### Changed +- Fixed test + +## [1.0.17] - 2023-10-16 +### Changed +- Navigation bar visibility fixes + +## [1.0.16] - 2023-10-13 +### Changed +- Waypoint and markup visibilities are bound to their list windows + +## [1.0.15] - 2023-10-12 +### Changed +- OMFP-2417 - Rename 'comment' -> 'review' and 'modify' -> 'layout' + +## [1.0.14] - 2023-10-12 +### Changed +- Added more unit tests. + +## [1.0.13] - 2023-10-11 +### Changed +- OMFP-2328: Fix "Sunnysky" oriented incorrectly + +## [1.0.12] - 2023-10-10 +### Changed +- OMFP-2226 - Remove second Viewport menu item from layouts. + +## [1.0.11] - 2023-10-11 +### Changed +- Added UI state manager. + +## [1.0.10] - 2023-10-10 +### Changed +- Deactivate tools when app mode is changed. + +## [1.0.9] - 2023-10-09 +### Changed +- OMFP-2200 - Disabling the viewport expansion, this should keep us locked to a 16:9 aspect ratio. + +## [1.0.8] - 2023-10-06 +### Changed +- Added a new stage template and made it default + +## [1.0.7] - 2023-10-06 +### Changed +- Enable UI aware "expand_viewport" mode rather than lower-level fill_viewport mode + +## [1.0.6] - 2023-10-05 +### Changed +- Used allowlists for building main menu entries to guard against unexpected menus. + +## [1.0.5] - 2023-10-05 +### Fixed +- Regression in hiding viewport toolbar. + +## [1.0.4] - 2023-10-04 +### Changed +- Modify mode now shows selected menus on main menubar. + +## [1.0.3] - 2023-10-04 +- Hide Viewport top toolbar in Comment Mode + +## [1.0.2] - 2023-10-03 +- Navigation Toolbar hidden by default in Modify Mode + +## [1.0.1] - 2023-09-27 +- Renamed to omni.usd_explorer.setup + + +## [1.0.0] - 2021-04-26 +- Initial version of extension UI template with a window diff --git a/source/extensions/iot_samples.panel_extension.setup/docs/README.md b/source/extensions/iot_samples.panel_extension.setup/docs/README.md new file mode 100644 index 0000000..0a4394f --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/docs/README.md @@ -0,0 +1 @@ +# Iot Samples Panel Setup Extension [iot_samples.panel_extension.setup] \ No newline at end of file diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/__init__.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/__init__.py new file mode 100644 index 0000000..3a4e67d --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/__init__.py @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +from .setup import * diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/menu_helper.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/menu_helper.py new file mode 100644 index 0000000..83c7863 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/menu_helper.py @@ -0,0 +1,123 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import asyncio + +import carb.settings +import omni.kit.app +import omni.kit.commands +import omni.kit.menu.utils +import omni.renderer_capture +from omni.kit.menu.utils import MenuLayout + +SETTINGS_APPLICATION_MODE_PATH = "/app/application_mode" + + +class MenuHelper: + def __init__(self) -> None: + self._settings = carb.settings.get_settings() + self._current_layout = None + self._pending_layout = None + self._changing_layout_task: asyncio.Task = None + + self._menu_layout_empty = [] + self._menu_layout_modify = [] + + omni.kit.menu.utils.add_hook(self._menu_hook) + + self._app_mode_sub = self._settings.subscribe_to_node_change_events( + SETTINGS_APPLICATION_MODE_PATH, self._on_application_mode_changed + ) + self._menu_hook() + + def destroy(self) -> None: + omni.kit.menu.utils.remove_hook(self._menu_hook) + + if self._changing_layout_task and not self._changing_layout_task.done(): + self._changing_layout_task.cancel() + self._changing_layout_task = None + + if self._app_mode_sub: + self._settings.unsubscribe_to_change_events(self._app_mode_sub) + self._app_mode_sub = None + + self._app_ready_sub = None + + if self._current_layout: + omni.kit.menu.utils.remove_layout(self._current_layout) + self._current_layout = None + + def _menu_hook(self, *args, **kwargs) -> None: + if self._settings.get_as_bool("/app/view/debug/menus"): + return + + LAYOUT_EMPTY_ALLOWED_MENUS = set(["Developer",]) + LAYOUT_MODIFY_ALLOWED_MENUS = {"File", "Edit", "Window", "Tools", "Help", "Developer",} + + # make NEW list object instead of clear original + # the original list may be held by self._current_layout and omni.kit.menu.utils + self._menu_layout_empty = [] + self._menu_layout_modify = [] + + menu_instance = omni.kit.menu.utils.get_instance() + if not menu_instance: # pragma: no cover + return + + # Build new layouts using allowlists + for key in menu_instance._menu_defs: + if key.lower().endswith("widget"): + continue + + if key not in LAYOUT_EMPTY_ALLOWED_MENUS: + self._menu_layout_empty.append(MenuLayout.Menu(key, remove=True)) + + if key not in LAYOUT_MODIFY_ALLOWED_MENUS: + self._menu_layout_modify.append(MenuLayout.Menu(key, remove=True)) + + # Remove 'Viewport 2' entry + if key == "Window": + for menu_item_1 in menu_instance._menu_defs[key]: + for menu_item_2 in menu_item_1: + if menu_item_2.name == "Viewport": + menu_item_2.sub_menu = [mi for mi in menu_item_2.sub_menu if mi.name != "Viewport 2"] + + if self._changing_layout_task is None or self._changing_layout_task.done(): + self._changing_layout_task = asyncio.ensure_future(self._delayed_change_layout()) + + def _on_application_mode_changed(self, *args) -> None: + if self._changing_layout_task is None or self._changing_layout_task.done(): + self._changing_layout_task = asyncio.ensure_future(self._delayed_change_layout()) + + async def _delayed_change_layout(self): + mode = self._settings.get_as_string(SETTINGS_APPLICATION_MODE_PATH) + if mode in ["present", "review"]: + pending_layout = self._menu_layout_empty + else: + pending_layout = self._menu_layout_modify + + # Don't change layout inside of menu callback _on_application_mode_changed + # omni.ui throws error + if self._current_layout: + # Here only check number of layout menu items and name of every of layout menu item + same_layout = len(self._current_layout) == len(pending_layout) + if same_layout: + for index, item in enumerate(self._current_layout): + if item.name != pending_layout[index].name: + same_layout = False + if same_layout: + return + + omni.kit.menu.utils.remove_layout(self._current_layout) + self._current_layout = None + + omni.kit.menu.utils.add_layout(pending_layout) # type: ignore + self._current_layout = pending_layout.copy() + + self._changing_layout_task = None diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/menubar_helper.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/menubar_helper.py new file mode 100644 index 0000000..e44accb --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/menubar_helper.py @@ -0,0 +1,88 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +from pathlib import Path + +import carb +import carb.settings +import carb.tokens +import omni.ui as ui +from omni.ui import color as cl + +ICON_PATH = carb.tokens.get_tokens_interface().resolve("${iot_samples.panel_extension.setup}/data/icons") + +VIEW_MENUBAR_STYLE = { + "MenuBar.Window": {"background_color": 0xA0000000}, + "MenuBar.Item.Background": { "background_color": 0, }, + "Menu.Item.Background": { "background_color": 0, } +} +VIEWPORT_CAMERA_STYLE = { + "Menu.Item.Icon::Expand": {"image_url": f"{ICON_PATH}/caret_s2_right_dark.svg", "color": cl.viewport_menubar_light}, + "Menu.Item.Icon::Expand:checked": {"image_url": f"{ICON_PATH}/caret_s2_left_dark.svg"}, +} + +class MenubarHelper: + def __init__(self) -> None: + self._settings = carb.settings.get_settings() + + # Set menubar background and style + try: + from omni.kit.viewport.menubar.core import DEFAULT_MENUBAR_NAME + from omni.kit.viewport.menubar.core import get_instance as get_menubar_instance + instance = get_menubar_instance() + if not instance: # pragma: no cover + return + + default_menubar = instance.get_menubar(DEFAULT_MENUBAR_NAME) + default_menubar.background_visible = True + default_menubar.style.update(VIEW_MENUBAR_STYLE) + default_menubar.show_separator = True + except ImportError: # pragma: no cover + carb.log_warn("Viewport menubar not found!") + + try: + import omni.kit.viewport.menubar.camera + self._camera_menubar_instance = omni.kit.viewport.menubar.camera.get_instance() + if not self._camera_menubar_instance: # pragma: no cover + return + + # Change expand button icon + self._camera_menubar_instance._camera_menu._style.update(VIEWPORT_CAMERA_STYLE) + # New menu item for camera speed + self._camera_menubar_instance.register_menu_item(self._create_camera_speed, order=100) + self._camera_menubar_instance.deregister_menu_item(self._camera_menubar_instance._camera_menu._build_create_camera) + except ImportError: + carb.log_warn("Viewport menubar not found!") + self._camera_menubar_instance = None + except AttributeError: # pragma: no cover + self._camera_menubar_instance = None + + # Hide default render and settings menubar + self._settings.set("/persistent/exts/omni.kit.viewport.menubar.render/visible", False) + self._settings.set("/persistent/exts/omni.kit.viewport.menubar.settings/visible", False) + + def destroy(self) -> None: + if self._camera_menubar_instance: + self._camera_menubar_instance.deregister_menu_item(self._create_camera_speed) + + def _create_camera_speed(self, _vc, _r: ui.Menu) -> None: + from omni.kit.viewport.menubar.core import SettingModel, SliderMenuDelegate + ui.MenuItem( + "Speed", + hide_on_click=False, + delegate=SliderMenuDelegate( + model=SettingModel("/persistent/app/viewport/camMoveVelocity", draggable=True), + min=self._settings.get_as_float("/persistent/app/viewport/camVelocityMin") or 0.01, + max=self._settings.get_as_float("/persistent/app/viewport/camVelocityMax"), + tooltip="Set the Fly Mode navigation speed", + width=0, + reserve_status=True, + ), + ) diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/navigation.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/navigation.py new file mode 100644 index 0000000..7f1b8c5 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/navigation.py @@ -0,0 +1,150 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import asyncio + +import carb +import carb.settings +import carb.tokens +import carb.dictionary +import omni.kit.app +import omni.ext +import omni.ui as ui +import omni.kit.actions.core +from omni.kit.viewport.navigation.core import ( + NAVIGATION_TOOL_OPERATION_ACTIVE, + ViewportNavigationTooltip, + get_navigation_bar, +) + +__all__ = ["Navigation"] + + +CURRENT_TOOL_PATH = "/app/viewport/currentTool" +SETTING_NAVIGATION_ROOT = "/exts/omni.kit.tool.navigation/" +NAVIGATION_BAR_VISIBLE_PATH = "/exts/omni.kit.viewport.navigation.core/isVisible" +APPLICATION_MODE_PATH = "/app/application_mode" +WALK_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.walk/visible" +CAPTURE_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.capture/visible" +MARKUP_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.markup/visible" +MEASURE_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.measure/visible" +SECTION_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.section/visible" +TELEPORT_SEPARATOR_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.teleport/spvisible" +WAYPOINT_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.waypoint/visible" +VIEWPORT_CONTEXT_MENU_PATH = "/exts/omni.kit.window.viewport/showContextMenu" +MENUBAR_APP_MODES_PATH = "/exts/omni.kit.usd_explorer.main.menubar/include_modify_mode" +WELCOME_WINDOW_VISIBLE_PATH = "/exts/omni.kit.usd_explorer.window.welcome/visible" +ACTIVE_OPERATION_PATH = "/exts/omni.kit.viewport.navigation.core/activeOperation" + +class Navigation: + NAVIGATION_BAR_NAME = None + + # ext_id is current extension id. It can be used with extension manager to query additional information, like where + # this extension is located on filesystem. + def on_startup(self, ext_id: str) -> None: + sections = ext_id.split("-") + self._ext_name = sections[0] + + self._settings = carb.settings.get_settings() + self._navigation_bar = get_navigation_bar() + + self._tool_bar_button = None + + self._dict = carb.dictionary.get_dictionary() + self._panel_visible = True + self._navigation_bar.show() + self._settings.set(CURRENT_TOOL_PATH, "navigation") + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "teleport") + + self._viewport_welcome_window_visibility_changed_sub = self._settings.subscribe_to_node_change_events( + WELCOME_WINDOW_VISIBLE_PATH, self._on_welcome_window_visibility_change + ) + + self._settings.set(WALK_VISIBLE_PATH, False) + self._settings.set(MARKUP_VISIBLE_PATH, True) + self._settings.set(WAYPOINT_VISIBLE_PATH, True) + self._settings.set(TELEPORT_SEPARATOR_VISIBLE_PATH, True) + self._settings.set(CAPTURE_VISIBLE_PATH, True) + self._settings.set(MEASURE_VISIBLE_PATH, True) + self._settings.set(SECTION_VISIBLE_PATH, True) + + self._application_mode_changed_sub = self._settings.subscribe_to_node_change_events( + APPLICATION_MODE_PATH, self._on_application_mode_changed + ) + + self._show_tooltips = False + self._nav_bar_visibility_sub = self._settings.subscribe_to_node_change_events( + NAVIGATION_BAR_VISIBLE_PATH, self._delay_reset_tooltip) + + _prev_navbar_vis = None + _prev_tool = None + _prev_operation = None + def _on_welcome_window_visibility_change(self, item: carb.dictionary.Item, *_) -> None: + if not isinstance(self._dict, (carb.dictionary.IDictionary, dict)): + return + + welcome_window_vis = self._dict.get(item) + + # preserve the state of the navbar upon closing the Welcome window if the app is in Layout mode + if self._settings.get_as_string(APPLICATION_MODE_PATH).lower() == "layout": + # preserve the state of the navbar visibility + if welcome_window_vis: + self._prev_navbar_vis = self._settings.get_as_bool(NAVIGATION_BAR_VISIBLE_PATH) + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, not(welcome_window_vis)) + self._prev_tool = self._settings.get(CURRENT_TOOL_PATH) + self._prev_operation = self._settings.get(ACTIVE_OPERATION_PATH) + else: # restore the state of the navbar visibility + if self._prev_navbar_vis is not None: + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, self._prev_navbar_vis) + self._prev_navbar_vis = None + if self._prev_tool is not None: + self._settings.set(CURRENT_TOOL_PATH, self._prev_tool) + if self._prev_operation is not None: + self._settings.set(ACTIVE_OPERATION_PATH, self._prev_operation) + return + else: + if welcome_window_vis: + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "none") + else: + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "teleport") + + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, not(welcome_window_vis)) + + def _on_application_mode_changed(self, item: carb.dictionary.Item, *_) -> None: + if not isinstance(self._dict, (carb.dictionary.IDictionary, dict)): + return + + current_mode = self._dict.get(item) + self._test = asyncio.ensure_future(self._switch_by_mode(current_mode)) + + async def _switch_by_mode(self, current_mode: str) -> None: + await omni.kit.app.get_app().next_update_async() + state = True if current_mode == "review" else False + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, state) + self._settings.set(VIEWPORT_CONTEXT_MENU_PATH, not(state)) # toggle RMB viewport context menu + self._delay_reset_tooltip(None) + + def _delay_reset_tooltip(self, *_) -> None: + async def delay_set_tooltip() -> None: + for _i in range(4): + await omni.kit.app.get_app().next_update_async() # type: ignore + ViewportNavigationTooltip.set_visible(self._show_tooltips) + asyncio.ensure_future(delay_set_tooltip()) + + def _on_showtips_click(self, *_) -> None: + self._show_tooltips = not self._show_tooltips + ViewportNavigationTooltip.set_visible(self._show_tooltips) + + def on_shutdown(self) -> None: + self._navigation_bar = None + self._viewport_welcome_window_visibility_changed_sub = None + self._settings.unsubscribe_to_change_events(self._application_mode_changed_sub) # type:ignore + self._application_mode_changed_sub = None + self._dict = None diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/setup.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/setup.py new file mode 100644 index 0000000..0e2af1b --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/setup.py @@ -0,0 +1,515 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import asyncio +import weakref +from functools import partial +import os +from pathlib import Path +from typing import cast, Optional + +import omni.client +import omni.ext +import omni.kit.menu.utils +import omni.kit.app +import omni.kit.context_menu +import omni.kit.ui +import omni.usd + +from omni.kit.quicklayout import QuickLayout +from omni.kit.menu.utils import MenuLayout +from omni.kit.window.title import get_main_window_title +from omni.kit.usd.layers import LayerUtils + +from omni.kit.viewport.menubar.core import get_instance as get_mb_inst, DEFAULT_MENUBAR_NAME +from omni.kit.viewport.menubar.core.viewport_menu_model import ViewportMenuModel +from omni.kit.viewport.utility import get_active_viewport, get_active_viewport_window, disable_selection + +import carb +import carb.settings +import carb.dictionary +import carb.events +import carb.tokens +import carb.input + +import omni.kit.imgui as _imgui +from pxr import Sdf, Usd + +from .navigation import Navigation +from .menu_helper import MenuHelper +from .menubar_helper import MenubarHelper +from .stage_template import SunnySkyStage +from .ui_state_manager import UIStateManager + +SETTINGS_PATH_FOCUSED = "/app/workspace/currentFocused" +APPLICATION_MODE_PATH = "/app/application_mode" +MODAL_TOOL_ACTIVE_PATH = "/app/tools/modal_tool_active" +CURRENT_TOOL_PATH = "/app/viewport/currentTool" +ROOT_WINDOW_NAME = "DockSpace" +ICON_PATH = carb.tokens.get_tokens_interface().resolve("${iot_samples.panel_extension.setup}/data/icons") +SETTINGS_STARTUP_EXPAND_VIEWPORT = "/app/startup/expandViewport" +VIEWPORT_CONTEXT_MENU_PATH = "/exts/omni.kit.window.viewport/showContextMenu" +TELEPORT_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.teleport/visible" + + +async def _load_layout_startup(layout_file: str, keep_windows_open: bool=False) -> None: + try: + # few frames delay to avoid the conflict with the layout of omni.kit.mainwindow + for i in range(3): + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + + # WOR: some layout don't happy collectly the first time + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + except Exception as exc: # pragma: no cover (Can't be tested because a non-existing layout file prints an log_error in QuickLayout and does not throw an exception) + carb.log_warn(f"Failed to load layout {layout_file}: {exc}") + + +async def _load_layout(layout_file: str, keep_windows_open:bool=False) -> None: + try: + # few frames delay to avoid the conflict with the layout of omni.kit.mainwindow + for i in range(3): + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + + except Exception as exc: # pragma: no cover (Can't be tested because a non-existing layout file prints an log_error in QuickLayout and does not throw an exception) + carb.log_warn(f"Failed to load layout {layout_file}: {exc}") + +async def _clear_startup_scene_edits() -> None: + try: + for i in range(50): # This could possibly be a smaller value. I want to ensure this happens after RTX startup + await omni.kit.app.get_app().next_update_async() # type: ignore + omni.usd.get_context().set_pending_edit(False) + except Exception as exc: # pragma: no cover + carb.log_warn(f"Failed to clear stage edits on startup: {exc}") + + +# This extension is mostly loading the Layout updating menu +class SetupExtension(omni.ext.IExt): + # ext_id is current extension id. It can be used with extension manager to query additional information, like where + # this extension is located on filesystem. + + @property + def _app(self): + return omni.kit.app.get_app() + + @property + def _settings(self): + return carb.settings.get_settings() + + def on_startup(self, ext_id: str) -> None: + self._ext_id = ext_id + self._menubar_helper = MenubarHelper() + self._menu_helper = MenuHelper() + + # using imgui directly to adjust some color and Variable + imgui = _imgui.acquire_imgui() + + # match Create overides + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrab, carb.Float4(0.4, 0.4, 0.4, 1)) + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrabHovered, carb.Float4(0.6, 0.6, 0.6, 1)) + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrabActive, carb.Float4(0.8, 0.8, 0.8, 1)) + + # DockSplitterSize is the variable that drive the size of the Dock Split connection + imgui.push_style_var_float(_imgui.StyleVar.DockSplitterSize, 2) + + # setup the Layout for your app + self._layouts_path = carb.tokens.get_tokens_interface().resolve("${iot_samples.panel_extension.setup}/layouts") + layout_file = Path(self._layouts_path).joinpath(f"{self._settings.get('/app/layout/name')}.json") + self.__setup_window_task = asyncio.ensure_future(_load_layout_startup(f"{layout_file}", True)) + + self.review_layout_path = str(Path(self._layouts_path) / "comment_layout.json") + self.default_layout_path = str(Path(self._layouts_path) / "default.json") + self.layout_user_path = str(Path(self._layouts_path) / "layout_user.json") + + # remove the user defined layout so that we always load the default layout when startup + if os.path.exists(self.layout_user_path): + os.remove(self.layout_user_path) + + # setup the menu and their layout + self._current_layout_priority = 0 + self._layout_menu_items = [] + self._layout_file_menu() + self._menu_layout = [] + if self._settings.get_as_bool('/app/view/debug/menus'): + self._layout_menu() + + + # setup the Application Title + window_title = get_main_window_title() + if window_title: + window_title.set_app_version("0.1.0") + + # self._context_menu() + self._register_my_menu() + self._navigation = Navigation() + self._navigation.on_startup(ext_id) + + self._application_mode_changed_sub = self._settings.subscribe_to_node_change_events( + APPLICATION_MODE_PATH, weakref.proxy(self)._on_application_mode_changed + ) + + self._set_viewport_menubar_visibility(False) + self._test = asyncio.ensure_future(_clear_startup_scene_edits()) + + self._usd_context = omni.usd.get_context() + self._stage_event_sub = self._usd_context.get_stage_event_stream().create_subscription_to_pop( + self._on_stage_open_event, name="TeleportDefaultOn" + ) + if self._settings.get_as_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT): + self._set_viewport_fill_on() + + self._stage_templates = [SunnySkyStage()] + + disable_selection(get_active_viewport()) + + self._ui_state_manager = UIStateManager() + self._setup_ui_state_changes() + omni.kit.menu.utils.add_layout([ + MenuLayout.Menu("Window", [ + MenuLayout.Item("Viewport", source="Window/Viewport/Viewport 1"), + MenuLayout.Item("Playlist", remove=True), + MenuLayout.Item("Layout", remove=True), + MenuLayout.Sort(exclude_items=["Extensions"], sort_submenus=True), + ]) + ]) + def show_documentation(*x): + import webbrowser + webbrowser.open("http://docs.omniverse.nvidia.com/explorer") + self._help_menu_items = [ + omni.kit.menu.utils.MenuItemDescription(name="Documentation", + onclick_fn=show_documentation, + appear_after=[omni.kit.menu.utils.MenuItemOrder.FIRST]) + ] + omni.kit.menu.utils.add_menu_items(self._help_menu_items, name="Help") + + def _on_stage_open_event(self, event: carb.events.IEvent) -> None: + if event.type == int(omni.usd.StageEventType.OPENED): + app_mode = self._settings.get_as_string(APPLICATION_MODE_PATH).lower() + + # exit all tools + self._settings.set(CURRENT_TOOL_PATH, "none") + + if app_mode == "review": + asyncio.ensure_future(self._stage_post_open_teleport_toggle()) + + # toggle RMB viewport context menu based on application mode + value = False if app_mode == "review" else True + self._settings.set(VIEWPORT_CONTEXT_MENU_PATH, value) + + # teleport is activated after loading a stage and app is in Review mode + async def _stage_post_open_teleport_toggle(self) -> None: + await self._app.next_update_async() + if hasattr(self, "_usd_context") and self._usd_context is not None and not self._usd_context.is_new_stage(): + self._settings.set("/exts/omni.kit.viewport.navigation.core/activeOperation", "teleport") + + def _set_viewport_fill_on(self) -> None: + vp_window = get_active_viewport_window() + vp_widget = vp_window.viewport_widget if vp_window else None + if vp_widget: + vp_widget.expand_viewport = True + + def _set_viewport_menubar_visibility(self, show: bool) -> None: + mb_inst = get_mb_inst() + if mb_inst and hasattr(mb_inst, "get_menubar"): + main_menubar = mb_inst.get_menubar(DEFAULT_MENUBAR_NAME) + if main_menubar.visible_model.as_bool != show: + main_menubar.visible_model.set_value(show) + ViewportMenuModel()._item_changed(None) # type: ignore + + def _on_application_mode_changed(self, item: carb.dictionary.Item, _typ: carb.settings.ChangeEventType) -> None: + if self._settings.get_as_string(APPLICATION_MODE_PATH).lower() == "review": + omni.usd.get_context().get_selection().clear_selected_prim_paths() + disable_selection(get_active_viewport()) + + current_mode: str = cast(str, item.get_dict()) + asyncio.ensure_future(self.defer_load_layout(current_mode)) + + async def defer_load_layout(self, current_mode: str) -> None: + keep_windows = True + # Focus Mode Toolbar + self._settings.set_bool(SETTINGS_PATH_FOCUSED, True) # current_mode not in ("review", "layout")) + + # Turn off all tools and modal + self._settings.set_string(CURRENT_TOOL_PATH, "none") + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + if current_mode == "review": + # save the current layout for restoring later if switch back + QuickLayout.save_file(self.layout_user_path) + # we don't want to keep any windows except the ones which are visible in self.review_layout_path + await _load_layout(self.review_layout_path, False) + else: # current_mode == "layout": + # check if there is any user modified layout, if yes use that one + layout_filename = self.layout_user_path if os.path.exists(self.layout_user_path) else self.default_layout_path + await _load_layout(layout_filename, keep_windows) + + self._set_viewport_menubar_visibility(current_mode == "layout") + + def _setup_ui_state_changes(self) -> None: + windows_to_hide_on_modal = ["Measure", "Section", "Waypoints"] + self._ui_state_manager.add_hide_on_modal(window_names=windows_to_hide_on_modal, restore=True) + + window_titles = ["Markups", "Waypoints"] + for window in window_titles: + setting_name = f'/exts/omni.usd_explorer.setup/{window}/visible' + self._ui_state_manager.add_window_visibility_setting(window, setting_name) + + # toggle icon visibilites based on window visibility + + self._ui_state_manager.add_settings_copy_dependency( + source_path="/exts/omni.usd_explorer.setup/Markups/visible", + target_path="/exts/omni.kit.markup.core/show_icons", + ) + + self._ui_state_manager.add_settings_copy_dependency( + source_path="/exts/omni.usd_explorer.setup/Waypoints/visible", + target_path="/exts/omni.kit.waypoint.core/show_icons", + ) + + def _custom_quicklayout_menu(self) -> None: + # we setup a simple ways to Load custom layout from the exts + def add_layout_menu_entry(name, parameter, key): + import inspect + + editor_menu = omni.kit.ui.get_editor_menu() + + layouts_path = carb.tokens.get_tokens_interface().resolve("${iot_samples.panel_extension.setup}/layouts") + + menu_path = f"Layout/{name}" + menu = editor_menu.add_item(menu_path, None, False, self._current_layout_priority) # type: ignore + self._current_layout_priority = self._current_layout_priority + 1 + + if inspect.isfunction(parameter): # pragma: no cover (Never used, see commented out section below regarding quick save/load) + menu_action = omni.kit.menu.utils.add_action_to_menu( + menu_path, + lambda *_: asyncio.ensure_future(parameter()), + name, + (carb.input.KEYBOARD_MODIFIER_FLAG_CONTROL, key), + ) + else: + menu_action = omni.kit.menu.utils.add_action_to_menu( + menu_path, + lambda *_: asyncio.ensure_future(_load_layout(f"{layouts_path}/{parameter}.json")), + name, + (carb.input.KEYBOARD_MODIFIER_FLAG_CONTROL, key), + ) + + self._layout_menu_items.append((menu, menu_action)) + + add_layout_menu_entry("Reset Layout", "default", carb.input.KeyboardInput.KEY_1) + add_layout_menu_entry("Viewport Only", "viewport_only", carb.input.KeyboardInput.KEY_2) + add_layout_menu_entry("Markup Editor", "markup_editor", carb.input.KeyboardInput.KEY_3) + # add_layout_menu_entry("Waypoint Viewer", "waypoint_viewer", carb.input.KeyboardInput.KEY_4) + + # # you can enable Quick Save and Quick Load here + # if False: + # # create Quick Load & Quick Save + # from omni.kit.quicklayout import QuickLayout + + # async def quick_save(): + # QuickLayout.quick_save(None, None) + + # async def quick_load(): + # QuickLayout.quick_load(None, None) + + # add_layout_menu_entry("Quick Save", quick_save, carb.input.KeyboardInput.KEY_7) + # add_layout_menu_entry("Quick Load", quick_load, carb.input.KeyboardInput.KEY_8) + + def _register_my_menu(self) -> None: + context_menu: Optional[omni.kit.context_menu.ContextMenuExtension] = omni.kit.context_menu.get_instance() + if not context_menu: # pragma: no cover + return + + def _layout_file_menu(self) -> None: + self._menu_file_layout = [ + MenuLayout.Menu( + "File", + [ + MenuLayout.Item("New"), + MenuLayout.Item("New From Stage Template"), + MenuLayout.Item("Open"), + MenuLayout.Item("Open Recent"), + MenuLayout.Seperator(), + MenuLayout.Item("Re-open with New Edit Layer"), + MenuLayout.Seperator(), + MenuLayout.Item("Share"), + MenuLayout.Seperator(), + MenuLayout.Item("Save"), + MenuLayout.Item("Save As..."), + MenuLayout.Item("Save With Options"), + MenuLayout.Item("Save Selected"), + MenuLayout.Item("Save Flattened As...", remove=True), + MenuLayout.Seperator(), + MenuLayout.Item("Collect As..."), + MenuLayout.Item("Export"), + MenuLayout.Seperator(), + MenuLayout.Item("Import"), + MenuLayout.Item("Add Reference"), + MenuLayout.Item("Add Payload"), + MenuLayout.Seperator(), + MenuLayout.Item("Exit"), + ] + ) + ] + omni.kit.menu.utils.add_layout(self._menu_file_layout) + + + def _layout_menu(self) -> None: + self._menu_layout = [ + MenuLayout.Menu( + "Window", + [ + MenuLayout.SubMenu( + "Animation", + [ + MenuLayout.Item("Timeline"), + MenuLayout.Item("Sequencer"), + MenuLayout.Item("Curve Editor"), + MenuLayout.Item("Retargeting"), + MenuLayout.Item("Animation Graph"), + MenuLayout.Item("Animation Graph Samples"), + ], + ), + MenuLayout.SubMenu( + "Layout", + [ + MenuLayout.Item("Quick Save", remove=True), + MenuLayout.Item("Quick Load", remove=True), + ], + ), + MenuLayout.SubMenu( + "Browsers", + [ + MenuLayout.Item("Content", source="Window/Content"), + MenuLayout.Item("Materials"), + MenuLayout.Item("Skies"), + ], + ), + MenuLayout.SubMenu( + "Rendering", + [ + MenuLayout.Item("Render Settings"), + MenuLayout.Item("Movie Capture"), + MenuLayout.Item("MDL Material Graph"), + MenuLayout.Item("Tablet XR"), + ], + ), + MenuLayout.SubMenu( + "Simulation", + [ + MenuLayout.Group( + "Flow", + [ + MenuLayout.Item("Presets", source="Window/Flow/Presets"), + MenuLayout.Item("Monitor", source="Window/Flow/Monitor"), + ], + ), + MenuLayout.Group( + "Blast", + [ + MenuLayout.Item("Settings", source="Window/Blast/Settings"), + MenuLayout.SubMenu( + "Documentation", + [ + MenuLayout.Item("Kit UI", source="Window/Blast/Documentation/Kit UI"), + MenuLayout.Item( + "Programming", source="Window/Blast/Documentation/Programming" + ), + MenuLayout.Item( + "USD Schemas", source="Window/Blast/Documentation/USD Schemas" + ), + ], + ), + ], + ), + MenuLayout.Item("Debug"), + # MenuLayout.Item("Performance"), + MenuLayout.Group( + "Physics", + [ + MenuLayout.Item("Demo Scenes"), + MenuLayout.Item("Settings", source="Window/Physics/Settings"), + MenuLayout.Item("Debug"), + MenuLayout.Item("Test Runner"), + MenuLayout.Item("Character Controller"), + MenuLayout.Item("OmniPVD"), + MenuLayout.Item("Physics Helpers"), + ], + ), + ], + ), + MenuLayout.SubMenu( + "Utilities", + [ + MenuLayout.Item("Console"), + MenuLayout.Item("Profiler"), + MenuLayout.Item("USD Paths"), + MenuLayout.Item("Statistics"), + MenuLayout.Item("Activity Monitor"), + ], + ), + # Remove 'Viewport 2' entry + MenuLayout.SubMenu( + "Viewport", + [ + MenuLayout.Item("Viewport 2", remove=True), + ], + ), + MenuLayout.Sort(exclude_items=["Extensions"]), + MenuLayout.Item("New Viewport Window", remove=True), + ], + ), + # that is you enable the Quick Layout Menu + MenuLayout.Menu( + "Layout", + [ + MenuLayout.Item("Default", source="Reset Layout"), + MenuLayout.Item("Viewport Only"), + MenuLayout.Item("Markup Editor"), + MenuLayout.Item("Waypoint Viewer"), + MenuLayout.Seperator(), + MenuLayout.Item("UI Toggle Visibility", source="Window/UI Toggle Visibility"), + MenuLayout.Item("Fullscreen Mode", source="Window/Fullscreen Mode"), + MenuLayout.Seperator(), + MenuLayout.Item("Save Layout", source="Window/Layout/Save Layout..."), + MenuLayout.Item("Load Layout", source="Window/Layout/Load Layout..."), + # MenuLayout.Seperator(), + # MenuLayout.Item("Quick Save", source="Window/Layout/Quick Save"), + # MenuLayout.Item("Quick Load", source="Window/Layout/Quick Load"), + ], + ), + MenuLayout.Menu("Tools", [MenuLayout.SubMenu("Animation", remove=True)]), + ] + omni.kit.menu.utils.add_layout(self._menu_layout) # type: ignore + + # if you want to support the Quick Layout Menu + self._custom_quicklayout_menu() + + def on_shutdown(self): + if self._menu_layout: + omni.kit.menu.utils.remove_layout(self._menu_layout) # type: ignore + self._menu_layout.clear() + self._layout_menu_items.clear() + self._navigation.on_shutdown() + del self._navigation + self._settings.unsubscribe_to_change_events(self._application_mode_changed_sub) + del self._application_mode_changed_sub + + self._stage_event_sub = None + + # From View setup + self._menubar_helper.destroy() + if self._menu_helper and hasattr(self._menu_helper, "destroy"): + self._menu_helper.destroy() + self._menu_helper = None + + self._stage_templates = [] diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/stage_template.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/stage_template.py new file mode 100644 index 0000000..a191b91 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/stage_template.py @@ -0,0 +1,101 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import carb +import omni.ext +import omni.kit.commands +from omni.kit.stage_templates import register_template, unregister_template +from pxr import Gf, Sdf, Usd, UsdGeom, UsdLux + + +class SunnySkyStage: + def __init__(self): + register_template("SunnySky", self.new_stage) + + def __del__(self): + unregister_template("SunnySky") + + def new_stage(self, rootname, usd_context_name): + # Create basic DistantLight + usd_context = omni.usd.get_context(usd_context_name) + stage = usd_context.get_stage() + # get up axis + up_axis = UsdGeom.GetStageUpAxis(stage) + with Usd.EditContext(stage, stage.GetRootLayer()): + # create Environment + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment", + prim_type="Xform", + select_new_prim=False, + create_default_xform=True, + context_name=usd_context_name + ) + + texture_path = carb.tokens.get_tokens_interface().resolve("${iot_samples.panel_extension.setup}/data/light_rigs/HDR/partly_cloudy.hdr") + + # create Sky + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment/Sky", + prim_type="DomeLight", + select_new_prim=False, + attributes={ + UsdLux.Tokens.inputsIntensity: 1000, + UsdLux.Tokens.inputsTextureFile: texture_path, + UsdLux.Tokens.inputsTextureFormat: UsdLux.Tokens.latlong, + UsdLux.Tokens.inputsSpecular: 1, + UsdGeom.Tokens.visibility: "inherited", + } if hasattr(UsdLux.Tokens, 'inputsIntensity') else \ + { + UsdLux.Tokens.intensity: 1000, + UsdLux.Tokens.textureFile: texture_path, + UsdLux.Tokens.textureFormat: UsdLux.Tokens.latlong, + UsdGeom.Tokens.visibility: "inherited", + }, + create_default_xform=True, + context_name=usd_context_name + ) + prim = stage.GetPrimAtPath("/Environment/Sky") + prim.CreateAttribute("xformOp:scale", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(1, 1, 1)) + prim.CreateAttribute("xformOp:translate", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 0)) + if up_axis == "Y": + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(270, 0, 0)) + else: + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 90)) + prim.CreateAttribute("xformOpOrder", Sdf.ValueTypeNames.String, False).Set(["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]) + + # create DistantLight + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment/DistantLight", + prim_type="DistantLight", + select_new_prim=False, + attributes={ + UsdLux.Tokens.inputsAngle: 4.3, + UsdLux.Tokens.inputsIntensity: 3000, + UsdGeom.Tokens.visibility: "inherited", + } if hasattr(UsdLux.Tokens, 'inputsIntensity') else \ + { + UsdLux.Tokens.angle: 4.3, + UsdLux.Tokens.intensity: 3000, + UsdGeom.Tokens.visibility: "inherited", + }, + create_default_xform=True, + context_name=usd_context_name + ) + prim = stage.GetPrimAtPath("/Environment/DistantLight") + prim.CreateAttribute("xformOp:scale", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(1, 1, 1)) + prim.CreateAttribute("xformOp:translate", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 0)) + if up_axis == "Y": + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(310.6366313590111, -125.93251524567805, 0.8821359067542289)) + else: + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(41.35092544555664, 0.517652153968811, -35.92928695678711)) + prim.CreateAttribute("xformOpOrder", Sdf.ValueTypeNames.String, False).Set(["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]) diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/__init__.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/__init__.py new file mode 100644 index 0000000..b03b33d --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/__init__.py @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +# run startup tests first +from .test_app_startup import * +# run all other tests after +from .test_extensions import * +from .test import * +from .test_state_manager import * diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test.py new file mode 100644 index 0000000..f5d3c61 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test.py @@ -0,0 +1,203 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import omni.kit.app + +from omni.ui.tests.test_base import OmniUiTest +from omni.kit import ui_test + + +ext_id = 'iot_samples.panel_extension.setup' + + +class TestSetupToolExtension(OmniUiTest): + async def test_extension(self): + manager = omni.kit.app.get_app().get_extension_manager() + self.assertTrue(ext_id) + self.assertTrue(manager.is_extension_enabled(ext_id)) + + app = omni.kit.app.get_app() + for _ in range(500): + await app.next_update_async() + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + + self.assertTrue(not manager.is_extension_enabled(ext_id)) + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menubar_helper_camera_dependency(self): + manager = omni.kit.app.get_app().get_extension_manager() + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled('omni.kit.viewport.menubar.camera', True) + await ui_test.human_delay() + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menu_helper(self): + from ..menu_helper import MenuHelper + + menu_helper = MenuHelper() + menu_helper.destroy() + + async def test_menubar_helper_menu(self): + from ..menubar_helper import MenubarHelper + + menubar_helper = MenubarHelper() + menubar_helper._create_camera_speed(None, None) + menubar_helper.destroy() + + async def test_menu_helper_debug_setting(self): + SETTINGS_VIEW_DEBUG_MENUS = '/app/view/debug/menus' + + import carb.settings + settings = carb.settings.get_settings() + + manager = omni.kit.app.get_app().get_extension_manager() + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + orig_value = settings.get(SETTINGS_VIEW_DEBUG_MENUS) + settings.set_bool(SETTINGS_VIEW_DEBUG_MENUS, True) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + settings.set_bool(SETTINGS_VIEW_DEBUG_MENUS, orig_value) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menu_helper_application_mode_change(self): + from ..menu_helper import SETTINGS_APPLICATION_MODE_PATH + + import carb.settings + settings = carb.settings.get_settings() + + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'welcome') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'comment') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + + async def test_menu_helper_widget_menu(self): + import omni.kit.menu.utils + omni.kit.menu.utils.add_menu_items([], name='test widget') + + from ..menu_helper import MenuHelper + menu_helper = MenuHelper() + menu_helper.destroy() + + async def test_startup_expand_viewport(self): + from ..setup import SETTINGS_STARTUP_EXPAND_VIEWPORT + + import carb.settings + settings = carb.settings.get_settings() + + orig_value = settings.get(SETTINGS_STARTUP_EXPAND_VIEWPORT) + settings.set_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT, True) + + manager = omni.kit.app.get_app().get_extension_manager() + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + settings.set_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT, orig_value) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_navigation_invalid_dict(self): + from ..navigation import Navigation + + navigation = Navigation() + navigation._show_tooltips = False + navigation._dict = 42 + navigation._on_application_mode_changed(None, None) + navigation._on_showtips_click() + + async def test_navigation_current_tool_mode_change(self): + from ..navigation import CURRENT_TOOL_PATH, APPLICATION_MODE_PATH + + import carb.settings + settings = carb.settings.get_settings() + + settings.set_string(APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'welcome') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + async def test_setup_clear_startup_scene_edits(self): + from ..setup import _clear_startup_scene_edits + await _clear_startup_scene_edits() + + import omni.usd + self.assertFalse(omni.usd.get_context().has_pending_edit()) + + async def test_stage_template(self): + import omni.kit.stage_templates + omni.kit.stage_templates.new_stage(template='SunnySky') diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_app_startup.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_app_startup.py new file mode 100644 index 0000000..bfa4b1b --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_app_startup.py @@ -0,0 +1,40 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import omni.kit.app +from omni.kit.test import AsyncTestCase + + +class TestAppStartup(AsyncTestCase): + async def test_l1_app_startup_time(self): + """Get startup time - send to nvdf""" + for _ in range(60): + await omni.kit.app.get_app().next_update_async() + + try: + from omni.kit.core.tests import app_startup_time + + app_startup_time(self.id()) + except: # noqa + pass + self.assertTrue(True) + + async def test_l1_app_startup_warning_count(self): + """Get the count of warnings during startup - send to nvdf""" + for _ in range(60): + await omni.kit.app.get_app().next_update_async() + + try: + from omni.kit.core.tests import app_startup_warning_count + + app_startup_warning_count(self.id()) + except: # noqa + pass + self.assertTrue(True) diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_extensions.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_extensions.py new file mode 100644 index 0000000..d8d826a --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_extensions.py @@ -0,0 +1,68 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import sys + +import carb.settings +import omni.kit.app +import omni.kit.actions.core +from omni.kit.core.tests import validate_extensions_load, validate_extensions_tests +from omni.kit.test import AsyncTestCase +from pxr import Usd, UsdGeom, Gf + + +class TestUSDExplorerExtensions(AsyncTestCase): + async def test_l1_extensions_load(self): + """Loop all enabled extensions to see if they loaded correctly""" + self.assertEqual(validate_extensions_load(), 0) + + async def test_regression_omfp_2304(self): + loaded_omni_kit_collaboration_selection_outline = False + manager = omni.kit.app.get_app().get_extension_manager() + for ext in manager.get_extensions(): + if ext["name"] == "omni.kit.collaboration.selection_outline": + loaded_omni_kit_collaboration_selection_outline = True + break + self.assertTrue(loaded_omni_kit_collaboration_selection_outline) + + async def _wait(self, frames: int = 10): + for _ in range(frames): + await omni.kit.app.get_app().next_update_async() + + async def wait_stage_loading(self): + while True: + _, files_loaded, total_files = omni.usd.get_context().get_stage_loading_status() + if files_loaded or total_files: + await self._wait() + continue + break + await self._wait(100) + + async def _get_1_1_1_rotation(self) -> Gf.Vec3d: + """Loads a stage and returns the transformation of the (1,1,1) vector by the directional light's rotation""" + await self._wait() + omni.kit.actions.core.execute_action("omni.kit.window.file", "new") + await self.wait_stage_loading() + context = omni.usd.get_context() + self.assertIsNotNone(context) + stage = context.get_stage() + self.assertIsNotNone(stage) + + prim_path = '/Environment/DistantLight' + prim = stage.GetPrimAtPath(prim_path) + self.assertTrue(prim.IsValid()) + + # Extract the prim's transformation matrix in world space + xformAPI = UsdGeom.XformCache() + transform_matrix_world = xformAPI.GetLocalToWorldTransform(prim) + + unit_point = Gf.Vec3d(1, 1, 1) + transformed_point = transform_matrix_world.Transform(unit_point) + return transformed_point diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_state_manager.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_state_manager.py new file mode 100644 index 0000000..563f7cf --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/tests/test_state_manager.py @@ -0,0 +1,130 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import carb.settings +import omni.kit.app +import omni.ui as ui +from omni.kit.test import AsyncTestCase +from ..ui_state_manager import UIStateManager, MODAL_TOOL_ACTIVE_PATH + + +class TestUIStateManager(AsyncTestCase): + async def setUp(self): + self._sm = UIStateManager() + self._settings = carb.settings.get_settings() + + async def tearDown(self): + self._sm = None + + async def test_destroy(self): + self._sm.add_hide_on_modal('dummy', False) + self._sm.add_settings_copy_dependency('a', 'b') + self._sm.add_settings_dependency('c', 'd', {1: 2}) + self._sm.add_window_visibility_setting('my_window', 'my_setting') + + self._sm.destroy() + + async def test_hide_on_modal(self): + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + self._sm.add_hide_on_modal('NO_RESTORE', False) + self._sm.add_hide_on_modal(['A_RESTORE', 'B_RESTORE'], True) + + window_no_restore = ui.Window('NO_RESTORE') + window_restore_1 = ui.Window('A_RESTORE') + window_restore_2 = ui.Window('B_RESTORE') + window_no_restore.visible = True + window_restore_1.visible = True + window_restore_2.visible = False + await self._wait() + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, True) + await self._wait() + self.assertFalse(window_no_restore.visible) + self.assertFalse(window_restore_1.visible) + self.assertFalse(window_restore_2.visible) + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + await self._wait() + self.assertFalse(window_no_restore.visible) + self.assertTrue(window_restore_1.visible) + self.assertFalse(window_restore_2.visible) + + self._sm.remove_hide_on_modal(window_restore_1.title) + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, True) + await self._wait() + self.assertTrue(window_restore_1.visible) + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + async def test_window_visibility_setting(self): + window_name = 'Dummy' + setting_path = '/apps/dummy' + setting_path2 = '/apps/dummy2' + window = ui.Window(window_name) + window.visible = True + await self._wait() + + self._sm.add_window_visibility_setting(window_name=window_name, setting_path=setting_path) + self._sm.add_window_visibility_setting(window_name=window_name, setting_path=setting_path2) + self.assertIsNotNone(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path2)) + + window.visible = False + self.assertFalse(self._settings.get(setting_path)) + self.assertFalse(self._settings.get(setting_path2)) + + window.visible = True + self.assertTrue(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path2)) + + self._sm.remove_window_visibility_setting(window_name=window_name, setting_path=setting_path) + window.visible = False + self.assertTrue(self._settings.get(setting_path)) + self.assertFalse(self._settings.get(setting_path2)) + + self._sm.remove_all_window_visibility_settings(window_name=window_name) + window.visible = True + self.assertFalse(self._settings.get(setting_path2)) + + async def test_setting_dependency(self): + setting_path_copy_from = '/app/copy_from' + setting_path_copy_to = '/ext/copy_to' + + setting_path_map_from = '/ext/map_from' + setting_path_map_to = '/something/map_to' + + self._sm.add_settings_copy_dependency(setting_path_copy_from, setting_path_copy_to) + self._settings.set_string(setting_path_copy_from, 'hello_world') + self.assertEqual(self._settings.get(setting_path_copy_from), self._settings.get(setting_path_copy_to)) + # doesn't work the other way around + self._settings.set_string(setting_path_copy_to, 'no_copy_back') + self.assertEqual(self._settings.get(setting_path_copy_from), 'hello_world') + + self._sm.add_settings_dependency(setting_path_map_from, setting_path_map_to, {1: 2, 3: 4}) + self._settings.set_int(setting_path_map_from, 1) + self.assertEqual(self._settings.get(setting_path_map_to), 2) + self._settings.set_int(setting_path_map_from, 3) + self.assertEqual(self._settings.get(setting_path_map_to), 4) + # not in the map + self._settings.set_int(setting_path_map_from, 42) + self.assertEqual(self._settings.get(setting_path_map_to), 4) + + self.assertEqual(self._settings.get(setting_path_copy_from), 'hello_world') + self.assertEqual(self._settings.get(setting_path_copy_to), 'no_copy_back') + + self._sm.remove_settings_dependency(setting_path_copy_from, setting_path_copy_to) + self._settings.set_string(setting_path_copy_from, 'this_is_not_copied') + self.assertEqual(self._settings.get(setting_path_copy_to), 'no_copy_back') + + async def _wait(self, frames: int = 5): + for _ in range(frames): + await omni.kit.app.get_app().next_update_async() \ No newline at end of file diff --git a/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/ui_state_manager.py b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/ui_state_manager.py new file mode 100644 index 0000000..8b6404d --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/iot_samples/panel_extension/setup/ui_state_manager.py @@ -0,0 +1,156 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import carb.dictionary +import carb.settings +import omni.ui as ui +from functools import partial +from typing import Any, Dict, List, Tuple, Union + + +MODAL_TOOL_ACTIVE_PATH = "/app/tools/modal_tool_active" + + +class UIStateManager: + def __init__(self) -> None: + self._settings = carb.settings.acquire_settings_interface() + + self._modal_changed_sub = self._settings.subscribe_to_node_change_events( + MODAL_TOOL_ACTIVE_PATH, + self._on_modal_setting_changed + ) + + self._hide_on_modal: List[Tuple[str,bool]] = [] + self._modal_restore_window_states: Dict[str,bool] = {} + self._settings_dependencies: Dict[Tuple(str,str), Dict[Any, Any]] = {} + self._settings_changed_subs = {} + self._window_settings = {} + + self._window_vis_changed_id = ui.Workspace.set_window_visibility_changed_callback(self._on_window_vis_changed) + + def destroy(self) -> None: + if self._settings: + if self._modal_changed_sub: + self._settings.unsubscribe_to_change_events(self._modal_changed_sub) + self._settings = None + self._hide_on_modal = [] + self._modal_restore_window_states = {} + self._settings_dependencies = {} + self._window_settings = {} + if self._window_vis_changed_id: + ui.Workspace.remove_window_visibility_changed_callback(self._window_vis_changed_id) + self._window_vis_changed_id = None + + def __del__(self) -> None: + self.destroy() + + def add_hide_on_modal(self, window_names: Union[str, List[str]], restore: bool) -> None: + if isinstance(window_names, str): + window_names = [window_names] + for window_name in window_names: + if window_name not in self._hide_on_modal: + self._hide_on_modal.append((window_name, restore)) + + def remove_hide_on_modal(self, window_names: Union[str, List[str]]) -> None: + if isinstance(window_names, str): + window_names = [window_names] + self._hide_on_modal = [item for item in self._hide_on_modal if item[0] not in window_names] + + def add_window_visibility_setting(self, window_name: str, setting_path: str) -> None: + window = ui.Workspace.get_window(window_name) + if window is not None: + self._settings.set(setting_path, window.visible) + else: + # handle the case when the window is created later + self._settings.set(setting_path, False) + if window_name not in self._window_settings.keys(): + self._window_settings[window_name] = [] + self._window_settings[window_name].append(setting_path) + + def remove_window_visibility_setting(self, window_name: str, setting_path: str) -> None: + if window_name in self._window_settings.keys(): + setting_list = self._window_settings[window_name] + if setting_path in setting_list: + setting_list.remove(setting_path) + if len(setting_list) == 0: + del self._window_settings[window_name] + + def remove_all_window_visibility_settings(self, window_name: str) -> None: + if window_name in self._window_settings.keys(): + del self._window_settings[window_name] + + def add_settings_dependency(self, source_path: str, target_path: str, value_map: Dict[Any, Any]) -> None: + key = (source_path, target_path) + if key in self._settings_dependencies.keys(): + carb.log_error(f'Settings dependency {source_path} -> {target_path} already exists. Ignoring.') + return + self._settings_dependencies[key] = value_map + self._settings_changed_subs[key] = self._settings.subscribe_to_node_change_events( + source_path, + partial(self._on_settings_dependency_changed, source_path) + ) + + def add_settings_copy_dependency(self, source_path: str, target_path: str) -> None: + self.add_settings_dependency(source_path, target_path, None) + + def remove_settings_dependency(self, source_path: str, target_path: str) -> None: + key = (source_path, target_path) + if key in self._settings_dependencies.keys(): + del self._settings_dependencies[key] + if key in self._settings_changed_subs.keys(): + sub = self._settings_changed_subs.pop(key) + self._settings.unsubscribe_to_change_events(sub) + + def _on_settings_dependency_changed(self, path: str, item, event_type) -> None: + value = self._settings.get(path) + # setting does not exist + if value is None: + return + target_settings = [source_target[1] for source_target in self._settings_dependencies.keys() if source_target[0] == path] + for target_setting in target_settings: + value_map = self._settings_dependencies[(path, target_setting)] + # None means copy everything + if value_map is None: + self._settings.set(target_setting, value) + elif value in value_map.keys(): + self._settings.set(target_setting, value_map[value]) + + def _on_modal_setting_changed(self, item, event_type) -> None: + modal = self._settings.get_as_bool(MODAL_TOOL_ACTIVE_PATH) + if modal: + self._hide_windows() + else: + self._restore_windows() + + def _hide_windows(self) -> None: + for window_info in self._hide_on_modal: + window_name, restore_later = window_info[0], window_info[1] + window = ui.Workspace.get_window(window_name) + if window is not None: + if restore_later: + self._modal_restore_window_states[window_name] = window.visible + window.visible = False + + def _restore_windows(self) -> None: + for window_info in self._hide_on_modal: + window_name, restore_later = window_info[0], window_info[1] + if restore_later: + if window_name in self._modal_restore_window_states.keys(): + old_visibility = self._modal_restore_window_states[window_name] + if old_visibility is not None: + window = ui.Workspace.get_window(window_name) + if window is not None: + window.visible = old_visibility + self._modal_restore_window_states[window_name] = None + + def _on_window_vis_changed(self, title: str, state: bool) -> None: + if title in self._window_settings.keys(): + for setting in self._window_settings[title]: + self._settings.set_bool(setting, state) diff --git a/source/extensions/iot_samples.panel_extension.setup/layouts/comment_layout.json b/source/extensions/iot_samples.panel_extension.setup/layouts/comment_layout.json new file mode 100644 index 0000000..9736d66 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/layouts/comment_layout.json @@ -0,0 +1,315 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0, + "doc_id": 5 + } + ], + "dock_id": 3, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1187.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 536.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": false, + "width": 44.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Markup Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 32.0, + "position_x": 834.0, + "position_y": 384.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": false, + "width": 32.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Node Description Editor", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Toolkit", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 2389297972960", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Materials", + "visible": false, + "width": 0.0 + } +] diff --git a/source/extensions/iot_samples.panel_extension.setup/layouts/default.json b/source/extensions/iot_samples.panel_extension.setup/layouts/default.json new file mode 100644 index 0000000..e202891 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/layouts/default.json @@ -0,0 +1,344 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_id": 5, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 690.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1408.0 + } + ], + "dock_id": 5, + "position": "LEFT" + }, + { + "children": [ + { + "dock_id": 6, + "height": 690.0, + "position_x": 1410.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": true, + "width": 44.0 + } + ], + "dock_id": 6, + "position": "RIGHT" + } + ], + "dock_id": 3, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 4, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 267.0, + "position_x": 0.0, + "position_y": 718.0, + "selected_in_dock": true, + "title": "Content", + "visible": true, + "width": 1454.0 + }, + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": true, + "width": 1454.0 + }, + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Materials", + "visible": true, + "width": 1454.0 + } + , + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Examples", + "visible": true, + "width": 1454.0 + } + ], + "dock_id": 4, + "position": "BOTTOM" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "children": [ + { + "children": [ + { + "dock_id": 7, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 477.0, + "position_x": 1456.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Stage", + "visible": true, + "width": 464.0 + } + ], + "dock_id": 7, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 8, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 480.0, + "position_x": 1456.0, + "position_y": 505.0, + "selected_in_dock": true, + "title": "Property", + "visible": true, + "width": 464.0 + } + ], + "dock_id": 8, + "position": "BOTTOM" + } + ], + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 267.0, + "position_x": 0.0, + "position_y": 718.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1454.0 + }, + { + "dock_id": 0, + "height": 116.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 332.0 + }, + { + "dock_id": 0, + "height": 480.0, + "position_x": 1344.0, + "position_y": 22.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 576.0 + }, + { + "dock_id": 0, + "height": 320.0, + "position_x": 610.0, + "position_y": 348.0, + "selected_in_dock": false, + "title": "Welcome", + "visible": false, + "width": 700.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 650.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 465.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Measure Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 190.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Design Render Settings", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Timeline Session", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 540.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "About", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markups", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Waypoints", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 212.0, + "position_x": 120.0, + "position_y": 744.0, + "selected_in_dock": false, + "title": "0", + "visible": false, + "width": 860.0 + }, + { + "dock_id": 0, + "height": 148.0, + "position_x": 1004.0, + "position_y": 768.0, + "selected_in_dock": false, + "title": "Add bookmark", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 400.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Targets", + "visible": false, + "width": 400.0 + } +] \ No newline at end of file diff --git a/source/extensions/iot_samples.panel_extension.setup/layouts/layout_user.json b/source/extensions/iot_samples.panel_extension.setup/layouts/layout_user.json new file mode 100644 index 0000000..1f2e599 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/layouts/layout_user.json @@ -0,0 +1,533 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_id": 5, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 644.0, + "position_x": 0.0, + "position_y": 25.33333396911621, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1646.666748046875 + } + ], + "dock_id": 5, + "position": "LEFT" + }, + { + "children": [ + { + "dock_id": 6, + "height": 644.0, + "position_x": 1648.0, + "position_y": 25.33333396911621, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": true, + "width": 42.0 + } + ], + "dock_id": 6, + "position": "RIGHT" + } + ], + "dock_id": 3, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 4, + "height": 249.33334350585938, + "position_x": 0.0, + "position_y": 670.6666870117188, + "selected_in_dock": false, + "title": "Content", + "visible": true, + "width": 1690.0 + }, + { + "dock_id": 4, + "height": 249.33334350585938, + "position_x": 40.0, + "position_y": 40.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": true, + "width": 1690.0 + }, + { + "dock_id": 4, + "height": 249.33334350585938, + "position_x": 40.0, + "position_y": 40.0, + "selected_in_dock": false, + "title": "Materials", + "visible": true, + "width": 1690.0 + }, + { + "dock_id": 4, + "height": 249.33334350585938, + "position_x": 40.0, + "position_y": 40.0, + "selected_in_dock": false, + "title": "Examples", + "visible": true, + "width": 1690.0 + }, + { + "dock_id": 4, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 249.33334350585938, + "position_x": 0.0, + "position_y": 670.6666870117188, + "selected_in_dock": true, + "title": "Preferences", + "visible": true, + "width": 1690.0 + } + ], + "dock_id": 4, + "position": "BOTTOM" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "children": [ + { + "children": [ + { + "dock_id": 7, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 444.66668701171875, + "position_x": 1691.3333740234375, + "position_y": 25.33333396911621, + "selected_in_dock": true, + "title": "Stage", + "visible": true, + "width": 540.6666870117188 + } + ], + "dock_id": 7, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 8, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 448.66668701171875, + "position_x": 1691.3333740234375, + "position_y": 471.3333435058594, + "selected_in_dock": true, + "title": "Property", + "visible": true, + "width": 540.6666870117188 + } + ], + "dock_id": 8, + "position": "BOTTOM" + } + ], + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 40.0, + "position_y": 40.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 458.6666564941406, + "position_x": 1562.6666259765625, + "position_y": 1.3333333730697632, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 669.3333129882812 + }, + { + "dock_id": 0, + "height": 275.3333435058594, + "position_x": 0.0, + "position_y": 1.3333333730697632, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1561.3333740234375 + }, + { + "dock_id": 0, + "height": 946.6666870117188, + "position_x": 0.0, + "position_y": 0.0, + "selected_in_dock": false, + "title": "Welcome Fake Modal", + "visible": false, + "width": 2232.0 + }, + { + "dock_id": 0, + "height": 298.0, + "position_x": 709.0, + "position_y": 324.3333435058594, + "selected_in_dock": false, + "title": "Welcome", + "visible": false, + "width": 814.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 40.0, + "position_y": 40.0, + "selected_in_dock": false, + "title": "Debug Settings", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 34.0, + "position_x": 1230.6666259765625, + "position_y": 619.3333129882812, + "selected_in_dock": false, + "title": "045c32b4-6b8b-11ef-8db9-a4f933cad3ab", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 34.0, + "position_x": 1230.6666259765625, + "position_y": 619.3333129882812, + "selected_in_dock": false, + "title": "4b4f1da2-6b8b-11ef-a40b-a4f933cad3ab", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 450.0, + "position_x": 576.0, + "position_y": 248.0, + "selected_in_dock": false, + "title": "Open File", + "visible": false, + "width": 1080.0 + }, + { + "dock_id": 0, + "height": 34.0, + "position_x": 1230.6666259765625, + "position_y": 619.3333129882812, + "selected_in_dock": false, + "title": "018045a0-6b8c-11ef-bc7a-a4f933cad3ab", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 34.0, + "position_x": 1230.6666259765625, + "position_y": 619.3333129882812, + "selected_in_dock": false, + "title": "a658dc22-6b8c-11ef-9fba-a4f933cad3ab", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 34.0, + "position_x": 1230.6666259765625, + "position_y": 619.3333129882812, + "selected_in_dock": false, + "title": "3dd09b4d-6b8d-11ef-84f1-a4f933cad3ab", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 466.0, + "position_y": 73.33333587646484, + "selected_in_dock": false, + "title": "Extensions", + "visible": false, + "width": 1300.0 + }, + { + "dock_id": 0, + "height": 150.0, + "position_x": 1122.0, + "position_y": 186.0, + "selected_in_dock": false, + "title": "VS Code Link", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 34.0, + "position_x": 1230.6666259765625, + "position_y": 619.3333129882812, + "selected_in_dock": false, + "title": "2bf5835d-6b91-11ef-bda1-a4f933cad3ab", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 40.0, + "position_y": 40.0, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 390.0, + "position_x": 64.66667175292969, + "position_y": 91.33333587646484, + "selected_in_dock": false, + "title": "Sample IoT Data", + "visible": true, + "width": 350.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Timeline Session", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 650.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 190.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Design Render Settings", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 465.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Measure Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 710.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Captured Traces Browser", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 720.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Omni.UI Style Documentation", + "visible": false, + "width": 1200.0 + }, + { + "dock_id": 0, + "height": 720.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Viewport Doc", + "visible": false, + "width": 1200.0 + }, + { + "dock_id": 0, + "height": 720.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Omni.UI Scene API Documentation", + "visible": false, + "width": 1200.0 + }, + { + "dock_id": 0, + "height": 540.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "About", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markups", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Waypoints", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 103.33333587646484, + "position_x": 916.0, + "position_y": 421.3333435058594, + "selected_in_dock": false, + "title": "Leave Session", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 119.33333587646484, + "position_x": 916.0, + "position_y": 413.3333435058594, + "selected_in_dock": false, + "title": "Join Session", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 333.3333435058594, + "position_x": 866.0, + "position_y": 306.66668701171875, + "selected_in_dock": false, + "title": "Confirm File Deletion", + "visible": false, + "width": 500.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 912.0, + "position_y": 314.66668701171875, + "selected_in_dock": false, + "title": "Live Session", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 124.66667175292969, + "position_x": 1798.0, + "position_y": 816.6666870117188, + "selected_in_dock": false, + "title": "MaterialPropertyPopupWindow", + "visible": false, + "width": 385.3333435058594 + }, + { + "dock_id": 0, + "height": 400.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Targets", + "visible": false, + "width": 400.0 + } +] \ No newline at end of file diff --git a/source/extensions/iot_samples.panel_extension.setup/layouts/markup_editor.json b/source/extensions/iot_samples.panel_extension.setup/layouts/markup_editor.json new file mode 100644 index 0000000..032d24b --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/layouts/markup_editor.json @@ -0,0 +1,275 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_id": 3, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "USD Explorer Toolbar", + "visible": true, + "width": 44.0 + } + ], + "dock_id": 3, + "position": "RIGHT" + }, + { + "children": [ + { + "dock_id": 4, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0 + } + ], + "dock_id": 4, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "children": [ + { + "dock_id": 2, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 742.0, + "position_x": 1183.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Markup Manager", + "visible": false, + "width": 517.0 + } + ], + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1184.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 516.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1185.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1185.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1183.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1183.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 1560346058432", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + } +] diff --git a/source/extensions/iot_samples.panel_extension.setup/layouts/viewport_only.json b/source/extensions/iot_samples.panel_extension.setup/layouts/viewport_only.json new file mode 100644 index 0000000..9736d66 --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/layouts/viewport_only.json @@ -0,0 +1,315 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0, + "doc_id": 5 + } + ], + "dock_id": 3, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1187.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 536.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": false, + "width": 44.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Markup Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 32.0, + "position_x": 834.0, + "position_y": 384.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": false, + "width": 32.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Node Description Editor", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Toolkit", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 2389297972960", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Materials", + "visible": false, + "width": 0.0 + } +] diff --git a/source/extensions/iot_samples.panel_extension.setup/premake5.lua b/source/extensions/iot_samples.panel_extension.setup/premake5.lua new file mode 100644 index 0000000..474184a --- /dev/null +++ b/source/extensions/iot_samples.panel_extension.setup/premake5.lua @@ -0,0 +1,12 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, + { "layouts", ext.target_dir.."/layouts" }, + { "iot_samples", ext.target_dir.."/iot_samples" }, +} diff --git a/source/extensions/iot_samples.ui_panel/config/extension.toml b/source/extensions/iot_samples.ui_panel/config/extension.toml new file mode 100644 index 0000000..4f77528 --- /dev/null +++ b/source/extensions/iot_samples.ui_panel/config/extension.toml @@ -0,0 +1,78 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + +[package] +# Semantic Versionning is used: https://semver.org/ +version = "0.1.0" + +# Lists people or organizations that are considered the "authors" of the package. +authors = [ + "Author Name ", +] + +# The title and description fields are primarily for displaying extension info in the UI +title = 'IoT Samples UI Panel Extension' +description = "The simplest python UI extension example. Use it as a starting point for your extensions." + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# Path (relative to the root) of changelog +# More info on writing changelog: https://keepachangelog.com/en/1.0.0/ +changelog = "docs/CHANGELOG.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for the UI. +category = "Example" + +# Keywords for the extension +keywords = ["kit", "example"] + +# Preview image and icon. Folder named "data" automatically goes in git lfs (see .gitattributes file). +# Preview image is shown in "Overview" of Extensions window. Screenshot of an extension might be a good preview image. +preview_image = "data/preview.png" + +# Icon is shown in Extension manager. It is recommended to be square, of size 256x256. +icon = "data/icon.png" + +# Use omni.ui to build simple UI +[dependencies] +"omni.kit.uiapp" = {} + +# Main python module this extension provides, it will be publicly available as "import iot_samples.ui_panel". +[[python.module]] +name = "iot_samples.ui_panel" + +[[test]] +# Extra dependencies only to be used during test run +dependencies = [ + "omni.kit.test", + "omni.kit.ui_test" # UI testing extension +] + +[documentation] +pages = [ + "docs/Overview.md", + "docs/CHANGELOG.md", +] \ No newline at end of file diff --git a/source/extensions/iot_samples.ui_panel/data/icon.png b/source/extensions/iot_samples.ui_panel/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/source/extensions/iot_samples.ui_panel/data/icon.png differ diff --git a/source/extensions/iot_samples.ui_panel/data/preview.png b/source/extensions/iot_samples.ui_panel/data/preview.png new file mode 100644 index 0000000..5c3fc19 Binary files /dev/null and b/source/extensions/iot_samples.ui_panel/data/preview.png differ diff --git a/exts/omni.iot.sample.panel/docs/CHANGELOG.md b/source/extensions/iot_samples.ui_panel/docs/CHANGELOG.md similarity index 85% rename from exts/omni.iot.sample.panel/docs/CHANGELOG.md rename to source/extensions/iot_samples.ui_panel/docs/CHANGELOG.md index 14a6b88..08f30b2 100644 --- a/exts/omni.iot.sample.panel/docs/CHANGELOG.md +++ b/source/extensions/iot_samples.ui_panel/docs/CHANGELOG.md @@ -3,6 +3,5 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). -## [1.0.0] - 2021-04-26 +## [0.1.0] - 2024-07-16 - Initial version of extension UI template with a window - diff --git a/source/extensions/iot_samples.ui_panel/docs/Overview.md b/source/extensions/iot_samples.ui_panel/docs/Overview.md new file mode 100644 index 0000000..4bba659 --- /dev/null +++ b/source/extensions/iot_samples.ui_panel/docs/Overview.md @@ -0,0 +1 @@ +# Overview \ No newline at end of file diff --git a/source/extensions/iot_samples.ui_panel/docs/README.md b/source/extensions/iot_samples.ui_panel/docs/README.md new file mode 100644 index 0000000..24bb9cd --- /dev/null +++ b/source/extensions/iot_samples.ui_panel/docs/README.md @@ -0,0 +1,3 @@ +# IoT Samples UI Panel Extension [iot_samples.ui_panel] + +A simple python UI extension example. Use it as a starting point for your extensions. diff --git a/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/__init__.py b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/__init__.py new file mode 100644 index 0000000..4b398fc --- /dev/null +++ b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/__init__.py @@ -0,0 +1,24 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + + +from .extension import * diff --git a/exts/omni.iot.sample.panel/omni/iot/sample/panel/extension.py b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/extension.py similarity index 89% rename from exts/omni.iot.sample.panel/omni/iot/sample/panel/extension.py rename to source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/extension.py index a2990db..9b20cc7 100644 --- a/exts/omni.iot.sample.panel/omni/iot/sample/panel/extension.py +++ b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/extension.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a @@ -19,12 +19,14 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER # DEALINGS IN THE SOFTWARE. + import omni.ext import omni.ui as ui import omni.kit.usd.layers as layers from pxr import Usd, Sdf, Tf, UsdGeom import omni.ui.color_utils as cl +TRANSLATE = "xformOp:translate" TRANSLATE_OFFSET = "xformOp:translate:offset" ROTATE_SPIN = "xformOp:rotateX:spin" @@ -56,10 +58,18 @@ def __init__(self, stage: Usd.Stage, path: str): def resume(self): if self._xform and not self._op: - op = self._xform.AddTranslateOp(opSuffix="offset") - op.Set(time=1, value=(0, -20.0, 0)) - op.Set(time=192, value=(0, -440, 0)) + offset = self._xform.AddTranslateOp(opSuffix="offset") + offset.Set(time=1, value=(0, -20.0, 0)) + offset.Set(time=192, value=(0, -220, 0)) self._op = True + default_ops = [] + for op in self._xform.GetOrderedXformOps(): + if op.GetOpName() != TRANSLATE_OFFSET: + default_ops.append(op) + # add the offset after the translate op on the cube + if op.GetOpName() == TRANSLATE: + default_ops.append(offset) + self._xform.SetXformOpOrder(default_ops) def pause(self): if self._xform and self._op: @@ -197,6 +207,18 @@ def _on_selection_changed(self): def _on_asset_opened(self): print("[omni.iot.sample.panel] on_asset_opened") + self._usd_context = omni.usd.get_context() + self._stage = self._usd_context.get_stage() + self._live_syncing = layers.get_live_syncing(self._usd_context) + self._layers = layers.get_layers(self._usd_context) + + self._selected_prim = None + + self._layers_event_subscription = self._layers.get_event_stream().create_subscription_to_pop_by_type( + layers.LayerEventType.LIVE_SESSION_STATE_CHANGED, + self._on_layers_event, + name=f"omni.iot.sample.panel {str(layers.LayerEventType.LIVE_SESSION_STATE_CHANGED)}", + ) def _on_stage_event(self, event): if event.type == int(omni.usd.StageEventType.SELECTION_CHANGED): @@ -224,6 +246,9 @@ def _on_layers_event(self, event): if not payload.is_layer_influenced(self._usd_context.get_stage_url()): return + if self._stage is None: + self._stage = self._usd_context.get_stage() + self._update_ui() def _update_ui(self): diff --git a/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/tests/__init__.py b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/tests/__init__.py new file mode 100644 index 0000000..a4ba33d --- /dev/null +++ b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/tests/__init__.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .test_hello_world import * diff --git a/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/tests/test_hello_world.py b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/tests/test_hello_world.py new file mode 100644 index 0000000..b9c611e --- /dev/null +++ b/source/extensions/iot_samples.ui_panel/iot_samples/ui_panel/tests/test_hello_world.py @@ -0,0 +1,67 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + +# NOTE: +# omni.kit.test - std python's unittest module with additional wrapping to add suport for async/await tests +# For most things refer to unittest docs: https://docs.python.org/3/library/unittest.html +import omni.kit.test + +# Extension for writing UI tests (to simulate UI interaction) +import omni.kit.ui_test as ui_test + +# Import extension python module we are testing with absolute import path, as if we are external user (other extension) +import iot_samples.ui_panel + + +# Having a test class dervived from omni.kit.test.AsyncTestCase declared on the root of module will make it auto-discoverable by omni.kit.test +class Test(omni.kit.test.AsyncTestCase): + # Before running each test + async def setUp(self): + pass + + # After running each test + async def tearDown(self): + pass + + # Actual test, notice it is an "async" function, so "await" can be used if needed + async def test_hello_public_function(self): + result = iot_samples.ui_panel.some_public_function(4) + self.assertEqual(result, 256) + + async def test_window_button(self): + + # Find a label in our window + label = ui_test.find("IoT Samples UI Panel Extension//Frame/**/Label[*]") + + # Find buttons in our window + add_button = ui_test.find("IoT Samples UI Panel Extension//Frame/**/Button[*].text=='Add'") + reset_button = ui_test.find("IoT Samples UI Panel Extension//Frame/**/Button[*].text=='Reset'") + + # Click reset button + await reset_button.click() + self.assertEqual(label.widget.text, "empty") + + await add_button.click() + self.assertEqual(label.widget.text, "count: 1") + + await add_button.click() + self.assertEqual(label.widget.text, "count: 2") diff --git a/source/extensions/iot_samples.ui_panel/premake5.lua b/source/extensions/iot_samples.ui_panel/premake5.lua new file mode 100644 index 0000000..76db283 --- /dev/null +++ b/source/extensions/iot_samples.ui_panel/premake5.lua @@ -0,0 +1,11 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, + { "iot_samples", ext.target_dir.."/iot_samples" }, +} diff --git a/source/extensions/iot_samples.usd_explorer.setup/config/extension.toml b/source/extensions/iot_samples.usd_explorer.setup/config/extension.toml new file mode 100644 index 0000000..1c8449d --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/config/extension.toml @@ -0,0 +1,118 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +[package] +# Semantic Versionning is used: https://semver.org/ +version = "0.1.0" + +# The title and description fields are primarily for displaying extension info in UI +title = "IoT Samples Setup Extension" +description = "A setup extension for a USD Explorer based template applicaiton" + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for UI. +category = "setup" + +# Keywords for the extension +keywords = ["kit", "app", "setup"] + +# Icon to show in the extension manager +icon = "data/icon.png" + +# Preview to show in the extension manager +preview_image = "data/preview.png" + +# Use omni.ui to build simple UI +[dependencies] +"omni.kit.quicklayout" = {} +"omni.kit.window.title" = {} +"omni.kit.browser.asset" = {} +"omni.kit.window.console" = {} +"omni.kit.window.content_browser" = {} +"omni.kit.window.material" = {} +"omni.kit.window.toolbar" = {} +"omni.kit.property.bundle" = {} +"omni.kit.property.layer" = {} +"omni.kit.stage_templates" = {} +"omni.kit.viewport.navigation.usd_explorer.bundle" = {} +"omni.kit.window.preferences" = {} + +# from omni.view.app.setup +"omni.kit.viewport.menubar.camera" = { optional=true } +"omni.kit.widget.layers" = { optional=true } +"omni.kit.widgets.custom" = {} +"omni.kit.window.file" = {} + +# Main python module this extension provides, it will be publicly available as "import omni.hello.world". +[[python.module]] +name = "iot_samples.usd_explorer.setup" + +[settings] +app.layout.name = "viewport_only" +app.application_mode = "review" +exts."omni.kit.viewport.menubar.camera".expand = true # Expand the extra-camera settings by default +exts."omni.kit.window.file".useNewFilePicker = true +exts."omni.kit.tool.asset_importer".useNewFilePicker = true +exts."omni.kit.tool.collect".useNewFilePicker = true +exts."omni.kit.widget.layers".useNewFilePicker = true +exts."omni.kit.renderer.core".imgui.enableMips = true +exts."omni.kit.browser.material".enabled = false +exts."omni.kit.window.material".load_after_startup = true +exts."omni.kit.widget.cloud_share".require_access_code = false +exts."omni.kit.mesh.raycast".bvhBuildOnFirstRequired = true # Avoids mesh raycast to initialize during stage open +app.content.emptyStageOnStart = true +app.viewport.createCameraModelRep = false # Disable creation of camera meshes in USD + +# USDRT +app.usdrt.scene_delegate.enableProxyCubes = false +app.usdrt.scene_delegate.geometryStreaming.enabled = true +app.usdrt.scene_delegate.numFramesBetweenLoadBatches = 2 +app.usdrt.scene_delegate.geometryStreaming.numberOfVerticesToLoadPerChunk = 600000 + +exts."omni.kit.viewport.navigation.camera_manipulator".defaultOperation = "" + +[[test]] +dependencies = [ + "omni.kit.core.tests", + "omni.kit.ui_test", + "omni.kit.mainwindow", + "omni.kit.stage_templates", + "omni.kit.viewport.window", + "omni.kit.viewport.utility", +] +args = [ + "--/app/file/ignoreUnsavedOnExit=true", + # "--/renderer/enabled=pxr", + # "--/renderer/active=pxr", + "--/app/window/width=1280", + "--/app/window/height=720", + "--/app/window/dpiScaleOverride=1.0", + "--/app/window/scaleToMonitor=false", + "--/exts/omni.kit.viewport.window/startup/windowName=Viewport", + "--reset-user", + "--no-window", + "--/app/fastShutdown=1" +] diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/BuiltInMaterials.usda b/source/extensions/iot_samples.usd_explorer.setup/data/BuiltInMaterials.usda new file mode 100644 index 0000000..b63f55d --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/data/BuiltInMaterials.usda @@ -0,0 +1,984 @@ +#usda 1.0 +( + customLayerData = { + dictionary audioSettings = { + double dopplerLimit = 2 + double dopplerScale = 1 + double nonSpatialTimeScale = 1 + double spatialTimeScale = 1 + double speedOfSound = 340 + } + dictionary cameraSettings = { + dictionary Front = { + double3 position = (0, 0, 50000) + double radius = 500 + double3 target = (0, 0, 0) + } + dictionary Perspective = { + double3 position = (-585.5409829436198, 535.6688465310699, 562.1769926693995) + double radius = 1131.7878009131487 + double3 target = (-27.520387592247175, -243.6256650263898, -39.70065745223519) + } + dictionary Right = { + double3 position = (-50000, 0, -1.1102230246251565e-11) + double radius = 500 + double3 target = (0, 0, 0) + } + dictionary Top = { + double3 position = (-8.11833802720775e-12, 50000, 1.1102230246251565e-11) + double radius = 500 + double3 target = (0, 0, 0) + } + string boundCamera = "/OmniverseKit_Persp" + } + dictionary navmeshSettings = { + double agentHeight = 180 + double agentRadius = 20 + bool excludeRigidBodies = 1 + int ver = 1 + double voxelCeiling = 460 + } + dictionary omni_layer = { + string authoring_layer = "./BuiltInMaterials.usda" + dictionary locked = { + } + dictionary muteness = { + } + } + int refinementOverrideImplVersion = 0 + dictionary renderSettings = { + float3 "rtx:debugView:pixelDebug:textColor" = (0, 1e18, 0) + float3 "rtx:fog:fogColor" = (0.75, 0.75, 0.75) + float3 "rtx:index:regionOfInterestMax" = (0, 0, 0) + float3 "rtx:index:regionOfInterestMin" = (0, 0, 0) + float3 "rtx:iray:environment_dome_ground_position" = (0, 0, 0) + float3 "rtx:iray:environment_dome_ground_reflectivity" = (0, 0, 0) + float3 "rtx:iray:environment_dome_rotation_axis" = (3.4028235e38, 3.4028235e38, 3.4028235e38) + float3 "rtx:post:backgroundZeroAlpha:backgroundDefaultColor" = (0, 0, 0) + float3 "rtx:post:colorcorr:contrast" = (1, 1, 1) + float3 "rtx:post:colorcorr:gain" = (1, 1, 1) + float3 "rtx:post:colorcorr:gamma" = (1, 1, 1) + float3 "rtx:post:colorcorr:offset" = (0, 0, 0) + float3 "rtx:post:colorcorr:saturation" = (1, 1, 1) + float3 "rtx:post:colorgrad:blackpoint" = (0, 0, 0) + float3 "rtx:post:colorgrad:contrast" = (1, 1, 1) + float3 "rtx:post:colorgrad:gain" = (1, 1, 1) + float3 "rtx:post:colorgrad:gamma" = (1, 1, 1) + float3 "rtx:post:colorgrad:lift" = (0, 0, 0) + float3 "rtx:post:colorgrad:multiply" = (1, 1, 1) + float3 "rtx:post:colorgrad:offset" = (0, 0, 0) + float3 "rtx:post:colorgrad:whitepoint" = (1, 1, 1) + float3 "rtx:post:lensDistortion:lensFocalLengthArray" = (10, 30, 50) + float3 "rtx:post:lensFlares:anisoFlareFalloffX" = (450, 475, 500) + float3 "rtx:post:lensFlares:anisoFlareFalloffY" = (10, 10, 10) + float3 "rtx:post:lensFlares:cutoffPoint" = (2, 2, 2) + float3 "rtx:post:lensFlares:haloFlareFalloff" = (10, 10, 10) + float3 "rtx:post:lensFlares:haloFlareRadius" = (75, 75, 75) + float3 "rtx:post:lensFlares:isotropicFlareFalloff" = (50, 50, 50) + float3 "rtx:post:tonemap:whitepoint" = (1, 1, 1) + float3 "rtx:raytracing:inscattering:singleScatteringAlbedo" = (0.9, 0.9, 0.9) + float3 "rtx:raytracing:inscattering:transmittanceColor" = (0.5, 0.5, 0.5) + token "rtx:rendermode" = "PathTracing" + float3 "rtx:sceneDb:ambientLightColor" = (0.1, 0.1, 0.1) + } + } + defaultPrim = "World" + metersPerUnit = 0.009999999776482582 + timeCodesPerSecond = 24 + upAxis = "Y" +) + +def Xform "World" +{ + def DistantLight "defaultLight" ( + prepend apiSchemas = ["ShapingAPI"] + kind = "model" + ) + { + float angle = 1 + float intensity = 3000 + float shaping:cone:angle = 180 + float shaping:cone:softness + float shaping:focus + color3f shaping:focusTint + asset shaping:ies:file + float3 xformOp:rotateZYX = (315, 0, 0) + float3 xformOp:translate = (0, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX"] + } + + def Cube "Cube" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double size = 100 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-210.281097, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Scope "Looks" ( + kind = "model" + ) + { + def Material "OmniGlass" + { + color3f inputs:glass_color = (0.02953589, 0.15239275, 1) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (0, 0, 0) + float3 min = (0, 0, 0) + } + } + displayGroup = "Color" + displayName = "Glass Color" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniGlass.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniGlass" + color3f inputs:glass_color.connect = + token outputs:out + } + } + + def Material "OmniPBR" + { + color3f inputs:diffuse_tint = (0.78902954, 0.6577549, 0.49272734) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR" + color3f inputs:diffuse_tint ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Albedo" + displayName = "Color Tint" + doc = "When enabled, this color value is multiplied over the final albedo color" + hidden = false + ) + color3f inputs:diffuse_tint.connect = + token outputs:out + } + } + + def Material "OmniPBR_Opacity" + { + color3f inputs:diffuse_tint = (0.37539837, 0.7552743, 0.34417564) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_Opacity" + color3f inputs:diffuse_tint.connect = + token outputs:out + } + } + + def Material "PreviewSurface" + { + token outputs:surface.connect = + + def Shader "Shader" + { + reorder properties = ["inputs:diffuseColor", "inputs:emissiveColor", "inputs:useSpecularWorkflow", "inputs:specularColor", "inputs:metallic", "inputs:roughness", "inputs:clearcoat", "inputs:clearcoatRoughness", "inputs:opacity", "inputs:opacityThreshold", "inputs:ior", "inputs:normal", "inputs:displacement", "inputs:occlusion", "outputs:surface", "outputs:displacement"] + uniform token info:id = "UsdPreviewSurface" + float inputs:clearcoat + float inputs:clearcoatRoughness = 0.01 + color3f inputs:diffuseColor = (0.06402108, 0.19669037, 0.24472576) + float inputs:displacement + color3f inputs:emissiveColor + float inputs:ior = 1.5 + float inputs:metallic + normal3f inputs:normal = (0, 0, 1) + float inputs:occlusion = 1 + float inputs:opacity = 1 + float inputs:opacityThreshold + float inputs:roughness = 0.5 ( + customData = { + dictionary range = { + double max = 1 + double min = 0 + } + } + ) + color3f inputs:specularColor + int inputs:useSpecularWorkflow ( + customData = { + dictionary range = { + int max = 1 + int min = 0 + } + } + ) + token outputs:displacement + token outputs:surface + } + } + + def Material "OmniPBR_ClearCoat" + { + float inputs:clearcoat_reflection_roughness = 0.051 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Roughness" + ) + color3f inputs:clearcoat_tint = (0, 0.9873462, 1) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Tint" + ) + color3f inputs:diffuse_tint = (0.050134417, 0.74261606, 0.10272784) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + bool inputs:enable_clearcoat = 1 ( + customData = { + bool default = 0 + } + displayGroup = "Clearcoat" + displayName = "Enable Clearcoat Layer" + ) + float inputs:metallic_constant = 1 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Reflectivity" + displayName = "Metallic Amount" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_ClearCoat.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_ClearCoat" + float inputs:clearcoat_reflection_roughness.connect = + color3f inputs:clearcoat_tint.connect = + color3f inputs:diffuse_tint.connect = + bool inputs:enable_clearcoat.connect = + float inputs:metallic_constant.connect = + token outputs:out + } + } + + def Material "OmniPBR_ClearCoat_Opacity" + { + float inputs:clearcoat_reflection_roughness = 0.079 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Roughness" + ) + color3f inputs:clearcoat_tint = (0.9999908, 1, 0.99999) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Tint" + ) + color3f inputs:diffuse_tint = (0.93670887, 0.039523557, 0.039523557) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + bool inputs:enable_clearcoat = 1 ( + customData = { + bool default = 0 + } + displayGroup = "Clearcoat" + displayName = "Enable Clearcoat Layer" + ) + float inputs:metallic_constant = 1 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Reflectivity" + displayName = "Metallic Amount" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_ClearCoat_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_ClearCoat_Opacity" + float inputs:clearcoat_reflection_roughness.connect = + color3f inputs:clearcoat_tint.connect = + color3f inputs:diffuse_tint.connect = + bool inputs:enable_clearcoat.connect = + float inputs:metallic_constant.connect = + token outputs:out + } + } + + def Material "OmniGlass_Opacity" + { + color3f inputs:glass_color = (1, 0, 0) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (0, 0, 0) + float3 min = (0, 0, 0) + } + } + displayGroup = "Color" + displayName = "Glass Color" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniGlass_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniGlass_Opacity" + color3f inputs:glass_color.connect = + token outputs:out + } + } + + def Material "OmniVolumeDensity" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniVolumeDensity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniVolumeDensity" + token outputs:out + } + } + + def Material "OmniSurface" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniSurface.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniSurface" + float inputs:coat_weight = 0.35999998 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Coat" + displayName = "Weight" + hidden = false + ) + color3f inputs:diffuse_reflection_color = (0.06820113, 0.28957528, 0.117775105) ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Base" + displayName = "Color" + hidden = false + ) + float inputs:metalness = 0 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Base" + displayName = "Metalness" + hidden = false + ) + float inputs:specular_reflection_roughness = 0.42 ( + customData = { + float default = 0.2 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Specular" + displayName = "Roughness" + hidden = false + ) + token outputs:out + } + } + + def Material "OmniSurfaceLite" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniSurfaceLite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniSurfaceLite" + color3f inputs:diffuse_reflection_color = (0.23333995, 0.053487573, 0.3011583) ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Base" + displayName = "Color" + hidden = false + ) + token outputs:out + } + } + + def Material "OmniHair" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniHair.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniHair" + token outputs:out ( + renderType = "material" + ) + } + } + + def Material "PreviewSurface_monolithic" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @UsdPreviewSurfaceMonolithic.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "UsdPreviewSurfaceMonolithic" + color3f inputs:diffuseColor = (1, 1, 0) ( + customData = { + float3 default = (0.18, 0.18, 0.18) + } + hidden = false + renderType = "color" + ) + token outputs:out + } + } + + def Material "PreviewSurface_monolithic_lite" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @UsdPreviewSurfaceMonolithicLite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "UsdPreviewSurfaceMonolithicLite" + color3f inputs:diffuseColor = (0, 1, 1) + token outputs:out + } + } + + def Material "DebugWhite" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @DebugWhite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "DebugWhite" + token outputs:out + } + } + + def Material "Default" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @Default.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "Default" + token outputs:out + } + } + + def Material "DebugWhiteEmissive" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @DebugWhiteEmissive.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "DebugWhiteEmissive" + token outputs:out + } + } + } + + def Cube "Cube_01" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double size = 100 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (6.813209, 0.170179, 6.813209) + double3 xformOp:translate = (0, -61.738472, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Sphere "Sphere" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (197.062866, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Sphere "Sphere_02" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4.04462, 0, -168.7586) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Cylinder "Cylinder" ( + kind = "model" + ) + { + uniform token axis = "Y" + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + double height = 100 + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + } + + def Cone "Cone" ( + kind = "model" + ) + { + uniform token axis = "Y" + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + double height = 100 + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + double3 xformOp:rotateZYX = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 0, 168.965569) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Torus" ( + kind = "model" + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 32, 33, 1, 1, 33, 34, 2, 2, 34, 35, 3, 3, 35, 36, 4, 4, 36, 37, 5, 5, 37, 38, 6, 6, 38, 39, 7, 7, 39, 40, 8, 8, 40, 41, 9, 9, 41, 42, 10, 10, 42, 43, 11, 11, 43, 44, 12, 12, 44, 45, 13, 13, 45, 46, 14, 14, 46, 47, 15, 15, 47, 48, 16, 16, 48, 49, 17, 17, 49, 50, 18, 18, 50, 51, 19, 19, 51, 52, 20, 20, 52, 53, 21, 21, 53, 54, 22, 22, 54, 55, 23, 23, 55, 56, 24, 24, 56, 57, 25, 25, 57, 58, 26, 26, 58, 59, 27, 27, 59, 60, 28, 28, 60, 61, 29, 29, 61, 62, 30, 30, 62, 63, 31, 31, 63, 32, 0, 32, 64, 65, 33, 33, 65, 66, 34, 34, 66, 67, 35, 35, 67, 68, 36, 36, 68, 69, 37, 37, 69, 70, 38, 38, 70, 71, 39, 39, 71, 72, 40, 40, 72, 73, 41, 41, 73, 74, 42, 42, 74, 75, 43, 43, 75, 76, 44, 44, 76, 77, 45, 45, 77, 78, 46, 46, 78, 79, 47, 47, 79, 80, 48, 48, 80, 81, 49, 49, 81, 82, 50, 50, 82, 83, 51, 51, 83, 84, 52, 52, 84, 85, 53, 53, 85, 86, 54, 54, 86, 87, 55, 55, 87, 88, 56, 56, 88, 89, 57, 57, 89, 90, 58, 58, 90, 91, 59, 59, 91, 92, 60, 60, 92, 93, 61, 61, 93, 94, 62, 62, 94, 95, 63, 63, 95, 64, 32, 64, 96, 97, 65, 65, 97, 98, 66, 66, 98, 99, 67, 67, 99, 100, 68, 68, 100, 101, 69, 69, 101, 102, 70, 70, 102, 103, 71, 71, 103, 104, 72, 72, 104, 105, 73, 73, 105, 106, 74, 74, 106, 107, 75, 75, 107, 108, 76, 76, 108, 109, 77, 77, 109, 110, 78, 78, 110, 111, 79, 79, 111, 112, 80, 80, 112, 113, 81, 81, 113, 114, 82, 82, 114, 115, 83, 83, 115, 116, 84, 84, 116, 117, 85, 85, 117, 118, 86, 86, 118, 119, 87, 87, 119, 120, 88, 88, 120, 121, 89, 89, 121, 122, 90, 90, 122, 123, 91, 91, 123, 124, 92, 92, 124, 125, 93, 93, 125, 126, 94, 94, 126, 127, 95, 95, 127, 96, 64, 96, 128, 129, 97, 97, 129, 130, 98, 98, 130, 131, 99, 99, 131, 132, 100, 100, 132, 133, 101, 101, 133, 134, 102, 102, 134, 135, 103, 103, 135, 136, 104, 104, 136, 137, 105, 105, 137, 138, 106, 106, 138, 139, 107, 107, 139, 140, 108, 108, 140, 141, 109, 109, 141, 142, 110, 110, 142, 143, 111, 111, 143, 144, 112, 112, 144, 145, 113, 113, 145, 146, 114, 114, 146, 147, 115, 115, 147, 148, 116, 116, 148, 149, 117, 117, 149, 150, 118, 118, 150, 151, 119, 119, 151, 152, 120, 120, 152, 153, 121, 121, 153, 154, 122, 122, 154, 155, 123, 123, 155, 156, 124, 124, 156, 157, 125, 125, 157, 158, 126, 126, 158, 159, 127, 127, 159, 128, 96, 128, 160, 161, 129, 129, 161, 162, 130, 130, 162, 163, 131, 131, 163, 164, 132, 132, 164, 165, 133, 133, 165, 166, 134, 134, 166, 167, 135, 135, 167, 168, 136, 136, 168, 169, 137, 137, 169, 170, 138, 138, 170, 171, 139, 139, 171, 172, 140, 140, 172, 173, 141, 141, 173, 174, 142, 142, 174, 175, 143, 143, 175, 176, 144, 144, 176, 177, 145, 145, 177, 178, 146, 146, 178, 179, 147, 147, 179, 180, 148, 148, 180, 181, 149, 149, 181, 182, 150, 150, 182, 183, 151, 151, 183, 184, 152, 152, 184, 185, 153, 153, 185, 186, 154, 154, 186, 187, 155, 155, 187, 188, 156, 156, 188, 189, 157, 157, 189, 190, 158, 158, 190, 191, 159, 159, 191, 160, 128, 160, 192, 193, 161, 161, 193, 194, 162, 162, 194, 195, 163, 163, 195, 196, 164, 164, 196, 197, 165, 165, 197, 198, 166, 166, 198, 199, 167, 167, 199, 200, 168, 168, 200, 201, 169, 169, 201, 202, 170, 170, 202, 203, 171, 171, 203, 204, 172, 172, 204, 205, 173, 173, 205, 206, 174, 174, 206, 207, 175, 175, 207, 208, 176, 176, 208, 209, 177, 177, 209, 210, 178, 178, 210, 211, 179, 179, 211, 212, 180, 180, 212, 213, 181, 181, 213, 214, 182, 182, 214, 215, 183, 183, 215, 216, 184, 184, 216, 217, 185, 185, 217, 218, 186, 186, 218, 219, 187, 187, 219, 220, 188, 188, 220, 221, 189, 189, 221, 222, 190, 190, 222, 223, 191, 191, 223, 192, 160, 192, 224, 225, 193, 193, 225, 226, 194, 194, 226, 227, 195, 195, 227, 228, 196, 196, 228, 229, 197, 197, 229, 230, 198, 198, 230, 231, 199, 199, 231, 232, 200, 200, 232, 233, 201, 201, 233, 234, 202, 202, 234, 235, 203, 203, 235, 236, 204, 204, 236, 237, 205, 205, 237, 238, 206, 206, 238, 239, 207, 207, 239, 240, 208, 208, 240, 241, 209, 209, 241, 242, 210, 210, 242, 243, 211, 211, 243, 244, 212, 212, 244, 245, 213, 213, 245, 246, 214, 214, 246, 247, 215, 215, 247, 248, 216, 216, 248, 249, 217, 217, 249, 250, 218, 218, 250, 251, 219, 219, 251, 252, 220, 220, 252, 253, 221, 221, 253, 254, 222, 222, 254, 255, 223, 223, 255, 224, 192, 224, 256, 257, 225, 225, 257, 258, 226, 226, 258, 259, 227, 227, 259, 260, 228, 228, 260, 261, 229, 229, 261, 262, 230, 230, 262, 263, 231, 231, 263, 264, 232, 232, 264, 265, 233, 233, 265, 266, 234, 234, 266, 267, 235, 235, 267, 268, 236, 236, 268, 269, 237, 237, 269, 270, 238, 238, 270, 271, 239, 239, 271, 272, 240, 240, 272, 273, 241, 241, 273, 274, 242, 242, 274, 275, 243, 243, 275, 276, 244, 244, 276, 277, 245, 245, 277, 278, 246, 246, 278, 279, 247, 247, 279, 280, 248, 248, 280, 281, 249, 249, 281, 282, 250, 250, 282, 283, 251, 251, 283, 284, 252, 252, 284, 285, 253, 253, 285, 286, 254, 254, 286, 287, 255, 255, 287, 256, 224, 256, 288, 289, 257, 257, 289, 290, 258, 258, 290, 291, 259, 259, 291, 292, 260, 260, 292, 293, 261, 261, 293, 294, 262, 262, 294, 295, 263, 263, 295, 296, 264, 264, 296, 297, 265, 265, 297, 298, 266, 266, 298, 299, 267, 267, 299, 300, 268, 268, 300, 301, 269, 269, 301, 302, 270, 270, 302, 303, 271, 271, 303, 304, 272, 272, 304, 305, 273, 273, 305, 306, 274, 274, 306, 307, 275, 275, 307, 308, 276, 276, 308, 309, 277, 277, 309, 310, 278, 278, 310, 311, 279, 279, 311, 312, 280, 280, 312, 313, 281, 281, 313, 314, 282, 282, 314, 315, 283, 283, 315, 316, 284, 284, 316, 317, 285, 285, 317, 318, 286, 286, 318, 319, 287, 287, 319, 288, 256, 288, 320, 321, 289, 289, 321, 322, 290, 290, 322, 323, 291, 291, 323, 324, 292, 292, 324, 325, 293, 293, 325, 326, 294, 294, 326, 327, 295, 295, 327, 328, 296, 296, 328, 329, 297, 297, 329, 330, 298, 298, 330, 331, 299, 299, 331, 332, 300, 300, 332, 333, 301, 301, 333, 334, 302, 302, 334, 335, 303, 303, 335, 336, 304, 304, 336, 337, 305, 305, 337, 338, 306, 306, 338, 339, 307, 307, 339, 340, 308, 308, 340, 341, 309, 309, 341, 342, 310, 310, 342, 343, 311, 311, 343, 344, 312, 312, 344, 345, 313, 313, 345, 346, 314, 314, 346, 347, 315, 315, 347, 348, 316, 316, 348, 349, 317, 317, 349, 350, 318, 318, 350, 351, 319, 319, 351, 320, 288, 320, 352, 353, 321, 321, 353, 354, 322, 322, 354, 355, 323, 323, 355, 356, 324, 324, 356, 357, 325, 325, 357, 358, 326, 326, 358, 359, 327, 327, 359, 360, 328, 328, 360, 361, 329, 329, 361, 362, 330, 330, 362, 363, 331, 331, 363, 364, 332, 332, 364, 365, 333, 333, 365, 366, 334, 334, 366, 367, 335, 335, 367, 368, 336, 336, 368, 369, 337, 337, 369, 370, 338, 338, 370, 371, 339, 339, 371, 372, 340, 340, 372, 373, 341, 341, 373, 374, 342, 342, 374, 375, 343, 343, 375, 376, 344, 344, 376, 377, 345, 345, 377, 378, 346, 346, 378, 379, 347, 347, 379, 380, 348, 348, 380, 381, 349, 349, 381, 382, 350, 350, 382, 383, 351, 351, 383, 352, 320, 352, 384, 385, 353, 353, 385, 386, 354, 354, 386, 387, 355, 355, 387, 388, 356, 356, 388, 389, 357, 357, 389, 390, 358, 358, 390, 391, 359, 359, 391, 392, 360, 360, 392, 393, 361, 361, 393, 394, 362, 362, 394, 395, 363, 363, 395, 396, 364, 364, 396, 397, 365, 365, 397, 398, 366, 366, 398, 399, 367, 367, 399, 400, 368, 368, 400, 401, 369, 369, 401, 402, 370, 370, 402, 403, 371, 371, 403, 404, 372, 372, 404, 405, 373, 373, 405, 406, 374, 374, 406, 407, 375, 375, 407, 408, 376, 376, 408, 409, 377, 377, 409, 410, 378, 378, 410, 411, 379, 379, 411, 412, 380, 380, 412, 413, 381, 381, 413, 414, 382, 382, 414, 415, 383, 383, 415, 384, 352, 384, 416, 417, 385, 385, 417, 418, 386, 386, 418, 419, 387, 387, 419, 420, 388, 388, 420, 421, 389, 389, 421, 422, 390, 390, 422, 423, 391, 391, 423, 424, 392, 392, 424, 425, 393, 393, 425, 426, 394, 394, 426, 427, 395, 395, 427, 428, 396, 396, 428, 429, 397, 397, 429, 430, 398, 398, 430, 431, 399, 399, 431, 432, 400, 400, 432, 433, 401, 401, 433, 434, 402, 402, 434, 435, 403, 403, 435, 436, 404, 404, 436, 437, 405, 405, 437, 438, 406, 406, 438, 439, 407, 407, 439, 440, 408, 408, 440, 441, 409, 409, 441, 442, 410, 410, 442, 443, 411, 411, 443, 444, 412, 412, 444, 445, 413, 413, 445, 446, 414, 414, 446, 447, 415, 415, 447, 416, 384, 416, 448, 449, 417, 417, 449, 450, 418, 418, 450, 451, 419, 419, 451, 452, 420, 420, 452, 453, 421, 421, 453, 454, 422, 422, 454, 455, 423, 423, 455, 456, 424, 424, 456, 457, 425, 425, 457, 458, 426, 426, 458, 459, 427, 427, 459, 460, 428, 428, 460, 461, 429, 429, 461, 462, 430, 430, 462, 463, 431, 431, 463, 464, 432, 432, 464, 465, 433, 433, 465, 466, 434, 434, 466, 467, 435, 435, 467, 468, 436, 436, 468, 469, 437, 437, 469, 470, 438, 438, 470, 471, 439, 439, 471, 472, 440, 440, 472, 473, 441, 441, 473, 474, 442, 442, 474, 475, 443, 443, 475, 476, 444, 444, 476, 477, 445, 445, 477, 478, 446, 446, 478, 479, 447, 447, 479, 448, 416, 448, 480, 481, 449, 449, 481, 482, 450, 450, 482, 483, 451, 451, 483, 484, 452, 452, 484, 485, 453, 453, 485, 486, 454, 454, 486, 487, 455, 455, 487, 488, 456, 456, 488, 489, 457, 457, 489, 490, 458, 458, 490, 491, 459, 459, 491, 492, 460, 460, 492, 493, 461, 461, 493, 494, 462, 462, 494, 495, 463, 463, 495, 496, 464, 464, 496, 497, 465, 465, 497, 498, 466, 466, 498, 499, 467, 467, 499, 500, 468, 468, 500, 501, 469, 469, 501, 502, 470, 470, 502, 503, 471, 471, 503, 504, 472, 472, 504, 505, 473, 473, 505, 506, 474, 474, 506, 507, 475, 475, 507, 508, 476, 476, 508, 509, 477, 477, 509, 510, 478, 478, 510, 511, 479, 479, 511, 480, 448, 480, 512, 513, 481, 481, 513, 514, 482, 482, 514, 515, 483, 483, 515, 516, 484, 484, 516, 517, 485, 485, 517, 518, 486, 486, 518, 519, 487, 487, 519, 520, 488, 488, 520, 521, 489, 489, 521, 522, 490, 490, 522, 523, 491, 491, 523, 524, 492, 492, 524, 525, 493, 493, 525, 526, 494, 494, 526, 527, 495, 495, 527, 528, 496, 496, 528, 529, 497, 497, 529, 530, 498, 498, 530, 531, 499, 499, 531, 532, 500, 500, 532, 533, 501, 501, 533, 534, 502, 502, 534, 535, 503, 503, 535, 536, 504, 504, 536, 537, 505, 505, 537, 538, 506, 506, 538, 539, 507, 507, 539, 540, 508, 508, 540, 541, 509, 509, 541, 542, 510, 510, 542, 543, 511, 511, 543, 512, 480, 512, 544, 545, 513, 513, 545, 546, 514, 514, 546, 547, 515, 515, 547, 548, 516, 516, 548, 549, 517, 517, 549, 550, 518, 518, 550, 551, 519, 519, 551, 552, 520, 520, 552, 553, 521, 521, 553, 554, 522, 522, 554, 555, 523, 523, 555, 556, 524, 524, 556, 557, 525, 525, 557, 558, 526, 526, 558, 559, 527, 527, 559, 560, 528, 528, 560, 561, 529, 529, 561, 562, 530, 530, 562, 563, 531, 531, 563, 564, 532, 532, 564, 565, 533, 533, 565, 566, 534, 534, 566, 567, 535, 535, 567, 568, 536, 536, 568, 569, 537, 537, 569, 570, 538, 538, 570, 571, 539, 539, 571, 572, 540, 540, 572, 573, 541, 541, 573, 574, 542, 542, 574, 575, 543, 543, 575, 544, 512, 544, 576, 577, 545, 545, 577, 578, 546, 546, 578, 579, 547, 547, 579, 580, 548, 548, 580, 581, 549, 549, 581, 582, 550, 550, 582, 583, 551, 551, 583, 584, 552, 552, 584, 585, 553, 553, 585, 586, 554, 554, 586, 587, 555, 555, 587, 588, 556, 556, 588, 589, 557, 557, 589, 590, 558, 558, 590, 591, 559, 559, 591, 592, 560, 560, 592, 593, 561, 561, 593, 594, 562, 562, 594, 595, 563, 563, 595, 596, 564, 564, 596, 597, 565, 565, 597, 598, 566, 566, 598, 599, 567, 567, 599, 600, 568, 568, 600, 601, 569, 569, 601, 602, 570, 570, 602, 603, 571, 571, 603, 604, 572, 572, 604, 605, 573, 573, 605, 606, 574, 574, 606, 607, 575, 575, 607, 576, 544, 576, 608, 609, 577, 577, 609, 610, 578, 578, 610, 611, 579, 579, 611, 612, 580, 580, 612, 613, 581, 581, 613, 614, 582, 582, 614, 615, 583, 583, 615, 616, 584, 584, 616, 617, 585, 585, 617, 618, 586, 586, 618, 619, 587, 587, 619, 620, 588, 588, 620, 621, 589, 589, 621, 622, 590, 590, 622, 623, 591, 591, 623, 624, 592, 592, 624, 625, 593, 593, 625, 626, 594, 594, 626, 627, 595, 595, 627, 628, 596, 596, 628, 629, 597, 597, 629, 630, 598, 598, 630, 631, 599, 599, 631, 632, 600, 600, 632, 633, 601, 601, 633, 634, 602, 602, 634, 635, 603, 603, 635, 636, 604, 604, 636, 637, 605, 605, 637, 638, 606, 606, 638, 639, 607, 607, 639, 608, 576, 608, 640, 641, 609, 609, 641, 642, 610, 610, 642, 643, 611, 611, 643, 644, 612, 612, 644, 645, 613, 613, 645, 646, 614, 614, 646, 647, 615, 615, 647, 648, 616, 616, 648, 649, 617, 617, 649, 650, 618, 618, 650, 651, 619, 619, 651, 652, 620, 620, 652, 653, 621, 621, 653, 654, 622, 622, 654, 655, 623, 623, 655, 656, 624, 624, 656, 657, 625, 625, 657, 658, 626, 626, 658, 659, 627, 627, 659, 660, 628, 628, 660, 661, 629, 629, 661, 662, 630, 630, 662, 663, 631, 631, 663, 664, 632, 632, 664, 665, 633, 633, 665, 666, 634, 634, 666, 667, 635, 635, 667, 668, 636, 636, 668, 669, 637, 637, 669, 670, 638, 638, 670, 671, 639, 639, 671, 640, 608, 640, 672, 673, 641, 641, 673, 674, 642, 642, 674, 675, 643, 643, 675, 676, 644, 644, 676, 677, 645, 645, 677, 678, 646, 646, 678, 679, 647, 647, 679, 680, 648, 648, 680, 681, 649, 649, 681, 682, 650, 650, 682, 683, 651, 651, 683, 684, 652, 652, 684, 685, 653, 653, 685, 686, 654, 654, 686, 687, 655, 655, 687, 688, 656, 656, 688, 689, 657, 657, 689, 690, 658, 658, 690, 691, 659, 659, 691, 692, 660, 660, 692, 693, 661, 661, 693, 694, 662, 662, 694, 695, 663, 663, 695, 696, 664, 664, 696, 697, 665, 665, 697, 698, 666, 666, 698, 699, 667, 667, 699, 700, 668, 668, 700, 701, 669, 669, 701, 702, 670, 670, 702, 703, 671, 671, 703, 672, 640, 672, 704, 705, 673, 673, 705, 706, 674, 674, 706, 707, 675, 675, 707, 708, 676, 676, 708, 709, 677, 677, 709, 710, 678, 678, 710, 711, 679, 679, 711, 712, 680, 680, 712, 713, 681, 681, 713, 714, 682, 682, 714, 715, 683, 683, 715, 716, 684, 684, 716, 717, 685, 685, 717, 718, 686, 686, 718, 719, 687, 687, 719, 720, 688, 688, 720, 721, 689, 689, 721, 722, 690, 690, 722, 723, 691, 691, 723, 724, 692, 692, 724, 725, 693, 693, 725, 726, 694, 694, 726, 727, 695, 695, 727, 728, 696, 696, 728, 729, 697, 697, 729, 730, 698, 698, 730, 731, 699, 699, 731, 732, 700, 700, 732, 733, 701, 701, 733, 734, 702, 702, 734, 735, 703, 703, 735, 704, 672, 704, 736, 737, 705, 705, 737, 738, 706, 706, 738, 739, 707, 707, 739, 740, 708, 708, 740, 741, 709, 709, 741, 742, 710, 710, 742, 743, 711, 711, 743, 744, 712, 712, 744, 745, 713, 713, 745, 746, 714, 714, 746, 747, 715, 715, 747, 748, 716, 716, 748, 749, 717, 717, 749, 750, 718, 718, 750, 751, 719, 719, 751, 752, 720, 720, 752, 753, 721, 721, 753, 754, 722, 722, 754, 755, 723, 723, 755, 756, 724, 724, 756, 757, 725, 725, 757, 758, 726, 726, 758, 759, 727, 727, 759, 760, 728, 728, 760, 761, 729, 729, 761, 762, 730, 730, 762, 763, 731, 731, 763, 764, 732, 732, 764, 765, 733, 733, 765, 766, 734, 734, 766, 767, 735, 735, 767, 736, 704, 736, 768, 769, 737, 737, 769, 770, 738, 738, 770, 771, 739, 739, 771, 772, 740, 740, 772, 773, 741, 741, 773, 774, 742, 742, 774, 775, 743, 743, 775, 776, 744, 744, 776, 777, 745, 745, 777, 778, 746, 746, 778, 779, 747, 747, 779, 780, 748, 748, 780, 781, 749, 749, 781, 782, 750, 750, 782, 783, 751, 751, 783, 784, 752, 752, 784, 785, 753, 753, 785, 786, 754, 754, 786, 787, 755, 755, 787, 788, 756, 756, 788, 789, 757, 757, 789, 790, 758, 758, 790, 791, 759, 759, 791, 792, 760, 760, 792, 793, 761, 761, 793, 794, 762, 762, 794, 795, 763, 763, 795, 796, 764, 764, 796, 797, 765, 765, 797, 798, 766, 766, 798, 799, 767, 767, 799, 768, 736, 768, 800, 801, 769, 769, 801, 802, 770, 770, 802, 803, 771, 771, 803, 804, 772, 772, 804, 805, 773, 773, 805, 806, 774, 774, 806, 807, 775, 775, 807, 808, 776, 776, 808, 809, 777, 777, 809, 810, 778, 778, 810, 811, 779, 779, 811, 812, 780, 780, 812, 813, 781, 781, 813, 814, 782, 782, 814, 815, 783, 783, 815, 816, 784, 784, 816, 817, 785, 785, 817, 818, 786, 786, 818, 819, 787, 787, 819, 820, 788, 788, 820, 821, 789, 789, 821, 822, 790, 790, 822, 823, 791, 791, 823, 824, 792, 792, 824, 825, 793, 793, 825, 826, 794, 794, 826, 827, 795, 795, 827, 828, 796, 796, 828, 829, 797, 797, 829, 830, 798, 798, 830, 831, 799, 799, 831, 800, 768, 800, 832, 833, 801, 801, 833, 834, 802, 802, 834, 835, 803, 803, 835, 836, 804, 804, 836, 837, 805, 805, 837, 838, 806, 806, 838, 839, 807, 807, 839, 840, 808, 808, 840, 841, 809, 809, 841, 842, 810, 810, 842, 843, 811, 811, 843, 844, 812, 812, 844, 845, 813, 813, 845, 846, 814, 814, 846, 847, 815, 815, 847, 848, 816, 816, 848, 849, 817, 817, 849, 850, 818, 818, 850, 851, 819, 819, 851, 852, 820, 820, 852, 853, 821, 821, 853, 854, 822, 822, 854, 855, 823, 823, 855, 856, 824, 824, 856, 857, 825, 825, 857, 858, 826, 826, 858, 859, 827, 827, 859, 860, 828, 828, 860, 861, 829, 829, 861, 862, 830, 830, 862, 863, 831, 831, 863, 832, 800, 832, 864, 865, 833, 833, 865, 866, 834, 834, 866, 867, 835, 835, 867, 868, 836, 836, 868, 869, 837, 837, 869, 870, 838, 838, 870, 871, 839, 839, 871, 872, 840, 840, 872, 873, 841, 841, 873, 874, 842, 842, 874, 875, 843, 843, 875, 876, 844, 844, 876, 877, 845, 845, 877, 878, 846, 846, 878, 879, 847, 847, 879, 880, 848, 848, 880, 881, 849, 849, 881, 882, 850, 850, 882, 883, 851, 851, 883, 884, 852, 852, 884, 885, 853, 853, 885, 886, 854, 854, 886, 887, 855, 855, 887, 888, 856, 856, 888, 889, 857, 857, 889, 890, 858, 858, 890, 891, 859, 859, 891, 892, 860, 860, 892, 893, 861, 861, 893, 894, 862, 862, 894, 895, 863, 863, 895, 864, 832, 864, 896, 897, 865, 865, 897, 898, 866, 866, 898, 899, 867, 867, 899, 900, 868, 868, 900, 901, 869, 869, 901, 902, 870, 870, 902, 903, 871, 871, 903, 904, 872, 872, 904, 905, 873, 873, 905, 906, 874, 874, 906, 907, 875, 875, 907, 908, 876, 876, 908, 909, 877, 877, 909, 910, 878, 878, 910, 911, 879, 879, 911, 912, 880, 880, 912, 913, 881, 881, 913, 914, 882, 882, 914, 915, 883, 883, 915, 916, 884, 884, 916, 917, 885, 885, 917, 918, 886, 886, 918, 919, 887, 887, 919, 920, 888, 888, 920, 921, 889, 889, 921, 922, 890, 890, 922, 923, 891, 891, 923, 924, 892, 892, 924, 925, 893, 893, 925, 926, 894, 894, 926, 927, 895, 895, 927, 896, 864, 896, 928, 929, 897, 897, 929, 930, 898, 898, 930, 931, 899, 899, 931, 932, 900, 900, 932, 933, 901, 901, 933, 934, 902, 902, 934, 935, 903, 903, 935, 936, 904, 904, 936, 937, 905, 905, 937, 938, 906, 906, 938, 939, 907, 907, 939, 940, 908, 908, 940, 941, 909, 909, 941, 942, 910, 910, 942, 943, 911, 911, 943, 944, 912, 912, 944, 945, 913, 913, 945, 946, 914, 914, 946, 947, 915, 915, 947, 948, 916, 916, 948, 949, 917, 917, 949, 950, 918, 918, 950, 951, 919, 919, 951, 952, 920, 920, 952, 953, 921, 921, 953, 954, 922, 922, 954, 955, 923, 923, 955, 956, 924, 924, 956, 957, 925, 925, 957, 958, 926, 926, 958, 959, 927, 927, 959, 928, 896, 928, 960, 961, 929, 929, 961, 962, 930, 930, 962, 963, 931, 931, 963, 964, 932, 932, 964, 965, 933, 933, 965, 966, 934, 934, 966, 967, 935, 935, 967, 968, 936, 936, 968, 969, 937, 937, 969, 970, 938, 938, 970, 971, 939, 939, 971, 972, 940, 940, 972, 973, 941, 941, 973, 974, 942, 942, 974, 975, 943, 943, 975, 976, 944, 944, 976, 977, 945, 945, 977, 978, 946, 946, 978, 979, 947, 947, 979, 980, 948, 948, 980, 981, 949, 949, 981, 982, 950, 950, 982, 983, 951, 951, 983, 984, 952, 952, 984, 985, 953, 953, 985, 986, 954, 954, 986, 987, 955, 955, 987, 988, 956, 956, 988, 989, 957, 957, 989, 990, 958, 958, 990, 991, 959, 959, 991, 960, 928, 960, 992, 993, 961, 961, 993, 994, 962, 962, 994, 995, 963, 963, 995, 996, 964, 964, 996, 997, 965, 965, 997, 998, 966, 966, 998, 999, 967, 967, 999, 1000, 968, 968, 1000, 1001, 969, 969, 1001, 1002, 970, 970, 1002, 1003, 971, 971, 1003, 1004, 972, 972, 1004, 1005, 973, 973, 1005, 1006, 974, 974, 1006, 1007, 975, 975, 1007, 1008, 976, 976, 1008, 1009, 977, 977, 1009, 1010, 978, 978, 1010, 1011, 979, 979, 1011, 1012, 980, 980, 1012, 1013, 981, 981, 1013, 1014, 982, 982, 1014, 1015, 983, 983, 1015, 1016, 984, 984, 1016, 1017, 985, 985, 1017, 1018, 986, 986, 1018, 1019, 987, 987, 1019, 1020, 988, 988, 1020, 1021, 989, 989, 1021, 1022, 990, 990, 1022, 1023, 991, 991, 1023, 992, 960, 992, 0, 1, 993, 993, 1, 2, 994, 994, 2, 3, 995, 995, 3, 4, 996, 996, 4, 5, 997, 997, 5, 6, 998, 998, 6, 7, 999, 999, 7, 8, 1000, 1000, 8, 9, 1001, 1001, 9, 10, 1002, 1002, 10, 11, 1003, 1003, 11, 12, 1004, 1004, 12, 13, 1005, 1005, 13, 14, 1006, 1006, 14, 15, 1007, 1007, 15, 16, 1008, 1008, 16, 17, 1009, 1009, 17, 18, 1010, 1010, 18, 19, 1011, 1011, 19, 20, 1012, 1012, 20, 21, 1013, 1013, 21, 22, 1014, 1014, 22, 23, 1015, 1015, 23, 24, 1016, 1016, 24, 25, 1017, 1017, 25, 26, 1018, 1018, 26, 27, 1019, 1019, 27, 28, 1020, 1020, 28, 29, 1021, 1021, 29, 30, 1022, 1022, 30, 31, 1023, 1023, 31, 0, 992] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(1, 0, 0), (0.98078525, 0.19509032, 0), (0.96193975, 0.19509032, 0.19134171), (0.98078525, 0, 0.19509032), (0.98078525, 0, 0.19509032), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.19509032, 0.37533027), (0.9238795, 0, 0.38268343), (0.9238795, 0, 0.38268343), (0.90612745, 0.19509032, 0.37533027), (0.81549317, 0.19509032, 0.5448951), (0.8314696, 0, 0.55557024), (0.8314696, 0, 0.55557024), (0.81549317, 0.19509032, 0.5448951), (0.69351995, 0.19509032, 0.69351995), (0.70710677, 0, 0.70710677), (0.70710677, 0, 0.70710677), (0.69351995, 0.19509032, 0.69351995), (0.5448951, 0.19509032, 0.81549317), (0.55557024, 0, 0.8314696), (0.55557024, 0, 0.8314696), (0.5448951, 0.19509032, 0.81549317), (0.37533027, 0.19509032, 0.90612745), (0.38268343, 0, 0.9238795), (0.38268343, 0, 0.9238795), (0.37533027, 0.19509032, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.19509032, 0, 0.98078525), (0.19509032, 0, 0.98078525), (0.19134171, 0.19509032, 0.96193975), (6.005578e-17, 0.19509032, 0.98078525), (6.123234e-17, 0, 1), (6.123234e-17, 0, 1), (6.005578e-17, 0.19509032, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.19509032, 0, 0.98078525), (-0.19509032, 0, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.37533027, 0.19509032, 0.90612745), (-0.38268343, 0, 0.9238795), (-0.38268343, 0, 0.9238795), (-0.37533027, 0.19509032, 0.90612745), (-0.5448951, 0.19509032, 0.81549317), (-0.55557024, 0, 0.8314696), (-0.55557024, 0, 0.8314696), (-0.5448951, 0.19509032, 0.81549317), (-0.69351995, 0.19509032, 0.69351995), (-0.70710677, 0, 0.70710677), (-0.70710677, 0, 0.70710677), (-0.69351995, 0.19509032, 0.69351995), (-0.81549317, 0.19509032, 0.5448951), (-0.8314696, 0, 0.55557024), (-0.8314696, 0, 0.55557024), (-0.81549317, 0.19509032, 0.5448951), (-0.90612745, 0.19509032, 0.37533027), (-0.9238795, 0, 0.38268343), (-0.9238795, 0, 0.38268343), (-0.90612745, 0.19509032, 0.37533027), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0, 0.19509032), (-0.98078525, 0, 0.19509032), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0.19509032, 1.2011156e-16), (-1, 0, 1.2246469e-16), (-1, 0, 1.2246469e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.96193975, 0.19509032, -0.19134171), (-0.98078525, 0, -0.19509032), (-0.98078525, 0, -0.19509032), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.19509032, -0.37533027), (-0.9238795, 0, -0.38268343), (-0.9238795, 0, -0.38268343), (-0.90612745, 0.19509032, -0.37533027), (-0.81549317, 0.19509032, -0.5448951), (-0.8314696, 0, -0.55557024), (-0.8314696, 0, -0.55557024), (-0.81549317, 0.19509032, -0.5448951), (-0.69351995, 0.19509032, -0.69351995), (-0.70710677, 0, -0.70710677), (-0.70710677, 0, -0.70710677), (-0.69351995, 0.19509032, -0.69351995), (-0.5448951, 0.19509032, -0.81549317), (-0.55557024, 0, -0.8314696), (-0.55557024, 0, -0.8314696), (-0.5448951, 0.19509032, -0.81549317), (-0.37533027, 0.19509032, -0.90612745), (-0.38268343, 0, -0.9238795), (-0.38268343, 0, -0.9238795), (-0.37533027, 0.19509032, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.19509032, 0, -0.98078525), (-0.19509032, 0, -0.98078525), (-0.19134171, 0.19509032, -0.96193975), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.8369701e-16, 0, -1), (-1.8369701e-16, 0, -1), (-1.8016734e-16, 0.19509032, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.19509032, 0, -0.98078525), (0.19509032, 0, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.37533027, 0.19509032, -0.90612745), (0.38268343, 0, -0.9238795), (0.38268343, 0, -0.9238795), (0.37533027, 0.19509032, -0.90612745), (0.5448951, 0.19509032, -0.81549317), (0.55557024, 0, -0.8314696), (0.55557024, 0, -0.8314696), (0.5448951, 0.19509032, -0.81549317), (0.69351995, 0.19509032, -0.69351995), (0.70710677, 0, -0.70710677), (0.70710677, 0, -0.70710677), (0.69351995, 0.19509032, -0.69351995), (0.81549317, 0.19509032, -0.5448951), (0.8314696, 0, -0.55557024), (0.8314696, 0, -0.55557024), (0.81549317, 0.19509032, -0.5448951), (0.90612745, 0.19509032, -0.37533027), (0.9238795, 0, -0.38268343), (0.9238795, 0, -0.38268343), (0.90612745, 0.19509032, -0.37533027), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0, -0.19509032), (0.98078525, 0, -0.19509032), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0.19509032, 0), (1, 0, 0), (0.98078525, 0.19509032, 0), (0.9238795, 0.38268343, 0), (0.90612745, 0.38268343, 0.18023996), (0.96193975, 0.19509032, 0.19134171), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.38268343, 0.18023996), (0.8535534, 0.38268343, 0.35355338), (0.90612745, 0.19509032, 0.37533027), (0.90612745, 0.19509032, 0.37533027), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.38268343, 0.51328), (0.81549317, 0.19509032, 0.5448951), (0.81549317, 0.19509032, 0.5448951), (0.76817775, 0.38268343, 0.51328), (0.6532815, 0.38268343, 0.6532815), (0.69351995, 0.19509032, 0.69351995), (0.69351995, 0.19509032, 0.69351995), (0.6532815, 0.38268343, 0.6532815), (0.51328, 0.38268343, 0.76817775), (0.5448951, 0.19509032, 0.81549317), (0.5448951, 0.19509032, 0.81549317), (0.51328, 0.38268343, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.37533027, 0.19509032, 0.90612745), (0.37533027, 0.19509032, 0.90612745), (0.35355338, 0.38268343, 0.8535534), (0.18023996, 0.38268343, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.19134171, 0.19509032, 0.96193975), (0.18023996, 0.38268343, 0.90612745), (5.6571306e-17, 0.38268343, 0.9238795), (6.005578e-17, 0.19509032, 0.98078525), (6.005578e-17, 0.19509032, 0.98078525), (5.6571306e-17, 0.38268343, 0.9238795), (-0.18023996, 0.38268343, 0.90612745), (-0.19134171, 0.19509032, 0.96193975), (-0.19134171, 0.19509032, 0.96193975), (-0.18023996, 0.38268343, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.37533027, 0.19509032, 0.90612745), (-0.37533027, 0.19509032, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.51328, 0.38268343, 0.76817775), (-0.5448951, 0.19509032, 0.81549317), (-0.5448951, 0.19509032, 0.81549317), (-0.51328, 0.38268343, 0.76817775), (-0.6532815, 0.38268343, 0.6532815), (-0.69351995, 0.19509032, 0.69351995), (-0.69351995, 0.19509032, 0.69351995), (-0.6532815, 0.38268343, 0.6532815), (-0.76817775, 0.38268343, 0.51328), (-0.81549317, 0.19509032, 0.5448951), (-0.81549317, 0.19509032, 0.5448951), (-0.76817775, 0.38268343, 0.51328), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.19509032, 0.37533027), (-0.90612745, 0.19509032, 0.37533027), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.38268343, 0.18023996), (-0.96193975, 0.19509032, 0.19134171), (-0.96193975, 0.19509032, 0.19134171), (-0.90612745, 0.38268343, 0.18023996), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.90612745, 0.38268343, -0.18023996), (-0.96193975, 0.19509032, -0.19134171), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.38268343, -0.18023996), (-0.8535534, 0.38268343, -0.35355338), (-0.90612745, 0.19509032, -0.37533027), (-0.90612745, 0.19509032, -0.37533027), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.38268343, -0.51328), (-0.81549317, 0.19509032, -0.5448951), (-0.81549317, 0.19509032, -0.5448951), (-0.76817775, 0.38268343, -0.51328), (-0.6532815, 0.38268343, -0.6532815), (-0.69351995, 0.19509032, -0.69351995), (-0.69351995, 0.19509032, -0.69351995), (-0.6532815, 0.38268343, -0.6532815), (-0.51328, 0.38268343, -0.76817775), (-0.5448951, 0.19509032, -0.81549317), (-0.5448951, 0.19509032, -0.81549317), (-0.51328, 0.38268343, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.37533027, 0.19509032, -0.90612745), (-0.37533027, 0.19509032, -0.90612745), (-0.35355338, 0.38268343, -0.8535534), (-0.18023996, 0.38268343, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.19134171, 0.19509032, -0.96193975), (-0.18023996, 0.38268343, -0.90612745), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.6971392e-16, 0.38268343, -0.9238795), (0.18023996, 0.38268343, -0.90612745), (0.19134171, 0.19509032, -0.96193975), (0.19134171, 0.19509032, -0.96193975), (0.18023996, 0.38268343, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.37533027, 0.19509032, -0.90612745), (0.37533027, 0.19509032, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.51328, 0.38268343, -0.76817775), (0.5448951, 0.19509032, -0.81549317), (0.5448951, 0.19509032, -0.81549317), (0.51328, 0.38268343, -0.76817775), (0.6532815, 0.38268343, -0.6532815), (0.69351995, 0.19509032, -0.69351995), (0.69351995, 0.19509032, -0.69351995), (0.6532815, 0.38268343, -0.6532815), (0.76817775, 0.38268343, -0.51328), (0.81549317, 0.19509032, -0.5448951), (0.81549317, 0.19509032, -0.5448951), (0.76817775, 0.38268343, -0.51328), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.19509032, -0.37533027), (0.90612745, 0.19509032, -0.37533027), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.38268343, -0.18023996), (0.96193975, 0.19509032, -0.19134171), (0.96193975, 0.19509032, -0.19134171), (0.90612745, 0.38268343, -0.18023996), (0.9238795, 0.38268343, 0), (0.98078525, 0.19509032, 0), (0.9238795, 0.38268343, 0), (0.8314696, 0.55557024, 0), (0.81549317, 0.55557024, 0.16221167), (0.90612745, 0.38268343, 0.18023996), (0.90612745, 0.38268343, 0.18023996), (0.81549317, 0.55557024, 0.16221167), (0.76817775, 0.55557024, 0.31818965), (0.8535534, 0.38268343, 0.35355338), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.55557024, 0.31818965), (0.6913417, 0.55557024, 0.46193975), (0.76817775, 0.38268343, 0.51328), (0.76817775, 0.38268343, 0.51328), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.55557024, 0.5879378), (0.6532815, 0.38268343, 0.6532815), (0.6532815, 0.38268343, 0.6532815), (0.5879378, 0.55557024, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.51328, 0.38268343, 0.76817775), (0.51328, 0.38268343, 0.76817775), (0.46193975, 0.55557024, 0.6913417), (0.31818965, 0.55557024, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.35355338, 0.38268343, 0.8535534), (0.31818965, 0.55557024, 0.76817775), (0.16221167, 0.55557024, 0.81549317), (0.18023996, 0.38268343, 0.90612745), (0.18023996, 0.38268343, 0.90612745), (0.16221167, 0.55557024, 0.81549317), (5.091283e-17, 0.55557024, 0.8314696), (5.6571306e-17, 0.38268343, 0.9238795), (5.6571306e-17, 0.38268343, 0.9238795), (5.091283e-17, 0.55557024, 0.8314696), (-0.16221167, 0.55557024, 0.81549317), (-0.18023996, 0.38268343, 0.90612745), (-0.18023996, 0.38268343, 0.90612745), (-0.16221167, 0.55557024, 0.81549317), (-0.31818965, 0.55557024, 0.76817775), (-0.35355338, 0.38268343, 0.8535534), (-0.35355338, 0.38268343, 0.8535534), (-0.31818965, 0.55557024, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.51328, 0.38268343, 0.76817775), (-0.51328, 0.38268343, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.5879378, 0.55557024, 0.5879378), (-0.6532815, 0.38268343, 0.6532815), (-0.6532815, 0.38268343, 0.6532815), (-0.5879378, 0.55557024, 0.5879378), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.38268343, 0.51328), (-0.76817775, 0.38268343, 0.51328), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.55557024, 0.31818965), (-0.8535534, 0.38268343, 0.35355338), (-0.8535534, 0.38268343, 0.35355338), (-0.76817775, 0.55557024, 0.31818965), (-0.81549317, 0.55557024, 0.16221167), (-0.90612745, 0.38268343, 0.18023996), (-0.90612745, 0.38268343, 0.18023996), (-0.81549317, 0.55557024, 0.16221167), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.81549317, 0.55557024, -0.16221167), (-0.90612745, 0.38268343, -0.18023996), (-0.90612745, 0.38268343, -0.18023996), (-0.81549317, 0.55557024, -0.16221167), (-0.76817775, 0.55557024, -0.31818965), (-0.8535534, 0.38268343, -0.35355338), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.55557024, -0.31818965), (-0.6913417, 0.55557024, -0.46193975), (-0.76817775, 0.38268343, -0.51328), (-0.76817775, 0.38268343, -0.51328), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.55557024, -0.5879378), (-0.6532815, 0.38268343, -0.6532815), (-0.6532815, 0.38268343, -0.6532815), (-0.5879378, 0.55557024, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.51328, 0.38268343, -0.76817775), (-0.51328, 0.38268343, -0.76817775), (-0.46193975, 0.55557024, -0.6913417), (-0.31818965, 0.55557024, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.35355338, 0.38268343, -0.8535534), (-0.31818965, 0.55557024, -0.76817775), (-0.16221167, 0.55557024, -0.81549317), (-0.18023996, 0.38268343, -0.90612745), (-0.18023996, 0.38268343, -0.90612745), (-0.16221167, 0.55557024, -0.81549317), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.5273849e-16, 0.55557024, -0.8314696), (0.16221167, 0.55557024, -0.81549317), (0.18023996, 0.38268343, -0.90612745), (0.18023996, 0.38268343, -0.90612745), (0.16221167, 0.55557024, -0.81549317), (0.31818965, 0.55557024, -0.76817775), (0.35355338, 0.38268343, -0.8535534), (0.35355338, 0.38268343, -0.8535534), (0.31818965, 0.55557024, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.51328, 0.38268343, -0.76817775), (0.51328, 0.38268343, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.5879378, 0.55557024, -0.5879378), (0.6532815, 0.38268343, -0.6532815), (0.6532815, 0.38268343, -0.6532815), (0.5879378, 0.55557024, -0.5879378), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.38268343, -0.51328), (0.76817775, 0.38268343, -0.51328), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.55557024, -0.31818965), (0.8535534, 0.38268343, -0.35355338), (0.8535534, 0.38268343, -0.35355338), (0.76817775, 0.55557024, -0.31818965), (0.81549317, 0.55557024, -0.16221167), (0.90612745, 0.38268343, -0.18023996), (0.90612745, 0.38268343, -0.18023996), (0.81549317, 0.55557024, -0.16221167), (0.8314696, 0.55557024, 0), (0.9238795, 0.38268343, 0), (0.8314696, 0.55557024, 0), (0.70710677, 0.70710677, 0), (0.69351995, 0.70710677, 0.13794969), (0.81549317, 0.55557024, 0.16221167), (0.81549317, 0.55557024, 0.16221167), (0.69351995, 0.70710677, 0.13794969), (0.6532815, 0.70710677, 0.27059805), (0.76817775, 0.55557024, 0.31818965), (0.76817775, 0.55557024, 0.31818965), (0.6532815, 0.70710677, 0.27059805), (0.5879378, 0.70710677, 0.39284748), (0.6913417, 0.55557024, 0.46193975), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.70710677, 0.39284748), (0.5, 0.70710677, 0.5), (0.5879378, 0.55557024, 0.5879378), (0.5879378, 0.55557024, 0.5879378), (0.5, 0.70710677, 0.5), (0.39284748, 0.70710677, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.46193975, 0.55557024, 0.6913417), (0.39284748, 0.70710677, 0.5879378), (0.27059805, 0.70710677, 0.6532815), (0.31818965, 0.55557024, 0.76817775), (0.31818965, 0.55557024, 0.76817775), (0.27059805, 0.70710677, 0.6532815), (0.13794969, 0.70710677, 0.69351995), (0.16221167, 0.55557024, 0.81549317), (0.16221167, 0.55557024, 0.81549317), (0.13794969, 0.70710677, 0.69351995), (4.3297803e-17, 0.70710677, 0.70710677), (5.091283e-17, 0.55557024, 0.8314696), (5.091283e-17, 0.55557024, 0.8314696), (4.3297803e-17, 0.70710677, 0.70710677), (-0.13794969, 0.70710677, 0.69351995), (-0.16221167, 0.55557024, 0.81549317), (-0.16221167, 0.55557024, 0.81549317), (-0.13794969, 0.70710677, 0.69351995), (-0.27059805, 0.70710677, 0.6532815), (-0.31818965, 0.55557024, 0.76817775), (-0.31818965, 0.55557024, 0.76817775), (-0.27059805, 0.70710677, 0.6532815), (-0.39284748, 0.70710677, 0.5879378), (-0.46193975, 0.55557024, 0.6913417), (-0.46193975, 0.55557024, 0.6913417), (-0.39284748, 0.70710677, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.55557024, 0.5879378), (-0.5879378, 0.55557024, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.70710677, 0.39284748), (-0.6913417, 0.55557024, 0.46193975), (-0.6913417, 0.55557024, 0.46193975), (-0.5879378, 0.70710677, 0.39284748), (-0.6532815, 0.70710677, 0.27059805), (-0.76817775, 0.55557024, 0.31818965), (-0.76817775, 0.55557024, 0.31818965), (-0.6532815, 0.70710677, 0.27059805), (-0.69351995, 0.70710677, 0.13794969), (-0.81549317, 0.55557024, 0.16221167), (-0.81549317, 0.55557024, 0.16221167), (-0.69351995, 0.70710677, 0.13794969), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.69351995, 0.70710677, -0.13794969), (-0.81549317, 0.55557024, -0.16221167), (-0.81549317, 0.55557024, -0.16221167), (-0.69351995, 0.70710677, -0.13794969), (-0.6532815, 0.70710677, -0.27059805), (-0.76817775, 0.55557024, -0.31818965), (-0.76817775, 0.55557024, -0.31818965), (-0.6532815, 0.70710677, -0.27059805), (-0.5879378, 0.70710677, -0.39284748), (-0.6913417, 0.55557024, -0.46193975), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.70710677, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.5879378, 0.55557024, -0.5879378), (-0.5879378, 0.55557024, -0.5879378), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.70710677, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.46193975, 0.55557024, -0.6913417), (-0.39284748, 0.70710677, -0.5879378), (-0.27059805, 0.70710677, -0.6532815), (-0.31818965, 0.55557024, -0.76817775), (-0.31818965, 0.55557024, -0.76817775), (-0.27059805, 0.70710677, -0.6532815), (-0.13794969, 0.70710677, -0.69351995), (-0.16221167, 0.55557024, -0.81549317), (-0.16221167, 0.55557024, -0.81549317), (-0.13794969, 0.70710677, -0.69351995), (-1.298934e-16, 0.70710677, -0.70710677), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.298934e-16, 0.70710677, -0.70710677), (0.13794969, 0.70710677, -0.69351995), (0.16221167, 0.55557024, -0.81549317), (0.16221167, 0.55557024, -0.81549317), (0.13794969, 0.70710677, -0.69351995), (0.27059805, 0.70710677, -0.6532815), (0.31818965, 0.55557024, -0.76817775), (0.31818965, 0.55557024, -0.76817775), (0.27059805, 0.70710677, -0.6532815), (0.39284748, 0.70710677, -0.5879378), (0.46193975, 0.55557024, -0.6913417), (0.46193975, 0.55557024, -0.6913417), (0.39284748, 0.70710677, -0.5879378), (0.5, 0.70710677, -0.5), (0.5879378, 0.55557024, -0.5879378), (0.5879378, 0.55557024, -0.5879378), (0.5, 0.70710677, -0.5), (0.5879378, 0.70710677, -0.39284748), (0.6913417, 0.55557024, -0.46193975), (0.6913417, 0.55557024, -0.46193975), (0.5879378, 0.70710677, -0.39284748), (0.6532815, 0.70710677, -0.27059805), (0.76817775, 0.55557024, -0.31818965), (0.76817775, 0.55557024, -0.31818965), (0.6532815, 0.70710677, -0.27059805), (0.69351995, 0.70710677, -0.13794969), (0.81549317, 0.55557024, -0.16221167), (0.81549317, 0.55557024, -0.16221167), (0.69351995, 0.70710677, -0.13794969), (0.70710677, 0.70710677, 0), (0.8314696, 0.55557024, 0), (0.70710677, 0.70710677, 0), (0.55557024, 0.8314696, 0), (0.5448951, 0.8314696, 0.108386375), (0.69351995, 0.70710677, 0.13794969), (0.69351995, 0.70710677, 0.13794969), (0.5448951, 0.8314696, 0.108386375), (0.51328, 0.8314696, 0.21260752), (0.6532815, 0.70710677, 0.27059805), (0.6532815, 0.70710677, 0.27059805), (0.51328, 0.8314696, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.5879378, 0.70710677, 0.39284748), (0.5879378, 0.70710677, 0.39284748), (0.46193975, 0.8314696, 0.30865827), (0.39284748, 0.8314696, 0.39284748), (0.5, 0.70710677, 0.5), (0.5, 0.70710677, 0.5), (0.39284748, 0.8314696, 0.39284748), (0.30865827, 0.8314696, 0.46193975), (0.39284748, 0.70710677, 0.5879378), (0.39284748, 0.70710677, 0.5879378), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.8314696, 0.51328), (0.27059805, 0.70710677, 0.6532815), (0.27059805, 0.70710677, 0.6532815), (0.21260752, 0.8314696, 0.51328), (0.108386375, 0.8314696, 0.5448951), (0.13794969, 0.70710677, 0.69351995), (0.13794969, 0.70710677, 0.69351995), (0.108386375, 0.8314696, 0.5448951), (3.4018865e-17, 0.8314696, 0.55557024), (4.3297803e-17, 0.70710677, 0.70710677), (4.3297803e-17, 0.70710677, 0.70710677), (3.4018865e-17, 0.8314696, 0.55557024), (-0.108386375, 0.8314696, 0.5448951), (-0.13794969, 0.70710677, 0.69351995), (-0.13794969, 0.70710677, 0.69351995), (-0.108386375, 0.8314696, 0.5448951), (-0.21260752, 0.8314696, 0.51328), (-0.27059805, 0.70710677, 0.6532815), (-0.27059805, 0.70710677, 0.6532815), (-0.21260752, 0.8314696, 0.51328), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.70710677, 0.5879378), (-0.39284748, 0.70710677, 0.5879378), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.8314696, 0.39284748), (-0.5, 0.70710677, 0.5), (-0.5, 0.70710677, 0.5), (-0.39284748, 0.8314696, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.5879378, 0.70710677, 0.39284748), (-0.5879378, 0.70710677, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.51328, 0.8314696, 0.21260752), (-0.6532815, 0.70710677, 0.27059805), (-0.6532815, 0.70710677, 0.27059805), (-0.51328, 0.8314696, 0.21260752), (-0.5448951, 0.8314696, 0.108386375), (-0.69351995, 0.70710677, 0.13794969), (-0.69351995, 0.70710677, 0.13794969), (-0.5448951, 0.8314696, 0.108386375), (-0.55557024, 0.8314696, 6.803773e-17), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.5448951, 0.8314696, -0.108386375), (-0.69351995, 0.70710677, -0.13794969), (-0.69351995, 0.70710677, -0.13794969), (-0.5448951, 0.8314696, -0.108386375), (-0.51328, 0.8314696, -0.21260752), (-0.6532815, 0.70710677, -0.27059805), (-0.6532815, 0.70710677, -0.27059805), (-0.51328, 0.8314696, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.5879378, 0.70710677, -0.39284748), (-0.5879378, 0.70710677, -0.39284748), (-0.46193975, 0.8314696, -0.30865827), (-0.39284748, 0.8314696, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.8314696, -0.39284748), (-0.30865827, 0.8314696, -0.46193975), (-0.39284748, 0.70710677, -0.5879378), (-0.39284748, 0.70710677, -0.5879378), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.8314696, -0.51328), (-0.27059805, 0.70710677, -0.6532815), (-0.27059805, 0.70710677, -0.6532815), (-0.21260752, 0.8314696, -0.51328), (-0.108386375, 0.8314696, -0.5448951), (-0.13794969, 0.70710677, -0.69351995), (-0.13794969, 0.70710677, -0.69351995), (-0.108386375, 0.8314696, -0.5448951), (-1.020566e-16, 0.8314696, -0.55557024), (-1.298934e-16, 0.70710677, -0.70710677), (-1.298934e-16, 0.70710677, -0.70710677), (-1.020566e-16, 0.8314696, -0.55557024), (0.108386375, 0.8314696, -0.5448951), (0.13794969, 0.70710677, -0.69351995), (0.13794969, 0.70710677, -0.69351995), (0.108386375, 0.8314696, -0.5448951), (0.21260752, 0.8314696, -0.51328), (0.27059805, 0.70710677, -0.6532815), (0.27059805, 0.70710677, -0.6532815), (0.21260752, 0.8314696, -0.51328), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.70710677, -0.5879378), (0.39284748, 0.70710677, -0.5879378), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.8314696, -0.39284748), (0.5, 0.70710677, -0.5), (0.5, 0.70710677, -0.5), (0.39284748, 0.8314696, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.5879378, 0.70710677, -0.39284748), (0.5879378, 0.70710677, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.51328, 0.8314696, -0.21260752), (0.6532815, 0.70710677, -0.27059805), (0.6532815, 0.70710677, -0.27059805), (0.51328, 0.8314696, -0.21260752), (0.5448951, 0.8314696, -0.108386375), (0.69351995, 0.70710677, -0.13794969), (0.69351995, 0.70710677, -0.13794969), (0.5448951, 0.8314696, -0.108386375), (0.55557024, 0.8314696, 0), (0.70710677, 0.70710677, 0), (0.55557024, 0.8314696, 0), (0.38268343, 0.9238795, 0), (0.37533027, 0.9238795, 0.074657835), (0.5448951, 0.8314696, 0.108386375), (0.5448951, 0.8314696, 0.108386375), (0.37533027, 0.9238795, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.51328, 0.8314696, 0.21260752), (0.51328, 0.8314696, 0.21260752), (0.35355338, 0.9238795, 0.14644662), (0.31818965, 0.9238795, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.46193975, 0.8314696, 0.30865827), (0.31818965, 0.9238795, 0.21260752), (0.27059805, 0.9238795, 0.27059805), (0.39284748, 0.8314696, 0.39284748), (0.39284748, 0.8314696, 0.39284748), (0.27059805, 0.9238795, 0.27059805), (0.21260752, 0.9238795, 0.31818965), (0.30865827, 0.8314696, 0.46193975), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.9238795, 0.31818965), (0.14644662, 0.9238795, 0.35355338), (0.21260752, 0.8314696, 0.51328), (0.21260752, 0.8314696, 0.51328), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.9238795, 0.37533027), (0.108386375, 0.8314696, 0.5448951), (0.108386375, 0.8314696, 0.5448951), (0.074657835, 0.9238795, 0.37533027), (2.3432602e-17, 0.9238795, 0.38268343), (3.4018865e-17, 0.8314696, 0.55557024), (3.4018865e-17, 0.8314696, 0.55557024), (2.3432602e-17, 0.9238795, 0.38268343), (-0.074657835, 0.9238795, 0.37533027), (-0.108386375, 0.8314696, 0.5448951), (-0.108386375, 0.8314696, 0.5448951), (-0.074657835, 0.9238795, 0.37533027), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.8314696, 0.51328), (-0.21260752, 0.8314696, 0.51328), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.9238795, 0.31818965), (-0.30865827, 0.8314696, 0.46193975), (-0.30865827, 0.8314696, 0.46193975), (-0.21260752, 0.9238795, 0.31818965), (-0.27059805, 0.9238795, 0.27059805), (-0.39284748, 0.8314696, 0.39284748), (-0.39284748, 0.8314696, 0.39284748), (-0.27059805, 0.9238795, 0.27059805), (-0.31818965, 0.9238795, 0.21260752), (-0.46193975, 0.8314696, 0.30865827), (-0.46193975, 0.8314696, 0.30865827), (-0.31818965, 0.9238795, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.51328, 0.8314696, 0.21260752), (-0.51328, 0.8314696, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.37533027, 0.9238795, 0.074657835), (-0.5448951, 0.8314696, 0.108386375), (-0.5448951, 0.8314696, 0.108386375), (-0.37533027, 0.9238795, 0.074657835), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.37533027, 0.9238795, -0.074657835), (-0.5448951, 0.8314696, -0.108386375), (-0.5448951, 0.8314696, -0.108386375), (-0.37533027, 0.9238795, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.51328, 0.8314696, -0.21260752), (-0.51328, 0.8314696, -0.21260752), (-0.35355338, 0.9238795, -0.14644662), (-0.31818965, 0.9238795, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.46193975, 0.8314696, -0.30865827), (-0.31818965, 0.9238795, -0.21260752), (-0.27059805, 0.9238795, -0.27059805), (-0.39284748, 0.8314696, -0.39284748), (-0.39284748, 0.8314696, -0.39284748), (-0.27059805, 0.9238795, -0.27059805), (-0.21260752, 0.9238795, -0.31818965), (-0.30865827, 0.8314696, -0.46193975), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.9238795, -0.31818965), (-0.14644662, 0.9238795, -0.35355338), (-0.21260752, 0.8314696, -0.51328), (-0.21260752, 0.8314696, -0.51328), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.9238795, -0.37533027), (-0.108386375, 0.8314696, -0.5448951), (-0.108386375, 0.8314696, -0.5448951), (-0.074657835, 0.9238795, -0.37533027), (-7.0297805e-17, 0.9238795, -0.38268343), (-1.020566e-16, 0.8314696, -0.55557024), (-1.020566e-16, 0.8314696, -0.55557024), (-7.0297805e-17, 0.9238795, -0.38268343), (0.074657835, 0.9238795, -0.37533027), (0.108386375, 0.8314696, -0.5448951), (0.108386375, 0.8314696, -0.5448951), (0.074657835, 0.9238795, -0.37533027), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.8314696, -0.51328), (0.21260752, 0.8314696, -0.51328), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.9238795, -0.31818965), (0.30865827, 0.8314696, -0.46193975), (0.30865827, 0.8314696, -0.46193975), (0.21260752, 0.9238795, -0.31818965), (0.27059805, 0.9238795, -0.27059805), (0.39284748, 0.8314696, -0.39284748), (0.39284748, 0.8314696, -0.39284748), (0.27059805, 0.9238795, -0.27059805), (0.31818965, 0.9238795, -0.21260752), (0.46193975, 0.8314696, -0.30865827), (0.46193975, 0.8314696, -0.30865827), (0.31818965, 0.9238795, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.51328, 0.8314696, -0.21260752), (0.51328, 0.8314696, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.37533027, 0.9238795, -0.074657835), (0.5448951, 0.8314696, -0.108386375), (0.5448951, 0.8314696, -0.108386375), (0.37533027, 0.9238795, -0.074657835), (0.38268343, 0.9238795, 0), (0.55557024, 0.8314696, 0), (0.38268343, 0.9238795, 0), (0.19509032, 0.98078525, 0), (0.19134171, 0.98078525, 0.038060233), (0.37533027, 0.9238795, 0.074657835), (0.37533027, 0.9238795, 0.074657835), (0.19134171, 0.98078525, 0.038060233), (0.18023996, 0.98078525, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.35355338, 0.9238795, 0.14644662), (0.18023996, 0.98078525, 0.074657835), (0.16221167, 0.98078525, 0.108386375), (0.31818965, 0.9238795, 0.21260752), (0.31818965, 0.9238795, 0.21260752), (0.16221167, 0.98078525, 0.108386375), (0.13794969, 0.98078525, 0.13794969), (0.27059805, 0.9238795, 0.27059805), (0.27059805, 0.9238795, 0.27059805), (0.13794969, 0.98078525, 0.13794969), (0.108386375, 0.98078525, 0.16221167), (0.21260752, 0.9238795, 0.31818965), (0.21260752, 0.9238795, 0.31818965), (0.108386375, 0.98078525, 0.16221167), (0.074657835, 0.98078525, 0.18023996), (0.14644662, 0.9238795, 0.35355338), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.98078525, 0.18023996), (0.038060233, 0.98078525, 0.19134171), (0.074657835, 0.9238795, 0.37533027), (0.074657835, 0.9238795, 0.37533027), (0.038060233, 0.98078525, 0.19134171), (1.1945837e-17, 0.98078525, 0.19509032), (2.3432602e-17, 0.9238795, 0.38268343), (2.3432602e-17, 0.9238795, 0.38268343), (1.1945837e-17, 0.98078525, 0.19509032), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.9238795, 0.37533027), (-0.074657835, 0.9238795, 0.37533027), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.98078525, 0.18023996), (-0.14644662, 0.9238795, 0.35355338), (-0.14644662, 0.9238795, 0.35355338), (-0.074657835, 0.98078525, 0.18023996), (-0.108386375, 0.98078525, 0.16221167), (-0.21260752, 0.9238795, 0.31818965), (-0.21260752, 0.9238795, 0.31818965), (-0.108386375, 0.98078525, 0.16221167), (-0.13794969, 0.98078525, 0.13794969), (-0.27059805, 0.9238795, 0.27059805), (-0.27059805, 0.9238795, 0.27059805), (-0.13794969, 0.98078525, 0.13794969), (-0.16221167, 0.98078525, 0.108386375), (-0.31818965, 0.9238795, 0.21260752), (-0.31818965, 0.9238795, 0.21260752), (-0.16221167, 0.98078525, 0.108386375), (-0.18023996, 0.98078525, 0.074657835), (-0.35355338, 0.9238795, 0.14644662), (-0.35355338, 0.9238795, 0.14644662), (-0.18023996, 0.98078525, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.37533027, 0.9238795, 0.074657835), (-0.37533027, 0.9238795, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.19134171, 0.98078525, -0.038060233), (-0.37533027, 0.9238795, -0.074657835), (-0.37533027, 0.9238795, -0.074657835), (-0.19134171, 0.98078525, -0.038060233), (-0.18023996, 0.98078525, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.35355338, 0.9238795, -0.14644662), (-0.18023996, 0.98078525, -0.074657835), (-0.16221167, 0.98078525, -0.108386375), (-0.31818965, 0.9238795, -0.21260752), (-0.31818965, 0.9238795, -0.21260752), (-0.16221167, 0.98078525, -0.108386375), (-0.13794969, 0.98078525, -0.13794969), (-0.27059805, 0.9238795, -0.27059805), (-0.27059805, 0.9238795, -0.27059805), (-0.13794969, 0.98078525, -0.13794969), (-0.108386375, 0.98078525, -0.16221167), (-0.21260752, 0.9238795, -0.31818965), (-0.21260752, 0.9238795, -0.31818965), (-0.108386375, 0.98078525, -0.16221167), (-0.074657835, 0.98078525, -0.18023996), (-0.14644662, 0.9238795, -0.35355338), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.98078525, -0.18023996), (-0.038060233, 0.98078525, -0.19134171), (-0.074657835, 0.9238795, -0.37533027), (-0.074657835, 0.9238795, -0.37533027), (-0.038060233, 0.98078525, -0.19134171), (-3.583751e-17, 0.98078525, -0.19509032), (-7.0297805e-17, 0.9238795, -0.38268343), (-7.0297805e-17, 0.9238795, -0.38268343), (-3.583751e-17, 0.98078525, -0.19509032), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.9238795, -0.37533027), (0.074657835, 0.9238795, -0.37533027), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.98078525, -0.18023996), (0.14644662, 0.9238795, -0.35355338), (0.14644662, 0.9238795, -0.35355338), (0.074657835, 0.98078525, -0.18023996), (0.108386375, 0.98078525, -0.16221167), (0.21260752, 0.9238795, -0.31818965), (0.21260752, 0.9238795, -0.31818965), (0.108386375, 0.98078525, -0.16221167), (0.13794969, 0.98078525, -0.13794969), (0.27059805, 0.9238795, -0.27059805), (0.27059805, 0.9238795, -0.27059805), (0.13794969, 0.98078525, -0.13794969), (0.16221167, 0.98078525, -0.108386375), (0.31818965, 0.9238795, -0.21260752), (0.31818965, 0.9238795, -0.21260752), (0.16221167, 0.98078525, -0.108386375), (0.18023996, 0.98078525, -0.074657835), (0.35355338, 0.9238795, -0.14644662), (0.35355338, 0.9238795, -0.14644662), (0.18023996, 0.98078525, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.37533027, 0.9238795, -0.074657835), (0.37533027, 0.9238795, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.19509032, 0.98078525, 0), (0.38268343, 0.9238795, 0), (0.19509032, 0.98078525, 0), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, 0.038060233), (0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, 0.074657835), (0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, 0.108386375), (0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, 0.13794969), (0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, 0.16221167), (0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, 0.18023996), (0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, 0.19134171), (0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (1.1945837e-17, 0.98078525, 0.19509032), (1.1945837e-17, 0.98078525, 0.19509032), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, 0.19134171), (-0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, 0.18023996), (-0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, 0.16221167), (-0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, 0.13794969), (-0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, 0.108386375), (-0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, 0.074657835), (-0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, 0.038060233), (-0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.19509032, 0.98078525, 2.3891674e-17), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, -0.038060233), (-0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, -0.074657835), (-0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, -0.108386375), (-0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, -0.13794969), (-0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, -0.16221167), (-0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, -0.18023996), (-0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, -0.19134171), (-0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (-3.583751e-17, 0.98078525, -0.19509032), (-3.583751e-17, 0.98078525, -0.19509032), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, -0.19134171), (0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, -0.18023996), (0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, -0.16221167), (0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, -0.13794969), (0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, -0.108386375), (0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, -0.074657835), (0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, -0.038060233), (0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (0.19509032, 0.98078525, 0), (0, 1, 0), (-0.19509032, 0.98078525, 0), (-0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, -0.038060233), (-0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, -0.074657835), (-0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, -0.108386375), (-0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, -0.13794969), (-0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, -0.16221167), (-0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, -0.18023996), (-0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, -0.19134171), (-1.1945837e-17, 0.98078525, -0.19509032), (0, 1, 0), (0, 1, 0), (-1.1945837e-17, 0.98078525, -0.19509032), (0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, -0.18023996), (0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, -0.16221167), (0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, -0.13794969), (0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, -0.108386375), (0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, -0.038060233), (0.19509032, 0.98078525, -2.3891674e-17), (0, 1, 0), (0, 1, 0), (0.19509032, 0.98078525, -2.3891674e-17), (0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, 0.038060233), (0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, 0.074657835), (0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, 0.108386375), (0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, 0.13794969), (0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, 0.16221167), (0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, 0.18023996), (0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, 0.19134171), (3.583751e-17, 0.98078525, 0.19509032), (0, 1, 0), (0, 1, 0), (3.583751e-17, 0.98078525, 0.19509032), (-0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, 0.18023996), (-0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, 0.16221167), (-0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, 0.13794969), (-0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, 0.108386375), (-0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, 0.038060233), (-0.19509032, 0.98078525, 0), (0, 1, 0), (-0.19509032, 0.98078525, 0), (-0.38268343, 0.9238795, 0), (-0.37533027, 0.9238795, -0.074657835), (-0.19134171, 0.98078525, -0.038060233), (-0.19134171, 0.98078525, -0.038060233), (-0.37533027, 0.9238795, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.18023996, 0.98078525, -0.074657835), (-0.18023996, 0.98078525, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.31818965, 0.9238795, -0.21260752), (-0.16221167, 0.98078525, -0.108386375), (-0.16221167, 0.98078525, -0.108386375), (-0.31818965, 0.9238795, -0.21260752), (-0.27059805, 0.9238795, -0.27059805), (-0.13794969, 0.98078525, -0.13794969), (-0.13794969, 0.98078525, -0.13794969), (-0.27059805, 0.9238795, -0.27059805), (-0.21260752, 0.9238795, -0.31818965), (-0.108386375, 0.98078525, -0.16221167), (-0.108386375, 0.98078525, -0.16221167), (-0.21260752, 0.9238795, -0.31818965), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.98078525, -0.18023996), (-0.074657835, 0.98078525, -0.18023996), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.9238795, -0.37533027), (-0.038060233, 0.98078525, -0.19134171), (-0.038060233, 0.98078525, -0.19134171), (-0.074657835, 0.9238795, -0.37533027), (-2.3432602e-17, 0.9238795, -0.38268343), (-1.1945837e-17, 0.98078525, -0.19509032), (-1.1945837e-17, 0.98078525, -0.19509032), (-2.3432602e-17, 0.9238795, -0.38268343), (0.074657835, 0.9238795, -0.37533027), (0.038060233, 0.98078525, -0.19134171), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.9238795, -0.37533027), (0.14644662, 0.9238795, -0.35355338), (0.074657835, 0.98078525, -0.18023996), (0.074657835, 0.98078525, -0.18023996), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.9238795, -0.31818965), (0.108386375, 0.98078525, -0.16221167), (0.108386375, 0.98078525, -0.16221167), (0.21260752, 0.9238795, -0.31818965), (0.27059805, 0.9238795, -0.27059805), (0.13794969, 0.98078525, -0.13794969), (0.13794969, 0.98078525, -0.13794969), (0.27059805, 0.9238795, -0.27059805), (0.31818965, 0.9238795, -0.21260752), (0.16221167, 0.98078525, -0.108386375), (0.16221167, 0.98078525, -0.108386375), (0.31818965, 0.9238795, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.18023996, 0.98078525, -0.074657835), (0.18023996, 0.98078525, -0.074657835), (0.35355338, 0.9238795, -0.14644662), (0.37533027, 0.9238795, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.19134171, 0.98078525, -0.038060233), (0.37533027, 0.9238795, -0.074657835), (0.38268343, 0.9238795, -4.6865205e-17), (0.19509032, 0.98078525, -2.3891674e-17), (0.19509032, 0.98078525, -2.3891674e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.37533027, 0.9238795, 0.074657835), (0.19134171, 0.98078525, 0.038060233), (0.19134171, 0.98078525, 0.038060233), (0.37533027, 0.9238795, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.18023996, 0.98078525, 0.074657835), (0.18023996, 0.98078525, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.31818965, 0.9238795, 0.21260752), (0.16221167, 0.98078525, 0.108386375), (0.16221167, 0.98078525, 0.108386375), (0.31818965, 0.9238795, 0.21260752), (0.27059805, 0.9238795, 0.27059805), (0.13794969, 0.98078525, 0.13794969), (0.13794969, 0.98078525, 0.13794969), (0.27059805, 0.9238795, 0.27059805), (0.21260752, 0.9238795, 0.31818965), (0.108386375, 0.98078525, 0.16221167), (0.108386375, 0.98078525, 0.16221167), (0.21260752, 0.9238795, 0.31818965), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.98078525, 0.18023996), (0.074657835, 0.98078525, 0.18023996), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.9238795, 0.37533027), (0.038060233, 0.98078525, 0.19134171), (0.038060233, 0.98078525, 0.19134171), (0.074657835, 0.9238795, 0.37533027), (7.0297805e-17, 0.9238795, 0.38268343), (3.583751e-17, 0.98078525, 0.19509032), (3.583751e-17, 0.98078525, 0.19509032), (7.0297805e-17, 0.9238795, 0.38268343), (-0.074657835, 0.9238795, 0.37533027), (-0.038060233, 0.98078525, 0.19134171), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.9238795, 0.37533027), (-0.14644662, 0.9238795, 0.35355338), (-0.074657835, 0.98078525, 0.18023996), (-0.074657835, 0.98078525, 0.18023996), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.9238795, 0.31818965), (-0.108386375, 0.98078525, 0.16221167), (-0.108386375, 0.98078525, 0.16221167), (-0.21260752, 0.9238795, 0.31818965), (-0.27059805, 0.9238795, 0.27059805), (-0.13794969, 0.98078525, 0.13794969), (-0.13794969, 0.98078525, 0.13794969), (-0.27059805, 0.9238795, 0.27059805), (-0.31818965, 0.9238795, 0.21260752), (-0.16221167, 0.98078525, 0.108386375), (-0.16221167, 0.98078525, 0.108386375), (-0.31818965, 0.9238795, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.18023996, 0.98078525, 0.074657835), (-0.18023996, 0.98078525, 0.074657835), (-0.35355338, 0.9238795, 0.14644662), (-0.37533027, 0.9238795, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.19134171, 0.98078525, 0.038060233), (-0.37533027, 0.9238795, 0.074657835), (-0.38268343, 0.9238795, 0), (-0.19509032, 0.98078525, 0), (-0.38268343, 0.9238795, 0), (-0.55557024, 0.8314696, 0), (-0.5448951, 0.8314696, -0.108386375), (-0.37533027, 0.9238795, -0.074657835), (-0.37533027, 0.9238795, -0.074657835), (-0.5448951, 0.8314696, -0.108386375), (-0.51328, 0.8314696, -0.21260752), (-0.35355338, 0.9238795, -0.14644662), (-0.35355338, 0.9238795, -0.14644662), (-0.51328, 0.8314696, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.31818965, 0.9238795, -0.21260752), (-0.31818965, 0.9238795, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.39284748, 0.8314696, -0.39284748), (-0.27059805, 0.9238795, -0.27059805), (-0.27059805, 0.9238795, -0.27059805), (-0.39284748, 0.8314696, -0.39284748), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.9238795, -0.31818965), (-0.21260752, 0.9238795, -0.31818965), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.8314696, -0.51328), (-0.14644662, 0.9238795, -0.35355338), (-0.14644662, 0.9238795, -0.35355338), (-0.21260752, 0.8314696, -0.51328), (-0.108386375, 0.8314696, -0.5448951), (-0.074657835, 0.9238795, -0.37533027), (-0.074657835, 0.9238795, -0.37533027), (-0.108386375, 0.8314696, -0.5448951), (-3.4018865e-17, 0.8314696, -0.55557024), (-2.3432602e-17, 0.9238795, -0.38268343), (-2.3432602e-17, 0.9238795, -0.38268343), (-3.4018865e-17, 0.8314696, -0.55557024), (0.108386375, 0.8314696, -0.5448951), (0.074657835, 0.9238795, -0.37533027), (0.074657835, 0.9238795, -0.37533027), (0.108386375, 0.8314696, -0.5448951), (0.21260752, 0.8314696, -0.51328), (0.14644662, 0.9238795, -0.35355338), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.8314696, -0.51328), (0.30865827, 0.8314696, -0.46193975), (0.21260752, 0.9238795, -0.31818965), (0.21260752, 0.9238795, -0.31818965), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.8314696, -0.39284748), (0.27059805, 0.9238795, -0.27059805), (0.27059805, 0.9238795, -0.27059805), (0.39284748, 0.8314696, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.31818965, 0.9238795, -0.21260752), (0.31818965, 0.9238795, -0.21260752), (0.46193975, 0.8314696, -0.30865827), (0.51328, 0.8314696, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.35355338, 0.9238795, -0.14644662), (0.51328, 0.8314696, -0.21260752), (0.5448951, 0.8314696, -0.108386375), (0.37533027, 0.9238795, -0.074657835), (0.37533027, 0.9238795, -0.074657835), (0.5448951, 0.8314696, -0.108386375), (0.55557024, 0.8314696, -6.803773e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.5448951, 0.8314696, 0.108386375), (0.37533027, 0.9238795, 0.074657835), (0.37533027, 0.9238795, 0.074657835), (0.5448951, 0.8314696, 0.108386375), (0.51328, 0.8314696, 0.21260752), (0.35355338, 0.9238795, 0.14644662), (0.35355338, 0.9238795, 0.14644662), (0.51328, 0.8314696, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.31818965, 0.9238795, 0.21260752), (0.31818965, 0.9238795, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.39284748, 0.8314696, 0.39284748), (0.27059805, 0.9238795, 0.27059805), (0.27059805, 0.9238795, 0.27059805), (0.39284748, 0.8314696, 0.39284748), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.9238795, 0.31818965), (0.21260752, 0.9238795, 0.31818965), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.8314696, 0.51328), (0.14644662, 0.9238795, 0.35355338), (0.14644662, 0.9238795, 0.35355338), (0.21260752, 0.8314696, 0.51328), (0.108386375, 0.8314696, 0.5448951), (0.074657835, 0.9238795, 0.37533027), (0.074657835, 0.9238795, 0.37533027), (0.108386375, 0.8314696, 0.5448951), (1.020566e-16, 0.8314696, 0.55557024), (7.0297805e-17, 0.9238795, 0.38268343), (7.0297805e-17, 0.9238795, 0.38268343), (1.020566e-16, 0.8314696, 0.55557024), (-0.108386375, 0.8314696, 0.5448951), (-0.074657835, 0.9238795, 0.37533027), (-0.074657835, 0.9238795, 0.37533027), (-0.108386375, 0.8314696, 0.5448951), (-0.21260752, 0.8314696, 0.51328), (-0.14644662, 0.9238795, 0.35355338), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.8314696, 0.51328), (-0.30865827, 0.8314696, 0.46193975), (-0.21260752, 0.9238795, 0.31818965), (-0.21260752, 0.9238795, 0.31818965), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.8314696, 0.39284748), (-0.27059805, 0.9238795, 0.27059805), (-0.27059805, 0.9238795, 0.27059805), (-0.39284748, 0.8314696, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.31818965, 0.9238795, 0.21260752), (-0.31818965, 0.9238795, 0.21260752), (-0.46193975, 0.8314696, 0.30865827), (-0.51328, 0.8314696, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.35355338, 0.9238795, 0.14644662), (-0.51328, 0.8314696, 0.21260752), (-0.5448951, 0.8314696, 0.108386375), (-0.37533027, 0.9238795, 0.074657835), (-0.37533027, 0.9238795, 0.074657835), (-0.5448951, 0.8314696, 0.108386375), (-0.55557024, 0.8314696, 0), (-0.38268343, 0.9238795, 0), (-0.55557024, 0.8314696, 0), (-0.70710677, 0.70710677, 0), (-0.69351995, 0.70710677, -0.13794969), (-0.5448951, 0.8314696, -0.108386375), (-0.5448951, 0.8314696, -0.108386375), (-0.69351995, 0.70710677, -0.13794969), (-0.6532815, 0.70710677, -0.27059805), (-0.51328, 0.8314696, -0.21260752), (-0.51328, 0.8314696, -0.21260752), (-0.6532815, 0.70710677, -0.27059805), (-0.5879378, 0.70710677, -0.39284748), (-0.46193975, 0.8314696, -0.30865827), (-0.46193975, 0.8314696, -0.30865827), (-0.5879378, 0.70710677, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.8314696, -0.39284748), (-0.39284748, 0.8314696, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.70710677, -0.5879378), (-0.30865827, 0.8314696, -0.46193975), (-0.30865827, 0.8314696, -0.46193975), (-0.39284748, 0.70710677, -0.5879378), (-0.27059805, 0.70710677, -0.6532815), (-0.21260752, 0.8314696, -0.51328), (-0.21260752, 0.8314696, -0.51328), (-0.27059805, 0.70710677, -0.6532815), (-0.13794969, 0.70710677, -0.69351995), (-0.108386375, 0.8314696, -0.5448951), (-0.108386375, 0.8314696, -0.5448951), (-0.13794969, 0.70710677, -0.69351995), (-4.3297803e-17, 0.70710677, -0.70710677), (-3.4018865e-17, 0.8314696, -0.55557024), (-3.4018865e-17, 0.8314696, -0.55557024), (-4.3297803e-17, 0.70710677, -0.70710677), (0.13794969, 0.70710677, -0.69351995), (0.108386375, 0.8314696, -0.5448951), (0.108386375, 0.8314696, -0.5448951), (0.13794969, 0.70710677, -0.69351995), (0.27059805, 0.70710677, -0.6532815), (0.21260752, 0.8314696, -0.51328), (0.21260752, 0.8314696, -0.51328), (0.27059805, 0.70710677, -0.6532815), (0.39284748, 0.70710677, -0.5879378), (0.30865827, 0.8314696, -0.46193975), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.70710677, -0.5879378), (0.5, 0.70710677, -0.5), (0.39284748, 0.8314696, -0.39284748), (0.39284748, 0.8314696, -0.39284748), (0.5, 0.70710677, -0.5), (0.5879378, 0.70710677, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.46193975, 0.8314696, -0.30865827), (0.5879378, 0.70710677, -0.39284748), (0.6532815, 0.70710677, -0.27059805), (0.51328, 0.8314696, -0.21260752), (0.51328, 0.8314696, -0.21260752), (0.6532815, 0.70710677, -0.27059805), (0.69351995, 0.70710677, -0.13794969), (0.5448951, 0.8314696, -0.108386375), (0.5448951, 0.8314696, -0.108386375), (0.69351995, 0.70710677, -0.13794969), (0.70710677, 0.70710677, -8.6595606e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.70710677, 0.70710677, -8.6595606e-17), (0.69351995, 0.70710677, 0.13794969), (0.5448951, 0.8314696, 0.108386375), (0.5448951, 0.8314696, 0.108386375), (0.69351995, 0.70710677, 0.13794969), (0.6532815, 0.70710677, 0.27059805), (0.51328, 0.8314696, 0.21260752), (0.51328, 0.8314696, 0.21260752), (0.6532815, 0.70710677, 0.27059805), (0.5879378, 0.70710677, 0.39284748), (0.46193975, 0.8314696, 0.30865827), (0.46193975, 0.8314696, 0.30865827), (0.5879378, 0.70710677, 0.39284748), (0.5, 0.70710677, 0.5), (0.39284748, 0.8314696, 0.39284748), (0.39284748, 0.8314696, 0.39284748), (0.5, 0.70710677, 0.5), (0.39284748, 0.70710677, 0.5879378), (0.30865827, 0.8314696, 0.46193975), (0.30865827, 0.8314696, 0.46193975), (0.39284748, 0.70710677, 0.5879378), (0.27059805, 0.70710677, 0.6532815), (0.21260752, 0.8314696, 0.51328), (0.21260752, 0.8314696, 0.51328), (0.27059805, 0.70710677, 0.6532815), (0.13794969, 0.70710677, 0.69351995), (0.108386375, 0.8314696, 0.5448951), (0.108386375, 0.8314696, 0.5448951), (0.13794969, 0.70710677, 0.69351995), (1.298934e-16, 0.70710677, 0.70710677), (1.020566e-16, 0.8314696, 0.55557024), (1.020566e-16, 0.8314696, 0.55557024), (1.298934e-16, 0.70710677, 0.70710677), (-0.13794969, 0.70710677, 0.69351995), (-0.108386375, 0.8314696, 0.5448951), (-0.108386375, 0.8314696, 0.5448951), (-0.13794969, 0.70710677, 0.69351995), (-0.27059805, 0.70710677, 0.6532815), (-0.21260752, 0.8314696, 0.51328), (-0.21260752, 0.8314696, 0.51328), (-0.27059805, 0.70710677, 0.6532815), (-0.39284748, 0.70710677, 0.5879378), (-0.30865827, 0.8314696, 0.46193975), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.70710677, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.39284748, 0.8314696, 0.39284748), (-0.39284748, 0.8314696, 0.39284748), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.70710677, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.46193975, 0.8314696, 0.30865827), (-0.5879378, 0.70710677, 0.39284748), (-0.6532815, 0.70710677, 0.27059805), (-0.51328, 0.8314696, 0.21260752), (-0.51328, 0.8314696, 0.21260752), (-0.6532815, 0.70710677, 0.27059805), (-0.69351995, 0.70710677, 0.13794969), (-0.5448951, 0.8314696, 0.108386375), (-0.5448951, 0.8314696, 0.108386375), (-0.69351995, 0.70710677, 0.13794969), (-0.70710677, 0.70710677, 0), (-0.55557024, 0.8314696, 0), (-0.70710677, 0.70710677, 0), (-0.8314696, 0.55557024, 0), (-0.81549317, 0.55557024, -0.16221167), (-0.69351995, 0.70710677, -0.13794969), (-0.69351995, 0.70710677, -0.13794969), (-0.81549317, 0.55557024, -0.16221167), (-0.76817775, 0.55557024, -0.31818965), (-0.6532815, 0.70710677, -0.27059805), (-0.6532815, 0.70710677, -0.27059805), (-0.76817775, 0.55557024, -0.31818965), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.70710677, -0.39284748), (-0.5879378, 0.70710677, -0.39284748), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.55557024, -0.5879378), (-0.5, 0.70710677, -0.5), (-0.5, 0.70710677, -0.5), (-0.5879378, 0.55557024, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.39284748, 0.70710677, -0.5879378), (-0.39284748, 0.70710677, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.31818965, 0.55557024, -0.76817775), (-0.27059805, 0.70710677, -0.6532815), (-0.27059805, 0.70710677, -0.6532815), (-0.31818965, 0.55557024, -0.76817775), (-0.16221167, 0.55557024, -0.81549317), (-0.13794969, 0.70710677, -0.69351995), (-0.13794969, 0.70710677, -0.69351995), (-0.16221167, 0.55557024, -0.81549317), (-5.091283e-17, 0.55557024, -0.8314696), (-4.3297803e-17, 0.70710677, -0.70710677), (-4.3297803e-17, 0.70710677, -0.70710677), (-5.091283e-17, 0.55557024, -0.8314696), (0.16221167, 0.55557024, -0.81549317), (0.13794969, 0.70710677, -0.69351995), (0.13794969, 0.70710677, -0.69351995), (0.16221167, 0.55557024, -0.81549317), (0.31818965, 0.55557024, -0.76817775), (0.27059805, 0.70710677, -0.6532815), (0.27059805, 0.70710677, -0.6532815), (0.31818965, 0.55557024, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.39284748, 0.70710677, -0.5879378), (0.39284748, 0.70710677, -0.5879378), (0.46193975, 0.55557024, -0.6913417), (0.5879378, 0.55557024, -0.5879378), (0.5, 0.70710677, -0.5), (0.5, 0.70710677, -0.5), (0.5879378, 0.55557024, -0.5879378), (0.6913417, 0.55557024, -0.46193975), (0.5879378, 0.70710677, -0.39284748), (0.5879378, 0.70710677, -0.39284748), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.55557024, -0.31818965), (0.6532815, 0.70710677, -0.27059805), (0.6532815, 0.70710677, -0.27059805), (0.76817775, 0.55557024, -0.31818965), (0.81549317, 0.55557024, -0.16221167), (0.69351995, 0.70710677, -0.13794969), (0.69351995, 0.70710677, -0.13794969), (0.81549317, 0.55557024, -0.16221167), (0.8314696, 0.55557024, -1.0182566e-16), (0.70710677, 0.70710677, -8.6595606e-17), (0.70710677, 0.70710677, -8.6595606e-17), (0.8314696, 0.55557024, -1.0182566e-16), (0.81549317, 0.55557024, 0.16221167), (0.69351995, 0.70710677, 0.13794969), (0.69351995, 0.70710677, 0.13794969), (0.81549317, 0.55557024, 0.16221167), (0.76817775, 0.55557024, 0.31818965), (0.6532815, 0.70710677, 0.27059805), (0.6532815, 0.70710677, 0.27059805), (0.76817775, 0.55557024, 0.31818965), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.70710677, 0.39284748), (0.5879378, 0.70710677, 0.39284748), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.55557024, 0.5879378), (0.5, 0.70710677, 0.5), (0.5, 0.70710677, 0.5), (0.5879378, 0.55557024, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.39284748, 0.70710677, 0.5879378), (0.39284748, 0.70710677, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.31818965, 0.55557024, 0.76817775), (0.27059805, 0.70710677, 0.6532815), (0.27059805, 0.70710677, 0.6532815), (0.31818965, 0.55557024, 0.76817775), (0.16221167, 0.55557024, 0.81549317), (0.13794969, 0.70710677, 0.69351995), (0.13794969, 0.70710677, 0.69351995), (0.16221167, 0.55557024, 0.81549317), (1.5273849e-16, 0.55557024, 0.8314696), (1.298934e-16, 0.70710677, 0.70710677), (1.298934e-16, 0.70710677, 0.70710677), (1.5273849e-16, 0.55557024, 0.8314696), (-0.16221167, 0.55557024, 0.81549317), (-0.13794969, 0.70710677, 0.69351995), (-0.13794969, 0.70710677, 0.69351995), (-0.16221167, 0.55557024, 0.81549317), (-0.31818965, 0.55557024, 0.76817775), (-0.27059805, 0.70710677, 0.6532815), (-0.27059805, 0.70710677, 0.6532815), (-0.31818965, 0.55557024, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.39284748, 0.70710677, 0.5879378), (-0.39284748, 0.70710677, 0.5879378), (-0.46193975, 0.55557024, 0.6913417), (-0.5879378, 0.55557024, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.55557024, 0.5879378), (-0.6913417, 0.55557024, 0.46193975), (-0.5879378, 0.70710677, 0.39284748), (-0.5879378, 0.70710677, 0.39284748), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.55557024, 0.31818965), (-0.6532815, 0.70710677, 0.27059805), (-0.6532815, 0.70710677, 0.27059805), (-0.76817775, 0.55557024, 0.31818965), (-0.81549317, 0.55557024, 0.16221167), (-0.69351995, 0.70710677, 0.13794969), (-0.69351995, 0.70710677, 0.13794969), (-0.81549317, 0.55557024, 0.16221167), (-0.8314696, 0.55557024, 0), (-0.70710677, 0.70710677, 0), (-0.8314696, 0.55557024, 0), (-0.9238795, 0.38268343, 0), (-0.90612745, 0.38268343, -0.18023996), (-0.81549317, 0.55557024, -0.16221167), (-0.81549317, 0.55557024, -0.16221167), (-0.90612745, 0.38268343, -0.18023996), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.55557024, -0.31818965), (-0.76817775, 0.55557024, -0.31818965), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.38268343, -0.51328), (-0.6913417, 0.55557024, -0.46193975), (-0.6913417, 0.55557024, -0.46193975), (-0.76817775, 0.38268343, -0.51328), (-0.6532815, 0.38268343, -0.6532815), (-0.5879378, 0.55557024, -0.5879378), (-0.5879378, 0.55557024, -0.5879378), (-0.6532815, 0.38268343, -0.6532815), (-0.51328, 0.38268343, -0.76817775), (-0.46193975, 0.55557024, -0.6913417), (-0.46193975, 0.55557024, -0.6913417), (-0.51328, 0.38268343, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.31818965, 0.55557024, -0.76817775), (-0.31818965, 0.55557024, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.18023996, 0.38268343, -0.90612745), (-0.16221167, 0.55557024, -0.81549317), (-0.16221167, 0.55557024, -0.81549317), (-0.18023996, 0.38268343, -0.90612745), (-5.6571306e-17, 0.38268343, -0.9238795), (-5.091283e-17, 0.55557024, -0.8314696), (-5.091283e-17, 0.55557024, -0.8314696), (-5.6571306e-17, 0.38268343, -0.9238795), (0.18023996, 0.38268343, -0.90612745), (0.16221167, 0.55557024, -0.81549317), (0.16221167, 0.55557024, -0.81549317), (0.18023996, 0.38268343, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.31818965, 0.55557024, -0.76817775), (0.31818965, 0.55557024, -0.76817775), (0.35355338, 0.38268343, -0.8535534), (0.51328, 0.38268343, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.46193975, 0.55557024, -0.6913417), (0.51328, 0.38268343, -0.76817775), (0.6532815, 0.38268343, -0.6532815), (0.5879378, 0.55557024, -0.5879378), (0.5879378, 0.55557024, -0.5879378), (0.6532815, 0.38268343, -0.6532815), (0.76817775, 0.38268343, -0.51328), (0.6913417, 0.55557024, -0.46193975), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.38268343, -0.51328), (0.8535534, 0.38268343, -0.35355338), (0.76817775, 0.55557024, -0.31818965), (0.76817775, 0.55557024, -0.31818965), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.38268343, -0.18023996), (0.81549317, 0.55557024, -0.16221167), (0.81549317, 0.55557024, -0.16221167), (0.90612745, 0.38268343, -0.18023996), (0.9238795, 0.38268343, -1.1314261e-16), (0.8314696, 0.55557024, -1.0182566e-16), (0.8314696, 0.55557024, -1.0182566e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.90612745, 0.38268343, 0.18023996), (0.81549317, 0.55557024, 0.16221167), (0.81549317, 0.55557024, 0.16221167), (0.90612745, 0.38268343, 0.18023996), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.55557024, 0.31818965), (0.76817775, 0.55557024, 0.31818965), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.38268343, 0.51328), (0.6913417, 0.55557024, 0.46193975), (0.6913417, 0.55557024, 0.46193975), (0.76817775, 0.38268343, 0.51328), (0.6532815, 0.38268343, 0.6532815), (0.5879378, 0.55557024, 0.5879378), (0.5879378, 0.55557024, 0.5879378), (0.6532815, 0.38268343, 0.6532815), (0.51328, 0.38268343, 0.76817775), (0.46193975, 0.55557024, 0.6913417), (0.46193975, 0.55557024, 0.6913417), (0.51328, 0.38268343, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.31818965, 0.55557024, 0.76817775), (0.31818965, 0.55557024, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.18023996, 0.38268343, 0.90612745), (0.16221167, 0.55557024, 0.81549317), (0.16221167, 0.55557024, 0.81549317), (0.18023996, 0.38268343, 0.90612745), (1.6971392e-16, 0.38268343, 0.9238795), (1.5273849e-16, 0.55557024, 0.8314696), (1.5273849e-16, 0.55557024, 0.8314696), (1.6971392e-16, 0.38268343, 0.9238795), (-0.18023996, 0.38268343, 0.90612745), (-0.16221167, 0.55557024, 0.81549317), (-0.16221167, 0.55557024, 0.81549317), (-0.18023996, 0.38268343, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.31818965, 0.55557024, 0.76817775), (-0.31818965, 0.55557024, 0.76817775), (-0.35355338, 0.38268343, 0.8535534), (-0.51328, 0.38268343, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.46193975, 0.55557024, 0.6913417), (-0.51328, 0.38268343, 0.76817775), (-0.6532815, 0.38268343, 0.6532815), (-0.5879378, 0.55557024, 0.5879378), (-0.5879378, 0.55557024, 0.5879378), (-0.6532815, 0.38268343, 0.6532815), (-0.76817775, 0.38268343, 0.51328), (-0.6913417, 0.55557024, 0.46193975), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.38268343, 0.51328), (-0.8535534, 0.38268343, 0.35355338), (-0.76817775, 0.55557024, 0.31818965), (-0.76817775, 0.55557024, 0.31818965), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.38268343, 0.18023996), (-0.81549317, 0.55557024, 0.16221167), (-0.81549317, 0.55557024, 0.16221167), (-0.90612745, 0.38268343, 0.18023996), (-0.9238795, 0.38268343, 0), (-0.8314696, 0.55557024, 0), (-0.9238795, 0.38268343, 0), (-0.98078525, 0.19509032, 0), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.38268343, -0.18023996), (-0.90612745, 0.38268343, -0.18023996), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.19509032, -0.37533027), (-0.8535534, 0.38268343, -0.35355338), (-0.8535534, 0.38268343, -0.35355338), (-0.90612745, 0.19509032, -0.37533027), (-0.81549317, 0.19509032, -0.5448951), (-0.76817775, 0.38268343, -0.51328), (-0.76817775, 0.38268343, -0.51328), (-0.81549317, 0.19509032, -0.5448951), (-0.69351995, 0.19509032, -0.69351995), (-0.6532815, 0.38268343, -0.6532815), (-0.6532815, 0.38268343, -0.6532815), (-0.69351995, 0.19509032, -0.69351995), (-0.5448951, 0.19509032, -0.81549317), (-0.51328, 0.38268343, -0.76817775), (-0.51328, 0.38268343, -0.76817775), (-0.5448951, 0.19509032, -0.81549317), (-0.37533027, 0.19509032, -0.90612745), (-0.35355338, 0.38268343, -0.8535534), (-0.35355338, 0.38268343, -0.8535534), (-0.37533027, 0.19509032, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.18023996, 0.38268343, -0.90612745), (-0.18023996, 0.38268343, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-6.005578e-17, 0.19509032, -0.98078525), (-5.6571306e-17, 0.38268343, -0.9238795), (-5.6571306e-17, 0.38268343, -0.9238795), (-6.005578e-17, 0.19509032, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.18023996, 0.38268343, -0.90612745), (0.18023996, 0.38268343, -0.90612745), (0.19134171, 0.19509032, -0.96193975), (0.37533027, 0.19509032, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.35355338, 0.38268343, -0.8535534), (0.37533027, 0.19509032, -0.90612745), (0.5448951, 0.19509032, -0.81549317), (0.51328, 0.38268343, -0.76817775), (0.51328, 0.38268343, -0.76817775), (0.5448951, 0.19509032, -0.81549317), (0.69351995, 0.19509032, -0.69351995), (0.6532815, 0.38268343, -0.6532815), (0.6532815, 0.38268343, -0.6532815), (0.69351995, 0.19509032, -0.69351995), (0.81549317, 0.19509032, -0.5448951), (0.76817775, 0.38268343, -0.51328), (0.76817775, 0.38268343, -0.51328), (0.81549317, 0.19509032, -0.5448951), (0.90612745, 0.19509032, -0.37533027), (0.8535534, 0.38268343, -0.35355338), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.19509032, -0.37533027), (0.96193975, 0.19509032, -0.19134171), (0.90612745, 0.38268343, -0.18023996), (0.90612745, 0.38268343, -0.18023996), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0.19509032, -1.2011156e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.98078525, 0.19509032, -1.2011156e-16), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.38268343, 0.18023996), (0.90612745, 0.38268343, 0.18023996), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.19509032, 0.37533027), (0.8535534, 0.38268343, 0.35355338), (0.8535534, 0.38268343, 0.35355338), (0.90612745, 0.19509032, 0.37533027), (0.81549317, 0.19509032, 0.5448951), (0.76817775, 0.38268343, 0.51328), (0.76817775, 0.38268343, 0.51328), (0.81549317, 0.19509032, 0.5448951), (0.69351995, 0.19509032, 0.69351995), (0.6532815, 0.38268343, 0.6532815), (0.6532815, 0.38268343, 0.6532815), (0.69351995, 0.19509032, 0.69351995), (0.5448951, 0.19509032, 0.81549317), (0.51328, 0.38268343, 0.76817775), (0.51328, 0.38268343, 0.76817775), (0.5448951, 0.19509032, 0.81549317), (0.37533027, 0.19509032, 0.90612745), (0.35355338, 0.38268343, 0.8535534), (0.35355338, 0.38268343, 0.8535534), (0.37533027, 0.19509032, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.18023996, 0.38268343, 0.90612745), (0.18023996, 0.38268343, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (1.8016734e-16, 0.19509032, 0.98078525), (1.6971392e-16, 0.38268343, 0.9238795), (1.6971392e-16, 0.38268343, 0.9238795), (1.8016734e-16, 0.19509032, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.18023996, 0.38268343, 0.90612745), (-0.18023996, 0.38268343, 0.90612745), (-0.19134171, 0.19509032, 0.96193975), (-0.37533027, 0.19509032, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.35355338, 0.38268343, 0.8535534), (-0.37533027, 0.19509032, 0.90612745), (-0.5448951, 0.19509032, 0.81549317), (-0.51328, 0.38268343, 0.76817775), (-0.51328, 0.38268343, 0.76817775), (-0.5448951, 0.19509032, 0.81549317), (-0.69351995, 0.19509032, 0.69351995), (-0.6532815, 0.38268343, 0.6532815), (-0.6532815, 0.38268343, 0.6532815), (-0.69351995, 0.19509032, 0.69351995), (-0.81549317, 0.19509032, 0.5448951), (-0.76817775, 0.38268343, 0.51328), (-0.76817775, 0.38268343, 0.51328), (-0.81549317, 0.19509032, 0.5448951), (-0.90612745, 0.19509032, 0.37533027), (-0.8535534, 0.38268343, 0.35355338), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.19509032, 0.37533027), (-0.96193975, 0.19509032, 0.19134171), (-0.90612745, 0.38268343, 0.18023996), (-0.90612745, 0.38268343, 0.18023996), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0.19509032, 0), (-0.9238795, 0.38268343, 0), (-0.98078525, 0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.96193975, 0.19509032, -0.19134171), (-0.96193975, 0.19509032, -0.19134171), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.90612745, 0.19509032, -0.37533027), (-0.90612745, 0.19509032, -0.37533027), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.81549317, 0.19509032, -0.5448951), (-0.81549317, 0.19509032, -0.5448951), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.69351995, 0.19509032, -0.69351995), (-0.69351995, 0.19509032, -0.69351995), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.5448951, 0.19509032, -0.81549317), (-0.5448951, 0.19509032, -0.81549317), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.37533027, 0.19509032, -0.90612745), (-0.37533027, 0.19509032, -0.90612745), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19134171, 0.19509032, -0.96193975), (-0.19134171, 0.19509032, -0.96193975), (-0.19509032, 1.2246469e-16, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (-6.005578e-17, 0.19509032, -0.98078525), (-6.005578e-17, 0.19509032, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (0.19509032, 1.2246469e-16, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.19134171, 0.19509032, -0.96193975), (0.19509032, 1.2246469e-16, -0.98078525), (0.38268343, 1.2246469e-16, -0.9238795), (0.37533027, 0.19509032, -0.90612745), (0.37533027, 0.19509032, -0.90612745), (0.38268343, 1.2246469e-16, -0.9238795), (0.55557024, 1.2246469e-16, -0.8314696), (0.5448951, 0.19509032, -0.81549317), (0.5448951, 0.19509032, -0.81549317), (0.55557024, 1.2246469e-16, -0.8314696), (0.70710677, 1.2246469e-16, -0.70710677), (0.69351995, 0.19509032, -0.69351995), (0.69351995, 0.19509032, -0.69351995), (0.70710677, 1.2246469e-16, -0.70710677), (0.8314696, 1.2246469e-16, -0.55557024), (0.81549317, 0.19509032, -0.5448951), (0.81549317, 0.19509032, -0.5448951), (0.8314696, 1.2246469e-16, -0.55557024), (0.9238795, 1.2246469e-16, -0.38268343), (0.90612745, 0.19509032, -0.37533027), (0.90612745, 0.19509032, -0.37533027), (0.9238795, 1.2246469e-16, -0.38268343), (0.98078525, 1.2246469e-16, -0.19509032), (0.96193975, 0.19509032, -0.19134171), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 1.2246469e-16, -0.19509032), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, 0.19509032, -1.2011156e-16), (0.98078525, 0.19509032, -1.2011156e-16), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, 1.2246469e-16, 0.19509032), (0.96193975, 0.19509032, 0.19134171), (0.96193975, 0.19509032, 0.19134171), (0.98078525, 1.2246469e-16, 0.19509032), (0.9238795, 1.2246469e-16, 0.38268343), (0.90612745, 0.19509032, 0.37533027), (0.90612745, 0.19509032, 0.37533027), (0.9238795, 1.2246469e-16, 0.38268343), (0.8314696, 1.2246469e-16, 0.55557024), (0.81549317, 0.19509032, 0.5448951), (0.81549317, 0.19509032, 0.5448951), (0.8314696, 1.2246469e-16, 0.55557024), (0.70710677, 1.2246469e-16, 0.70710677), (0.69351995, 0.19509032, 0.69351995), (0.69351995, 0.19509032, 0.69351995), (0.70710677, 1.2246469e-16, 0.70710677), (0.55557024, 1.2246469e-16, 0.8314696), (0.5448951, 0.19509032, 0.81549317), (0.5448951, 0.19509032, 0.81549317), (0.55557024, 1.2246469e-16, 0.8314696), (0.38268343, 1.2246469e-16, 0.9238795), (0.37533027, 0.19509032, 0.90612745), (0.37533027, 0.19509032, 0.90612745), (0.38268343, 1.2246469e-16, 0.9238795), (0.19509032, 1.2246469e-16, 0.98078525), (0.19134171, 0.19509032, 0.96193975), (0.19134171, 0.19509032, 0.96193975), (0.19509032, 1.2246469e-16, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (1.8016734e-16, 0.19509032, 0.98078525), (1.8016734e-16, 0.19509032, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.19134171, 0.19509032, 0.96193975), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.37533027, 0.19509032, 0.90612745), (-0.37533027, 0.19509032, 0.90612745), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.5448951, 0.19509032, 0.81549317), (-0.5448951, 0.19509032, 0.81549317), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.69351995, 0.19509032, 0.69351995), (-0.69351995, 0.19509032, 0.69351995), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.81549317, 0.19509032, 0.5448951), (-0.81549317, 0.19509032, 0.5448951), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.90612745, 0.19509032, 0.37533027), (-0.90612745, 0.19509032, 0.37533027), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.96193975, 0.19509032, 0.19134171), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 1.2246469e-16, 0.19509032), (-1, 1.2246469e-16, 0), (-0.98078525, 0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, -0.19509032, 0), (-0.96193975, -0.19509032, -0.19134171), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.19509032, -0.37533027), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.90612745, -0.19509032, -0.37533027), (-0.81549317, -0.19509032, -0.5448951), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.81549317, -0.19509032, -0.5448951), (-0.69351995, -0.19509032, -0.69351995), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.69351995, -0.19509032, -0.69351995), (-0.5448951, -0.19509032, -0.81549317), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.5448951, -0.19509032, -0.81549317), (-0.37533027, -0.19509032, -0.90612745), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.37533027, -0.19509032, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19134171, -0.19509032, -0.96193975), (-6.005578e-17, -0.19509032, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (-6.123234e-17, 1.2246469e-16, -1), (-6.005578e-17, -0.19509032, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.19509032, 1.2246469e-16, -0.98078525), (0.19509032, 1.2246469e-16, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.37533027, -0.19509032, -0.90612745), (0.38268343, 1.2246469e-16, -0.9238795), (0.38268343, 1.2246469e-16, -0.9238795), (0.37533027, -0.19509032, -0.90612745), (0.5448951, -0.19509032, -0.81549317), (0.55557024, 1.2246469e-16, -0.8314696), (0.55557024, 1.2246469e-16, -0.8314696), (0.5448951, -0.19509032, -0.81549317), (0.69351995, -0.19509032, -0.69351995), (0.70710677, 1.2246469e-16, -0.70710677), (0.70710677, 1.2246469e-16, -0.70710677), (0.69351995, -0.19509032, -0.69351995), (0.81549317, -0.19509032, -0.5448951), (0.8314696, 1.2246469e-16, -0.55557024), (0.8314696, 1.2246469e-16, -0.55557024), (0.81549317, -0.19509032, -0.5448951), (0.90612745, -0.19509032, -0.37533027), (0.9238795, 1.2246469e-16, -0.38268343), (0.9238795, 1.2246469e-16, -0.38268343), (0.90612745, -0.19509032, -0.37533027), (0.96193975, -0.19509032, -0.19134171), (0.98078525, 1.2246469e-16, -0.19509032), (0.98078525, 1.2246469e-16, -0.19509032), (0.96193975, -0.19509032, -0.19134171), (0.98078525, -0.19509032, -1.2011156e-16), (1, 1.2246469e-16, -1.2246469e-16), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.96193975, -0.19509032, 0.19134171), (0.98078525, 1.2246469e-16, 0.19509032), (0.98078525, 1.2246469e-16, 0.19509032), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.19509032, 0.37533027), (0.9238795, 1.2246469e-16, 0.38268343), (0.9238795, 1.2246469e-16, 0.38268343), (0.90612745, -0.19509032, 0.37533027), (0.81549317, -0.19509032, 0.5448951), (0.8314696, 1.2246469e-16, 0.55557024), (0.8314696, 1.2246469e-16, 0.55557024), (0.81549317, -0.19509032, 0.5448951), (0.69351995, -0.19509032, 0.69351995), (0.70710677, 1.2246469e-16, 0.70710677), (0.70710677, 1.2246469e-16, 0.70710677), (0.69351995, -0.19509032, 0.69351995), (0.5448951, -0.19509032, 0.81549317), (0.55557024, 1.2246469e-16, 0.8314696), (0.55557024, 1.2246469e-16, 0.8314696), (0.5448951, -0.19509032, 0.81549317), (0.37533027, -0.19509032, 0.90612745), (0.38268343, 1.2246469e-16, 0.9238795), (0.38268343, 1.2246469e-16, 0.9238795), (0.37533027, -0.19509032, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.19509032, 1.2246469e-16, 0.98078525), (0.19509032, 1.2246469e-16, 0.98078525), (0.19134171, -0.19509032, 0.96193975), (1.8016734e-16, -0.19509032, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (1.8369701e-16, 1.2246469e-16, 1), (1.8016734e-16, -0.19509032, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.37533027, -0.19509032, 0.90612745), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.37533027, -0.19509032, 0.90612745), (-0.5448951, -0.19509032, 0.81549317), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.5448951, -0.19509032, 0.81549317), (-0.69351995, -0.19509032, 0.69351995), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.69351995, -0.19509032, 0.69351995), (-0.81549317, -0.19509032, 0.5448951), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.81549317, -0.19509032, 0.5448951), (-0.90612745, -0.19509032, 0.37533027), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.90612745, -0.19509032, 0.37533027), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, -0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, -0.19509032, 0), (-0.9238795, -0.38268343, 0), (-0.90612745, -0.38268343, -0.18023996), (-0.96193975, -0.19509032, -0.19134171), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.38268343, -0.18023996), (-0.8535534, -0.38268343, -0.35355338), (-0.90612745, -0.19509032, -0.37533027), (-0.90612745, -0.19509032, -0.37533027), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.38268343, -0.51328), (-0.81549317, -0.19509032, -0.5448951), (-0.81549317, -0.19509032, -0.5448951), (-0.76817775, -0.38268343, -0.51328), (-0.6532815, -0.38268343, -0.6532815), (-0.69351995, -0.19509032, -0.69351995), (-0.69351995, -0.19509032, -0.69351995), (-0.6532815, -0.38268343, -0.6532815), (-0.51328, -0.38268343, -0.76817775), (-0.5448951, -0.19509032, -0.81549317), (-0.5448951, -0.19509032, -0.81549317), (-0.51328, -0.38268343, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.37533027, -0.19509032, -0.90612745), (-0.37533027, -0.19509032, -0.90612745), (-0.35355338, -0.38268343, -0.8535534), (-0.18023996, -0.38268343, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.19134171, -0.19509032, -0.96193975), (-0.18023996, -0.38268343, -0.90612745), (-5.6571306e-17, -0.38268343, -0.9238795), (-6.005578e-17, -0.19509032, -0.98078525), (-6.005578e-17, -0.19509032, -0.98078525), (-5.6571306e-17, -0.38268343, -0.9238795), (0.18023996, -0.38268343, -0.90612745), (0.19134171, -0.19509032, -0.96193975), (0.19134171, -0.19509032, -0.96193975), (0.18023996, -0.38268343, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.37533027, -0.19509032, -0.90612745), (0.37533027, -0.19509032, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.51328, -0.38268343, -0.76817775), (0.5448951, -0.19509032, -0.81549317), (0.5448951, -0.19509032, -0.81549317), (0.51328, -0.38268343, -0.76817775), (0.6532815, -0.38268343, -0.6532815), (0.69351995, -0.19509032, -0.69351995), (0.69351995, -0.19509032, -0.69351995), (0.6532815, -0.38268343, -0.6532815), (0.76817775, -0.38268343, -0.51328), (0.81549317, -0.19509032, -0.5448951), (0.81549317, -0.19509032, -0.5448951), (0.76817775, -0.38268343, -0.51328), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.19509032, -0.37533027), (0.90612745, -0.19509032, -0.37533027), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.38268343, -0.18023996), (0.96193975, -0.19509032, -0.19134171), (0.96193975, -0.19509032, -0.19134171), (0.90612745, -0.38268343, -0.18023996), (0.9238795, -0.38268343, -1.1314261e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.90612745, -0.38268343, 0.18023996), (0.96193975, -0.19509032, 0.19134171), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.38268343, 0.18023996), (0.8535534, -0.38268343, 0.35355338), (0.90612745, -0.19509032, 0.37533027), (0.90612745, -0.19509032, 0.37533027), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.38268343, 0.51328), (0.81549317, -0.19509032, 0.5448951), (0.81549317, -0.19509032, 0.5448951), (0.76817775, -0.38268343, 0.51328), (0.6532815, -0.38268343, 0.6532815), (0.69351995, -0.19509032, 0.69351995), (0.69351995, -0.19509032, 0.69351995), (0.6532815, -0.38268343, 0.6532815), (0.51328, -0.38268343, 0.76817775), (0.5448951, -0.19509032, 0.81549317), (0.5448951, -0.19509032, 0.81549317), (0.51328, -0.38268343, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.37533027, -0.19509032, 0.90612745), (0.37533027, -0.19509032, 0.90612745), (0.35355338, -0.38268343, 0.8535534), (0.18023996, -0.38268343, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.19134171, -0.19509032, 0.96193975), (0.18023996, -0.38268343, 0.90612745), (1.6971392e-16, -0.38268343, 0.9238795), (1.8016734e-16, -0.19509032, 0.98078525), (1.8016734e-16, -0.19509032, 0.98078525), (1.6971392e-16, -0.38268343, 0.9238795), (-0.18023996, -0.38268343, 0.90612745), (-0.19134171, -0.19509032, 0.96193975), (-0.19134171, -0.19509032, 0.96193975), (-0.18023996, -0.38268343, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.37533027, -0.19509032, 0.90612745), (-0.37533027, -0.19509032, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.51328, -0.38268343, 0.76817775), (-0.5448951, -0.19509032, 0.81549317), (-0.5448951, -0.19509032, 0.81549317), (-0.51328, -0.38268343, 0.76817775), (-0.6532815, -0.38268343, 0.6532815), (-0.69351995, -0.19509032, 0.69351995), (-0.69351995, -0.19509032, 0.69351995), (-0.6532815, -0.38268343, 0.6532815), (-0.76817775, -0.38268343, 0.51328), (-0.81549317, -0.19509032, 0.5448951), (-0.81549317, -0.19509032, 0.5448951), (-0.76817775, -0.38268343, 0.51328), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.19509032, 0.37533027), (-0.90612745, -0.19509032, 0.37533027), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.38268343, 0.18023996), (-0.96193975, -0.19509032, 0.19134171), (-0.96193975, -0.19509032, 0.19134171), (-0.90612745, -0.38268343, 0.18023996), (-0.9238795, -0.38268343, 0), (-0.98078525, -0.19509032, 0), (-0.9238795, -0.38268343, 0), (-0.8314696, -0.55557024, 0), (-0.81549317, -0.55557024, -0.16221167), (-0.90612745, -0.38268343, -0.18023996), (-0.90612745, -0.38268343, -0.18023996), (-0.81549317, -0.55557024, -0.16221167), (-0.76817775, -0.55557024, -0.31818965), (-0.8535534, -0.38268343, -0.35355338), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.55557024, -0.31818965), (-0.6913417, -0.55557024, -0.46193975), (-0.76817775, -0.38268343, -0.51328), (-0.76817775, -0.38268343, -0.51328), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.55557024, -0.5879378), (-0.6532815, -0.38268343, -0.6532815), (-0.6532815, -0.38268343, -0.6532815), (-0.5879378, -0.55557024, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.51328, -0.38268343, -0.76817775), (-0.51328, -0.38268343, -0.76817775), (-0.46193975, -0.55557024, -0.6913417), (-0.31818965, -0.55557024, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.35355338, -0.38268343, -0.8535534), (-0.31818965, -0.55557024, -0.76817775), (-0.16221167, -0.55557024, -0.81549317), (-0.18023996, -0.38268343, -0.90612745), (-0.18023996, -0.38268343, -0.90612745), (-0.16221167, -0.55557024, -0.81549317), (-5.091283e-17, -0.55557024, -0.8314696), (-5.6571306e-17, -0.38268343, -0.9238795), (-5.6571306e-17, -0.38268343, -0.9238795), (-5.091283e-17, -0.55557024, -0.8314696), (0.16221167, -0.55557024, -0.81549317), (0.18023996, -0.38268343, -0.90612745), (0.18023996, -0.38268343, -0.90612745), (0.16221167, -0.55557024, -0.81549317), (0.31818965, -0.55557024, -0.76817775), (0.35355338, -0.38268343, -0.8535534), (0.35355338, -0.38268343, -0.8535534), (0.31818965, -0.55557024, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.51328, -0.38268343, -0.76817775), (0.51328, -0.38268343, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.5879378, -0.55557024, -0.5879378), (0.6532815, -0.38268343, -0.6532815), (0.6532815, -0.38268343, -0.6532815), (0.5879378, -0.55557024, -0.5879378), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.38268343, -0.51328), (0.76817775, -0.38268343, -0.51328), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.55557024, -0.31818965), (0.8535534, -0.38268343, -0.35355338), (0.8535534, -0.38268343, -0.35355338), (0.76817775, -0.55557024, -0.31818965), (0.81549317, -0.55557024, -0.16221167), (0.90612745, -0.38268343, -0.18023996), (0.90612745, -0.38268343, -0.18023996), (0.81549317, -0.55557024, -0.16221167), (0.8314696, -0.55557024, -1.0182566e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.8314696, -0.55557024, -1.0182566e-16), (0.81549317, -0.55557024, 0.16221167), (0.90612745, -0.38268343, 0.18023996), (0.90612745, -0.38268343, 0.18023996), (0.81549317, -0.55557024, 0.16221167), (0.76817775, -0.55557024, 0.31818965), (0.8535534, -0.38268343, 0.35355338), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.55557024, 0.31818965), (0.6913417, -0.55557024, 0.46193975), (0.76817775, -0.38268343, 0.51328), (0.76817775, -0.38268343, 0.51328), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.55557024, 0.5879378), (0.6532815, -0.38268343, 0.6532815), (0.6532815, -0.38268343, 0.6532815), (0.5879378, -0.55557024, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.51328, -0.38268343, 0.76817775), (0.51328, -0.38268343, 0.76817775), (0.46193975, -0.55557024, 0.6913417), (0.31818965, -0.55557024, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.35355338, -0.38268343, 0.8535534), (0.31818965, -0.55557024, 0.76817775), (0.16221167, -0.55557024, 0.81549317), (0.18023996, -0.38268343, 0.90612745), (0.18023996, -0.38268343, 0.90612745), (0.16221167, -0.55557024, 0.81549317), (1.5273849e-16, -0.55557024, 0.8314696), (1.6971392e-16, -0.38268343, 0.9238795), (1.6971392e-16, -0.38268343, 0.9238795), (1.5273849e-16, -0.55557024, 0.8314696), (-0.16221167, -0.55557024, 0.81549317), (-0.18023996, -0.38268343, 0.90612745), (-0.18023996, -0.38268343, 0.90612745), (-0.16221167, -0.55557024, 0.81549317), (-0.31818965, -0.55557024, 0.76817775), (-0.35355338, -0.38268343, 0.8535534), (-0.35355338, -0.38268343, 0.8535534), (-0.31818965, -0.55557024, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.51328, -0.38268343, 0.76817775), (-0.51328, -0.38268343, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.5879378, -0.55557024, 0.5879378), (-0.6532815, -0.38268343, 0.6532815), (-0.6532815, -0.38268343, 0.6532815), (-0.5879378, -0.55557024, 0.5879378), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.38268343, 0.51328), (-0.76817775, -0.38268343, 0.51328), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.55557024, 0.31818965), (-0.8535534, -0.38268343, 0.35355338), (-0.8535534, -0.38268343, 0.35355338), (-0.76817775, -0.55557024, 0.31818965), (-0.81549317, -0.55557024, 0.16221167), (-0.90612745, -0.38268343, 0.18023996), (-0.90612745, -0.38268343, 0.18023996), (-0.81549317, -0.55557024, 0.16221167), (-0.8314696, -0.55557024, 0), (-0.9238795, -0.38268343, 0), (-0.8314696, -0.55557024, 0), (-0.70710677, -0.70710677, 0), (-0.69351995, -0.70710677, -0.13794969), (-0.81549317, -0.55557024, -0.16221167), (-0.81549317, -0.55557024, -0.16221167), (-0.69351995, -0.70710677, -0.13794969), (-0.6532815, -0.70710677, -0.27059805), (-0.76817775, -0.55557024, -0.31818965), (-0.76817775, -0.55557024, -0.31818965), (-0.6532815, -0.70710677, -0.27059805), (-0.5879378, -0.70710677, -0.39284748), (-0.6913417, -0.55557024, -0.46193975), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.70710677, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.5879378, -0.55557024, -0.5879378), (-0.5879378, -0.55557024, -0.5879378), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.70710677, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.46193975, -0.55557024, -0.6913417), (-0.39284748, -0.70710677, -0.5879378), (-0.27059805, -0.70710677, -0.6532815), (-0.31818965, -0.55557024, -0.76817775), (-0.31818965, -0.55557024, -0.76817775), (-0.27059805, -0.70710677, -0.6532815), (-0.13794969, -0.70710677, -0.69351995), (-0.16221167, -0.55557024, -0.81549317), (-0.16221167, -0.55557024, -0.81549317), (-0.13794969, -0.70710677, -0.69351995), (-4.3297803e-17, -0.70710677, -0.70710677), (-5.091283e-17, -0.55557024, -0.8314696), (-5.091283e-17, -0.55557024, -0.8314696), (-4.3297803e-17, -0.70710677, -0.70710677), (0.13794969, -0.70710677, -0.69351995), (0.16221167, -0.55557024, -0.81549317), (0.16221167, -0.55557024, -0.81549317), (0.13794969, -0.70710677, -0.69351995), (0.27059805, -0.70710677, -0.6532815), (0.31818965, -0.55557024, -0.76817775), (0.31818965, -0.55557024, -0.76817775), (0.27059805, -0.70710677, -0.6532815), (0.39284748, -0.70710677, -0.5879378), (0.46193975, -0.55557024, -0.6913417), (0.46193975, -0.55557024, -0.6913417), (0.39284748, -0.70710677, -0.5879378), (0.5, -0.70710677, -0.5), (0.5879378, -0.55557024, -0.5879378), (0.5879378, -0.55557024, -0.5879378), (0.5, -0.70710677, -0.5), (0.5879378, -0.70710677, -0.39284748), (0.6913417, -0.55557024, -0.46193975), (0.6913417, -0.55557024, -0.46193975), (0.5879378, -0.70710677, -0.39284748), (0.6532815, -0.70710677, -0.27059805), (0.76817775, -0.55557024, -0.31818965), (0.76817775, -0.55557024, -0.31818965), (0.6532815, -0.70710677, -0.27059805), (0.69351995, -0.70710677, -0.13794969), (0.81549317, -0.55557024, -0.16221167), (0.81549317, -0.55557024, -0.16221167), (0.69351995, -0.70710677, -0.13794969), (0.70710677, -0.70710677, -8.6595606e-17), (0.8314696, -0.55557024, -1.0182566e-16), (0.8314696, -0.55557024, -1.0182566e-16), (0.70710677, -0.70710677, -8.6595606e-17), (0.69351995, -0.70710677, 0.13794969), (0.81549317, -0.55557024, 0.16221167), (0.81549317, -0.55557024, 0.16221167), (0.69351995, -0.70710677, 0.13794969), (0.6532815, -0.70710677, 0.27059805), (0.76817775, -0.55557024, 0.31818965), (0.76817775, -0.55557024, 0.31818965), (0.6532815, -0.70710677, 0.27059805), (0.5879378, -0.70710677, 0.39284748), (0.6913417, -0.55557024, 0.46193975), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.70710677, 0.39284748), (0.5, -0.70710677, 0.5), (0.5879378, -0.55557024, 0.5879378), (0.5879378, -0.55557024, 0.5879378), (0.5, -0.70710677, 0.5), (0.39284748, -0.70710677, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.46193975, -0.55557024, 0.6913417), (0.39284748, -0.70710677, 0.5879378), (0.27059805, -0.70710677, 0.6532815), (0.31818965, -0.55557024, 0.76817775), (0.31818965, -0.55557024, 0.76817775), (0.27059805, -0.70710677, 0.6532815), (0.13794969, -0.70710677, 0.69351995), (0.16221167, -0.55557024, 0.81549317), (0.16221167, -0.55557024, 0.81549317), (0.13794969, -0.70710677, 0.69351995), (1.298934e-16, -0.70710677, 0.70710677), (1.5273849e-16, -0.55557024, 0.8314696), (1.5273849e-16, -0.55557024, 0.8314696), (1.298934e-16, -0.70710677, 0.70710677), (-0.13794969, -0.70710677, 0.69351995), (-0.16221167, -0.55557024, 0.81549317), (-0.16221167, -0.55557024, 0.81549317), (-0.13794969, -0.70710677, 0.69351995), (-0.27059805, -0.70710677, 0.6532815), (-0.31818965, -0.55557024, 0.76817775), (-0.31818965, -0.55557024, 0.76817775), (-0.27059805, -0.70710677, 0.6532815), (-0.39284748, -0.70710677, 0.5879378), (-0.46193975, -0.55557024, 0.6913417), (-0.46193975, -0.55557024, 0.6913417), (-0.39284748, -0.70710677, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.55557024, 0.5879378), (-0.5879378, -0.55557024, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.70710677, 0.39284748), (-0.6913417, -0.55557024, 0.46193975), (-0.6913417, -0.55557024, 0.46193975), (-0.5879378, -0.70710677, 0.39284748), (-0.6532815, -0.70710677, 0.27059805), (-0.76817775, -0.55557024, 0.31818965), (-0.76817775, -0.55557024, 0.31818965), (-0.6532815, -0.70710677, 0.27059805), (-0.69351995, -0.70710677, 0.13794969), (-0.81549317, -0.55557024, 0.16221167), (-0.81549317, -0.55557024, 0.16221167), (-0.69351995, -0.70710677, 0.13794969), (-0.70710677, -0.70710677, 0), (-0.8314696, -0.55557024, 0), (-0.70710677, -0.70710677, 0), (-0.55557024, -0.8314696, 0), (-0.5448951, -0.8314696, -0.108386375), (-0.69351995, -0.70710677, -0.13794969), (-0.69351995, -0.70710677, -0.13794969), (-0.5448951, -0.8314696, -0.108386375), (-0.51328, -0.8314696, -0.21260752), (-0.6532815, -0.70710677, -0.27059805), (-0.6532815, -0.70710677, -0.27059805), (-0.51328, -0.8314696, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.5879378, -0.70710677, -0.39284748), (-0.5879378, -0.70710677, -0.39284748), (-0.46193975, -0.8314696, -0.30865827), (-0.39284748, -0.8314696, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.8314696, -0.39284748), (-0.30865827, -0.8314696, -0.46193975), (-0.39284748, -0.70710677, -0.5879378), (-0.39284748, -0.70710677, -0.5879378), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.8314696, -0.51328), (-0.27059805, -0.70710677, -0.6532815), (-0.27059805, -0.70710677, -0.6532815), (-0.21260752, -0.8314696, -0.51328), (-0.108386375, -0.8314696, -0.5448951), (-0.13794969, -0.70710677, -0.69351995), (-0.13794969, -0.70710677, -0.69351995), (-0.108386375, -0.8314696, -0.5448951), (-3.4018865e-17, -0.8314696, -0.55557024), (-4.3297803e-17, -0.70710677, -0.70710677), (-4.3297803e-17, -0.70710677, -0.70710677), (-3.4018865e-17, -0.8314696, -0.55557024), (0.108386375, -0.8314696, -0.5448951), (0.13794969, -0.70710677, -0.69351995), (0.13794969, -0.70710677, -0.69351995), (0.108386375, -0.8314696, -0.5448951), (0.21260752, -0.8314696, -0.51328), (0.27059805, -0.70710677, -0.6532815), (0.27059805, -0.70710677, -0.6532815), (0.21260752, -0.8314696, -0.51328), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.70710677, -0.5879378), (0.39284748, -0.70710677, -0.5879378), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.8314696, -0.39284748), (0.5, -0.70710677, -0.5), (0.5, -0.70710677, -0.5), (0.39284748, -0.8314696, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.5879378, -0.70710677, -0.39284748), (0.5879378, -0.70710677, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.51328, -0.8314696, -0.21260752), (0.6532815, -0.70710677, -0.27059805), (0.6532815, -0.70710677, -0.27059805), (0.51328, -0.8314696, -0.21260752), (0.5448951, -0.8314696, -0.108386375), (0.69351995, -0.70710677, -0.13794969), (0.69351995, -0.70710677, -0.13794969), (0.5448951, -0.8314696, -0.108386375), (0.55557024, -0.8314696, -6.803773e-17), (0.70710677, -0.70710677, -8.6595606e-17), (0.70710677, -0.70710677, -8.6595606e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.5448951, -0.8314696, 0.108386375), (0.69351995, -0.70710677, 0.13794969), (0.69351995, -0.70710677, 0.13794969), (0.5448951, -0.8314696, 0.108386375), (0.51328, -0.8314696, 0.21260752), (0.6532815, -0.70710677, 0.27059805), (0.6532815, -0.70710677, 0.27059805), (0.51328, -0.8314696, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.5879378, -0.70710677, 0.39284748), (0.5879378, -0.70710677, 0.39284748), (0.46193975, -0.8314696, 0.30865827), (0.39284748, -0.8314696, 0.39284748), (0.5, -0.70710677, 0.5), (0.5, -0.70710677, 0.5), (0.39284748, -0.8314696, 0.39284748), (0.30865827, -0.8314696, 0.46193975), (0.39284748, -0.70710677, 0.5879378), (0.39284748, -0.70710677, 0.5879378), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.8314696, 0.51328), (0.27059805, -0.70710677, 0.6532815), (0.27059805, -0.70710677, 0.6532815), (0.21260752, -0.8314696, 0.51328), (0.108386375, -0.8314696, 0.5448951), (0.13794969, -0.70710677, 0.69351995), (0.13794969, -0.70710677, 0.69351995), (0.108386375, -0.8314696, 0.5448951), (1.020566e-16, -0.8314696, 0.55557024), (1.298934e-16, -0.70710677, 0.70710677), (1.298934e-16, -0.70710677, 0.70710677), (1.020566e-16, -0.8314696, 0.55557024), (-0.108386375, -0.8314696, 0.5448951), (-0.13794969, -0.70710677, 0.69351995), (-0.13794969, -0.70710677, 0.69351995), (-0.108386375, -0.8314696, 0.5448951), (-0.21260752, -0.8314696, 0.51328), (-0.27059805, -0.70710677, 0.6532815), (-0.27059805, -0.70710677, 0.6532815), (-0.21260752, -0.8314696, 0.51328), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.70710677, 0.5879378), (-0.39284748, -0.70710677, 0.5879378), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.8314696, 0.39284748), (-0.5, -0.70710677, 0.5), (-0.5, -0.70710677, 0.5), (-0.39284748, -0.8314696, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.5879378, -0.70710677, 0.39284748), (-0.5879378, -0.70710677, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.51328, -0.8314696, 0.21260752), (-0.6532815, -0.70710677, 0.27059805), (-0.6532815, -0.70710677, 0.27059805), (-0.51328, -0.8314696, 0.21260752), (-0.5448951, -0.8314696, 0.108386375), (-0.69351995, -0.70710677, 0.13794969), (-0.69351995, -0.70710677, 0.13794969), (-0.5448951, -0.8314696, 0.108386375), (-0.55557024, -0.8314696, 0), (-0.70710677, -0.70710677, 0), (-0.55557024, -0.8314696, 0), (-0.38268343, -0.9238795, 0), (-0.37533027, -0.9238795, -0.074657835), (-0.5448951, -0.8314696, -0.108386375), (-0.5448951, -0.8314696, -0.108386375), (-0.37533027, -0.9238795, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.51328, -0.8314696, -0.21260752), (-0.51328, -0.8314696, -0.21260752), (-0.35355338, -0.9238795, -0.14644662), (-0.31818965, -0.9238795, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.46193975, -0.8314696, -0.30865827), (-0.31818965, -0.9238795, -0.21260752), (-0.27059805, -0.9238795, -0.27059805), (-0.39284748, -0.8314696, -0.39284748), (-0.39284748, -0.8314696, -0.39284748), (-0.27059805, -0.9238795, -0.27059805), (-0.21260752, -0.9238795, -0.31818965), (-0.30865827, -0.8314696, -0.46193975), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.9238795, -0.31818965), (-0.14644662, -0.9238795, -0.35355338), (-0.21260752, -0.8314696, -0.51328), (-0.21260752, -0.8314696, -0.51328), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.9238795, -0.37533027), (-0.108386375, -0.8314696, -0.5448951), (-0.108386375, -0.8314696, -0.5448951), (-0.074657835, -0.9238795, -0.37533027), (-2.3432602e-17, -0.9238795, -0.38268343), (-3.4018865e-17, -0.8314696, -0.55557024), (-3.4018865e-17, -0.8314696, -0.55557024), (-2.3432602e-17, -0.9238795, -0.38268343), (0.074657835, -0.9238795, -0.37533027), (0.108386375, -0.8314696, -0.5448951), (0.108386375, -0.8314696, -0.5448951), (0.074657835, -0.9238795, -0.37533027), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.8314696, -0.51328), (0.21260752, -0.8314696, -0.51328), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.9238795, -0.31818965), (0.30865827, -0.8314696, -0.46193975), (0.30865827, -0.8314696, -0.46193975), (0.21260752, -0.9238795, -0.31818965), (0.27059805, -0.9238795, -0.27059805), (0.39284748, -0.8314696, -0.39284748), (0.39284748, -0.8314696, -0.39284748), (0.27059805, -0.9238795, -0.27059805), (0.31818965, -0.9238795, -0.21260752), (0.46193975, -0.8314696, -0.30865827), (0.46193975, -0.8314696, -0.30865827), (0.31818965, -0.9238795, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.51328, -0.8314696, -0.21260752), (0.51328, -0.8314696, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.37533027, -0.9238795, -0.074657835), (0.5448951, -0.8314696, -0.108386375), (0.5448951, -0.8314696, -0.108386375), (0.37533027, -0.9238795, -0.074657835), (0.38268343, -0.9238795, -4.6865205e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.37533027, -0.9238795, 0.074657835), (0.5448951, -0.8314696, 0.108386375), (0.5448951, -0.8314696, 0.108386375), (0.37533027, -0.9238795, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.51328, -0.8314696, 0.21260752), (0.51328, -0.8314696, 0.21260752), (0.35355338, -0.9238795, 0.14644662), (0.31818965, -0.9238795, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.46193975, -0.8314696, 0.30865827), (0.31818965, -0.9238795, 0.21260752), (0.27059805, -0.9238795, 0.27059805), (0.39284748, -0.8314696, 0.39284748), (0.39284748, -0.8314696, 0.39284748), (0.27059805, -0.9238795, 0.27059805), (0.21260752, -0.9238795, 0.31818965), (0.30865827, -0.8314696, 0.46193975), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.9238795, 0.31818965), (0.14644662, -0.9238795, 0.35355338), (0.21260752, -0.8314696, 0.51328), (0.21260752, -0.8314696, 0.51328), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.9238795, 0.37533027), (0.108386375, -0.8314696, 0.5448951), (0.108386375, -0.8314696, 0.5448951), (0.074657835, -0.9238795, 0.37533027), (7.0297805e-17, -0.9238795, 0.38268343), (1.020566e-16, -0.8314696, 0.55557024), (1.020566e-16, -0.8314696, 0.55557024), (7.0297805e-17, -0.9238795, 0.38268343), (-0.074657835, -0.9238795, 0.37533027), (-0.108386375, -0.8314696, 0.5448951), (-0.108386375, -0.8314696, 0.5448951), (-0.074657835, -0.9238795, 0.37533027), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.8314696, 0.51328), (-0.21260752, -0.8314696, 0.51328), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.9238795, 0.31818965), (-0.30865827, -0.8314696, 0.46193975), (-0.30865827, -0.8314696, 0.46193975), (-0.21260752, -0.9238795, 0.31818965), (-0.27059805, -0.9238795, 0.27059805), (-0.39284748, -0.8314696, 0.39284748), (-0.39284748, -0.8314696, 0.39284748), (-0.27059805, -0.9238795, 0.27059805), (-0.31818965, -0.9238795, 0.21260752), (-0.46193975, -0.8314696, 0.30865827), (-0.46193975, -0.8314696, 0.30865827), (-0.31818965, -0.9238795, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.51328, -0.8314696, 0.21260752), (-0.51328, -0.8314696, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.37533027, -0.9238795, 0.074657835), (-0.5448951, -0.8314696, 0.108386375), (-0.5448951, -0.8314696, 0.108386375), (-0.37533027, -0.9238795, 0.074657835), (-0.38268343, -0.9238795, 0), (-0.55557024, -0.8314696, 0), (-0.38268343, -0.9238795, 0), (-0.19509032, -0.98078525, 0), (-0.19134171, -0.98078525, -0.038060233), (-0.37533027, -0.9238795, -0.074657835), (-0.37533027, -0.9238795, -0.074657835), (-0.19134171, -0.98078525, -0.038060233), (-0.18023996, -0.98078525, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.35355338, -0.9238795, -0.14644662), (-0.18023996, -0.98078525, -0.074657835), (-0.16221167, -0.98078525, -0.108386375), (-0.31818965, -0.9238795, -0.21260752), (-0.31818965, -0.9238795, -0.21260752), (-0.16221167, -0.98078525, -0.108386375), (-0.13794969, -0.98078525, -0.13794969), (-0.27059805, -0.9238795, -0.27059805), (-0.27059805, -0.9238795, -0.27059805), (-0.13794969, -0.98078525, -0.13794969), (-0.108386375, -0.98078525, -0.16221167), (-0.21260752, -0.9238795, -0.31818965), (-0.21260752, -0.9238795, -0.31818965), (-0.108386375, -0.98078525, -0.16221167), (-0.074657835, -0.98078525, -0.18023996), (-0.14644662, -0.9238795, -0.35355338), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.98078525, -0.18023996), (-0.038060233, -0.98078525, -0.19134171), (-0.074657835, -0.9238795, -0.37533027), (-0.074657835, -0.9238795, -0.37533027), (-0.038060233, -0.98078525, -0.19134171), (-1.1945837e-17, -0.98078525, -0.19509032), (-2.3432602e-17, -0.9238795, -0.38268343), (-2.3432602e-17, -0.9238795, -0.38268343), (-1.1945837e-17, -0.98078525, -0.19509032), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.9238795, -0.37533027), (0.074657835, -0.9238795, -0.37533027), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.98078525, -0.18023996), (0.14644662, -0.9238795, -0.35355338), (0.14644662, -0.9238795, -0.35355338), (0.074657835, -0.98078525, -0.18023996), (0.108386375, -0.98078525, -0.16221167), (0.21260752, -0.9238795, -0.31818965), (0.21260752, -0.9238795, -0.31818965), (0.108386375, -0.98078525, -0.16221167), (0.13794969, -0.98078525, -0.13794969), (0.27059805, -0.9238795, -0.27059805), (0.27059805, -0.9238795, -0.27059805), (0.13794969, -0.98078525, -0.13794969), (0.16221167, -0.98078525, -0.108386375), (0.31818965, -0.9238795, -0.21260752), (0.31818965, -0.9238795, -0.21260752), (0.16221167, -0.98078525, -0.108386375), (0.18023996, -0.98078525, -0.074657835), (0.35355338, -0.9238795, -0.14644662), (0.35355338, -0.9238795, -0.14644662), (0.18023996, -0.98078525, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.37533027, -0.9238795, -0.074657835), (0.37533027, -0.9238795, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.19509032, -0.98078525, -2.3891674e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.19509032, -0.98078525, -2.3891674e-17), (0.19134171, -0.98078525, 0.038060233), (0.37533027, -0.9238795, 0.074657835), (0.37533027, -0.9238795, 0.074657835), (0.19134171, -0.98078525, 0.038060233), (0.18023996, -0.98078525, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.35355338, -0.9238795, 0.14644662), (0.18023996, -0.98078525, 0.074657835), (0.16221167, -0.98078525, 0.108386375), (0.31818965, -0.9238795, 0.21260752), (0.31818965, -0.9238795, 0.21260752), (0.16221167, -0.98078525, 0.108386375), (0.13794969, -0.98078525, 0.13794969), (0.27059805, -0.9238795, 0.27059805), (0.27059805, -0.9238795, 0.27059805), (0.13794969, -0.98078525, 0.13794969), (0.108386375, -0.98078525, 0.16221167), (0.21260752, -0.9238795, 0.31818965), (0.21260752, -0.9238795, 0.31818965), (0.108386375, -0.98078525, 0.16221167), (0.074657835, -0.98078525, 0.18023996), (0.14644662, -0.9238795, 0.35355338), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.98078525, 0.18023996), (0.038060233, -0.98078525, 0.19134171), (0.074657835, -0.9238795, 0.37533027), (0.074657835, -0.9238795, 0.37533027), (0.038060233, -0.98078525, 0.19134171), (3.583751e-17, -0.98078525, 0.19509032), (7.0297805e-17, -0.9238795, 0.38268343), (7.0297805e-17, -0.9238795, 0.38268343), (3.583751e-17, -0.98078525, 0.19509032), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.9238795, 0.37533027), (-0.074657835, -0.9238795, 0.37533027), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.98078525, 0.18023996), (-0.14644662, -0.9238795, 0.35355338), (-0.14644662, -0.9238795, 0.35355338), (-0.074657835, -0.98078525, 0.18023996), (-0.108386375, -0.98078525, 0.16221167), (-0.21260752, -0.9238795, 0.31818965), (-0.21260752, -0.9238795, 0.31818965), (-0.108386375, -0.98078525, 0.16221167), (-0.13794969, -0.98078525, 0.13794969), (-0.27059805, -0.9238795, 0.27059805), (-0.27059805, -0.9238795, 0.27059805), (-0.13794969, -0.98078525, 0.13794969), (-0.16221167, -0.98078525, 0.108386375), (-0.31818965, -0.9238795, 0.21260752), (-0.31818965, -0.9238795, 0.21260752), (-0.16221167, -0.98078525, 0.108386375), (-0.18023996, -0.98078525, 0.074657835), (-0.35355338, -0.9238795, 0.14644662), (-0.35355338, -0.9238795, 0.14644662), (-0.18023996, -0.98078525, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.37533027, -0.9238795, 0.074657835), (-0.37533027, -0.9238795, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.19509032, -0.98078525, 0), (-0.38268343, -0.9238795, 0), (-0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (-2.220446e-16, -1, -5.551115e-17), (-0.19134171, -0.98078525, -0.038060233), (-0.19134171, -0.98078525, -0.038060233), (-2.220446e-16, -1, -5.551115e-17), (-2.220446e-16, -1, -1.110223e-16), (-0.18023996, -0.98078525, -0.074657835), (-0.18023996, -0.98078525, -0.074657835), (-2.220446e-16, -1, -1.110223e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.16221167, -0.98078525, -0.108386375), (-0.16221167, -0.98078525, -0.108386375), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.13794969, -0.98078525, -0.13794969), (-0.13794969, -0.98078525, -0.13794969), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.108386375, -0.98078525, -0.16221167), (-0.108386375, -0.98078525, -0.16221167), (-2.220446e-16, -1, -2.220446e-16), (-1.110223e-16, -1, -2.220446e-16), (-0.074657835, -0.98078525, -0.18023996), (-0.074657835, -0.98078525, -0.18023996), (-1.110223e-16, -1, -2.220446e-16), (-5.551115e-17, -1, -2.220446e-16), (-0.038060233, -0.98078525, -0.19134171), (-0.038060233, -0.98078525, -0.19134171), (-5.551115e-17, -1, -2.220446e-16), (-2.4651903e-32, -1, -2.220446e-16), (-1.1945837e-17, -0.98078525, -0.19509032), (-1.1945837e-17, -0.98078525, -0.19509032), (-2.4651903e-32, -1, -2.220446e-16), (5.551115e-17, -1, -2.220446e-16), (0.038060233, -0.98078525, -0.19134171), (0.038060233, -0.98078525, -0.19134171), (5.551115e-17, -1, -2.220446e-16), (1.110223e-16, -1, -2.220446e-16), (0.074657835, -0.98078525, -0.18023996), (0.074657835, -0.98078525, -0.18023996), (1.110223e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.108386375, -0.98078525, -0.16221167), (0.108386375, -0.98078525, -0.16221167), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.13794969, -0.98078525, -0.13794969), (0.13794969, -0.98078525, -0.13794969), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.16221167, -0.98078525, -0.108386375), (0.16221167, -0.98078525, -0.108386375), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -1.110223e-16), (0.18023996, -0.98078525, -0.074657835), (0.18023996, -0.98078525, -0.074657835), (2.220446e-16, -1, -1.110223e-16), (2.220446e-16, -1, -5.551115e-17), (0.19134171, -0.98078525, -0.038060233), (0.19134171, -0.98078525, -0.038060233), (2.220446e-16, -1, -5.551115e-17), (2.220446e-16, -1, -4.9303807e-32), (0.19509032, -0.98078525, -2.3891674e-17), (0.19509032, -0.98078525, -2.3891674e-17), (2.220446e-16, -1, -4.9303807e-32), (2.220446e-16, -1, 5.551115e-17), (0.19134171, -0.98078525, 0.038060233), (0.19134171, -0.98078525, 0.038060233), (2.220446e-16, -1, 5.551115e-17), (2.220446e-16, -1, 1.110223e-16), (0.18023996, -0.98078525, 0.074657835), (0.18023996, -0.98078525, 0.074657835), (2.220446e-16, -1, 1.110223e-16), (2.220446e-16, -1, 2.220446e-16), (0.16221167, -0.98078525, 0.108386375), (0.16221167, -0.98078525, 0.108386375), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (0.13794969, -0.98078525, 0.13794969), (0.13794969, -0.98078525, 0.13794969), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (0.108386375, -0.98078525, 0.16221167), (0.108386375, -0.98078525, 0.16221167), (2.220446e-16, -1, 2.220446e-16), (1.110223e-16, -1, 2.220446e-16), (0.074657835, -0.98078525, 0.18023996), (0.074657835, -0.98078525, 0.18023996), (1.110223e-16, -1, 2.220446e-16), (5.551115e-17, -1, 2.220446e-16), (0.038060233, -0.98078525, 0.19134171), (0.038060233, -0.98078525, 0.19134171), (5.551115e-17, -1, 2.220446e-16), (4.9303807e-32, -1, 2.220446e-16), (3.583751e-17, -0.98078525, 0.19509032), (3.583751e-17, -0.98078525, 0.19509032), (4.9303807e-32, -1, 2.220446e-16), (-5.551115e-17, -1, 2.220446e-16), (-0.038060233, -0.98078525, 0.19134171), (-0.038060233, -0.98078525, 0.19134171), (-5.551115e-17, -1, 2.220446e-16), (-1.110223e-16, -1, 2.220446e-16), (-0.074657835, -0.98078525, 0.18023996), (-0.074657835, -0.98078525, 0.18023996), (-1.110223e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.108386375, -0.98078525, 0.16221167), (-0.108386375, -0.98078525, 0.16221167), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.13794969, -0.98078525, 0.13794969), (-0.13794969, -0.98078525, 0.13794969), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.16221167, -0.98078525, 0.108386375), (-0.16221167, -0.98078525, 0.108386375), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 1.110223e-16), (-0.18023996, -0.98078525, 0.074657835), (-0.18023996, -0.98078525, 0.074657835), (-2.220446e-16, -1, 1.110223e-16), (-2.220446e-16, -1, 5.551115e-17), (-0.19134171, -0.98078525, 0.038060233), (-0.19134171, -0.98078525, 0.038060233), (-2.220446e-16, -1, 5.551115e-17), (-2.220446e-16, -1, 0), (-0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (0.19509032, -0.98078525, 0), (0.19134171, -0.98078525, 0.038060233), (-2.220446e-16, -1, -5.551115e-17), (-2.220446e-16, -1, -5.551115e-17), (0.19134171, -0.98078525, 0.038060233), (0.18023996, -0.98078525, 0.074657835), (-2.220446e-16, -1, -1.110223e-16), (-2.220446e-16, -1, -1.110223e-16), (0.18023996, -0.98078525, 0.074657835), (0.16221167, -0.98078525, 0.108386375), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.16221167, -0.98078525, 0.108386375), (0.13794969, -0.98078525, 0.13794969), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.13794969, -0.98078525, 0.13794969), (0.108386375, -0.98078525, 0.16221167), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.108386375, -0.98078525, 0.16221167), (0.074657835, -0.98078525, 0.18023996), (-1.110223e-16, -1, -2.220446e-16), (-1.110223e-16, -1, -2.220446e-16), (0.074657835, -0.98078525, 0.18023996), (0.038060233, -0.98078525, 0.19134171), (-5.551115e-17, -1, -2.220446e-16), (-5.551115e-17, -1, -2.220446e-16), (0.038060233, -0.98078525, 0.19134171), (1.1945837e-17, -0.98078525, 0.19509032), (-2.4651903e-32, -1, -2.220446e-16), (-2.4651903e-32, -1, -2.220446e-16), (1.1945837e-17, -0.98078525, 0.19509032), (-0.038060233, -0.98078525, 0.19134171), (5.551115e-17, -1, -2.220446e-16), (5.551115e-17, -1, -2.220446e-16), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.98078525, 0.18023996), (1.110223e-16, -1, -2.220446e-16), (1.110223e-16, -1, -2.220446e-16), (-0.074657835, -0.98078525, 0.18023996), (-0.108386375, -0.98078525, 0.16221167), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.108386375, -0.98078525, 0.16221167), (-0.13794969, -0.98078525, 0.13794969), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.13794969, -0.98078525, 0.13794969), (-0.16221167, -0.98078525, 0.108386375), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.16221167, -0.98078525, 0.108386375), (-0.18023996, -0.98078525, 0.074657835), (2.220446e-16, -1, -1.110223e-16), (2.220446e-16, -1, -1.110223e-16), (-0.18023996, -0.98078525, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (2.220446e-16, -1, -5.551115e-17), (2.220446e-16, -1, -5.551115e-17), (-0.19134171, -0.98078525, 0.038060233), (-0.19509032, -0.98078525, 2.3891674e-17), (2.220446e-16, -1, -4.9303807e-32), (2.220446e-16, -1, -4.9303807e-32), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.19134171, -0.98078525, -0.038060233), (2.220446e-16, -1, 5.551115e-17), (2.220446e-16, -1, 5.551115e-17), (-0.19134171, -0.98078525, -0.038060233), (-0.18023996, -0.98078525, -0.074657835), (2.220446e-16, -1, 1.110223e-16), (2.220446e-16, -1, 1.110223e-16), (-0.18023996, -0.98078525, -0.074657835), (-0.16221167, -0.98078525, -0.108386375), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.16221167, -0.98078525, -0.108386375), (-0.13794969, -0.98078525, -0.13794969), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.13794969, -0.98078525, -0.13794969), (-0.108386375, -0.98078525, -0.16221167), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.108386375, -0.98078525, -0.16221167), (-0.074657835, -0.98078525, -0.18023996), (1.110223e-16, -1, 2.220446e-16), (1.110223e-16, -1, 2.220446e-16), (-0.074657835, -0.98078525, -0.18023996), (-0.038060233, -0.98078525, -0.19134171), (5.551115e-17, -1, 2.220446e-16), (5.551115e-17, -1, 2.220446e-16), (-0.038060233, -0.98078525, -0.19134171), (-3.583751e-17, -0.98078525, -0.19509032), (4.9303807e-32, -1, 2.220446e-16), (4.9303807e-32, -1, 2.220446e-16), (-3.583751e-17, -0.98078525, -0.19509032), (0.038060233, -0.98078525, -0.19134171), (-5.551115e-17, -1, 2.220446e-16), (-5.551115e-17, -1, 2.220446e-16), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.98078525, -0.18023996), (-1.110223e-16, -1, 2.220446e-16), (-1.110223e-16, -1, 2.220446e-16), (0.074657835, -0.98078525, -0.18023996), (0.108386375, -0.98078525, -0.16221167), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.108386375, -0.98078525, -0.16221167), (0.13794969, -0.98078525, -0.13794969), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.13794969, -0.98078525, -0.13794969), (0.16221167, -0.98078525, -0.108386375), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.16221167, -0.98078525, -0.108386375), (0.18023996, -0.98078525, -0.074657835), (-2.220446e-16, -1, 1.110223e-16), (-2.220446e-16, -1, 1.110223e-16), (0.18023996, -0.98078525, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (-2.220446e-16, -1, 5.551115e-17), (-2.220446e-16, -1, 5.551115e-17), (0.19134171, -0.98078525, -0.038060233), (0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (0.19509032, -0.98078525, 0), (0.38268343, -0.9238795, 0), (0.37533027, -0.9238795, 0.074657835), (0.19134171, -0.98078525, 0.038060233), (0.19134171, -0.98078525, 0.038060233), (0.37533027, -0.9238795, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.18023996, -0.98078525, 0.074657835), (0.18023996, -0.98078525, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.31818965, -0.9238795, 0.21260752), (0.16221167, -0.98078525, 0.108386375), (0.16221167, -0.98078525, 0.108386375), (0.31818965, -0.9238795, 0.21260752), (0.27059805, -0.9238795, 0.27059805), (0.13794969, -0.98078525, 0.13794969), (0.13794969, -0.98078525, 0.13794969), (0.27059805, -0.9238795, 0.27059805), (0.21260752, -0.9238795, 0.31818965), (0.108386375, -0.98078525, 0.16221167), (0.108386375, -0.98078525, 0.16221167), (0.21260752, -0.9238795, 0.31818965), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.98078525, 0.18023996), (0.074657835, -0.98078525, 0.18023996), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.9238795, 0.37533027), (0.038060233, -0.98078525, 0.19134171), (0.038060233, -0.98078525, 0.19134171), (0.074657835, -0.9238795, 0.37533027), (2.3432602e-17, -0.9238795, 0.38268343), (1.1945837e-17, -0.98078525, 0.19509032), (1.1945837e-17, -0.98078525, 0.19509032), (2.3432602e-17, -0.9238795, 0.38268343), (-0.074657835, -0.9238795, 0.37533027), (-0.038060233, -0.98078525, 0.19134171), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.9238795, 0.37533027), (-0.14644662, -0.9238795, 0.35355338), (-0.074657835, -0.98078525, 0.18023996), (-0.074657835, -0.98078525, 0.18023996), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.9238795, 0.31818965), (-0.108386375, -0.98078525, 0.16221167), (-0.108386375, -0.98078525, 0.16221167), (-0.21260752, -0.9238795, 0.31818965), (-0.27059805, -0.9238795, 0.27059805), (-0.13794969, -0.98078525, 0.13794969), (-0.13794969, -0.98078525, 0.13794969), (-0.27059805, -0.9238795, 0.27059805), (-0.31818965, -0.9238795, 0.21260752), (-0.16221167, -0.98078525, 0.108386375), (-0.16221167, -0.98078525, 0.108386375), (-0.31818965, -0.9238795, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.18023996, -0.98078525, 0.074657835), (-0.18023996, -0.98078525, 0.074657835), (-0.35355338, -0.9238795, 0.14644662), (-0.37533027, -0.9238795, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.19134171, -0.98078525, 0.038060233), (-0.37533027, -0.9238795, 0.074657835), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.37533027, -0.9238795, -0.074657835), (-0.19134171, -0.98078525, -0.038060233), (-0.19134171, -0.98078525, -0.038060233), (-0.37533027, -0.9238795, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.18023996, -0.98078525, -0.074657835), (-0.18023996, -0.98078525, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.31818965, -0.9238795, -0.21260752), (-0.16221167, -0.98078525, -0.108386375), (-0.16221167, -0.98078525, -0.108386375), (-0.31818965, -0.9238795, -0.21260752), (-0.27059805, -0.9238795, -0.27059805), (-0.13794969, -0.98078525, -0.13794969), (-0.13794969, -0.98078525, -0.13794969), (-0.27059805, -0.9238795, -0.27059805), (-0.21260752, -0.9238795, -0.31818965), (-0.108386375, -0.98078525, -0.16221167), (-0.108386375, -0.98078525, -0.16221167), (-0.21260752, -0.9238795, -0.31818965), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.98078525, -0.18023996), (-0.074657835, -0.98078525, -0.18023996), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.9238795, -0.37533027), (-0.038060233, -0.98078525, -0.19134171), (-0.038060233, -0.98078525, -0.19134171), (-0.074657835, -0.9238795, -0.37533027), (-7.0297805e-17, -0.9238795, -0.38268343), (-3.583751e-17, -0.98078525, -0.19509032), (-3.583751e-17, -0.98078525, -0.19509032), (-7.0297805e-17, -0.9238795, -0.38268343), (0.074657835, -0.9238795, -0.37533027), (0.038060233, -0.98078525, -0.19134171), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.9238795, -0.37533027), (0.14644662, -0.9238795, -0.35355338), (0.074657835, -0.98078525, -0.18023996), (0.074657835, -0.98078525, -0.18023996), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.9238795, -0.31818965), (0.108386375, -0.98078525, -0.16221167), (0.108386375, -0.98078525, -0.16221167), (0.21260752, -0.9238795, -0.31818965), (0.27059805, -0.9238795, -0.27059805), (0.13794969, -0.98078525, -0.13794969), (0.13794969, -0.98078525, -0.13794969), (0.27059805, -0.9238795, -0.27059805), (0.31818965, -0.9238795, -0.21260752), (0.16221167, -0.98078525, -0.108386375), (0.16221167, -0.98078525, -0.108386375), (0.31818965, -0.9238795, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.18023996, -0.98078525, -0.074657835), (0.18023996, -0.98078525, -0.074657835), (0.35355338, -0.9238795, -0.14644662), (0.37533027, -0.9238795, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.19134171, -0.98078525, -0.038060233), (0.37533027, -0.9238795, -0.074657835), (0.38268343, -0.9238795, 0), (0.19509032, -0.98078525, 0), (0.38268343, -0.9238795, 0), (0.55557024, -0.8314696, 0), (0.5448951, -0.8314696, 0.108386375), (0.37533027, -0.9238795, 0.074657835), (0.37533027, -0.9238795, 0.074657835), (0.5448951, -0.8314696, 0.108386375), (0.51328, -0.8314696, 0.21260752), (0.35355338, -0.9238795, 0.14644662), (0.35355338, -0.9238795, 0.14644662), (0.51328, -0.8314696, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.31818965, -0.9238795, 0.21260752), (0.31818965, -0.9238795, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.39284748, -0.8314696, 0.39284748), (0.27059805, -0.9238795, 0.27059805), (0.27059805, -0.9238795, 0.27059805), (0.39284748, -0.8314696, 0.39284748), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.9238795, 0.31818965), (0.21260752, -0.9238795, 0.31818965), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.8314696, 0.51328), (0.14644662, -0.9238795, 0.35355338), (0.14644662, -0.9238795, 0.35355338), (0.21260752, -0.8314696, 0.51328), (0.108386375, -0.8314696, 0.5448951), (0.074657835, -0.9238795, 0.37533027), (0.074657835, -0.9238795, 0.37533027), (0.108386375, -0.8314696, 0.5448951), (3.4018865e-17, -0.8314696, 0.55557024), (2.3432602e-17, -0.9238795, 0.38268343), (2.3432602e-17, -0.9238795, 0.38268343), (3.4018865e-17, -0.8314696, 0.55557024), (-0.108386375, -0.8314696, 0.5448951), (-0.074657835, -0.9238795, 0.37533027), (-0.074657835, -0.9238795, 0.37533027), (-0.108386375, -0.8314696, 0.5448951), (-0.21260752, -0.8314696, 0.51328), (-0.14644662, -0.9238795, 0.35355338), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.8314696, 0.51328), (-0.30865827, -0.8314696, 0.46193975), (-0.21260752, -0.9238795, 0.31818965), (-0.21260752, -0.9238795, 0.31818965), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.8314696, 0.39284748), (-0.27059805, -0.9238795, 0.27059805), (-0.27059805, -0.9238795, 0.27059805), (-0.39284748, -0.8314696, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.31818965, -0.9238795, 0.21260752), (-0.31818965, -0.9238795, 0.21260752), (-0.46193975, -0.8314696, 0.30865827), (-0.51328, -0.8314696, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.35355338, -0.9238795, 0.14644662), (-0.51328, -0.8314696, 0.21260752), (-0.5448951, -0.8314696, 0.108386375), (-0.37533027, -0.9238795, 0.074657835), (-0.37533027, -0.9238795, 0.074657835), (-0.5448951, -0.8314696, 0.108386375), (-0.55557024, -0.8314696, 6.803773e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.5448951, -0.8314696, -0.108386375), (-0.37533027, -0.9238795, -0.074657835), (-0.37533027, -0.9238795, -0.074657835), (-0.5448951, -0.8314696, -0.108386375), (-0.51328, -0.8314696, -0.21260752), (-0.35355338, -0.9238795, -0.14644662), (-0.35355338, -0.9238795, -0.14644662), (-0.51328, -0.8314696, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.31818965, -0.9238795, -0.21260752), (-0.31818965, -0.9238795, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.39284748, -0.8314696, -0.39284748), (-0.27059805, -0.9238795, -0.27059805), (-0.27059805, -0.9238795, -0.27059805), (-0.39284748, -0.8314696, -0.39284748), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.9238795, -0.31818965), (-0.21260752, -0.9238795, -0.31818965), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.8314696, -0.51328), (-0.14644662, -0.9238795, -0.35355338), (-0.14644662, -0.9238795, -0.35355338), (-0.21260752, -0.8314696, -0.51328), (-0.108386375, -0.8314696, -0.5448951), (-0.074657835, -0.9238795, -0.37533027), (-0.074657835, -0.9238795, -0.37533027), (-0.108386375, -0.8314696, -0.5448951), (-1.020566e-16, -0.8314696, -0.55557024), (-7.0297805e-17, -0.9238795, -0.38268343), (-7.0297805e-17, -0.9238795, -0.38268343), (-1.020566e-16, -0.8314696, -0.55557024), (0.108386375, -0.8314696, -0.5448951), (0.074657835, -0.9238795, -0.37533027), (0.074657835, -0.9238795, -0.37533027), (0.108386375, -0.8314696, -0.5448951), (0.21260752, -0.8314696, -0.51328), (0.14644662, -0.9238795, -0.35355338), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.8314696, -0.51328), (0.30865827, -0.8314696, -0.46193975), (0.21260752, -0.9238795, -0.31818965), (0.21260752, -0.9238795, -0.31818965), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.8314696, -0.39284748), (0.27059805, -0.9238795, -0.27059805), (0.27059805, -0.9238795, -0.27059805), (0.39284748, -0.8314696, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.31818965, -0.9238795, -0.21260752), (0.31818965, -0.9238795, -0.21260752), (0.46193975, -0.8314696, -0.30865827), (0.51328, -0.8314696, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.35355338, -0.9238795, -0.14644662), (0.51328, -0.8314696, -0.21260752), (0.5448951, -0.8314696, -0.108386375), (0.37533027, -0.9238795, -0.074657835), (0.37533027, -0.9238795, -0.074657835), (0.5448951, -0.8314696, -0.108386375), (0.55557024, -0.8314696, 0), (0.38268343, -0.9238795, 0), (0.55557024, -0.8314696, 0), (0.70710677, -0.70710677, 0), (0.69351995, -0.70710677, 0.13794969), (0.5448951, -0.8314696, 0.108386375), (0.5448951, -0.8314696, 0.108386375), (0.69351995, -0.70710677, 0.13794969), (0.6532815, -0.70710677, 0.27059805), (0.51328, -0.8314696, 0.21260752), (0.51328, -0.8314696, 0.21260752), (0.6532815, -0.70710677, 0.27059805), (0.5879378, -0.70710677, 0.39284748), (0.46193975, -0.8314696, 0.30865827), (0.46193975, -0.8314696, 0.30865827), (0.5879378, -0.70710677, 0.39284748), (0.5, -0.70710677, 0.5), (0.39284748, -0.8314696, 0.39284748), (0.39284748, -0.8314696, 0.39284748), (0.5, -0.70710677, 0.5), (0.39284748, -0.70710677, 0.5879378), (0.30865827, -0.8314696, 0.46193975), (0.30865827, -0.8314696, 0.46193975), (0.39284748, -0.70710677, 0.5879378), (0.27059805, -0.70710677, 0.6532815), (0.21260752, -0.8314696, 0.51328), (0.21260752, -0.8314696, 0.51328), (0.27059805, -0.70710677, 0.6532815), (0.13794969, -0.70710677, 0.69351995), (0.108386375, -0.8314696, 0.5448951), (0.108386375, -0.8314696, 0.5448951), (0.13794969, -0.70710677, 0.69351995), (4.3297803e-17, -0.70710677, 0.70710677), (3.4018865e-17, -0.8314696, 0.55557024), (3.4018865e-17, -0.8314696, 0.55557024), (4.3297803e-17, -0.70710677, 0.70710677), (-0.13794969, -0.70710677, 0.69351995), (-0.108386375, -0.8314696, 0.5448951), (-0.108386375, -0.8314696, 0.5448951), (-0.13794969, -0.70710677, 0.69351995), (-0.27059805, -0.70710677, 0.6532815), (-0.21260752, -0.8314696, 0.51328), (-0.21260752, -0.8314696, 0.51328), (-0.27059805, -0.70710677, 0.6532815), (-0.39284748, -0.70710677, 0.5879378), (-0.30865827, -0.8314696, 0.46193975), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.70710677, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.39284748, -0.8314696, 0.39284748), (-0.39284748, -0.8314696, 0.39284748), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.70710677, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.46193975, -0.8314696, 0.30865827), (-0.5879378, -0.70710677, 0.39284748), (-0.6532815, -0.70710677, 0.27059805), (-0.51328, -0.8314696, 0.21260752), (-0.51328, -0.8314696, 0.21260752), (-0.6532815, -0.70710677, 0.27059805), (-0.69351995, -0.70710677, 0.13794969), (-0.5448951, -0.8314696, 0.108386375), (-0.5448951, -0.8314696, 0.108386375), (-0.69351995, -0.70710677, 0.13794969), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.69351995, -0.70710677, -0.13794969), (-0.5448951, -0.8314696, -0.108386375), (-0.5448951, -0.8314696, -0.108386375), (-0.69351995, -0.70710677, -0.13794969), (-0.6532815, -0.70710677, -0.27059805), (-0.51328, -0.8314696, -0.21260752), (-0.51328, -0.8314696, -0.21260752), (-0.6532815, -0.70710677, -0.27059805), (-0.5879378, -0.70710677, -0.39284748), (-0.46193975, -0.8314696, -0.30865827), (-0.46193975, -0.8314696, -0.30865827), (-0.5879378, -0.70710677, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.8314696, -0.39284748), (-0.39284748, -0.8314696, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.70710677, -0.5879378), (-0.30865827, -0.8314696, -0.46193975), (-0.30865827, -0.8314696, -0.46193975), (-0.39284748, -0.70710677, -0.5879378), (-0.27059805, -0.70710677, -0.6532815), (-0.21260752, -0.8314696, -0.51328), (-0.21260752, -0.8314696, -0.51328), (-0.27059805, -0.70710677, -0.6532815), (-0.13794969, -0.70710677, -0.69351995), (-0.108386375, -0.8314696, -0.5448951), (-0.108386375, -0.8314696, -0.5448951), (-0.13794969, -0.70710677, -0.69351995), (-1.298934e-16, -0.70710677, -0.70710677), (-1.020566e-16, -0.8314696, -0.55557024), (-1.020566e-16, -0.8314696, -0.55557024), (-1.298934e-16, -0.70710677, -0.70710677), (0.13794969, -0.70710677, -0.69351995), (0.108386375, -0.8314696, -0.5448951), (0.108386375, -0.8314696, -0.5448951), (0.13794969, -0.70710677, -0.69351995), (0.27059805, -0.70710677, -0.6532815), (0.21260752, -0.8314696, -0.51328), (0.21260752, -0.8314696, -0.51328), (0.27059805, -0.70710677, -0.6532815), (0.39284748, -0.70710677, -0.5879378), (0.30865827, -0.8314696, -0.46193975), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.70710677, -0.5879378), (0.5, -0.70710677, -0.5), (0.39284748, -0.8314696, -0.39284748), (0.39284748, -0.8314696, -0.39284748), (0.5, -0.70710677, -0.5), (0.5879378, -0.70710677, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.46193975, -0.8314696, -0.30865827), (0.5879378, -0.70710677, -0.39284748), (0.6532815, -0.70710677, -0.27059805), (0.51328, -0.8314696, -0.21260752), (0.51328, -0.8314696, -0.21260752), (0.6532815, -0.70710677, -0.27059805), (0.69351995, -0.70710677, -0.13794969), (0.5448951, -0.8314696, -0.108386375), (0.5448951, -0.8314696, -0.108386375), (0.69351995, -0.70710677, -0.13794969), (0.70710677, -0.70710677, 0), (0.55557024, -0.8314696, 0), (0.70710677, -0.70710677, 0), (0.8314696, -0.55557024, 0), (0.81549317, -0.55557024, 0.16221167), (0.69351995, -0.70710677, 0.13794969), (0.69351995, -0.70710677, 0.13794969), (0.81549317, -0.55557024, 0.16221167), (0.76817775, -0.55557024, 0.31818965), (0.6532815, -0.70710677, 0.27059805), (0.6532815, -0.70710677, 0.27059805), (0.76817775, -0.55557024, 0.31818965), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.70710677, 0.39284748), (0.5879378, -0.70710677, 0.39284748), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.55557024, 0.5879378), (0.5, -0.70710677, 0.5), (0.5, -0.70710677, 0.5), (0.5879378, -0.55557024, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.39284748, -0.70710677, 0.5879378), (0.39284748, -0.70710677, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.31818965, -0.55557024, 0.76817775), (0.27059805, -0.70710677, 0.6532815), (0.27059805, -0.70710677, 0.6532815), (0.31818965, -0.55557024, 0.76817775), (0.16221167, -0.55557024, 0.81549317), (0.13794969, -0.70710677, 0.69351995), (0.13794969, -0.70710677, 0.69351995), (0.16221167, -0.55557024, 0.81549317), (5.091283e-17, -0.55557024, 0.8314696), (4.3297803e-17, -0.70710677, 0.70710677), (4.3297803e-17, -0.70710677, 0.70710677), (5.091283e-17, -0.55557024, 0.8314696), (-0.16221167, -0.55557024, 0.81549317), (-0.13794969, -0.70710677, 0.69351995), (-0.13794969, -0.70710677, 0.69351995), (-0.16221167, -0.55557024, 0.81549317), (-0.31818965, -0.55557024, 0.76817775), (-0.27059805, -0.70710677, 0.6532815), (-0.27059805, -0.70710677, 0.6532815), (-0.31818965, -0.55557024, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.39284748, -0.70710677, 0.5879378), (-0.39284748, -0.70710677, 0.5879378), (-0.46193975, -0.55557024, 0.6913417), (-0.5879378, -0.55557024, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.55557024, 0.5879378), (-0.6913417, -0.55557024, 0.46193975), (-0.5879378, -0.70710677, 0.39284748), (-0.5879378, -0.70710677, 0.39284748), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.55557024, 0.31818965), (-0.6532815, -0.70710677, 0.27059805), (-0.6532815, -0.70710677, 0.27059805), (-0.76817775, -0.55557024, 0.31818965), (-0.81549317, -0.55557024, 0.16221167), (-0.69351995, -0.70710677, 0.13794969), (-0.69351995, -0.70710677, 0.13794969), (-0.81549317, -0.55557024, 0.16221167), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.81549317, -0.55557024, -0.16221167), (-0.69351995, -0.70710677, -0.13794969), (-0.69351995, -0.70710677, -0.13794969), (-0.81549317, -0.55557024, -0.16221167), (-0.76817775, -0.55557024, -0.31818965), (-0.6532815, -0.70710677, -0.27059805), (-0.6532815, -0.70710677, -0.27059805), (-0.76817775, -0.55557024, -0.31818965), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.70710677, -0.39284748), (-0.5879378, -0.70710677, -0.39284748), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.55557024, -0.5879378), (-0.5, -0.70710677, -0.5), (-0.5, -0.70710677, -0.5), (-0.5879378, -0.55557024, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.39284748, -0.70710677, -0.5879378), (-0.39284748, -0.70710677, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.31818965, -0.55557024, -0.76817775), (-0.27059805, -0.70710677, -0.6532815), (-0.27059805, -0.70710677, -0.6532815), (-0.31818965, -0.55557024, -0.76817775), (-0.16221167, -0.55557024, -0.81549317), (-0.13794969, -0.70710677, -0.69351995), (-0.13794969, -0.70710677, -0.69351995), (-0.16221167, -0.55557024, -0.81549317), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.298934e-16, -0.70710677, -0.70710677), (-1.298934e-16, -0.70710677, -0.70710677), (-1.5273849e-16, -0.55557024, -0.8314696), (0.16221167, -0.55557024, -0.81549317), (0.13794969, -0.70710677, -0.69351995), (0.13794969, -0.70710677, -0.69351995), (0.16221167, -0.55557024, -0.81549317), (0.31818965, -0.55557024, -0.76817775), (0.27059805, -0.70710677, -0.6532815), (0.27059805, -0.70710677, -0.6532815), (0.31818965, -0.55557024, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.39284748, -0.70710677, -0.5879378), (0.39284748, -0.70710677, -0.5879378), (0.46193975, -0.55557024, -0.6913417), (0.5879378, -0.55557024, -0.5879378), (0.5, -0.70710677, -0.5), (0.5, -0.70710677, -0.5), (0.5879378, -0.55557024, -0.5879378), (0.6913417, -0.55557024, -0.46193975), (0.5879378, -0.70710677, -0.39284748), (0.5879378, -0.70710677, -0.39284748), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.55557024, -0.31818965), (0.6532815, -0.70710677, -0.27059805), (0.6532815, -0.70710677, -0.27059805), (0.76817775, -0.55557024, -0.31818965), (0.81549317, -0.55557024, -0.16221167), (0.69351995, -0.70710677, -0.13794969), (0.69351995, -0.70710677, -0.13794969), (0.81549317, -0.55557024, -0.16221167), (0.8314696, -0.55557024, 0), (0.70710677, -0.70710677, 0), (0.8314696, -0.55557024, 0), (0.9238795, -0.38268343, 0), (0.90612745, -0.38268343, 0.18023996), (0.81549317, -0.55557024, 0.16221167), (0.81549317, -0.55557024, 0.16221167), (0.90612745, -0.38268343, 0.18023996), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.55557024, 0.31818965), (0.76817775, -0.55557024, 0.31818965), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.38268343, 0.51328), (0.6913417, -0.55557024, 0.46193975), (0.6913417, -0.55557024, 0.46193975), (0.76817775, -0.38268343, 0.51328), (0.6532815, -0.38268343, 0.6532815), (0.5879378, -0.55557024, 0.5879378), (0.5879378, -0.55557024, 0.5879378), (0.6532815, -0.38268343, 0.6532815), (0.51328, -0.38268343, 0.76817775), (0.46193975, -0.55557024, 0.6913417), (0.46193975, -0.55557024, 0.6913417), (0.51328, -0.38268343, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.31818965, -0.55557024, 0.76817775), (0.31818965, -0.55557024, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.18023996, -0.38268343, 0.90612745), (0.16221167, -0.55557024, 0.81549317), (0.16221167, -0.55557024, 0.81549317), (0.18023996, -0.38268343, 0.90612745), (5.6571306e-17, -0.38268343, 0.9238795), (5.091283e-17, -0.55557024, 0.8314696), (5.091283e-17, -0.55557024, 0.8314696), (5.6571306e-17, -0.38268343, 0.9238795), (-0.18023996, -0.38268343, 0.90612745), (-0.16221167, -0.55557024, 0.81549317), (-0.16221167, -0.55557024, 0.81549317), (-0.18023996, -0.38268343, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.31818965, -0.55557024, 0.76817775), (-0.31818965, -0.55557024, 0.76817775), (-0.35355338, -0.38268343, 0.8535534), (-0.51328, -0.38268343, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.46193975, -0.55557024, 0.6913417), (-0.51328, -0.38268343, 0.76817775), (-0.6532815, -0.38268343, 0.6532815), (-0.5879378, -0.55557024, 0.5879378), (-0.5879378, -0.55557024, 0.5879378), (-0.6532815, -0.38268343, 0.6532815), (-0.76817775, -0.38268343, 0.51328), (-0.6913417, -0.55557024, 0.46193975), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.38268343, 0.51328), (-0.8535534, -0.38268343, 0.35355338), (-0.76817775, -0.55557024, 0.31818965), (-0.76817775, -0.55557024, 0.31818965), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.38268343, 0.18023996), (-0.81549317, -0.55557024, 0.16221167), (-0.81549317, -0.55557024, 0.16221167), (-0.90612745, -0.38268343, 0.18023996), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.90612745, -0.38268343, -0.18023996), (-0.81549317, -0.55557024, -0.16221167), (-0.81549317, -0.55557024, -0.16221167), (-0.90612745, -0.38268343, -0.18023996), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.55557024, -0.31818965), (-0.76817775, -0.55557024, -0.31818965), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.38268343, -0.51328), (-0.6913417, -0.55557024, -0.46193975), (-0.6913417, -0.55557024, -0.46193975), (-0.76817775, -0.38268343, -0.51328), (-0.6532815, -0.38268343, -0.6532815), (-0.5879378, -0.55557024, -0.5879378), (-0.5879378, -0.55557024, -0.5879378), (-0.6532815, -0.38268343, -0.6532815), (-0.51328, -0.38268343, -0.76817775), (-0.46193975, -0.55557024, -0.6913417), (-0.46193975, -0.55557024, -0.6913417), (-0.51328, -0.38268343, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.31818965, -0.55557024, -0.76817775), (-0.31818965, -0.55557024, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.18023996, -0.38268343, -0.90612745), (-0.16221167, -0.55557024, -0.81549317), (-0.16221167, -0.55557024, -0.81549317), (-0.18023996, -0.38268343, -0.90612745), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.6971392e-16, -0.38268343, -0.9238795), (0.18023996, -0.38268343, -0.90612745), (0.16221167, -0.55557024, -0.81549317), (0.16221167, -0.55557024, -0.81549317), (0.18023996, -0.38268343, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.31818965, -0.55557024, -0.76817775), (0.31818965, -0.55557024, -0.76817775), (0.35355338, -0.38268343, -0.8535534), (0.51328, -0.38268343, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.46193975, -0.55557024, -0.6913417), (0.51328, -0.38268343, -0.76817775), (0.6532815, -0.38268343, -0.6532815), (0.5879378, -0.55557024, -0.5879378), (0.5879378, -0.55557024, -0.5879378), (0.6532815, -0.38268343, -0.6532815), (0.76817775, -0.38268343, -0.51328), (0.6913417, -0.55557024, -0.46193975), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.38268343, -0.51328), (0.8535534, -0.38268343, -0.35355338), (0.76817775, -0.55557024, -0.31818965), (0.76817775, -0.55557024, -0.31818965), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.38268343, -0.18023996), (0.81549317, -0.55557024, -0.16221167), (0.81549317, -0.55557024, -0.16221167), (0.90612745, -0.38268343, -0.18023996), (0.9238795, -0.38268343, 0), (0.8314696, -0.55557024, 0), (0.9238795, -0.38268343, 0), (0.98078525, -0.19509032, 0), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.38268343, 0.18023996), (0.90612745, -0.38268343, 0.18023996), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.19509032, 0.37533027), (0.8535534, -0.38268343, 0.35355338), (0.8535534, -0.38268343, 0.35355338), (0.90612745, -0.19509032, 0.37533027), (0.81549317, -0.19509032, 0.5448951), (0.76817775, -0.38268343, 0.51328), (0.76817775, -0.38268343, 0.51328), (0.81549317, -0.19509032, 0.5448951), (0.69351995, -0.19509032, 0.69351995), (0.6532815, -0.38268343, 0.6532815), (0.6532815, -0.38268343, 0.6532815), (0.69351995, -0.19509032, 0.69351995), (0.5448951, -0.19509032, 0.81549317), (0.51328, -0.38268343, 0.76817775), (0.51328, -0.38268343, 0.76817775), (0.5448951, -0.19509032, 0.81549317), (0.37533027, -0.19509032, 0.90612745), (0.35355338, -0.38268343, 0.8535534), (0.35355338, -0.38268343, 0.8535534), (0.37533027, -0.19509032, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.18023996, -0.38268343, 0.90612745), (0.18023996, -0.38268343, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (6.005578e-17, -0.19509032, 0.98078525), (5.6571306e-17, -0.38268343, 0.9238795), (5.6571306e-17, -0.38268343, 0.9238795), (6.005578e-17, -0.19509032, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.18023996, -0.38268343, 0.90612745), (-0.18023996, -0.38268343, 0.90612745), (-0.19134171, -0.19509032, 0.96193975), (-0.37533027, -0.19509032, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.35355338, -0.38268343, 0.8535534), (-0.37533027, -0.19509032, 0.90612745), (-0.5448951, -0.19509032, 0.81549317), (-0.51328, -0.38268343, 0.76817775), (-0.51328, -0.38268343, 0.76817775), (-0.5448951, -0.19509032, 0.81549317), (-0.69351995, -0.19509032, 0.69351995), (-0.6532815, -0.38268343, 0.6532815), (-0.6532815, -0.38268343, 0.6532815), (-0.69351995, -0.19509032, 0.69351995), (-0.81549317, -0.19509032, 0.5448951), (-0.76817775, -0.38268343, 0.51328), (-0.76817775, -0.38268343, 0.51328), (-0.81549317, -0.19509032, 0.5448951), (-0.90612745, -0.19509032, 0.37533027), (-0.8535534, -0.38268343, 0.35355338), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.19509032, 0.37533027), (-0.96193975, -0.19509032, 0.19134171), (-0.90612745, -0.38268343, 0.18023996), (-0.90612745, -0.38268343, 0.18023996), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.38268343, -0.18023996), (-0.90612745, -0.38268343, -0.18023996), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.19509032, -0.37533027), (-0.8535534, -0.38268343, -0.35355338), (-0.8535534, -0.38268343, -0.35355338), (-0.90612745, -0.19509032, -0.37533027), (-0.81549317, -0.19509032, -0.5448951), (-0.76817775, -0.38268343, -0.51328), (-0.76817775, -0.38268343, -0.51328), (-0.81549317, -0.19509032, -0.5448951), (-0.69351995, -0.19509032, -0.69351995), (-0.6532815, -0.38268343, -0.6532815), (-0.6532815, -0.38268343, -0.6532815), (-0.69351995, -0.19509032, -0.69351995), (-0.5448951, -0.19509032, -0.81549317), (-0.51328, -0.38268343, -0.76817775), (-0.51328, -0.38268343, -0.76817775), (-0.5448951, -0.19509032, -0.81549317), (-0.37533027, -0.19509032, -0.90612745), (-0.35355338, -0.38268343, -0.8535534), (-0.35355338, -0.38268343, -0.8535534), (-0.37533027, -0.19509032, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.18023996, -0.38268343, -0.90612745), (-0.18023996, -0.38268343, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.8016734e-16, -0.19509032, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.18023996, -0.38268343, -0.90612745), (0.18023996, -0.38268343, -0.90612745), (0.19134171, -0.19509032, -0.96193975), (0.37533027, -0.19509032, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.35355338, -0.38268343, -0.8535534), (0.37533027, -0.19509032, -0.90612745), (0.5448951, -0.19509032, -0.81549317), (0.51328, -0.38268343, -0.76817775), (0.51328, -0.38268343, -0.76817775), (0.5448951, -0.19509032, -0.81549317), (0.69351995, -0.19509032, -0.69351995), (0.6532815, -0.38268343, -0.6532815), (0.6532815, -0.38268343, -0.6532815), (0.69351995, -0.19509032, -0.69351995), (0.81549317, -0.19509032, -0.5448951), (0.76817775, -0.38268343, -0.51328), (0.76817775, -0.38268343, -0.51328), (0.81549317, -0.19509032, -0.5448951), (0.90612745, -0.19509032, -0.37533027), (0.8535534, -0.38268343, -0.35355338), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.19509032, -0.37533027), (0.96193975, -0.19509032, -0.19134171), (0.90612745, -0.38268343, -0.18023996), (0.90612745, -0.38268343, -0.18023996), (0.96193975, -0.19509032, -0.19134171), (0.98078525, -0.19509032, 0), (0.9238795, -0.38268343, 0), (0.98078525, -0.19509032, 0), (1, 0, 0), (0.98078525, 0, 0.19509032), (0.96193975, -0.19509032, 0.19134171), (0.96193975, -0.19509032, 0.19134171), (0.98078525, 0, 0.19509032), (0.9238795, 0, 0.38268343), (0.90612745, -0.19509032, 0.37533027), (0.90612745, -0.19509032, 0.37533027), (0.9238795, 0, 0.38268343), (0.8314696, 0, 0.55557024), (0.81549317, -0.19509032, 0.5448951), (0.81549317, -0.19509032, 0.5448951), (0.8314696, 0, 0.55557024), (0.70710677, 0, 0.70710677), (0.69351995, -0.19509032, 0.69351995), (0.69351995, -0.19509032, 0.69351995), (0.70710677, 0, 0.70710677), (0.55557024, 0, 0.8314696), (0.5448951, -0.19509032, 0.81549317), (0.5448951, -0.19509032, 0.81549317), (0.55557024, 0, 0.8314696), (0.38268343, 0, 0.9238795), (0.37533027, -0.19509032, 0.90612745), (0.37533027, -0.19509032, 0.90612745), (0.38268343, 0, 0.9238795), (0.19509032, 0, 0.98078525), (0.19134171, -0.19509032, 0.96193975), (0.19134171, -0.19509032, 0.96193975), (0.19509032, 0, 0.98078525), (6.123234e-17, 0, 1), (6.005578e-17, -0.19509032, 0.98078525), (6.005578e-17, -0.19509032, 0.98078525), (6.123234e-17, 0, 1), (-0.19509032, 0, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.19134171, -0.19509032, 0.96193975), (-0.19509032, 0, 0.98078525), (-0.38268343, 0, 0.9238795), (-0.37533027, -0.19509032, 0.90612745), (-0.37533027, -0.19509032, 0.90612745), (-0.38268343, 0, 0.9238795), (-0.55557024, 0, 0.8314696), (-0.5448951, -0.19509032, 0.81549317), (-0.5448951, -0.19509032, 0.81549317), (-0.55557024, 0, 0.8314696), (-0.70710677, 0, 0.70710677), (-0.69351995, -0.19509032, 0.69351995), (-0.69351995, -0.19509032, 0.69351995), (-0.70710677, 0, 0.70710677), (-0.8314696, 0, 0.55557024), (-0.81549317, -0.19509032, 0.5448951), (-0.81549317, -0.19509032, 0.5448951), (-0.8314696, 0, 0.55557024), (-0.9238795, 0, 0.38268343), (-0.90612745, -0.19509032, 0.37533027), (-0.90612745, -0.19509032, 0.37533027), (-0.9238795, 0, 0.38268343), (-0.98078525, 0, 0.19509032), (-0.96193975, -0.19509032, 0.19134171), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, 0, 0.19509032), (-1, 0, 1.2246469e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-1, 0, 1.2246469e-16), (-0.98078525, 0, -0.19509032), (-0.96193975, -0.19509032, -0.19134171), (-0.96193975, -0.19509032, -0.19134171), (-0.98078525, 0, -0.19509032), (-0.9238795, 0, -0.38268343), (-0.90612745, -0.19509032, -0.37533027), (-0.90612745, -0.19509032, -0.37533027), (-0.9238795, 0, -0.38268343), (-0.8314696, 0, -0.55557024), (-0.81549317, -0.19509032, -0.5448951), (-0.81549317, -0.19509032, -0.5448951), (-0.8314696, 0, -0.55557024), (-0.70710677, 0, -0.70710677), (-0.69351995, -0.19509032, -0.69351995), (-0.69351995, -0.19509032, -0.69351995), (-0.70710677, 0, -0.70710677), (-0.55557024, 0, -0.8314696), (-0.5448951, -0.19509032, -0.81549317), (-0.5448951, -0.19509032, -0.81549317), (-0.55557024, 0, -0.8314696), (-0.38268343, 0, -0.9238795), (-0.37533027, -0.19509032, -0.90612745), (-0.37533027, -0.19509032, -0.90612745), (-0.38268343, 0, -0.9238795), (-0.19509032, 0, -0.98078525), (-0.19134171, -0.19509032, -0.96193975), (-0.19134171, -0.19509032, -0.96193975), (-0.19509032, 0, -0.98078525), (-1.8369701e-16, 0, -1), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.8369701e-16, 0, -1), (0.19509032, 0, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.19134171, -0.19509032, -0.96193975), (0.19509032, 0, -0.98078525), (0.38268343, 0, -0.9238795), (0.37533027, -0.19509032, -0.90612745), (0.37533027, -0.19509032, -0.90612745), (0.38268343, 0, -0.9238795), (0.55557024, 0, -0.8314696), (0.5448951, -0.19509032, -0.81549317), (0.5448951, -0.19509032, -0.81549317), (0.55557024, 0, -0.8314696), (0.70710677, 0, -0.70710677), (0.69351995, -0.19509032, -0.69351995), (0.69351995, -0.19509032, -0.69351995), (0.70710677, 0, -0.70710677), (0.8314696, 0, -0.55557024), (0.81549317, -0.19509032, -0.5448951), (0.81549317, -0.19509032, -0.5448951), (0.8314696, 0, -0.55557024), (0.9238795, 0, -0.38268343), (0.90612745, -0.19509032, -0.37533027), (0.90612745, -0.19509032, -0.37533027), (0.9238795, 0, -0.38268343), (0.98078525, 0, -0.19509032), (0.96193975, -0.19509032, -0.19134171), (0.96193975, -0.19509032, -0.19134171), (0.98078525, 0, -0.19509032), (1, 0, 0), (0.98078525, -0.19509032, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(75, 0, 0), (73.5589, 0, 14.631774), (69.29096, 0, 28.701258), (62.36022, 0, 41.667767), (53.03301, 0, 53.03301), (41.667767, 0, 62.36022), (28.701258, 0, 69.29096), (14.631774, 0, 73.5589), (4.5924254e-15, 0, 75), (-14.631774, 0, 73.5589), (-28.701258, 0, 69.29096), (-41.667767, 0, 62.36022), (-53.03301, 0, 53.03301), (-62.36022, 0, 41.667767), (-69.29096, 0, 28.701258), (-73.5589, 0, 14.631774), (-75, 0, 9.184851e-15), (-73.5589, 0, -14.631774), (-69.29096, 0, -28.701258), (-62.36022, 0, -41.667767), (-53.03301, 0, -53.03301), (-41.667767, 0, -62.36022), (-28.701258, 0, -69.29096), (-14.631774, 0, -73.5589), (-1.3777276e-14, 0, -75), (14.631774, 0, -73.5589), (28.701258, 0, -69.29096), (41.667767, 0, -62.36022), (53.03301, 0, -53.03301), (62.36022, 0, -41.667767), (69.29096, 0, -28.701258), (73.5589, 0, -14.631774), (74.51963, 4.877258, 0), (73.08776, 4.877258, 14.538059), (68.84716, 4.877258, 28.51743), (61.960808, 4.877258, 41.40089), (52.693336, 4.877258, 52.693336), (41.40089, 4.877258, 61.960808), (28.51743, 4.877258, 68.84716), (14.538059, 4.877258, 73.08776), (4.5630114e-15, 4.877258, 74.51963), (-14.538059, 4.877258, 73.08776), (-28.51743, 4.877258, 68.84716), (-41.40089, 4.877258, 61.960808), (-52.693336, 4.877258, 52.693336), (-61.960808, 4.877258, 41.40089), (-68.84716, 4.877258, 28.51743), (-73.08776, 4.877258, 14.538059), (-74.51963, 4.877258, 9.126023e-15), (-73.08776, 4.877258, -14.538059), (-68.84716, 4.877258, -28.51743), (-61.960808, 4.877258, -41.40089), (-52.693336, 4.877258, -52.693336), (-41.40089, 4.877258, -61.960808), (-28.51743, 4.877258, -68.84716), (-14.538059, 4.877258, -73.08776), (-1.3689034e-14, 4.877258, -74.51963), (14.538059, 4.877258, -73.08776), (28.51743, 4.877258, -68.84716), (41.40089, 4.877258, -61.960808), (52.693336, 4.877258, -52.693336), (61.960808, 4.877258, -41.40089), (68.84716, 4.877258, -28.51743), (73.08776, 4.877258, -14.538059), (73.096985, 9.567086, 0), (71.69245, 9.567086, 14.260515), (67.532814, 9.567086, 27.973007), (60.777924, 9.567086, 40.61051), (51.687378, 9.567086, 51.687378), (40.61051, 9.567086, 60.777924), (27.973007, 9.567086, 67.532814), (14.260515, 9.567086, 71.69245), (4.4758995e-15, 9.567086, 73.096985), (-14.260515, 9.567086, 71.69245), (-27.973007, 9.567086, 67.532814), (-40.61051, 9.567086, 60.777924), (-51.687378, 9.567086, 51.687378), (-60.777924, 9.567086, 40.61051), (-67.532814, 9.567086, 27.973007), (-71.69245, 9.567086, 14.260515), (-73.096985, 9.567086, 8.951799e-15), (-71.69245, 9.567086, -14.260515), (-67.532814, 9.567086, -27.973007), (-60.777924, 9.567086, -40.61051), (-51.687378, 9.567086, -51.687378), (-40.61051, 9.567086, -60.777924), (-27.973007, 9.567086, -67.532814), (-14.260515, 9.567086, -71.69245), (-1.3427699e-14, 9.567086, -73.096985), (14.260515, 9.567086, -71.69245), (27.973007, 9.567086, -67.532814), (40.61051, 9.567086, -60.777924), (51.687378, 9.567086, -51.687378), (60.777924, 9.567086, -40.61051), (67.532814, 9.567086, -27.973007), (71.69245, 9.567086, -14.260515), (70.78674, 13.889256, 0), (69.42659, 13.889256, 13.809808), (65.39842, 13.889256, 27.088913), (58.857025, 13.889256, 39.327007), (50.053783, 13.889256, 50.053783), (39.327007, 13.889256, 58.857025), (27.088913, 13.889256, 65.39842), (13.809808, 13.889256, 69.42659), (4.334438e-15, 13.889256, 70.78674), (-13.809808, 13.889256, 69.42659), (-27.088913, 13.889256, 65.39842), (-39.327007, 13.889256, 58.857025), (-50.053783, 13.889256, 50.053783), (-58.857025, 13.889256, 39.327007), (-65.39842, 13.889256, 27.088913), (-69.42659, 13.889256, 13.809808), (-70.78674, 13.889256, 8.668876e-15), (-69.42659, 13.889256, -13.809808), (-65.39842, 13.889256, -27.088913), (-58.857025, 13.889256, -39.327007), (-50.053783, 13.889256, -50.053783), (-39.327007, 13.889256, -58.857025), (-27.088913, 13.889256, -65.39842), (-13.809808, 13.889256, -69.42659), (-1.30033135e-14, 13.889256, -70.78674), (13.809808, 13.889256, -69.42659), (27.088913, 13.889256, -65.39842), (39.327007, 13.889256, -58.857025), (50.053783, 13.889256, -50.053783), (58.857025, 13.889256, -39.327007), (65.39842, 13.889256, -27.088913), (69.42659, 13.889256, -13.809808), (67.67767, 17.67767, 0), (66.37726, 17.67767, 13.2032585), (62.526012, 17.67767, 25.899122), (56.271927, 17.67767, 37.599697), (47.85534, 17.67767, 47.85534), (37.599697, 17.67767, 56.271927), (25.899122, 17.67767, 62.526012), (13.2032585, 17.67767, 66.37726), (4.144062e-15, 17.67767, 67.67767), (-13.2032585, 17.67767, 66.37726), (-25.899122, 17.67767, 62.526012), (-37.599697, 17.67767, 56.271927), (-47.85534, 17.67767, 47.85534), (-56.271927, 17.67767, 37.599697), (-62.526012, 17.67767, 25.899122), (-66.37726, 17.67767, 13.2032585), (-67.67767, 17.67767, 8.288124e-15), (-66.37726, 17.67767, -13.2032585), (-62.526012, 17.67767, -25.899122), (-56.271927, 17.67767, -37.599697), (-47.85534, 17.67767, -47.85534), (-37.599697, 17.67767, -56.271927), (-25.899122, 17.67767, -62.526012), (-13.2032585, 17.67767, -66.37726), (-1.2432186e-14, 17.67767, -67.67767), (13.2032585, 17.67767, -66.37726), (25.899122, 17.67767, -62.526012), (37.599697, 17.67767, -56.271927), (47.85534, 17.67767, -47.85534), (56.271927, 17.67767, -37.599697), (62.526012, 17.67767, -25.899122), (66.37726, 17.67767, -13.2032585), (63.889256, 20.786741, 0), (62.66164, 20.786741, 12.464175), (59.025974, 20.786741, 24.44936), (53.121975, 20.786741, 35.49497), (45.176525, 20.786741, 45.176525), (35.49497, 20.786741, 53.121975), (24.44936, 20.786741, 59.025974), (12.464175, 20.786741, 62.66164), (3.9120886e-15, 20.786741, 63.889256), (-12.464175, 20.786741, 62.66164), (-24.44936, 20.786741, 59.025974), (-35.49497, 20.786741, 53.121975), (-45.176525, 20.786741, 45.176525), (-53.121975, 20.786741, 35.49497), (-59.025974, 20.786741, 24.44936), (-62.66164, 20.786741, 12.464175), (-63.889256, 20.786741, 7.824177e-15), (-62.66164, 20.786741, -12.464175), (-59.025974, 20.786741, -24.44936), (-53.121975, 20.786741, -35.49497), (-45.176525, 20.786741, -45.176525), (-35.49497, 20.786741, -53.121975), (-24.44936, 20.786741, -59.025974), (-12.464175, 20.786741, -62.66164), (-1.1736266e-14, 20.786741, -63.889256), (12.464175, 20.786741, -62.66164), (24.44936, 20.786741, -59.025974), (35.49497, 20.786741, -53.121975), (45.176525, 20.786741, -45.176525), (53.121975, 20.786741, -35.49497), (59.025974, 20.786741, -24.44936), (62.66164, 20.786741, -12.464175), (59.567085, 23.096989, 0), (58.42252, 23.096989, 11.620962), (55.03281, 23.096989, 22.795338), (49.52822, 23.096989, 33.0937), (42.12029, 23.096989, 42.12029), (33.0937, 23.096989, 49.52822), (22.795338, 23.096989, 55.03281), (11.620962, 23.096989, 58.42252), (3.647432e-15, 23.096989, 59.567085), (-11.620962, 23.096989, 58.42252), (-22.795338, 23.096989, 55.03281), (-33.0937, 23.096989, 49.52822), (-42.12029, 23.096989, 42.12029), (-49.52822, 23.096989, 33.0937), (-55.03281, 23.096989, 22.795338), (-58.42252, 23.096989, 11.620962), (-59.567085, 23.096989, 7.294864e-15), (-58.42252, 23.096989, -11.620962), (-55.03281, 23.096989, -22.795338), (-49.52822, 23.096989, -33.0937), (-42.12029, 23.096989, -42.12029), (-33.0937, 23.096989, -49.52822), (-22.795338, 23.096989, -55.03281), (-11.620962, 23.096989, -58.42252), (-1.0942296e-14, 23.096989, -59.567085), (11.620962, 23.096989, -58.42252), (22.795338, 23.096989, -55.03281), (33.0937, 23.096989, -49.52822), (42.12029, 23.096989, -42.12029), (49.52822, 23.096989, -33.0937), (55.03281, 23.096989, -22.795338), (58.42252, 23.096989, -11.620962), (54.87726, 24.519632, 0), (53.822807, 24.519632, 10.706022), (50.699974, 24.519632, 21.000618), (45.628773, 24.519632, 30.48817), (38.80408, 24.519632, 38.80408), (30.48817, 24.519632, 45.628773), (21.000618, 24.519632, 50.699974), (10.706022, 24.519632, 53.822807), (3.360263e-15, 24.519632, 54.87726), (-10.706022, 24.519632, 53.822807), (-21.000618, 24.519632, 50.699974), (-30.48817, 24.519632, 45.628773), (-38.80408, 24.519632, 38.80408), (-45.628773, 24.519632, 30.48817), (-50.699974, 24.519632, 21.000618), (-53.822807, 24.519632, 10.706022), (-54.87726, 24.519632, 6.720526e-15), (-53.822807, 24.519632, -10.706022), (-50.699974, 24.519632, -21.000618), (-45.628773, 24.519632, -30.48817), (-38.80408, 24.519632, -38.80408), (-30.48817, 24.519632, -45.628773), (-21.000618, 24.519632, -50.699974), (-10.706022, 24.519632, -53.822807), (-1.0080789e-14, 24.519632, -54.87726), (10.706022, 24.519632, -53.822807), (21.000618, 24.519632, -50.699974), (30.48817, 24.519632, -45.628773), (38.80408, 24.519632, -38.80408), (45.628773, 24.519632, -30.48817), (50.699974, 24.519632, -21.000618), (53.822807, 24.519632, -10.706022), (50, 25, 0), (49.039265, 25, 9.754516), (46.193977, 25, 19.134172), (41.573483, 25, 27.778511), (35.35534, 25, 35.35534), (27.778511, 25, 41.573483), (19.134172, 25, 46.193977), (9.754516, 25, 49.039265), (3.0616169e-15, 25, 50), (-9.754516, 25, 49.039265), (-19.134172, 25, 46.193977), (-27.778511, 25, 41.573483), (-35.35534, 25, 35.35534), (-41.573483, 25, 27.778511), (-46.193977, 25, 19.134172), (-49.039265, 25, 9.754516), (-50, 25, 6.1232338e-15), (-49.039265, 25, -9.754516), (-46.193977, 25, -19.134172), (-41.573483, 25, -27.778511), (-35.35534, 25, -35.35534), (-27.778511, 25, -41.573483), (-19.134172, 25, -46.193977), (-9.754516, 25, -49.039265), (-9.184851e-15, 25, -50), (9.754516, 25, -49.039265), (19.134172, 25, -46.193977), (27.778511, 25, -41.573483), (35.35534, 25, -35.35534), (41.573483, 25, -27.778511), (46.193977, 25, -19.134172), (49.039265, 25, -9.754516), (45.12274, 24.519632, 0), (44.255722, 24.519632, 8.80301), (41.687977, 24.519632, 17.267725), (37.51819, 24.519632, 25.068851), (31.906597, 24.519632, 31.906597), (25.068851, 24.519632, 37.51819), (17.267725, 24.519632, 41.687977), (8.80301, 24.519632, 44.255722), (2.762971e-15, 24.519632, 45.12274), (-8.80301, 24.519632, 44.255722), (-17.267725, 24.519632, 41.687977), (-25.068851, 24.519632, 37.51819), (-31.906597, 24.519632, 31.906597), (-37.51819, 24.519632, 25.068851), (-41.687977, 24.519632, 17.267725), (-44.255722, 24.519632, 8.80301), (-45.12274, 24.519632, 5.525942e-15), (-44.255722, 24.519632, -8.80301), (-41.687977, 24.519632, -17.267725), (-37.51819, 24.519632, -25.068851), (-31.906597, 24.519632, -31.906597), (-25.068851, 24.519632, -37.51819), (-17.267725, 24.519632, -41.687977), (-8.80301, 24.519632, -44.255722), (-8.288913e-15, 24.519632, -45.12274), (8.80301, 24.519632, -44.255722), (17.267725, 24.519632, -41.687977), (25.068851, 24.519632, -37.51819), (31.906597, 24.519632, -31.906597), (37.51819, 24.519632, -25.068851), (41.687977, 24.519632, -17.267725), (44.255722, 24.519632, -8.80301), (40.432915, 23.096989, 0), (39.656006, 23.096989, 7.88807), (37.35514, 23.096989, 15.473006), (33.61874, 23.096989, 22.463324), (28.590387, 23.096989, 28.590387), (22.463324, 23.096989, 33.61874), (15.473006, 23.096989, 37.35514), (7.88807, 23.096989, 39.656006), (2.475802e-15, 23.096989, 40.432915), (-7.88807, 23.096989, 39.656006), (-15.473006, 23.096989, 37.35514), (-22.463324, 23.096989, 33.61874), (-28.590387, 23.096989, 28.590387), (-33.61874, 23.096989, 22.463324), (-37.35514, 23.096989, 15.473006), (-39.656006, 23.096989, 7.88807), (-40.432915, 23.096989, 4.951604e-15), (-39.656006, 23.096989, -7.88807), (-37.35514, 23.096989, -15.473006), (-33.61874, 23.096989, -22.463324), (-28.590387, 23.096989, -28.590387), (-22.463324, 23.096989, -33.61874), (-15.473006, 23.096989, -37.35514), (-7.88807, 23.096989, -39.656006), (-7.427406e-15, 23.096989, -40.432915), (7.88807, 23.096989, -39.656006), (15.473006, 23.096989, -37.35514), (22.463324, 23.096989, -33.61874), (28.590387, 23.096989, -28.590387), (33.61874, 23.096989, -22.463324), (37.35514, 23.096989, -15.473006), (39.656006, 23.096989, -7.88807), (36.110744, 20.786741, 0), (35.416885, 20.786741, 7.0448565), (33.361977, 20.786741, 13.818983), (30.024986, 20.786741, 20.062054), (25.534153, 20.786741, 25.534153), (20.062054, 20.786741, 30.024986), (13.818983, 20.786741, 33.361977), (7.0448565, 20.786741, 35.416885), (2.2111454e-15, 20.786741, 36.110744), (-7.0448565, 20.786741, 35.416885), (-13.818983, 20.786741, 33.361977), (-20.062054, 20.786741, 30.024986), (-25.534153, 20.786741, 25.534153), (-30.024986, 20.786741, 20.062054), (-33.361977, 20.786741, 13.818983), (-35.416885, 20.786741, 7.0448565), (-36.110744, 20.786741, 4.422291e-15), (-35.416885, 20.786741, -7.0448565), (-33.361977, 20.786741, -13.818983), (-30.024986, 20.786741, -20.062054), (-25.534153, 20.786741, -25.534153), (-20.062054, 20.786741, -30.024986), (-13.818983, 20.786741, -33.361977), (-7.0448565, 20.786741, -35.416885), (-6.633436e-15, 20.786741, -36.110744), (7.0448565, 20.786741, -35.416885), (13.818983, 20.786741, -33.361977), (20.062054, 20.786741, -30.024986), (25.534153, 20.786741, -25.534153), (30.024986, 20.786741, -20.062054), (33.361977, 20.786741, -13.818983), (35.416885, 20.786741, -7.0448565), (32.32233, 17.67767, 0), (31.701265, 17.67767, 6.3057737), (29.86194, 17.67767, 12.369221), (26.875036, 17.67767, 17.957325), (22.85534, 17.67767, 22.85534), (17.957325, 17.67767, 26.875036), (12.369221, 17.67767, 29.86194), (6.3057737, 17.67767, 31.701265), (1.9791719e-15, 17.67767, 32.32233), (-6.3057737, 17.67767, 31.701265), (-12.369221, 17.67767, 29.86194), (-17.957325, 17.67767, 26.875036), (-22.85534, 17.67767, 22.85534), (-26.875036, 17.67767, 17.957325), (-29.86194, 17.67767, 12.369221), (-31.701265, 17.67767, 6.3057737), (-32.32233, 17.67767, 3.9583438e-15), (-31.701265, 17.67767, -6.3057737), (-29.86194, 17.67767, -12.369221), (-26.875036, 17.67767, -17.957325), (-22.85534, 17.67767, -22.85534), (-17.957325, 17.67767, -26.875036), (-12.369221, 17.67767, -29.86194), (-6.3057737, 17.67767, -31.701265), (-5.937516e-15, 17.67767, -32.32233), (6.3057737, 17.67767, -31.701265), (12.369221, 17.67767, -29.86194), (17.957325, 17.67767, -26.875036), (22.85534, 17.67767, -22.85534), (26.875036, 17.67767, -17.957325), (29.86194, 17.67767, -12.369221), (31.701265, 17.67767, -6.3057737), (29.213259, 13.889256, 0), (28.651936, 13.889256, 5.6992245), (26.989532, 13.889256, 11.179431), (24.289938, 13.889256, 16.230017), (20.656895, 13.889256, 20.656895), (16.230017, 13.889256, 24.289938), (11.179431, 13.889256, 26.989532), (5.6992245, 13.889256, 28.651936), (1.7887962e-15, 13.889256, 29.213259), (-5.6992245, 13.889256, 28.651936), (-11.179431, 13.889256, 26.989532), (-16.230017, 13.889256, 24.289938), (-20.656895, 13.889256, 20.656895), (-24.289938, 13.889256, 16.230017), (-26.989532, 13.889256, 11.179431), (-28.651936, 13.889256, 5.6992245), (-29.213259, 13.889256, 3.5775923e-15), (-28.651936, 13.889256, -5.6992245), (-26.989532, 13.889256, -11.179431), (-24.289938, 13.889256, -16.230017), (-20.656895, 13.889256, -20.656895), (-16.230017, 13.889256, -24.289938), (-11.179431, 13.889256, -26.989532), (-5.6992245, 13.889256, -28.651936), (-5.3663887e-15, 13.889256, -29.213259), (5.6992245, 13.889256, -28.651936), (11.179431, 13.889256, -26.989532), (16.230017, 13.889256, -24.289938), (20.656895, 13.889256, -20.656895), (24.289938, 13.889256, -16.230017), (26.989532, 13.889256, -11.179431), (28.651936, 13.889256, -5.6992245), (26.903011, 9.567086, 0), (26.386078, 9.567086, 5.248517), (24.855143, 9.567086, 10.295337), (22.369038, 9.567086, 14.946512), (19.023302, 9.567086, 19.023302), (14.946512, 9.567086, 22.369038), (10.295337, 9.567086, 24.855143), (5.248517, 9.567086, 26.386078), (1.6473343e-15, 9.567086, 26.903011), (-5.248517, 9.567086, 26.386078), (-10.295337, 9.567086, 24.855143), (-14.946512, 9.567086, 22.369038), (-19.023302, 9.567086, 19.023302), (-22.369038, 9.567086, 14.946512), (-24.855143, 9.567086, 10.295337), (-26.386078, 9.567086, 5.248517), (-26.903011, 9.567086, 3.2946687e-15), (-26.386078, 9.567086, -5.248517), (-24.855143, 9.567086, -10.295337), (-22.369038, 9.567086, -14.946512), (-19.023302, 9.567086, -19.023302), (-14.946512, 9.567086, -22.369038), (-10.295337, 9.567086, -24.855143), (-5.248517, 9.567086, -26.386078), (-4.942003e-15, 9.567086, -26.903011), (5.248517, 9.567086, -26.386078), (10.295337, 9.567086, -24.855143), (14.946512, 9.567086, -22.369038), (19.023302, 9.567086, -19.023302), (22.369038, 9.567086, -14.946512), (24.855143, 9.567086, -10.295337), (26.386078, 9.567086, -5.248517), (25.480368, 4.877258, 0), (24.99077, 4.877258, 4.970973), (23.54079, 4.877258, 9.750915), (21.186152, 4.877258, 14.156134), (18.017342, 4.877258, 18.017342), (14.156134, 4.877258, 21.186152), (9.750915, 4.877258, 23.54079), (4.970973, 4.877258, 24.99077), (1.5602225e-15, 4.877258, 25.480368), (-4.970973, 4.877258, 24.99077), (-9.750915, 4.877258, 23.54079), (-14.156134, 4.877258, 21.186152), (-18.017342, 4.877258, 18.017342), (-21.186152, 4.877258, 14.156134), (-23.54079, 4.877258, 9.750915), (-24.99077, 4.877258, 4.970973), (-25.480368, 4.877258, 3.120445e-15), (-24.99077, 4.877258, -4.970973), (-23.54079, 4.877258, -9.750915), (-21.186152, 4.877258, -14.156134), (-18.017342, 4.877258, -18.017342), (-14.156134, 4.877258, -21.186152), (-9.750915, 4.877258, -23.54079), (-4.970973, 4.877258, -24.99077), (-4.6806676e-15, 4.877258, -25.480368), (4.970973, 4.877258, -24.99077), (9.750915, 4.877258, -23.54079), (14.156134, 4.877258, -21.186152), (18.017342, 4.877258, -18.017342), (21.186152, 4.877258, -14.156134), (23.54079, 4.877258, -9.750915), (24.99077, 4.877258, -4.970973), (25, 3.0616169e-15, 0), (24.519632, 3.0616169e-15, 4.877258), (23.096989, 3.0616169e-15, 9.567086), (20.786741, 3.0616169e-15, 13.889256), (17.67767, 3.0616169e-15, 17.67767), (13.889256, 3.0616169e-15, 20.786741), (9.567086, 3.0616169e-15, 23.096989), (4.877258, 3.0616169e-15, 24.519632), (1.5308084e-15, 3.0616169e-15, 25), (-4.877258, 3.0616169e-15, 24.519632), (-9.567086, 3.0616169e-15, 23.096989), (-13.889256, 3.0616169e-15, 20.786741), (-17.67767, 3.0616169e-15, 17.67767), (-20.786741, 3.0616169e-15, 13.889256), (-23.096989, 3.0616169e-15, 9.567086), (-24.519632, 3.0616169e-15, 4.877258), (-25, 3.0616169e-15, 3.0616169e-15), (-24.519632, 3.0616169e-15, -4.877258), (-23.096989, 3.0616169e-15, -9.567086), (-20.786741, 3.0616169e-15, -13.889256), (-17.67767, 3.0616169e-15, -17.67767), (-13.889256, 3.0616169e-15, -20.786741), (-9.567086, 3.0616169e-15, -23.096989), (-4.877258, 3.0616169e-15, -24.519632), (-4.5924254e-15, 3.0616169e-15, -25), (4.877258, 3.0616169e-15, -24.519632), (9.567086, 3.0616169e-15, -23.096989), (13.889256, 3.0616169e-15, -20.786741), (17.67767, 3.0616169e-15, -17.67767), (20.786741, 3.0616169e-15, -13.889256), (23.096989, 3.0616169e-15, -9.567086), (24.519632, 3.0616169e-15, -4.877258), (25.480368, -4.877258, 0), (24.99077, -4.877258, 4.970973), (23.54079, -4.877258, 9.750915), (21.186152, -4.877258, 14.156134), (18.017342, -4.877258, 18.017342), (14.156134, -4.877258, 21.186152), (9.750915, -4.877258, 23.54079), (4.970973, -4.877258, 24.99077), (1.5602225e-15, -4.877258, 25.480368), (-4.970973, -4.877258, 24.99077), (-9.750915, -4.877258, 23.54079), (-14.156134, -4.877258, 21.186152), (-18.017342, -4.877258, 18.017342), (-21.186152, -4.877258, 14.156134), (-23.54079, -4.877258, 9.750915), (-24.99077, -4.877258, 4.970973), (-25.480368, -4.877258, 3.120445e-15), (-24.99077, -4.877258, -4.970973), (-23.54079, -4.877258, -9.750915), (-21.186152, -4.877258, -14.156134), (-18.017342, -4.877258, -18.017342), (-14.156134, -4.877258, -21.186152), (-9.750915, -4.877258, -23.54079), (-4.970973, -4.877258, -24.99077), (-4.6806676e-15, -4.877258, -25.480368), (4.970973, -4.877258, -24.99077), (9.750915, -4.877258, -23.54079), (14.156134, -4.877258, -21.186152), (18.017342, -4.877258, -18.017342), (21.186152, -4.877258, -14.156134), (23.54079, -4.877258, -9.750915), (24.99077, -4.877258, -4.970973), (26.903011, -9.567086, 0), (26.386078, -9.567086, 5.248517), (24.855143, -9.567086, 10.295337), (22.369038, -9.567086, 14.946512), (19.023302, -9.567086, 19.023302), (14.946512, -9.567086, 22.369038), (10.295337, -9.567086, 24.855143), (5.248517, -9.567086, 26.386078), (1.6473343e-15, -9.567086, 26.903011), (-5.248517, -9.567086, 26.386078), (-10.295337, -9.567086, 24.855143), (-14.946512, -9.567086, 22.369038), (-19.023302, -9.567086, 19.023302), (-22.369038, -9.567086, 14.946512), (-24.855143, -9.567086, 10.295337), (-26.386078, -9.567086, 5.248517), (-26.903011, -9.567086, 3.2946687e-15), (-26.386078, -9.567086, -5.248517), (-24.855143, -9.567086, -10.295337), (-22.369038, -9.567086, -14.946512), (-19.023302, -9.567086, -19.023302), (-14.946512, -9.567086, -22.369038), (-10.295337, -9.567086, -24.855143), (-5.248517, -9.567086, -26.386078), (-4.942003e-15, -9.567086, -26.903011), (5.248517, -9.567086, -26.386078), (10.295337, -9.567086, -24.855143), (14.946512, -9.567086, -22.369038), (19.023302, -9.567086, -19.023302), (22.369038, -9.567086, -14.946512), (24.855143, -9.567086, -10.295337), (26.386078, -9.567086, -5.248517), (29.213259, -13.889256, 0), (28.651936, -13.889256, 5.6992245), (26.989532, -13.889256, 11.179431), (24.289938, -13.889256, 16.230017), (20.656895, -13.889256, 20.656895), (16.230017, -13.889256, 24.289938), (11.179431, -13.889256, 26.989532), (5.6992245, -13.889256, 28.651936), (1.7887962e-15, -13.889256, 29.213259), (-5.6992245, -13.889256, 28.651936), (-11.179431, -13.889256, 26.989532), (-16.230017, -13.889256, 24.289938), (-20.656895, -13.889256, 20.656895), (-24.289938, -13.889256, 16.230017), (-26.989532, -13.889256, 11.179431), (-28.651936, -13.889256, 5.6992245), (-29.213259, -13.889256, 3.5775923e-15), (-28.651936, -13.889256, -5.6992245), (-26.989532, -13.889256, -11.179431), (-24.289938, -13.889256, -16.230017), (-20.656895, -13.889256, -20.656895), (-16.230017, -13.889256, -24.289938), (-11.179431, -13.889256, -26.989532), (-5.6992245, -13.889256, -28.651936), (-5.3663887e-15, -13.889256, -29.213259), (5.6992245, -13.889256, -28.651936), (11.179431, -13.889256, -26.989532), (16.230017, -13.889256, -24.289938), (20.656895, -13.889256, -20.656895), (24.289938, -13.889256, -16.230017), (26.989532, -13.889256, -11.179431), (28.651936, -13.889256, -5.6992245), (32.32233, -17.67767, 0), (31.701265, -17.67767, 6.3057737), (29.86194, -17.67767, 12.369221), (26.875036, -17.67767, 17.957325), (22.85534, -17.67767, 22.85534), (17.957325, -17.67767, 26.875036), (12.369221, -17.67767, 29.86194), (6.3057737, -17.67767, 31.701265), (1.9791719e-15, -17.67767, 32.32233), (-6.3057737, -17.67767, 31.701265), (-12.369221, -17.67767, 29.86194), (-17.957325, -17.67767, 26.875036), (-22.85534, -17.67767, 22.85534), (-26.875036, -17.67767, 17.957325), (-29.86194, -17.67767, 12.369221), (-31.701265, -17.67767, 6.3057737), (-32.32233, -17.67767, 3.9583438e-15), (-31.701265, -17.67767, -6.3057737), (-29.86194, -17.67767, -12.369221), (-26.875036, -17.67767, -17.957325), (-22.85534, -17.67767, -22.85534), (-17.957325, -17.67767, -26.875036), (-12.369221, -17.67767, -29.86194), (-6.3057737, -17.67767, -31.701265), (-5.937516e-15, -17.67767, -32.32233), (6.3057737, -17.67767, -31.701265), (12.369221, -17.67767, -29.86194), (17.957325, -17.67767, -26.875036), (22.85534, -17.67767, -22.85534), (26.875036, -17.67767, -17.957325), (29.86194, -17.67767, -12.369221), (31.701265, -17.67767, -6.3057737), (36.110744, -20.786741, 0), (35.416885, -20.786741, 7.0448565), (33.361977, -20.786741, 13.818983), (30.024986, -20.786741, 20.062054), (25.534153, -20.786741, 25.534153), (20.062054, -20.786741, 30.024986), (13.818983, -20.786741, 33.361977), (7.0448565, -20.786741, 35.416885), (2.2111454e-15, -20.786741, 36.110744), (-7.0448565, -20.786741, 35.416885), (-13.818983, -20.786741, 33.361977), (-20.062054, -20.786741, 30.024986), (-25.534153, -20.786741, 25.534153), (-30.024986, -20.786741, 20.062054), (-33.361977, -20.786741, 13.818983), (-35.416885, -20.786741, 7.0448565), (-36.110744, -20.786741, 4.422291e-15), (-35.416885, -20.786741, -7.0448565), (-33.361977, -20.786741, -13.818983), (-30.024986, -20.786741, -20.062054), (-25.534153, -20.786741, -25.534153), (-20.062054, -20.786741, -30.024986), (-13.818983, -20.786741, -33.361977), (-7.0448565, -20.786741, -35.416885), (-6.633436e-15, -20.786741, -36.110744), (7.0448565, -20.786741, -35.416885), (13.818983, -20.786741, -33.361977), (20.062054, -20.786741, -30.024986), (25.534153, -20.786741, -25.534153), (30.024986, -20.786741, -20.062054), (33.361977, -20.786741, -13.818983), (35.416885, -20.786741, -7.0448565), (40.432915, -23.096989, 0), (39.656006, -23.096989, 7.88807), (37.35514, -23.096989, 15.473006), (33.61874, -23.096989, 22.463324), (28.590387, -23.096989, 28.590387), (22.463324, -23.096989, 33.61874), (15.473006, -23.096989, 37.35514), (7.88807, -23.096989, 39.656006), (2.475802e-15, -23.096989, 40.432915), (-7.88807, -23.096989, 39.656006), (-15.473006, -23.096989, 37.35514), (-22.463324, -23.096989, 33.61874), (-28.590387, -23.096989, 28.590387), (-33.61874, -23.096989, 22.463324), (-37.35514, -23.096989, 15.473006), (-39.656006, -23.096989, 7.88807), (-40.432915, -23.096989, 4.951604e-15), (-39.656006, -23.096989, -7.88807), (-37.35514, -23.096989, -15.473006), (-33.61874, -23.096989, -22.463324), (-28.590387, -23.096989, -28.590387), (-22.463324, -23.096989, -33.61874), (-15.473006, -23.096989, -37.35514), (-7.88807, -23.096989, -39.656006), (-7.427406e-15, -23.096989, -40.432915), (7.88807, -23.096989, -39.656006), (15.473006, -23.096989, -37.35514), (22.463324, -23.096989, -33.61874), (28.590387, -23.096989, -28.590387), (33.61874, -23.096989, -22.463324), (37.35514, -23.096989, -15.473006), (39.656006, -23.096989, -7.88807), (45.12274, -24.519632, 0), (44.255722, -24.519632, 8.80301), (41.687977, -24.519632, 17.267725), (37.51819, -24.519632, 25.068851), (31.906597, -24.519632, 31.906597), (25.068851, -24.519632, 37.51819), (17.267725, -24.519632, 41.687977), (8.80301, -24.519632, 44.255722), (2.762971e-15, -24.519632, 45.12274), (-8.80301, -24.519632, 44.255722), (-17.267725, -24.519632, 41.687977), (-25.068851, -24.519632, 37.51819), (-31.906597, -24.519632, 31.906597), (-37.51819, -24.519632, 25.068851), (-41.687977, -24.519632, 17.267725), (-44.255722, -24.519632, 8.80301), (-45.12274, -24.519632, 5.525942e-15), (-44.255722, -24.519632, -8.80301), (-41.687977, -24.519632, -17.267725), (-37.51819, -24.519632, -25.068851), (-31.906597, -24.519632, -31.906597), (-25.068851, -24.519632, -37.51819), (-17.267725, -24.519632, -41.687977), (-8.80301, -24.519632, -44.255722), (-8.288913e-15, -24.519632, -45.12274), (8.80301, -24.519632, -44.255722), (17.267725, -24.519632, -41.687977), (25.068851, -24.519632, -37.51819), (31.906597, -24.519632, -31.906597), (37.51819, -24.519632, -25.068851), (41.687977, -24.519632, -17.267725), (44.255722, -24.519632, -8.80301), (50, -25, 0), (49.039265, -25, 9.754516), (46.193977, -25, 19.134172), (41.573483, -25, 27.778511), (35.35534, -25, 35.35534), (27.778511, -25, 41.573483), (19.134172, -25, 46.193977), (9.754516, -25, 49.039265), (3.0616169e-15, -25, 50), (-9.754516, -25, 49.039265), (-19.134172, -25, 46.193977), (-27.778511, -25, 41.573483), (-35.35534, -25, 35.35534), (-41.573483, -25, 27.778511), (-46.193977, -25, 19.134172), (-49.039265, -25, 9.754516), (-50, -25, 6.1232338e-15), (-49.039265, -25, -9.754516), (-46.193977, -25, -19.134172), (-41.573483, -25, -27.778511), (-35.35534, -25, -35.35534), (-27.778511, -25, -41.573483), (-19.134172, -25, -46.193977), (-9.754516, -25, -49.039265), (-9.184851e-15, -25, -50), (9.754516, -25, -49.039265), (19.134172, -25, -46.193977), (27.778511, -25, -41.573483), (35.35534, -25, -35.35534), (41.573483, -25, -27.778511), (46.193977, -25, -19.134172), (49.039265, -25, -9.754516), (54.87726, -24.519632, 0), (53.822807, -24.519632, 10.706022), (50.699974, -24.519632, 21.000618), (45.628773, -24.519632, 30.48817), (38.80408, -24.519632, 38.80408), (30.48817, -24.519632, 45.628773), (21.000618, -24.519632, 50.699974), (10.706022, -24.519632, 53.822807), (3.360263e-15, -24.519632, 54.87726), (-10.706022, -24.519632, 53.822807), (-21.000618, -24.519632, 50.699974), (-30.48817, -24.519632, 45.628773), (-38.80408, -24.519632, 38.80408), (-45.628773, -24.519632, 30.48817), (-50.699974, -24.519632, 21.000618), (-53.822807, -24.519632, 10.706022), (-54.87726, -24.519632, 6.720526e-15), (-53.822807, -24.519632, -10.706022), (-50.699974, -24.519632, -21.000618), (-45.628773, -24.519632, -30.48817), (-38.80408, -24.519632, -38.80408), (-30.48817, -24.519632, -45.628773), (-21.000618, -24.519632, -50.699974), (-10.706022, -24.519632, -53.822807), (-1.0080789e-14, -24.519632, -54.87726), (10.706022, -24.519632, -53.822807), (21.000618, -24.519632, -50.699974), (30.48817, -24.519632, -45.628773), (38.80408, -24.519632, -38.80408), (45.628773, -24.519632, -30.48817), (50.699974, -24.519632, -21.000618), (53.822807, -24.519632, -10.706022), (59.567085, -23.096989, 0), (58.42252, -23.096989, 11.620962), (55.03281, -23.096989, 22.795338), (49.52822, -23.096989, 33.0937), (42.12029, -23.096989, 42.12029), (33.0937, -23.096989, 49.52822), (22.795338, -23.096989, 55.03281), (11.620962, -23.096989, 58.42252), (3.647432e-15, -23.096989, 59.567085), (-11.620962, -23.096989, 58.42252), (-22.795338, -23.096989, 55.03281), (-33.0937, -23.096989, 49.52822), (-42.12029, -23.096989, 42.12029), (-49.52822, -23.096989, 33.0937), (-55.03281, -23.096989, 22.795338), (-58.42252, -23.096989, 11.620962), (-59.567085, -23.096989, 7.294864e-15), (-58.42252, -23.096989, -11.620962), (-55.03281, -23.096989, -22.795338), (-49.52822, -23.096989, -33.0937), (-42.12029, -23.096989, -42.12029), (-33.0937, -23.096989, -49.52822), (-22.795338, -23.096989, -55.03281), (-11.620962, -23.096989, -58.42252), (-1.0942296e-14, -23.096989, -59.567085), (11.620962, -23.096989, -58.42252), (22.795338, -23.096989, -55.03281), (33.0937, -23.096989, -49.52822), (42.12029, -23.096989, -42.12029), (49.52822, -23.096989, -33.0937), (55.03281, -23.096989, -22.795338), (58.42252, -23.096989, -11.620962), (63.889256, -20.786741, 0), (62.66164, -20.786741, 12.464175), (59.025974, -20.786741, 24.44936), (53.121975, -20.786741, 35.49497), (45.176525, -20.786741, 45.176525), (35.49497, -20.786741, 53.121975), (24.44936, -20.786741, 59.025974), (12.464175, -20.786741, 62.66164), (3.9120886e-15, -20.786741, 63.889256), (-12.464175, -20.786741, 62.66164), (-24.44936, -20.786741, 59.025974), (-35.49497, -20.786741, 53.121975), (-45.176525, -20.786741, 45.176525), (-53.121975, -20.786741, 35.49497), (-59.025974, -20.786741, 24.44936), (-62.66164, -20.786741, 12.464175), (-63.889256, -20.786741, 7.824177e-15), (-62.66164, -20.786741, -12.464175), (-59.025974, -20.786741, -24.44936), (-53.121975, -20.786741, -35.49497), (-45.176525, -20.786741, -45.176525), (-35.49497, -20.786741, -53.121975), (-24.44936, -20.786741, -59.025974), (-12.464175, -20.786741, -62.66164), (-1.1736266e-14, -20.786741, -63.889256), (12.464175, -20.786741, -62.66164), (24.44936, -20.786741, -59.025974), (35.49497, -20.786741, -53.121975), (45.176525, -20.786741, -45.176525), (53.121975, -20.786741, -35.49497), (59.025974, -20.786741, -24.44936), (62.66164, -20.786741, -12.464175), (67.67767, -17.67767, 0), (66.37726, -17.67767, 13.2032585), (62.526012, -17.67767, 25.899122), (56.271927, -17.67767, 37.599697), (47.85534, -17.67767, 47.85534), (37.599697, -17.67767, 56.271927), (25.899122, -17.67767, 62.526012), (13.2032585, -17.67767, 66.37726), (4.144062e-15, -17.67767, 67.67767), (-13.2032585, -17.67767, 66.37726), (-25.899122, -17.67767, 62.526012), (-37.599697, -17.67767, 56.271927), (-47.85534, -17.67767, 47.85534), (-56.271927, -17.67767, 37.599697), (-62.526012, -17.67767, 25.899122), (-66.37726, -17.67767, 13.2032585), (-67.67767, -17.67767, 8.288124e-15), (-66.37726, -17.67767, -13.2032585), (-62.526012, -17.67767, -25.899122), (-56.271927, -17.67767, -37.599697), (-47.85534, -17.67767, -47.85534), (-37.599697, -17.67767, -56.271927), (-25.899122, -17.67767, -62.526012), (-13.2032585, -17.67767, -66.37726), (-1.2432186e-14, -17.67767, -67.67767), (13.2032585, -17.67767, -66.37726), (25.899122, -17.67767, -62.526012), (37.599697, -17.67767, -56.271927), (47.85534, -17.67767, -47.85534), (56.271927, -17.67767, -37.599697), (62.526012, -17.67767, -25.899122), (66.37726, -17.67767, -13.2032585), (70.78674, -13.889256, 0), (69.42659, -13.889256, 13.809808), (65.39842, -13.889256, 27.088913), (58.857025, -13.889256, 39.327007), (50.053783, -13.889256, 50.053783), (39.327007, -13.889256, 58.857025), (27.088913, -13.889256, 65.39842), (13.809808, -13.889256, 69.42659), (4.334438e-15, -13.889256, 70.78674), (-13.809808, -13.889256, 69.42659), (-27.088913, -13.889256, 65.39842), (-39.327007, -13.889256, 58.857025), (-50.053783, -13.889256, 50.053783), (-58.857025, -13.889256, 39.327007), (-65.39842, -13.889256, 27.088913), (-69.42659, -13.889256, 13.809808), (-70.78674, -13.889256, 8.668876e-15), (-69.42659, -13.889256, -13.809808), (-65.39842, -13.889256, -27.088913), (-58.857025, -13.889256, -39.327007), (-50.053783, -13.889256, -50.053783), (-39.327007, -13.889256, -58.857025), (-27.088913, -13.889256, -65.39842), (-13.809808, -13.889256, -69.42659), (-1.30033135e-14, -13.889256, -70.78674), (13.809808, -13.889256, -69.42659), (27.088913, -13.889256, -65.39842), (39.327007, -13.889256, -58.857025), (50.053783, -13.889256, -50.053783), (58.857025, -13.889256, -39.327007), (65.39842, -13.889256, -27.088913), (69.42659, -13.889256, -13.809808), (73.096985, -9.567086, 0), (71.69245, -9.567086, 14.260515), (67.532814, -9.567086, 27.973007), (60.777924, -9.567086, 40.61051), (51.687378, -9.567086, 51.687378), (40.61051, -9.567086, 60.777924), (27.973007, -9.567086, 67.532814), (14.260515, -9.567086, 71.69245), (4.4758995e-15, -9.567086, 73.096985), (-14.260515, -9.567086, 71.69245), (-27.973007, -9.567086, 67.532814), (-40.61051, -9.567086, 60.777924), (-51.687378, -9.567086, 51.687378), (-60.777924, -9.567086, 40.61051), (-67.532814, -9.567086, 27.973007), (-71.69245, -9.567086, 14.260515), (-73.096985, -9.567086, 8.951799e-15), (-71.69245, -9.567086, -14.260515), (-67.532814, -9.567086, -27.973007), (-60.777924, -9.567086, -40.61051), (-51.687378, -9.567086, -51.687378), (-40.61051, -9.567086, -60.777924), (-27.973007, -9.567086, -67.532814), (-14.260515, -9.567086, -71.69245), (-1.3427699e-14, -9.567086, -73.096985), (14.260515, -9.567086, -71.69245), (27.973007, -9.567086, -67.532814), (40.61051, -9.567086, -60.777924), (51.687378, -9.567086, -51.687378), (60.777924, -9.567086, -40.61051), (67.532814, -9.567086, -27.973007), (71.69245, -9.567086, -14.260515), (74.51963, -4.877258, 0), (73.08776, -4.877258, 14.538059), (68.84716, -4.877258, 28.51743), (61.960808, -4.877258, 41.40089), (52.693336, -4.877258, 52.693336), (41.40089, -4.877258, 61.960808), (28.51743, -4.877258, 68.84716), (14.538059, -4.877258, 73.08776), (4.5630114e-15, -4.877258, 74.51963), (-14.538059, -4.877258, 73.08776), (-28.51743, -4.877258, 68.84716), (-41.40089, -4.877258, 61.960808), (-52.693336, -4.877258, 52.693336), (-61.960808, -4.877258, 41.40089), (-68.84716, -4.877258, 28.51743), (-73.08776, -4.877258, 14.538059), (-74.51963, -4.877258, 9.126023e-15), (-73.08776, -4.877258, -14.538059), (-68.84716, -4.877258, -28.51743), (-61.960808, -4.877258, -41.40089), (-52.693336, -4.877258, -52.693336), (-41.40089, -4.877258, -61.960808), (-28.51743, -4.877258, -68.84716), (-14.538059, -4.877258, -73.08776), (-1.3689034e-14, -4.877258, -74.51963), (14.538059, -4.877258, -73.08776), (28.51743, -4.877258, -68.84716), (41.40089, -4.877258, -61.960808), (52.693336, -4.877258, -52.693336), (61.960808, -4.877258, -41.40089), (68.84716, -4.877258, -28.51743), (73.08776, -4.877258, -14.538059)] + float2[] primvars:st = [(1, 0), (1, 0.03125), (0.96875, 0.03125), (0.96875, 0), (0.96875, 0), (0.96875, 0.03125), (0.9375, 0.03125), (0.9375, 0), (0.9375, 0), (0.9375, 0.03125), (0.90625, 0.03125), (0.90625, 0), (0.90625, 0), (0.90625, 0.03125), (0.875, 0.03125), (0.875, 0), (0.875, 0), (0.875, 0.03125), (0.84375, 0.03125), (0.84375, 0), (0.84375, 0), (0.84375, 0.03125), (0.8125, 0.03125), (0.8125, 0), (0.8125, 0), (0.8125, 0.03125), (0.78125, 0.03125), (0.78125, 0), (0.78125, 0), (0.78125, 0.03125), (0.75, 0.03125), (0.75, 0), (0.75, 0), (0.75, 0.03125), (0.71875, 0.03125), (0.71875, 0), (0.71875, 0), (0.71875, 0.03125), (0.6875, 0.03125), (0.6875, 0), (0.6875, 0), (0.6875, 0.03125), (0.65625, 0.03125), (0.65625, 0), (0.65625, 0), (0.65625, 0.03125), (0.625, 0.03125), (0.625, 0), (0.625, 0), (0.625, 0.03125), (0.59375, 0.03125), (0.59375, 0), (0.59375, 0), (0.59375, 0.03125), (0.5625, 0.03125), (0.5625, 0), (0.5625, 0), (0.5625, 0.03125), (0.53125, 0.03125), (0.53125, 0), (0.53125, 0), (0.53125, 0.03125), (0.5, 0.03125), (0.5, 0), (0.5, 0), (0.5, 0.03125), (0.46875, 0.03125), (0.46875, 0), (0.46875, 0), (0.46875, 0.03125), (0.4375, 0.03125), (0.4375, 0), (0.4375, 0), (0.4375, 0.03125), (0.40625, 0.03125), (0.40625, 0), (0.40625, 0), (0.40625, 0.03125), (0.375, 0.03125), (0.375, 0), (0.375, 0), (0.375, 0.03125), (0.34375, 0.03125), (0.34375, 0), (0.34375, 0), (0.34375, 0.03125), (0.3125, 0.03125), (0.3125, 0), (0.3125, 0), (0.3125, 0.03125), (0.28125, 0.03125), (0.28125, 0), (0.28125, 0), (0.28125, 0.03125), (0.25, 0.03125), (0.25, 0), (0.25, 0), (0.25, 0.03125), (0.21875, 0.03125), (0.21875, 0), (0.21875, 0), (0.21875, 0.03125), (0.1875, 0.03125), (0.1875, 0), (0.1875, 0), (0.1875, 0.03125), (0.15625, 0.03125), (0.15625, 0), (0.15625, 0), (0.15625, 0.03125), (0.125, 0.03125), (0.125, 0), (0.125, 0), (0.125, 0.03125), (0.09375, 0.03125), (0.09375, 0), (0.09375, 0), (0.09375, 0.03125), (0.0625, 0.03125), (0.0625, 0), (0.0625, 0), (0.0625, 0.03125), (0.03125, 0.03125), (0.03125, 0), (0.03125, 0), (0.03125, 0.03125), (1, 0.03125), (1, 0), (1, 0.03125), (1, 0.0625), (0.96875, 0.0625), (0.96875, 0.03125), (0.96875, 0.03125), (0.96875, 0.0625), (0.9375, 0.0625), (0.9375, 0.03125), (0.9375, 0.03125), (0.9375, 0.0625), (0.90625, 0.0625), (0.90625, 0.03125), (0.90625, 0.03125), (0.90625, 0.0625), (0.875, 0.0625), (0.875, 0.03125), (0.875, 0.03125), (0.875, 0.0625), (0.84375, 0.0625), (0.84375, 0.03125), (0.84375, 0.03125), (0.84375, 0.0625), (0.8125, 0.0625), (0.8125, 0.03125), (0.8125, 0.03125), (0.8125, 0.0625), (0.78125, 0.0625), (0.78125, 0.03125), (0.78125, 0.03125), (0.78125, 0.0625), (0.75, 0.0625), (0.75, 0.03125), (0.75, 0.03125), (0.75, 0.0625), (0.71875, 0.0625), (0.71875, 0.03125), (0.71875, 0.03125), (0.71875, 0.0625), (0.6875, 0.0625), (0.6875, 0.03125), (0.6875, 0.03125), (0.6875, 0.0625), (0.65625, 0.0625), (0.65625, 0.03125), (0.65625, 0.03125), (0.65625, 0.0625), (0.625, 0.0625), (0.625, 0.03125), (0.625, 0.03125), (0.625, 0.0625), (0.59375, 0.0625), (0.59375, 0.03125), (0.59375, 0.03125), (0.59375, 0.0625), (0.5625, 0.0625), (0.5625, 0.03125), (0.5625, 0.03125), (0.5625, 0.0625), (0.53125, 0.0625), (0.53125, 0.03125), (0.53125, 0.03125), (0.53125, 0.0625), (0.5, 0.0625), (0.5, 0.03125), (0.5, 0.03125), (0.5, 0.0625), (0.46875, 0.0625), (0.46875, 0.03125), (0.46875, 0.03125), (0.46875, 0.0625), (0.4375, 0.0625), (0.4375, 0.03125), (0.4375, 0.03125), (0.4375, 0.0625), (0.40625, 0.0625), (0.40625, 0.03125), (0.40625, 0.03125), (0.40625, 0.0625), (0.375, 0.0625), (0.375, 0.03125), (0.375, 0.03125), (0.375, 0.0625), (0.34375, 0.0625), (0.34375, 0.03125), (0.34375, 0.03125), (0.34375, 0.0625), (0.3125, 0.0625), (0.3125, 0.03125), (0.3125, 0.03125), (0.3125, 0.0625), (0.28125, 0.0625), (0.28125, 0.03125), (0.28125, 0.03125), (0.28125, 0.0625), (0.25, 0.0625), (0.25, 0.03125), (0.25, 0.03125), (0.25, 0.0625), (0.21875, 0.0625), (0.21875, 0.03125), (0.21875, 0.03125), (0.21875, 0.0625), (0.1875, 0.0625), (0.1875, 0.03125), (0.1875, 0.03125), (0.1875, 0.0625), (0.15625, 0.0625), (0.15625, 0.03125), (0.15625, 0.03125), (0.15625, 0.0625), (0.125, 0.0625), (0.125, 0.03125), (0.125, 0.03125), (0.125, 0.0625), (0.09375, 0.0625), (0.09375, 0.03125), (0.09375, 0.03125), (0.09375, 0.0625), (0.0625, 0.0625), (0.0625, 0.03125), (0.0625, 0.03125), (0.0625, 0.0625), (0.03125, 0.0625), (0.03125, 0.03125), (0.03125, 0.03125), (0.03125, 0.0625), (1, 0.0625), (1, 0.03125), (1, 0.0625), (1, 0.09375), (0.96875, 0.09375), (0.96875, 0.0625), (0.96875, 0.0625), (0.96875, 0.09375), (0.9375, 0.09375), (0.9375, 0.0625), (0.9375, 0.0625), (0.9375, 0.09375), (0.90625, 0.09375), (0.90625, 0.0625), (0.90625, 0.0625), (0.90625, 0.09375), (0.875, 0.09375), (0.875, 0.0625), (0.875, 0.0625), (0.875, 0.09375), (0.84375, 0.09375), (0.84375, 0.0625), (0.84375, 0.0625), (0.84375, 0.09375), (0.8125, 0.09375), (0.8125, 0.0625), (0.8125, 0.0625), (0.8125, 0.09375), (0.78125, 0.09375), (0.78125, 0.0625), (0.78125, 0.0625), (0.78125, 0.09375), (0.75, 0.09375), (0.75, 0.0625), (0.75, 0.0625), (0.75, 0.09375), (0.71875, 0.09375), (0.71875, 0.0625), (0.71875, 0.0625), (0.71875, 0.09375), (0.6875, 0.09375), (0.6875, 0.0625), (0.6875, 0.0625), (0.6875, 0.09375), (0.65625, 0.09375), (0.65625, 0.0625), (0.65625, 0.0625), (0.65625, 0.09375), (0.625, 0.09375), (0.625, 0.0625), (0.625, 0.0625), (0.625, 0.09375), (0.59375, 0.09375), (0.59375, 0.0625), (0.59375, 0.0625), (0.59375, 0.09375), (0.5625, 0.09375), (0.5625, 0.0625), (0.5625, 0.0625), (0.5625, 0.09375), (0.53125, 0.09375), (0.53125, 0.0625), (0.53125, 0.0625), (0.53125, 0.09375), (0.5, 0.09375), (0.5, 0.0625), (0.5, 0.0625), (0.5, 0.09375), (0.46875, 0.09375), (0.46875, 0.0625), (0.46875, 0.0625), (0.46875, 0.09375), (0.4375, 0.09375), (0.4375, 0.0625), (0.4375, 0.0625), (0.4375, 0.09375), (0.40625, 0.09375), (0.40625, 0.0625), (0.40625, 0.0625), (0.40625, 0.09375), (0.375, 0.09375), (0.375, 0.0625), (0.375, 0.0625), (0.375, 0.09375), (0.34375, 0.09375), (0.34375, 0.0625), (0.34375, 0.0625), (0.34375, 0.09375), (0.3125, 0.09375), (0.3125, 0.0625), (0.3125, 0.0625), (0.3125, 0.09375), (0.28125, 0.09375), (0.28125, 0.0625), (0.28125, 0.0625), (0.28125, 0.09375), (0.25, 0.09375), (0.25, 0.0625), (0.25, 0.0625), (0.25, 0.09375), (0.21875, 0.09375), (0.21875, 0.0625), (0.21875, 0.0625), (0.21875, 0.09375), (0.1875, 0.09375), (0.1875, 0.0625), (0.1875, 0.0625), (0.1875, 0.09375), (0.15625, 0.09375), (0.15625, 0.0625), (0.15625, 0.0625), (0.15625, 0.09375), (0.125, 0.09375), (0.125, 0.0625), (0.125, 0.0625), (0.125, 0.09375), (0.09375, 0.09375), (0.09375, 0.0625), (0.09375, 0.0625), (0.09375, 0.09375), (0.0625, 0.09375), (0.0625, 0.0625), (0.0625, 0.0625), (0.0625, 0.09375), (0.03125, 0.09375), (0.03125, 0.0625), (0.03125, 0.0625), (0.03125, 0.09375), (1, 0.09375), (1, 0.0625), (1, 0.09375), (1, 0.125), (0.96875, 0.125), (0.96875, 0.09375), (0.96875, 0.09375), (0.96875, 0.125), (0.9375, 0.125), (0.9375, 0.09375), (0.9375, 0.09375), (0.9375, 0.125), (0.90625, 0.125), (0.90625, 0.09375), (0.90625, 0.09375), (0.90625, 0.125), (0.875, 0.125), (0.875, 0.09375), (0.875, 0.09375), (0.875, 0.125), (0.84375, 0.125), (0.84375, 0.09375), (0.84375, 0.09375), (0.84375, 0.125), (0.8125, 0.125), (0.8125, 0.09375), (0.8125, 0.09375), (0.8125, 0.125), (0.78125, 0.125), (0.78125, 0.09375), (0.78125, 0.09375), (0.78125, 0.125), (0.75, 0.125), (0.75, 0.09375), (0.75, 0.09375), (0.75, 0.125), (0.71875, 0.125), (0.71875, 0.09375), (0.71875, 0.09375), (0.71875, 0.125), (0.6875, 0.125), (0.6875, 0.09375), (0.6875, 0.09375), (0.6875, 0.125), (0.65625, 0.125), (0.65625, 0.09375), (0.65625, 0.09375), (0.65625, 0.125), (0.625, 0.125), (0.625, 0.09375), (0.625, 0.09375), (0.625, 0.125), (0.59375, 0.125), (0.59375, 0.09375), (0.59375, 0.09375), (0.59375, 0.125), (0.5625, 0.125), (0.5625, 0.09375), (0.5625, 0.09375), (0.5625, 0.125), (0.53125, 0.125), (0.53125, 0.09375), (0.53125, 0.09375), (0.53125, 0.125), (0.5, 0.125), (0.5, 0.09375), (0.5, 0.09375), (0.5, 0.125), (0.46875, 0.125), (0.46875, 0.09375), (0.46875, 0.09375), (0.46875, 0.125), (0.4375, 0.125), (0.4375, 0.09375), (0.4375, 0.09375), (0.4375, 0.125), (0.40625, 0.125), (0.40625, 0.09375), (0.40625, 0.09375), (0.40625, 0.125), (0.375, 0.125), (0.375, 0.09375), (0.375, 0.09375), (0.375, 0.125), (0.34375, 0.125), (0.34375, 0.09375), (0.34375, 0.09375), (0.34375, 0.125), (0.3125, 0.125), (0.3125, 0.09375), (0.3125, 0.09375), (0.3125, 0.125), (0.28125, 0.125), (0.28125, 0.09375), (0.28125, 0.09375), (0.28125, 0.125), (0.25, 0.125), (0.25, 0.09375), (0.25, 0.09375), (0.25, 0.125), (0.21875, 0.125), (0.21875, 0.09375), (0.21875, 0.09375), (0.21875, 0.125), (0.1875, 0.125), (0.1875, 0.09375), (0.1875, 0.09375), (0.1875, 0.125), (0.15625, 0.125), (0.15625, 0.09375), (0.15625, 0.09375), (0.15625, 0.125), (0.125, 0.125), (0.125, 0.09375), (0.125, 0.09375), (0.125, 0.125), (0.09375, 0.125), (0.09375, 0.09375), (0.09375, 0.09375), (0.09375, 0.125), (0.0625, 0.125), (0.0625, 0.09375), (0.0625, 0.09375), (0.0625, 0.125), (0.03125, 0.125), (0.03125, 0.09375), (0.03125, 0.09375), (0.03125, 0.125), (1, 0.125), (1, 0.09375), (1, 0.125), (1, 0.15625), (0.96875, 0.15625), (0.96875, 0.125), (0.96875, 0.125), (0.96875, 0.15625), (0.9375, 0.15625), (0.9375, 0.125), (0.9375, 0.125), (0.9375, 0.15625), (0.90625, 0.15625), (0.90625, 0.125), (0.90625, 0.125), (0.90625, 0.15625), (0.875, 0.15625), (0.875, 0.125), (0.875, 0.125), (0.875, 0.15625), (0.84375, 0.15625), (0.84375, 0.125), (0.84375, 0.125), (0.84375, 0.15625), (0.8125, 0.15625), (0.8125, 0.125), (0.8125, 0.125), (0.8125, 0.15625), (0.78125, 0.15625), (0.78125, 0.125), (0.78125, 0.125), (0.78125, 0.15625), (0.75, 0.15625), (0.75, 0.125), (0.75, 0.125), (0.75, 0.15625), (0.71875, 0.15625), (0.71875, 0.125), (0.71875, 0.125), (0.71875, 0.15625), (0.6875, 0.15625), (0.6875, 0.125), (0.6875, 0.125), (0.6875, 0.15625), (0.65625, 0.15625), (0.65625, 0.125), (0.65625, 0.125), (0.65625, 0.15625), (0.625, 0.15625), (0.625, 0.125), (0.625, 0.125), (0.625, 0.15625), (0.59375, 0.15625), (0.59375, 0.125), (0.59375, 0.125), (0.59375, 0.15625), (0.5625, 0.15625), (0.5625, 0.125), (0.5625, 0.125), (0.5625, 0.15625), (0.53125, 0.15625), (0.53125, 0.125), (0.53125, 0.125), (0.53125, 0.15625), (0.5, 0.15625), (0.5, 0.125), (0.5, 0.125), (0.5, 0.15625), (0.46875, 0.15625), (0.46875, 0.125), (0.46875, 0.125), (0.46875, 0.15625), (0.4375, 0.15625), (0.4375, 0.125), (0.4375, 0.125), (0.4375, 0.15625), (0.40625, 0.15625), (0.40625, 0.125), (0.40625, 0.125), (0.40625, 0.15625), (0.375, 0.15625), (0.375, 0.125), (0.375, 0.125), (0.375, 0.15625), (0.34375, 0.15625), (0.34375, 0.125), (0.34375, 0.125), (0.34375, 0.15625), (0.3125, 0.15625), (0.3125, 0.125), (0.3125, 0.125), (0.3125, 0.15625), (0.28125, 0.15625), (0.28125, 0.125), (0.28125, 0.125), (0.28125, 0.15625), (0.25, 0.15625), (0.25, 0.125), (0.25, 0.125), (0.25, 0.15625), (0.21875, 0.15625), (0.21875, 0.125), (0.21875, 0.125), (0.21875, 0.15625), (0.1875, 0.15625), (0.1875, 0.125), (0.1875, 0.125), (0.1875, 0.15625), (0.15625, 0.15625), (0.15625, 0.125), (0.15625, 0.125), (0.15625, 0.15625), (0.125, 0.15625), (0.125, 0.125), (0.125, 0.125), (0.125, 0.15625), (0.09375, 0.15625), (0.09375, 0.125), (0.09375, 0.125), (0.09375, 0.15625), (0.0625, 0.15625), (0.0625, 0.125), (0.0625, 0.125), (0.0625, 0.15625), (0.03125, 0.15625), (0.03125, 0.125), (0.03125, 0.125), (0.03125, 0.15625), (1, 0.15625), (1, 0.125), (1, 0.15625), (1, 0.1875), (0.96875, 0.1875), (0.96875, 0.15625), (0.96875, 0.15625), (0.96875, 0.1875), (0.9375, 0.1875), (0.9375, 0.15625), (0.9375, 0.15625), (0.9375, 0.1875), (0.90625, 0.1875), (0.90625, 0.15625), (0.90625, 0.15625), (0.90625, 0.1875), (0.875, 0.1875), (0.875, 0.15625), (0.875, 0.15625), (0.875, 0.1875), (0.84375, 0.1875), (0.84375, 0.15625), (0.84375, 0.15625), (0.84375, 0.1875), (0.8125, 0.1875), (0.8125, 0.15625), (0.8125, 0.15625), (0.8125, 0.1875), (0.78125, 0.1875), (0.78125, 0.15625), (0.78125, 0.15625), (0.78125, 0.1875), (0.75, 0.1875), (0.75, 0.15625), (0.75, 0.15625), (0.75, 0.1875), (0.71875, 0.1875), (0.71875, 0.15625), (0.71875, 0.15625), (0.71875, 0.1875), (0.6875, 0.1875), (0.6875, 0.15625), (0.6875, 0.15625), (0.6875, 0.1875), (0.65625, 0.1875), (0.65625, 0.15625), (0.65625, 0.15625), (0.65625, 0.1875), (0.625, 0.1875), (0.625, 0.15625), (0.625, 0.15625), (0.625, 0.1875), (0.59375, 0.1875), (0.59375, 0.15625), (0.59375, 0.15625), (0.59375, 0.1875), (0.5625, 0.1875), (0.5625, 0.15625), (0.5625, 0.15625), (0.5625, 0.1875), (0.53125, 0.1875), (0.53125, 0.15625), (0.53125, 0.15625), (0.53125, 0.1875), (0.5, 0.1875), (0.5, 0.15625), (0.5, 0.15625), (0.5, 0.1875), (0.46875, 0.1875), (0.46875, 0.15625), (0.46875, 0.15625), (0.46875, 0.1875), (0.4375, 0.1875), (0.4375, 0.15625), (0.4375, 0.15625), (0.4375, 0.1875), (0.40625, 0.1875), (0.40625, 0.15625), (0.40625, 0.15625), (0.40625, 0.1875), (0.375, 0.1875), (0.375, 0.15625), (0.375, 0.15625), (0.375, 0.1875), (0.34375, 0.1875), (0.34375, 0.15625), (0.34375, 0.15625), (0.34375, 0.1875), (0.3125, 0.1875), (0.3125, 0.15625), (0.3125, 0.15625), (0.3125, 0.1875), (0.28125, 0.1875), (0.28125, 0.15625), (0.28125, 0.15625), (0.28125, 0.1875), (0.25, 0.1875), (0.25, 0.15625), (0.25, 0.15625), (0.25, 0.1875), (0.21875, 0.1875), (0.21875, 0.15625), (0.21875, 0.15625), (0.21875, 0.1875), (0.1875, 0.1875), (0.1875, 0.15625), (0.1875, 0.15625), (0.1875, 0.1875), (0.15625, 0.1875), (0.15625, 0.15625), (0.15625, 0.15625), (0.15625, 0.1875), (0.125, 0.1875), (0.125, 0.15625), (0.125, 0.15625), (0.125, 0.1875), (0.09375, 0.1875), (0.09375, 0.15625), (0.09375, 0.15625), (0.09375, 0.1875), (0.0625, 0.1875), (0.0625, 0.15625), (0.0625, 0.15625), (0.0625, 0.1875), (0.03125, 0.1875), (0.03125, 0.15625), (0.03125, 0.15625), (0.03125, 0.1875), (1, 0.1875), (1, 0.15625), (1, 0.1875), (1, 0.21875), (0.96875, 0.21875), (0.96875, 0.1875), (0.96875, 0.1875), (0.96875, 0.21875), (0.9375, 0.21875), (0.9375, 0.1875), (0.9375, 0.1875), (0.9375, 0.21875), (0.90625, 0.21875), (0.90625, 0.1875), (0.90625, 0.1875), (0.90625, 0.21875), (0.875, 0.21875), (0.875, 0.1875), (0.875, 0.1875), (0.875, 0.21875), (0.84375, 0.21875), (0.84375, 0.1875), (0.84375, 0.1875), (0.84375, 0.21875), (0.8125, 0.21875), (0.8125, 0.1875), (0.8125, 0.1875), (0.8125, 0.21875), (0.78125, 0.21875), (0.78125, 0.1875), (0.78125, 0.1875), (0.78125, 0.21875), (0.75, 0.21875), (0.75, 0.1875), (0.75, 0.1875), (0.75, 0.21875), (0.71875, 0.21875), (0.71875, 0.1875), (0.71875, 0.1875), (0.71875, 0.21875), (0.6875, 0.21875), (0.6875, 0.1875), (0.6875, 0.1875), (0.6875, 0.21875), (0.65625, 0.21875), (0.65625, 0.1875), (0.65625, 0.1875), (0.65625, 0.21875), (0.625, 0.21875), (0.625, 0.1875), (0.625, 0.1875), (0.625, 0.21875), (0.59375, 0.21875), (0.59375, 0.1875), (0.59375, 0.1875), (0.59375, 0.21875), (0.5625, 0.21875), (0.5625, 0.1875), (0.5625, 0.1875), (0.5625, 0.21875), (0.53125, 0.21875), (0.53125, 0.1875), (0.53125, 0.1875), (0.53125, 0.21875), (0.5, 0.21875), (0.5, 0.1875), (0.5, 0.1875), (0.5, 0.21875), (0.46875, 0.21875), (0.46875, 0.1875), (0.46875, 0.1875), (0.46875, 0.21875), (0.4375, 0.21875), (0.4375, 0.1875), (0.4375, 0.1875), (0.4375, 0.21875), (0.40625, 0.21875), (0.40625, 0.1875), (0.40625, 0.1875), (0.40625, 0.21875), (0.375, 0.21875), (0.375, 0.1875), (0.375, 0.1875), (0.375, 0.21875), (0.34375, 0.21875), (0.34375, 0.1875), (0.34375, 0.1875), (0.34375, 0.21875), (0.3125, 0.21875), (0.3125, 0.1875), (0.3125, 0.1875), (0.3125, 0.21875), (0.28125, 0.21875), (0.28125, 0.1875), (0.28125, 0.1875), (0.28125, 0.21875), (0.25, 0.21875), (0.25, 0.1875), (0.25, 0.1875), (0.25, 0.21875), (0.21875, 0.21875), (0.21875, 0.1875), (0.21875, 0.1875), (0.21875, 0.21875), (0.1875, 0.21875), (0.1875, 0.1875), (0.1875, 0.1875), (0.1875, 0.21875), (0.15625, 0.21875), (0.15625, 0.1875), (0.15625, 0.1875), (0.15625, 0.21875), (0.125, 0.21875), (0.125, 0.1875), (0.125, 0.1875), (0.125, 0.21875), (0.09375, 0.21875), (0.09375, 0.1875), (0.09375, 0.1875), (0.09375, 0.21875), (0.0625, 0.21875), (0.0625, 0.1875), (0.0625, 0.1875), (0.0625, 0.21875), (0.03125, 0.21875), (0.03125, 0.1875), (0.03125, 0.1875), (0.03125, 0.21875), (1, 0.21875), (1, 0.1875), (1, 0.21875), (1, 0.25), (0.96875, 0.25), (0.96875, 0.21875), (0.96875, 0.21875), (0.96875, 0.25), (0.9375, 0.25), (0.9375, 0.21875), (0.9375, 0.21875), (0.9375, 0.25), (0.90625, 0.25), (0.90625, 0.21875), (0.90625, 0.21875), (0.90625, 0.25), (0.875, 0.25), (0.875, 0.21875), (0.875, 0.21875), (0.875, 0.25), (0.84375, 0.25), (0.84375, 0.21875), (0.84375, 0.21875), (0.84375, 0.25), (0.8125, 0.25), (0.8125, 0.21875), (0.8125, 0.21875), (0.8125, 0.25), (0.78125, 0.25), (0.78125, 0.21875), (0.78125, 0.21875), (0.78125, 0.25), (0.75, 0.25), (0.75, 0.21875), (0.75, 0.21875), (0.75, 0.25), (0.71875, 0.25), (0.71875, 0.21875), (0.71875, 0.21875), (0.71875, 0.25), (0.6875, 0.25), (0.6875, 0.21875), (0.6875, 0.21875), (0.6875, 0.25), (0.65625, 0.25), (0.65625, 0.21875), (0.65625, 0.21875), (0.65625, 0.25), (0.625, 0.25), (0.625, 0.21875), (0.625, 0.21875), (0.625, 0.25), (0.59375, 0.25), (0.59375, 0.21875), (0.59375, 0.21875), (0.59375, 0.25), (0.5625, 0.25), (0.5625, 0.21875), (0.5625, 0.21875), (0.5625, 0.25), (0.53125, 0.25), (0.53125, 0.21875), (0.53125, 0.21875), (0.53125, 0.25), (0.5, 0.25), (0.5, 0.21875), (0.5, 0.21875), (0.5, 0.25), (0.46875, 0.25), (0.46875, 0.21875), (0.46875, 0.21875), (0.46875, 0.25), (0.4375, 0.25), (0.4375, 0.21875), (0.4375, 0.21875), (0.4375, 0.25), (0.40625, 0.25), (0.40625, 0.21875), (0.40625, 0.21875), (0.40625, 0.25), (0.375, 0.25), (0.375, 0.21875), (0.375, 0.21875), (0.375, 0.25), (0.34375, 0.25), (0.34375, 0.21875), (0.34375, 0.21875), (0.34375, 0.25), (0.3125, 0.25), (0.3125, 0.21875), (0.3125, 0.21875), (0.3125, 0.25), (0.28125, 0.25), (0.28125, 0.21875), (0.28125, 0.21875), (0.28125, 0.25), (0.25, 0.25), (0.25, 0.21875), (0.25, 0.21875), (0.25, 0.25), (0.21875, 0.25), (0.21875, 0.21875), (0.21875, 0.21875), (0.21875, 0.25), (0.1875, 0.25), (0.1875, 0.21875), (0.1875, 0.21875), (0.1875, 0.25), (0.15625, 0.25), (0.15625, 0.21875), (0.15625, 0.21875), (0.15625, 0.25), (0.125, 0.25), (0.125, 0.21875), (0.125, 0.21875), (0.125, 0.25), (0.09375, 0.25), (0.09375, 0.21875), (0.09375, 0.21875), (0.09375, 0.25), (0.0625, 0.25), (0.0625, 0.21875), (0.0625, 0.21875), (0.0625, 0.25), (0.03125, 0.25), (0.03125, 0.21875), (0.03125, 0.21875), (0.03125, 0.25), (1, 0.25), (1, 0.21875), (1, 0.25), (1, 0.28125), (0.96875, 0.28125), (0.96875, 0.25), (0.96875, 0.25), (0.96875, 0.28125), (0.9375, 0.28125), (0.9375, 0.25), (0.9375, 0.25), (0.9375, 0.28125), (0.90625, 0.28125), (0.90625, 0.25), (0.90625, 0.25), (0.90625, 0.28125), (0.875, 0.28125), (0.875, 0.25), (0.875, 0.25), (0.875, 0.28125), (0.84375, 0.28125), (0.84375, 0.25), (0.84375, 0.25), (0.84375, 0.28125), (0.8125, 0.28125), (0.8125, 0.25), (0.8125, 0.25), (0.8125, 0.28125), (0.78125, 0.28125), (0.78125, 0.25), (0.78125, 0.25), (0.78125, 0.28125), (0.75, 0.28125), (0.75, 0.25), (0.75, 0.25), (0.75, 0.28125), (0.71875, 0.28125), (0.71875, 0.25), (0.71875, 0.25), (0.71875, 0.28125), (0.6875, 0.28125), (0.6875, 0.25), (0.6875, 0.25), (0.6875, 0.28125), (0.65625, 0.28125), (0.65625, 0.25), (0.65625, 0.25), (0.65625, 0.28125), (0.625, 0.28125), (0.625, 0.25), (0.625, 0.25), (0.625, 0.28125), (0.59375, 0.28125), (0.59375, 0.25), (0.59375, 0.25), (0.59375, 0.28125), (0.5625, 0.28125), (0.5625, 0.25), (0.5625, 0.25), (0.5625, 0.28125), (0.53125, 0.28125), (0.53125, 0.25), (0.53125, 0.25), (0.53125, 0.28125), (0.5, 0.28125), (0.5, 0.25), (0.5, 0.25), (0.5, 0.28125), (0.46875, 0.28125), (0.46875, 0.25), (0.46875, 0.25), (0.46875, 0.28125), (0.4375, 0.28125), (0.4375, 0.25), (0.4375, 0.25), (0.4375, 0.28125), (0.40625, 0.28125), (0.40625, 0.25), (0.40625, 0.25), (0.40625, 0.28125), (0.375, 0.28125), (0.375, 0.25), (0.375, 0.25), (0.375, 0.28125), (0.34375, 0.28125), (0.34375, 0.25), (0.34375, 0.25), (0.34375, 0.28125), (0.3125, 0.28125), (0.3125, 0.25), (0.3125, 0.25), (0.3125, 0.28125), (0.28125, 0.28125), (0.28125, 0.25), (0.28125, 0.25), (0.28125, 0.28125), (0.25, 0.28125), (0.25, 0.25), (0.25, 0.25), (0.25, 0.28125), (0.21875, 0.28125), (0.21875, 0.25), (0.21875, 0.25), (0.21875, 0.28125), (0.1875, 0.28125), (0.1875, 0.25), (0.1875, 0.25), (0.1875, 0.28125), (0.15625, 0.28125), (0.15625, 0.25), (0.15625, 0.25), (0.15625, 0.28125), (0.125, 0.28125), (0.125, 0.25), (0.125, 0.25), (0.125, 0.28125), (0.09375, 0.28125), (0.09375, 0.25), (0.09375, 0.25), (0.09375, 0.28125), (0.0625, 0.28125), (0.0625, 0.25), (0.0625, 0.25), (0.0625, 0.28125), (0.03125, 0.28125), (0.03125, 0.25), (0.03125, 0.25), (0.03125, 0.28125), (1, 0.28125), (1, 0.25), (1, 0.28125), (1, 0.3125), (0.96875, 0.3125), (0.96875, 0.28125), (0.96875, 0.28125), (0.96875, 0.3125), (0.9375, 0.3125), (0.9375, 0.28125), (0.9375, 0.28125), (0.9375, 0.3125), (0.90625, 0.3125), (0.90625, 0.28125), (0.90625, 0.28125), (0.90625, 0.3125), (0.875, 0.3125), (0.875, 0.28125), (0.875, 0.28125), (0.875, 0.3125), (0.84375, 0.3125), (0.84375, 0.28125), (0.84375, 0.28125), (0.84375, 0.3125), (0.8125, 0.3125), (0.8125, 0.28125), (0.8125, 0.28125), (0.8125, 0.3125), (0.78125, 0.3125), (0.78125, 0.28125), (0.78125, 0.28125), (0.78125, 0.3125), (0.75, 0.3125), (0.75, 0.28125), (0.75, 0.28125), (0.75, 0.3125), (0.71875, 0.3125), (0.71875, 0.28125), (0.71875, 0.28125), (0.71875, 0.3125), (0.6875, 0.3125), (0.6875, 0.28125), (0.6875, 0.28125), (0.6875, 0.3125), (0.65625, 0.3125), (0.65625, 0.28125), (0.65625, 0.28125), (0.65625, 0.3125), (0.625, 0.3125), (0.625, 0.28125), (0.625, 0.28125), (0.625, 0.3125), (0.59375, 0.3125), (0.59375, 0.28125), (0.59375, 0.28125), (0.59375, 0.3125), (0.5625, 0.3125), (0.5625, 0.28125), (0.5625, 0.28125), (0.5625, 0.3125), (0.53125, 0.3125), (0.53125, 0.28125), (0.53125, 0.28125), (0.53125, 0.3125), (0.5, 0.3125), (0.5, 0.28125), (0.5, 0.28125), (0.5, 0.3125), (0.46875, 0.3125), (0.46875, 0.28125), (0.46875, 0.28125), (0.46875, 0.3125), (0.4375, 0.3125), (0.4375, 0.28125), (0.4375, 0.28125), (0.4375, 0.3125), (0.40625, 0.3125), (0.40625, 0.28125), (0.40625, 0.28125), (0.40625, 0.3125), (0.375, 0.3125), (0.375, 0.28125), (0.375, 0.28125), (0.375, 0.3125), (0.34375, 0.3125), (0.34375, 0.28125), (0.34375, 0.28125), (0.34375, 0.3125), (0.3125, 0.3125), (0.3125, 0.28125), (0.3125, 0.28125), (0.3125, 0.3125), (0.28125, 0.3125), (0.28125, 0.28125), (0.28125, 0.28125), (0.28125, 0.3125), (0.25, 0.3125), (0.25, 0.28125), (0.25, 0.28125), (0.25, 0.3125), (0.21875, 0.3125), (0.21875, 0.28125), (0.21875, 0.28125), (0.21875, 0.3125), (0.1875, 0.3125), (0.1875, 0.28125), (0.1875, 0.28125), (0.1875, 0.3125), (0.15625, 0.3125), (0.15625, 0.28125), (0.15625, 0.28125), (0.15625, 0.3125), (0.125, 0.3125), (0.125, 0.28125), (0.125, 0.28125), (0.125, 0.3125), (0.09375, 0.3125), (0.09375, 0.28125), (0.09375, 0.28125), (0.09375, 0.3125), (0.0625, 0.3125), (0.0625, 0.28125), (0.0625, 0.28125), (0.0625, 0.3125), (0.03125, 0.3125), (0.03125, 0.28125), (0.03125, 0.28125), (0.03125, 0.3125), (1, 0.3125), (1, 0.28125), (1, 0.3125), (1, 0.34375), (0.96875, 0.34375), (0.96875, 0.3125), (0.96875, 0.3125), (0.96875, 0.34375), (0.9375, 0.34375), (0.9375, 0.3125), (0.9375, 0.3125), (0.9375, 0.34375), (0.90625, 0.34375), (0.90625, 0.3125), (0.90625, 0.3125), (0.90625, 0.34375), (0.875, 0.34375), (0.875, 0.3125), (0.875, 0.3125), (0.875, 0.34375), (0.84375, 0.34375), (0.84375, 0.3125), (0.84375, 0.3125), (0.84375, 0.34375), (0.8125, 0.34375), (0.8125, 0.3125), (0.8125, 0.3125), (0.8125, 0.34375), (0.78125, 0.34375), (0.78125, 0.3125), (0.78125, 0.3125), (0.78125, 0.34375), (0.75, 0.34375), (0.75, 0.3125), (0.75, 0.3125), (0.75, 0.34375), (0.71875, 0.34375), (0.71875, 0.3125), (0.71875, 0.3125), (0.71875, 0.34375), (0.6875, 0.34375), (0.6875, 0.3125), (0.6875, 0.3125), (0.6875, 0.34375), (0.65625, 0.34375), (0.65625, 0.3125), (0.65625, 0.3125), (0.65625, 0.34375), (0.625, 0.34375), (0.625, 0.3125), (0.625, 0.3125), (0.625, 0.34375), (0.59375, 0.34375), (0.59375, 0.3125), (0.59375, 0.3125), (0.59375, 0.34375), (0.5625, 0.34375), (0.5625, 0.3125), (0.5625, 0.3125), (0.5625, 0.34375), (0.53125, 0.34375), (0.53125, 0.3125), (0.53125, 0.3125), (0.53125, 0.34375), (0.5, 0.34375), (0.5, 0.3125), (0.5, 0.3125), (0.5, 0.34375), (0.46875, 0.34375), (0.46875, 0.3125), (0.46875, 0.3125), (0.46875, 0.34375), (0.4375, 0.34375), (0.4375, 0.3125), (0.4375, 0.3125), (0.4375, 0.34375), (0.40625, 0.34375), (0.40625, 0.3125), (0.40625, 0.3125), (0.40625, 0.34375), (0.375, 0.34375), (0.375, 0.3125), (0.375, 0.3125), (0.375, 0.34375), (0.34375, 0.34375), (0.34375, 0.3125), (0.34375, 0.3125), (0.34375, 0.34375), (0.3125, 0.34375), (0.3125, 0.3125), (0.3125, 0.3125), (0.3125, 0.34375), (0.28125, 0.34375), (0.28125, 0.3125), (0.28125, 0.3125), (0.28125, 0.34375), (0.25, 0.34375), (0.25, 0.3125), (0.25, 0.3125), (0.25, 0.34375), (0.21875, 0.34375), (0.21875, 0.3125), (0.21875, 0.3125), (0.21875, 0.34375), (0.1875, 0.34375), (0.1875, 0.3125), (0.1875, 0.3125), (0.1875, 0.34375), (0.15625, 0.34375), (0.15625, 0.3125), (0.15625, 0.3125), (0.15625, 0.34375), (0.125, 0.34375), (0.125, 0.3125), (0.125, 0.3125), (0.125, 0.34375), (0.09375, 0.34375), (0.09375, 0.3125), (0.09375, 0.3125), (0.09375, 0.34375), (0.0625, 0.34375), (0.0625, 0.3125), (0.0625, 0.3125), (0.0625, 0.34375), (0.03125, 0.34375), (0.03125, 0.3125), (0.03125, 0.3125), (0.03125, 0.34375), (1, 0.34375), (1, 0.3125), (1, 0.34375), (1, 0.375), (0.96875, 0.375), (0.96875, 0.34375), (0.96875, 0.34375), (0.96875, 0.375), (0.9375, 0.375), (0.9375, 0.34375), (0.9375, 0.34375), (0.9375, 0.375), (0.90625, 0.375), (0.90625, 0.34375), (0.90625, 0.34375), (0.90625, 0.375), (0.875, 0.375), (0.875, 0.34375), (0.875, 0.34375), (0.875, 0.375), (0.84375, 0.375), (0.84375, 0.34375), (0.84375, 0.34375), (0.84375, 0.375), (0.8125, 0.375), (0.8125, 0.34375), (0.8125, 0.34375), (0.8125, 0.375), (0.78125, 0.375), (0.78125, 0.34375), (0.78125, 0.34375), (0.78125, 0.375), (0.75, 0.375), (0.75, 0.34375), (0.75, 0.34375), (0.75, 0.375), (0.71875, 0.375), (0.71875, 0.34375), (0.71875, 0.34375), (0.71875, 0.375), (0.6875, 0.375), (0.6875, 0.34375), (0.6875, 0.34375), (0.6875, 0.375), (0.65625, 0.375), (0.65625, 0.34375), (0.65625, 0.34375), (0.65625, 0.375), (0.625, 0.375), (0.625, 0.34375), (0.625, 0.34375), (0.625, 0.375), (0.59375, 0.375), (0.59375, 0.34375), (0.59375, 0.34375), (0.59375, 0.375), (0.5625, 0.375), (0.5625, 0.34375), (0.5625, 0.34375), (0.5625, 0.375), (0.53125, 0.375), (0.53125, 0.34375), (0.53125, 0.34375), (0.53125, 0.375), (0.5, 0.375), (0.5, 0.34375), (0.5, 0.34375), (0.5, 0.375), (0.46875, 0.375), (0.46875, 0.34375), (0.46875, 0.34375), (0.46875, 0.375), (0.4375, 0.375), (0.4375, 0.34375), (0.4375, 0.34375), (0.4375, 0.375), (0.40625, 0.375), (0.40625, 0.34375), (0.40625, 0.34375), (0.40625, 0.375), (0.375, 0.375), (0.375, 0.34375), (0.375, 0.34375), (0.375, 0.375), (0.34375, 0.375), (0.34375, 0.34375), (0.34375, 0.34375), (0.34375, 0.375), (0.3125, 0.375), (0.3125, 0.34375), (0.3125, 0.34375), (0.3125, 0.375), (0.28125, 0.375), (0.28125, 0.34375), (0.28125, 0.34375), (0.28125, 0.375), (0.25, 0.375), (0.25, 0.34375), (0.25, 0.34375), (0.25, 0.375), (0.21875, 0.375), (0.21875, 0.34375), (0.21875, 0.34375), (0.21875, 0.375), (0.1875, 0.375), (0.1875, 0.34375), (0.1875, 0.34375), (0.1875, 0.375), (0.15625, 0.375), (0.15625, 0.34375), (0.15625, 0.34375), (0.15625, 0.375), (0.125, 0.375), (0.125, 0.34375), (0.125, 0.34375), (0.125, 0.375), (0.09375, 0.375), (0.09375, 0.34375), (0.09375, 0.34375), (0.09375, 0.375), (0.0625, 0.375), (0.0625, 0.34375), (0.0625, 0.34375), (0.0625, 0.375), (0.03125, 0.375), (0.03125, 0.34375), (0.03125, 0.34375), (0.03125, 0.375), (1, 0.375), (1, 0.34375), (1, 0.375), (1, 0.40625), (0.96875, 0.40625), (0.96875, 0.375), (0.96875, 0.375), (0.96875, 0.40625), (0.9375, 0.40625), (0.9375, 0.375), (0.9375, 0.375), (0.9375, 0.40625), (0.90625, 0.40625), (0.90625, 0.375), (0.90625, 0.375), (0.90625, 0.40625), (0.875, 0.40625), (0.875, 0.375), (0.875, 0.375), (0.875, 0.40625), (0.84375, 0.40625), (0.84375, 0.375), (0.84375, 0.375), (0.84375, 0.40625), (0.8125, 0.40625), (0.8125, 0.375), (0.8125, 0.375), (0.8125, 0.40625), (0.78125, 0.40625), (0.78125, 0.375), (0.78125, 0.375), (0.78125, 0.40625), (0.75, 0.40625), (0.75, 0.375), (0.75, 0.375), (0.75, 0.40625), (0.71875, 0.40625), (0.71875, 0.375), (0.71875, 0.375), (0.71875, 0.40625), (0.6875, 0.40625), (0.6875, 0.375), (0.6875, 0.375), (0.6875, 0.40625), (0.65625, 0.40625), (0.65625, 0.375), (0.65625, 0.375), (0.65625, 0.40625), (0.625, 0.40625), (0.625, 0.375), (0.625, 0.375), (0.625, 0.40625), (0.59375, 0.40625), (0.59375, 0.375), (0.59375, 0.375), (0.59375, 0.40625), (0.5625, 0.40625), (0.5625, 0.375), (0.5625, 0.375), (0.5625, 0.40625), (0.53125, 0.40625), (0.53125, 0.375), (0.53125, 0.375), (0.53125, 0.40625), (0.5, 0.40625), (0.5, 0.375), (0.5, 0.375), (0.5, 0.40625), (0.46875, 0.40625), (0.46875, 0.375), (0.46875, 0.375), (0.46875, 0.40625), (0.4375, 0.40625), (0.4375, 0.375), (0.4375, 0.375), (0.4375, 0.40625), (0.40625, 0.40625), (0.40625, 0.375), (0.40625, 0.375), (0.40625, 0.40625), (0.375, 0.40625), (0.375, 0.375), (0.375, 0.375), (0.375, 0.40625), (0.34375, 0.40625), (0.34375, 0.375), (0.34375, 0.375), (0.34375, 0.40625), (0.3125, 0.40625), (0.3125, 0.375), (0.3125, 0.375), (0.3125, 0.40625), (0.28125, 0.40625), (0.28125, 0.375), (0.28125, 0.375), (0.28125, 0.40625), (0.25, 0.40625), (0.25, 0.375), (0.25, 0.375), (0.25, 0.40625), (0.21875, 0.40625), (0.21875, 0.375), (0.21875, 0.375), (0.21875, 0.40625), (0.1875, 0.40625), (0.1875, 0.375), (0.1875, 0.375), (0.1875, 0.40625), (0.15625, 0.40625), (0.15625, 0.375), (0.15625, 0.375), (0.15625, 0.40625), (0.125, 0.40625), (0.125, 0.375), (0.125, 0.375), (0.125, 0.40625), (0.09375, 0.40625), (0.09375, 0.375), (0.09375, 0.375), (0.09375, 0.40625), (0.0625, 0.40625), (0.0625, 0.375), (0.0625, 0.375), (0.0625, 0.40625), (0.03125, 0.40625), (0.03125, 0.375), (0.03125, 0.375), (0.03125, 0.40625), (1, 0.40625), (1, 0.375), (1, 0.40625), (1, 0.4375), (0.96875, 0.4375), (0.96875, 0.40625), (0.96875, 0.40625), (0.96875, 0.4375), (0.9375, 0.4375), (0.9375, 0.40625), (0.9375, 0.40625), (0.9375, 0.4375), (0.90625, 0.4375), (0.90625, 0.40625), (0.90625, 0.40625), (0.90625, 0.4375), (0.875, 0.4375), (0.875, 0.40625), (0.875, 0.40625), (0.875, 0.4375), (0.84375, 0.4375), (0.84375, 0.40625), (0.84375, 0.40625), (0.84375, 0.4375), (0.8125, 0.4375), (0.8125, 0.40625), (0.8125, 0.40625), (0.8125, 0.4375), (0.78125, 0.4375), (0.78125, 0.40625), (0.78125, 0.40625), (0.78125, 0.4375), (0.75, 0.4375), (0.75, 0.40625), (0.75, 0.40625), (0.75, 0.4375), (0.71875, 0.4375), (0.71875, 0.40625), (0.71875, 0.40625), (0.71875, 0.4375), (0.6875, 0.4375), (0.6875, 0.40625), (0.6875, 0.40625), (0.6875, 0.4375), (0.65625, 0.4375), (0.65625, 0.40625), (0.65625, 0.40625), (0.65625, 0.4375), (0.625, 0.4375), (0.625, 0.40625), (0.625, 0.40625), (0.625, 0.4375), (0.59375, 0.4375), (0.59375, 0.40625), (0.59375, 0.40625), (0.59375, 0.4375), (0.5625, 0.4375), (0.5625, 0.40625), (0.5625, 0.40625), (0.5625, 0.4375), (0.53125, 0.4375), (0.53125, 0.40625), (0.53125, 0.40625), (0.53125, 0.4375), (0.5, 0.4375), (0.5, 0.40625), (0.5, 0.40625), (0.5, 0.4375), (0.46875, 0.4375), (0.46875, 0.40625), (0.46875, 0.40625), (0.46875, 0.4375), (0.4375, 0.4375), (0.4375, 0.40625), (0.4375, 0.40625), (0.4375, 0.4375), (0.40625, 0.4375), (0.40625, 0.40625), (0.40625, 0.40625), (0.40625, 0.4375), (0.375, 0.4375), (0.375, 0.40625), (0.375, 0.40625), (0.375, 0.4375), (0.34375, 0.4375), (0.34375, 0.40625), (0.34375, 0.40625), (0.34375, 0.4375), (0.3125, 0.4375), (0.3125, 0.40625), (0.3125, 0.40625), (0.3125, 0.4375), (0.28125, 0.4375), (0.28125, 0.40625), (0.28125, 0.40625), (0.28125, 0.4375), (0.25, 0.4375), (0.25, 0.40625), (0.25, 0.40625), (0.25, 0.4375), (0.21875, 0.4375), (0.21875, 0.40625), (0.21875, 0.40625), (0.21875, 0.4375), (0.1875, 0.4375), (0.1875, 0.40625), (0.1875, 0.40625), (0.1875, 0.4375), (0.15625, 0.4375), (0.15625, 0.40625), (0.15625, 0.40625), (0.15625, 0.4375), (0.125, 0.4375), (0.125, 0.40625), (0.125, 0.40625), (0.125, 0.4375), (0.09375, 0.4375), (0.09375, 0.40625), (0.09375, 0.40625), (0.09375, 0.4375), (0.0625, 0.4375), (0.0625, 0.40625), (0.0625, 0.40625), (0.0625, 0.4375), (0.03125, 0.4375), (0.03125, 0.40625), (0.03125, 0.40625), (0.03125, 0.4375), (1, 0.4375), (1, 0.40625), (1, 0.4375), (1, 0.46875), (0.96875, 0.46875), (0.96875, 0.4375), (0.96875, 0.4375), (0.96875, 0.46875), (0.9375, 0.46875), (0.9375, 0.4375), (0.9375, 0.4375), (0.9375, 0.46875), (0.90625, 0.46875), (0.90625, 0.4375), (0.90625, 0.4375), (0.90625, 0.46875), (0.875, 0.46875), (0.875, 0.4375), (0.875, 0.4375), (0.875, 0.46875), (0.84375, 0.46875), (0.84375, 0.4375), (0.84375, 0.4375), (0.84375, 0.46875), (0.8125, 0.46875), (0.8125, 0.4375), (0.8125, 0.4375), (0.8125, 0.46875), (0.78125, 0.46875), (0.78125, 0.4375), (0.78125, 0.4375), (0.78125, 0.46875), (0.75, 0.46875), (0.75, 0.4375), (0.75, 0.4375), (0.75, 0.46875), (0.71875, 0.46875), (0.71875, 0.4375), (0.71875, 0.4375), (0.71875, 0.46875), (0.6875, 0.46875), (0.6875, 0.4375), (0.6875, 0.4375), (0.6875, 0.46875), (0.65625, 0.46875), (0.65625, 0.4375), (0.65625, 0.4375), (0.65625, 0.46875), (0.625, 0.46875), (0.625, 0.4375), (0.625, 0.4375), (0.625, 0.46875), (0.59375, 0.46875), (0.59375, 0.4375), (0.59375, 0.4375), (0.59375, 0.46875), (0.5625, 0.46875), (0.5625, 0.4375), (0.5625, 0.4375), (0.5625, 0.46875), (0.53125, 0.46875), (0.53125, 0.4375), (0.53125, 0.4375), (0.53125, 0.46875), (0.5, 0.46875), (0.5, 0.4375), (0.5, 0.4375), (0.5, 0.46875), (0.46875, 0.46875), (0.46875, 0.4375), (0.46875, 0.4375), (0.46875, 0.46875), (0.4375, 0.46875), (0.4375, 0.4375), (0.4375, 0.4375), (0.4375, 0.46875), (0.40625, 0.46875), (0.40625, 0.4375), (0.40625, 0.4375), (0.40625, 0.46875), (0.375, 0.46875), (0.375, 0.4375), (0.375, 0.4375), (0.375, 0.46875), (0.34375, 0.46875), (0.34375, 0.4375), (0.34375, 0.4375), (0.34375, 0.46875), (0.3125, 0.46875), (0.3125, 0.4375), (0.3125, 0.4375), (0.3125, 0.46875), (0.28125, 0.46875), (0.28125, 0.4375), (0.28125, 0.4375), (0.28125, 0.46875), (0.25, 0.46875), (0.25, 0.4375), (0.25, 0.4375), (0.25, 0.46875), (0.21875, 0.46875), (0.21875, 0.4375), (0.21875, 0.4375), (0.21875, 0.46875), (0.1875, 0.46875), (0.1875, 0.4375), (0.1875, 0.4375), (0.1875, 0.46875), (0.15625, 0.46875), (0.15625, 0.4375), (0.15625, 0.4375), (0.15625, 0.46875), (0.125, 0.46875), (0.125, 0.4375), (0.125, 0.4375), (0.125, 0.46875), (0.09375, 0.46875), (0.09375, 0.4375), (0.09375, 0.4375), (0.09375, 0.46875), (0.0625, 0.46875), (0.0625, 0.4375), (0.0625, 0.4375), (0.0625, 0.46875), (0.03125, 0.46875), (0.03125, 0.4375), (0.03125, 0.4375), (0.03125, 0.46875), (1, 0.46875), (1, 0.4375), (1, 0.46875), (1, 0.5), (0.96875, 0.5), (0.96875, 0.46875), (0.96875, 0.46875), (0.96875, 0.5), (0.9375, 0.5), (0.9375, 0.46875), (0.9375, 0.46875), (0.9375, 0.5), (0.90625, 0.5), (0.90625, 0.46875), (0.90625, 0.46875), (0.90625, 0.5), (0.875, 0.5), (0.875, 0.46875), (0.875, 0.46875), (0.875, 0.5), (0.84375, 0.5), (0.84375, 0.46875), (0.84375, 0.46875), (0.84375, 0.5), (0.8125, 0.5), (0.8125, 0.46875), (0.8125, 0.46875), (0.8125, 0.5), (0.78125, 0.5), (0.78125, 0.46875), (0.78125, 0.46875), (0.78125, 0.5), (0.75, 0.5), (0.75, 0.46875), (0.75, 0.46875), (0.75, 0.5), (0.71875, 0.5), (0.71875, 0.46875), (0.71875, 0.46875), (0.71875, 0.5), (0.6875, 0.5), (0.6875, 0.46875), (0.6875, 0.46875), (0.6875, 0.5), (0.65625, 0.5), (0.65625, 0.46875), (0.65625, 0.46875), (0.65625, 0.5), (0.625, 0.5), (0.625, 0.46875), (0.625, 0.46875), (0.625, 0.5), (0.59375, 0.5), (0.59375, 0.46875), (0.59375, 0.46875), (0.59375, 0.5), (0.5625, 0.5), (0.5625, 0.46875), (0.5625, 0.46875), (0.5625, 0.5), (0.53125, 0.5), (0.53125, 0.46875), (0.53125, 0.46875), (0.53125, 0.5), (0.5, 0.5), (0.5, 0.46875), (0.5, 0.46875), (0.5, 0.5), (0.46875, 0.5), (0.46875, 0.46875), (0.46875, 0.46875), (0.46875, 0.5), (0.4375, 0.5), (0.4375, 0.46875), (0.4375, 0.46875), (0.4375, 0.5), (0.40625, 0.5), (0.40625, 0.46875), (0.40625, 0.46875), (0.40625, 0.5), (0.375, 0.5), (0.375, 0.46875), (0.375, 0.46875), (0.375, 0.5), (0.34375, 0.5), (0.34375, 0.46875), (0.34375, 0.46875), (0.34375, 0.5), (0.3125, 0.5), (0.3125, 0.46875), (0.3125, 0.46875), (0.3125, 0.5), (0.28125, 0.5), (0.28125, 0.46875), (0.28125, 0.46875), (0.28125, 0.5), (0.25, 0.5), (0.25, 0.46875), (0.25, 0.46875), (0.25, 0.5), (0.21875, 0.5), (0.21875, 0.46875), (0.21875, 0.46875), (0.21875, 0.5), (0.1875, 0.5), (0.1875, 0.46875), (0.1875, 0.46875), (0.1875, 0.5), (0.15625, 0.5), (0.15625, 0.46875), (0.15625, 0.46875), (0.15625, 0.5), (0.125, 0.5), (0.125, 0.46875), (0.125, 0.46875), (0.125, 0.5), (0.09375, 0.5), (0.09375, 0.46875), (0.09375, 0.46875), (0.09375, 0.5), (0.0625, 0.5), (0.0625, 0.46875), (0.0625, 0.46875), (0.0625, 0.5), (0.03125, 0.5), (0.03125, 0.46875), (0.03125, 0.46875), (0.03125, 0.5), (1, 0.5), (1, 0.46875), (1, 0.5), (1, 0.53125), (0.96875, 0.53125), (0.96875, 0.5), (0.96875, 0.5), (0.96875, 0.53125), (0.9375, 0.53125), (0.9375, 0.5), (0.9375, 0.5), (0.9375, 0.53125), (0.90625, 0.53125), (0.90625, 0.5), (0.90625, 0.5), (0.90625, 0.53125), (0.875, 0.53125), (0.875, 0.5), (0.875, 0.5), (0.875, 0.53125), (0.84375, 0.53125), (0.84375, 0.5), (0.84375, 0.5), (0.84375, 0.53125), (0.8125, 0.53125), (0.8125, 0.5), (0.8125, 0.5), (0.8125, 0.53125), (0.78125, 0.53125), (0.78125, 0.5), (0.78125, 0.5), (0.78125, 0.53125), (0.75, 0.53125), (0.75, 0.5), (0.75, 0.5), (0.75, 0.53125), (0.71875, 0.53125), (0.71875, 0.5), (0.71875, 0.5), (0.71875, 0.53125), (0.6875, 0.53125), (0.6875, 0.5), (0.6875, 0.5), (0.6875, 0.53125), (0.65625, 0.53125), (0.65625, 0.5), (0.65625, 0.5), (0.65625, 0.53125), (0.625, 0.53125), (0.625, 0.5), (0.625, 0.5), (0.625, 0.53125), (0.59375, 0.53125), (0.59375, 0.5), (0.59375, 0.5), (0.59375, 0.53125), (0.5625, 0.53125), (0.5625, 0.5), (0.5625, 0.5), (0.5625, 0.53125), (0.53125, 0.53125), (0.53125, 0.5), (0.53125, 0.5), (0.53125, 0.53125), (0.5, 0.53125), (0.5, 0.5), (0.5, 0.5), (0.5, 0.53125), (0.46875, 0.53125), (0.46875, 0.5), (0.46875, 0.5), (0.46875, 0.53125), (0.4375, 0.53125), (0.4375, 0.5), (0.4375, 0.5), (0.4375, 0.53125), (0.40625, 0.53125), (0.40625, 0.5), (0.40625, 0.5), (0.40625, 0.53125), (0.375, 0.53125), (0.375, 0.5), (0.375, 0.5), (0.375, 0.53125), (0.34375, 0.53125), (0.34375, 0.5), (0.34375, 0.5), (0.34375, 0.53125), (0.3125, 0.53125), (0.3125, 0.5), (0.3125, 0.5), (0.3125, 0.53125), (0.28125, 0.53125), (0.28125, 0.5), (0.28125, 0.5), (0.28125, 0.53125), (0.25, 0.53125), (0.25, 0.5), (0.25, 0.5), (0.25, 0.53125), (0.21875, 0.53125), (0.21875, 0.5), (0.21875, 0.5), (0.21875, 0.53125), (0.1875, 0.53125), (0.1875, 0.5), (0.1875, 0.5), (0.1875, 0.53125), (0.15625, 0.53125), (0.15625, 0.5), (0.15625, 0.5), (0.15625, 0.53125), (0.125, 0.53125), (0.125, 0.5), (0.125, 0.5), (0.125, 0.53125), (0.09375, 0.53125), (0.09375, 0.5), (0.09375, 0.5), (0.09375, 0.53125), (0.0625, 0.53125), (0.0625, 0.5), (0.0625, 0.5), (0.0625, 0.53125), (0.03125, 0.53125), (0.03125, 0.5), (0.03125, 0.5), (0.03125, 0.53125), (1, 0.53125), (1, 0.5), (1, 0.53125), (1, 0.5625), (0.96875, 0.5625), (0.96875, 0.53125), (0.96875, 0.53125), (0.96875, 0.5625), (0.9375, 0.5625), (0.9375, 0.53125), (0.9375, 0.53125), (0.9375, 0.5625), (0.90625, 0.5625), (0.90625, 0.53125), (0.90625, 0.53125), (0.90625, 0.5625), (0.875, 0.5625), (0.875, 0.53125), (0.875, 0.53125), (0.875, 0.5625), (0.84375, 0.5625), (0.84375, 0.53125), (0.84375, 0.53125), (0.84375, 0.5625), (0.8125, 0.5625), (0.8125, 0.53125), (0.8125, 0.53125), (0.8125, 0.5625), (0.78125, 0.5625), (0.78125, 0.53125), (0.78125, 0.53125), (0.78125, 0.5625), (0.75, 0.5625), (0.75, 0.53125), (0.75, 0.53125), (0.75, 0.5625), (0.71875, 0.5625), (0.71875, 0.53125), (0.71875, 0.53125), (0.71875, 0.5625), (0.6875, 0.5625), (0.6875, 0.53125), (0.6875, 0.53125), (0.6875, 0.5625), (0.65625, 0.5625), (0.65625, 0.53125), (0.65625, 0.53125), (0.65625, 0.5625), (0.625, 0.5625), (0.625, 0.53125), (0.625, 0.53125), (0.625, 0.5625), (0.59375, 0.5625), (0.59375, 0.53125), (0.59375, 0.53125), (0.59375, 0.5625), (0.5625, 0.5625), (0.5625, 0.53125), (0.5625, 0.53125), (0.5625, 0.5625), (0.53125, 0.5625), (0.53125, 0.53125), (0.53125, 0.53125), (0.53125, 0.5625), (0.5, 0.5625), (0.5, 0.53125), (0.5, 0.53125), (0.5, 0.5625), (0.46875, 0.5625), (0.46875, 0.53125), (0.46875, 0.53125), (0.46875, 0.5625), (0.4375, 0.5625), (0.4375, 0.53125), (0.4375, 0.53125), (0.4375, 0.5625), (0.40625, 0.5625), (0.40625, 0.53125), (0.40625, 0.53125), (0.40625, 0.5625), (0.375, 0.5625), (0.375, 0.53125), (0.375, 0.53125), (0.375, 0.5625), (0.34375, 0.5625), (0.34375, 0.53125), (0.34375, 0.53125), (0.34375, 0.5625), (0.3125, 0.5625), (0.3125, 0.53125), (0.3125, 0.53125), (0.3125, 0.5625), (0.28125, 0.5625), (0.28125, 0.53125), (0.28125, 0.53125), (0.28125, 0.5625), (0.25, 0.5625), (0.25, 0.53125), (0.25, 0.53125), (0.25, 0.5625), (0.21875, 0.5625), (0.21875, 0.53125), (0.21875, 0.53125), (0.21875, 0.5625), (0.1875, 0.5625), (0.1875, 0.53125), (0.1875, 0.53125), (0.1875, 0.5625), (0.15625, 0.5625), (0.15625, 0.53125), (0.15625, 0.53125), (0.15625, 0.5625), (0.125, 0.5625), (0.125, 0.53125), (0.125, 0.53125), (0.125, 0.5625), (0.09375, 0.5625), (0.09375, 0.53125), (0.09375, 0.53125), (0.09375, 0.5625), (0.0625, 0.5625), (0.0625, 0.53125), (0.0625, 0.53125), (0.0625, 0.5625), (0.03125, 0.5625), (0.03125, 0.53125), (0.03125, 0.53125), (0.03125, 0.5625), (1, 0.5625), (1, 0.53125), (1, 0.5625), (1, 0.59375), (0.96875, 0.59375), (0.96875, 0.5625), (0.96875, 0.5625), (0.96875, 0.59375), (0.9375, 0.59375), (0.9375, 0.5625), (0.9375, 0.5625), (0.9375, 0.59375), (0.90625, 0.59375), (0.90625, 0.5625), (0.90625, 0.5625), (0.90625, 0.59375), (0.875, 0.59375), (0.875, 0.5625), (0.875, 0.5625), (0.875, 0.59375), (0.84375, 0.59375), (0.84375, 0.5625), (0.84375, 0.5625), (0.84375, 0.59375), (0.8125, 0.59375), (0.8125, 0.5625), (0.8125, 0.5625), (0.8125, 0.59375), (0.78125, 0.59375), (0.78125, 0.5625), (0.78125, 0.5625), (0.78125, 0.59375), (0.75, 0.59375), (0.75, 0.5625), (0.75, 0.5625), (0.75, 0.59375), (0.71875, 0.59375), (0.71875, 0.5625), (0.71875, 0.5625), (0.71875, 0.59375), (0.6875, 0.59375), (0.6875, 0.5625), (0.6875, 0.5625), (0.6875, 0.59375), (0.65625, 0.59375), (0.65625, 0.5625), (0.65625, 0.5625), (0.65625, 0.59375), (0.625, 0.59375), (0.625, 0.5625), (0.625, 0.5625), (0.625, 0.59375), (0.59375, 0.59375), (0.59375, 0.5625), (0.59375, 0.5625), (0.59375, 0.59375), (0.5625, 0.59375), (0.5625, 0.5625), (0.5625, 0.5625), (0.5625, 0.59375), (0.53125, 0.59375), (0.53125, 0.5625), (0.53125, 0.5625), (0.53125, 0.59375), (0.5, 0.59375), (0.5, 0.5625), (0.5, 0.5625), (0.5, 0.59375), (0.46875, 0.59375), (0.46875, 0.5625), (0.46875, 0.5625), (0.46875, 0.59375), (0.4375, 0.59375), (0.4375, 0.5625), (0.4375, 0.5625), (0.4375, 0.59375), (0.40625, 0.59375), (0.40625, 0.5625), (0.40625, 0.5625), (0.40625, 0.59375), (0.375, 0.59375), (0.375, 0.5625), (0.375, 0.5625), (0.375, 0.59375), (0.34375, 0.59375), (0.34375, 0.5625), (0.34375, 0.5625), (0.34375, 0.59375), (0.3125, 0.59375), (0.3125, 0.5625), (0.3125, 0.5625), (0.3125, 0.59375), (0.28125, 0.59375), (0.28125, 0.5625), (0.28125, 0.5625), (0.28125, 0.59375), (0.25, 0.59375), (0.25, 0.5625), (0.25, 0.5625), (0.25, 0.59375), (0.21875, 0.59375), (0.21875, 0.5625), (0.21875, 0.5625), (0.21875, 0.59375), (0.1875, 0.59375), (0.1875, 0.5625), (0.1875, 0.5625), (0.1875, 0.59375), (0.15625, 0.59375), (0.15625, 0.5625), (0.15625, 0.5625), (0.15625, 0.59375), (0.125, 0.59375), (0.125, 0.5625), (0.125, 0.5625), (0.125, 0.59375), (0.09375, 0.59375), (0.09375, 0.5625), (0.09375, 0.5625), (0.09375, 0.59375), (0.0625, 0.59375), (0.0625, 0.5625), (0.0625, 0.5625), (0.0625, 0.59375), (0.03125, 0.59375), (0.03125, 0.5625), (0.03125, 0.5625), (0.03125, 0.59375), (1, 0.59375), (1, 0.5625), (1, 0.59375), (1, 0.625), (0.96875, 0.625), (0.96875, 0.59375), (0.96875, 0.59375), (0.96875, 0.625), (0.9375, 0.625), (0.9375, 0.59375), (0.9375, 0.59375), (0.9375, 0.625), (0.90625, 0.625), (0.90625, 0.59375), (0.90625, 0.59375), (0.90625, 0.625), (0.875, 0.625), (0.875, 0.59375), (0.875, 0.59375), (0.875, 0.625), (0.84375, 0.625), (0.84375, 0.59375), (0.84375, 0.59375), (0.84375, 0.625), (0.8125, 0.625), (0.8125, 0.59375), (0.8125, 0.59375), (0.8125, 0.625), (0.78125, 0.625), (0.78125, 0.59375), (0.78125, 0.59375), (0.78125, 0.625), (0.75, 0.625), (0.75, 0.59375), (0.75, 0.59375), (0.75, 0.625), (0.71875, 0.625), (0.71875, 0.59375), (0.71875, 0.59375), (0.71875, 0.625), (0.6875, 0.625), (0.6875, 0.59375), (0.6875, 0.59375), (0.6875, 0.625), (0.65625, 0.625), (0.65625, 0.59375), (0.65625, 0.59375), (0.65625, 0.625), (0.625, 0.625), (0.625, 0.59375), (0.625, 0.59375), (0.625, 0.625), (0.59375, 0.625), (0.59375, 0.59375), (0.59375, 0.59375), (0.59375, 0.625), (0.5625, 0.625), (0.5625, 0.59375), (0.5625, 0.59375), (0.5625, 0.625), (0.53125, 0.625), (0.53125, 0.59375), (0.53125, 0.59375), (0.53125, 0.625), (0.5, 0.625), (0.5, 0.59375), (0.5, 0.59375), (0.5, 0.625), (0.46875, 0.625), (0.46875, 0.59375), (0.46875, 0.59375), (0.46875, 0.625), (0.4375, 0.625), (0.4375, 0.59375), (0.4375, 0.59375), (0.4375, 0.625), (0.40625, 0.625), (0.40625, 0.59375), (0.40625, 0.59375), (0.40625, 0.625), (0.375, 0.625), (0.375, 0.59375), (0.375, 0.59375), (0.375, 0.625), (0.34375, 0.625), (0.34375, 0.59375), (0.34375, 0.59375), (0.34375, 0.625), (0.3125, 0.625), (0.3125, 0.59375), (0.3125, 0.59375), (0.3125, 0.625), (0.28125, 0.625), (0.28125, 0.59375), (0.28125, 0.59375), (0.28125, 0.625), (0.25, 0.625), (0.25, 0.59375), (0.25, 0.59375), (0.25, 0.625), (0.21875, 0.625), (0.21875, 0.59375), (0.21875, 0.59375), (0.21875, 0.625), (0.1875, 0.625), (0.1875, 0.59375), (0.1875, 0.59375), (0.1875, 0.625), (0.15625, 0.625), (0.15625, 0.59375), (0.15625, 0.59375), (0.15625, 0.625), (0.125, 0.625), (0.125, 0.59375), (0.125, 0.59375), (0.125, 0.625), (0.09375, 0.625), (0.09375, 0.59375), (0.09375, 0.59375), (0.09375, 0.625), (0.0625, 0.625), (0.0625, 0.59375), (0.0625, 0.59375), (0.0625, 0.625), (0.03125, 0.625), (0.03125, 0.59375), (0.03125, 0.59375), (0.03125, 0.625), (1, 0.625), (1, 0.59375), (1, 0.625), (1, 0.65625), (0.96875, 0.65625), (0.96875, 0.625), (0.96875, 0.625), (0.96875, 0.65625), (0.9375, 0.65625), (0.9375, 0.625), (0.9375, 0.625), (0.9375, 0.65625), (0.90625, 0.65625), (0.90625, 0.625), (0.90625, 0.625), (0.90625, 0.65625), (0.875, 0.65625), (0.875, 0.625), (0.875, 0.625), (0.875, 0.65625), (0.84375, 0.65625), (0.84375, 0.625), (0.84375, 0.625), (0.84375, 0.65625), (0.8125, 0.65625), (0.8125, 0.625), (0.8125, 0.625), (0.8125, 0.65625), (0.78125, 0.65625), (0.78125, 0.625), (0.78125, 0.625), (0.78125, 0.65625), (0.75, 0.65625), (0.75, 0.625), (0.75, 0.625), (0.75, 0.65625), (0.71875, 0.65625), (0.71875, 0.625), (0.71875, 0.625), (0.71875, 0.65625), (0.6875, 0.65625), (0.6875, 0.625), (0.6875, 0.625), (0.6875, 0.65625), (0.65625, 0.65625), (0.65625, 0.625), (0.65625, 0.625), (0.65625, 0.65625), (0.625, 0.65625), (0.625, 0.625), (0.625, 0.625), (0.625, 0.65625), (0.59375, 0.65625), (0.59375, 0.625), (0.59375, 0.625), (0.59375, 0.65625), (0.5625, 0.65625), (0.5625, 0.625), (0.5625, 0.625), (0.5625, 0.65625), (0.53125, 0.65625), (0.53125, 0.625), (0.53125, 0.625), (0.53125, 0.65625), (0.5, 0.65625), (0.5, 0.625), (0.5, 0.625), (0.5, 0.65625), (0.46875, 0.65625), (0.46875, 0.625), (0.46875, 0.625), (0.46875, 0.65625), (0.4375, 0.65625), (0.4375, 0.625), (0.4375, 0.625), (0.4375, 0.65625), (0.40625, 0.65625), (0.40625, 0.625), (0.40625, 0.625), (0.40625, 0.65625), (0.375, 0.65625), (0.375, 0.625), (0.375, 0.625), (0.375, 0.65625), (0.34375, 0.65625), (0.34375, 0.625), (0.34375, 0.625), (0.34375, 0.65625), (0.3125, 0.65625), (0.3125, 0.625), (0.3125, 0.625), (0.3125, 0.65625), (0.28125, 0.65625), (0.28125, 0.625), (0.28125, 0.625), (0.28125, 0.65625), (0.25, 0.65625), (0.25, 0.625), (0.25, 0.625), (0.25, 0.65625), (0.21875, 0.65625), (0.21875, 0.625), (0.21875, 0.625), (0.21875, 0.65625), (0.1875, 0.65625), (0.1875, 0.625), (0.1875, 0.625), (0.1875, 0.65625), (0.15625, 0.65625), (0.15625, 0.625), (0.15625, 0.625), (0.15625, 0.65625), (0.125, 0.65625), (0.125, 0.625), (0.125, 0.625), (0.125, 0.65625), (0.09375, 0.65625), (0.09375, 0.625), (0.09375, 0.625), (0.09375, 0.65625), (0.0625, 0.65625), (0.0625, 0.625), (0.0625, 0.625), (0.0625, 0.65625), (0.03125, 0.65625), (0.03125, 0.625), (0.03125, 0.625), (0.03125, 0.65625), (1, 0.65625), (1, 0.625), (1, 0.65625), (1, 0.6875), (0.96875, 0.6875), (0.96875, 0.65625), (0.96875, 0.65625), (0.96875, 0.6875), (0.9375, 0.6875), (0.9375, 0.65625), (0.9375, 0.65625), (0.9375, 0.6875), (0.90625, 0.6875), (0.90625, 0.65625), (0.90625, 0.65625), (0.90625, 0.6875), (0.875, 0.6875), (0.875, 0.65625), (0.875, 0.65625), (0.875, 0.6875), (0.84375, 0.6875), (0.84375, 0.65625), (0.84375, 0.65625), (0.84375, 0.6875), (0.8125, 0.6875), (0.8125, 0.65625), (0.8125, 0.65625), (0.8125, 0.6875), (0.78125, 0.6875), (0.78125, 0.65625), (0.78125, 0.65625), (0.78125, 0.6875), (0.75, 0.6875), (0.75, 0.65625), (0.75, 0.65625), (0.75, 0.6875), (0.71875, 0.6875), (0.71875, 0.65625), (0.71875, 0.65625), (0.71875, 0.6875), (0.6875, 0.6875), (0.6875, 0.65625), (0.6875, 0.65625), (0.6875, 0.6875), (0.65625, 0.6875), (0.65625, 0.65625), (0.65625, 0.65625), (0.65625, 0.6875), (0.625, 0.6875), (0.625, 0.65625), (0.625, 0.65625), (0.625, 0.6875), (0.59375, 0.6875), (0.59375, 0.65625), (0.59375, 0.65625), (0.59375, 0.6875), (0.5625, 0.6875), (0.5625, 0.65625), (0.5625, 0.65625), (0.5625, 0.6875), (0.53125, 0.6875), (0.53125, 0.65625), (0.53125, 0.65625), (0.53125, 0.6875), (0.5, 0.6875), (0.5, 0.65625), (0.5, 0.65625), (0.5, 0.6875), (0.46875, 0.6875), (0.46875, 0.65625), (0.46875, 0.65625), (0.46875, 0.6875), (0.4375, 0.6875), (0.4375, 0.65625), (0.4375, 0.65625), (0.4375, 0.6875), (0.40625, 0.6875), (0.40625, 0.65625), (0.40625, 0.65625), (0.40625, 0.6875), (0.375, 0.6875), (0.375, 0.65625), (0.375, 0.65625), (0.375, 0.6875), (0.34375, 0.6875), (0.34375, 0.65625), (0.34375, 0.65625), (0.34375, 0.6875), (0.3125, 0.6875), (0.3125, 0.65625), (0.3125, 0.65625), (0.3125, 0.6875), (0.28125, 0.6875), (0.28125, 0.65625), (0.28125, 0.65625), (0.28125, 0.6875), (0.25, 0.6875), (0.25, 0.65625), (0.25, 0.65625), (0.25, 0.6875), (0.21875, 0.6875), (0.21875, 0.65625), (0.21875, 0.65625), (0.21875, 0.6875), (0.1875, 0.6875), (0.1875, 0.65625), (0.1875, 0.65625), (0.1875, 0.6875), (0.15625, 0.6875), (0.15625, 0.65625), (0.15625, 0.65625), (0.15625, 0.6875), (0.125, 0.6875), (0.125, 0.65625), (0.125, 0.65625), (0.125, 0.6875), (0.09375, 0.6875), (0.09375, 0.65625), (0.09375, 0.65625), (0.09375, 0.6875), (0.0625, 0.6875), (0.0625, 0.65625), (0.0625, 0.65625), (0.0625, 0.6875), (0.03125, 0.6875), (0.03125, 0.65625), (0.03125, 0.65625), (0.03125, 0.6875), (1, 0.6875), (1, 0.65625), (1, 0.6875), (1, 0.71875), (0.96875, 0.71875), (0.96875, 0.6875), (0.96875, 0.6875), (0.96875, 0.71875), (0.9375, 0.71875), (0.9375, 0.6875), (0.9375, 0.6875), (0.9375, 0.71875), (0.90625, 0.71875), (0.90625, 0.6875), (0.90625, 0.6875), (0.90625, 0.71875), (0.875, 0.71875), (0.875, 0.6875), (0.875, 0.6875), (0.875, 0.71875), (0.84375, 0.71875), (0.84375, 0.6875), (0.84375, 0.6875), (0.84375, 0.71875), (0.8125, 0.71875), (0.8125, 0.6875), (0.8125, 0.6875), (0.8125, 0.71875), (0.78125, 0.71875), (0.78125, 0.6875), (0.78125, 0.6875), (0.78125, 0.71875), (0.75, 0.71875), (0.75, 0.6875), (0.75, 0.6875), (0.75, 0.71875), (0.71875, 0.71875), (0.71875, 0.6875), (0.71875, 0.6875), (0.71875, 0.71875), (0.6875, 0.71875), (0.6875, 0.6875), (0.6875, 0.6875), (0.6875, 0.71875), (0.65625, 0.71875), (0.65625, 0.6875), (0.65625, 0.6875), (0.65625, 0.71875), (0.625, 0.71875), (0.625, 0.6875), (0.625, 0.6875), (0.625, 0.71875), (0.59375, 0.71875), (0.59375, 0.6875), (0.59375, 0.6875), (0.59375, 0.71875), (0.5625, 0.71875), (0.5625, 0.6875), (0.5625, 0.6875), (0.5625, 0.71875), (0.53125, 0.71875), (0.53125, 0.6875), (0.53125, 0.6875), (0.53125, 0.71875), (0.5, 0.71875), (0.5, 0.6875), (0.5, 0.6875), (0.5, 0.71875), (0.46875, 0.71875), (0.46875, 0.6875), (0.46875, 0.6875), (0.46875, 0.71875), (0.4375, 0.71875), (0.4375, 0.6875), (0.4375, 0.6875), (0.4375, 0.71875), (0.40625, 0.71875), (0.40625, 0.6875), (0.40625, 0.6875), (0.40625, 0.71875), (0.375, 0.71875), (0.375, 0.6875), (0.375, 0.6875), (0.375, 0.71875), (0.34375, 0.71875), (0.34375, 0.6875), (0.34375, 0.6875), (0.34375, 0.71875), (0.3125, 0.71875), (0.3125, 0.6875), (0.3125, 0.6875), (0.3125, 0.71875), (0.28125, 0.71875), (0.28125, 0.6875), (0.28125, 0.6875), (0.28125, 0.71875), (0.25, 0.71875), (0.25, 0.6875), (0.25, 0.6875), (0.25, 0.71875), (0.21875, 0.71875), (0.21875, 0.6875), (0.21875, 0.6875), (0.21875, 0.71875), (0.1875, 0.71875), (0.1875, 0.6875), (0.1875, 0.6875), (0.1875, 0.71875), (0.15625, 0.71875), (0.15625, 0.6875), (0.15625, 0.6875), (0.15625, 0.71875), (0.125, 0.71875), (0.125, 0.6875), (0.125, 0.6875), (0.125, 0.71875), (0.09375, 0.71875), (0.09375, 0.6875), (0.09375, 0.6875), (0.09375, 0.71875), (0.0625, 0.71875), (0.0625, 0.6875), (0.0625, 0.6875), (0.0625, 0.71875), (0.03125, 0.71875), (0.03125, 0.6875), (0.03125, 0.6875), (0.03125, 0.71875), (1, 0.71875), (1, 0.6875), (1, 0.71875), (1, 0.75), (0.96875, 0.75), (0.96875, 0.71875), (0.96875, 0.71875), (0.96875, 0.75), (0.9375, 0.75), (0.9375, 0.71875), (0.9375, 0.71875), (0.9375, 0.75), (0.90625, 0.75), (0.90625, 0.71875), (0.90625, 0.71875), (0.90625, 0.75), (0.875, 0.75), (0.875, 0.71875), (0.875, 0.71875), (0.875, 0.75), (0.84375, 0.75), (0.84375, 0.71875), (0.84375, 0.71875), (0.84375, 0.75), (0.8125, 0.75), (0.8125, 0.71875), (0.8125, 0.71875), (0.8125, 0.75), (0.78125, 0.75), (0.78125, 0.71875), (0.78125, 0.71875), (0.78125, 0.75), (0.75, 0.75), (0.75, 0.71875), (0.75, 0.71875), (0.75, 0.75), (0.71875, 0.75), (0.71875, 0.71875), (0.71875, 0.71875), (0.71875, 0.75), (0.6875, 0.75), (0.6875, 0.71875), (0.6875, 0.71875), (0.6875, 0.75), (0.65625, 0.75), (0.65625, 0.71875), (0.65625, 0.71875), (0.65625, 0.75), (0.625, 0.75), (0.625, 0.71875), (0.625, 0.71875), (0.625, 0.75), (0.59375, 0.75), (0.59375, 0.71875), (0.59375, 0.71875), (0.59375, 0.75), (0.5625, 0.75), (0.5625, 0.71875), (0.5625, 0.71875), (0.5625, 0.75), (0.53125, 0.75), (0.53125, 0.71875), (0.53125, 0.71875), (0.53125, 0.75), (0.5, 0.75), (0.5, 0.71875), (0.5, 0.71875), (0.5, 0.75), (0.46875, 0.75), (0.46875, 0.71875), (0.46875, 0.71875), (0.46875, 0.75), (0.4375, 0.75), (0.4375, 0.71875), (0.4375, 0.71875), (0.4375, 0.75), (0.40625, 0.75), (0.40625, 0.71875), (0.40625, 0.71875), (0.40625, 0.75), (0.375, 0.75), (0.375, 0.71875), (0.375, 0.71875), (0.375, 0.75), (0.34375, 0.75), (0.34375, 0.71875), (0.34375, 0.71875), (0.34375, 0.75), (0.3125, 0.75), (0.3125, 0.71875), (0.3125, 0.71875), (0.3125, 0.75), (0.28125, 0.75), (0.28125, 0.71875), (0.28125, 0.71875), (0.28125, 0.75), (0.25, 0.75), (0.25, 0.71875), (0.25, 0.71875), (0.25, 0.75), (0.21875, 0.75), (0.21875, 0.71875), (0.21875, 0.71875), (0.21875, 0.75), (0.1875, 0.75), (0.1875, 0.71875), (0.1875, 0.71875), (0.1875, 0.75), (0.15625, 0.75), (0.15625, 0.71875), (0.15625, 0.71875), (0.15625, 0.75), (0.125, 0.75), (0.125, 0.71875), (0.125, 0.71875), (0.125, 0.75), (0.09375, 0.75), (0.09375, 0.71875), (0.09375, 0.71875), (0.09375, 0.75), (0.0625, 0.75), (0.0625, 0.71875), (0.0625, 0.71875), (0.0625, 0.75), (0.03125, 0.75), (0.03125, 0.71875), (0.03125, 0.71875), (0.03125, 0.75), (1, 0.75), (1, 0.71875), (1, 0.75), (1, 0.78125), (0.96875, 0.78125), (0.96875, 0.75), (0.96875, 0.75), (0.96875, 0.78125), (0.9375, 0.78125), (0.9375, 0.75), (0.9375, 0.75), (0.9375, 0.78125), (0.90625, 0.78125), (0.90625, 0.75), (0.90625, 0.75), (0.90625, 0.78125), (0.875, 0.78125), (0.875, 0.75), (0.875, 0.75), (0.875, 0.78125), (0.84375, 0.78125), (0.84375, 0.75), (0.84375, 0.75), (0.84375, 0.78125), (0.8125, 0.78125), (0.8125, 0.75), (0.8125, 0.75), (0.8125, 0.78125), (0.78125, 0.78125), (0.78125, 0.75), (0.78125, 0.75), (0.78125, 0.78125), (0.75, 0.78125), (0.75, 0.75), (0.75, 0.75), (0.75, 0.78125), (0.71875, 0.78125), (0.71875, 0.75), (0.71875, 0.75), (0.71875, 0.78125), (0.6875, 0.78125), (0.6875, 0.75), (0.6875, 0.75), (0.6875, 0.78125), (0.65625, 0.78125), (0.65625, 0.75), (0.65625, 0.75), (0.65625, 0.78125), (0.625, 0.78125), (0.625, 0.75), (0.625, 0.75), (0.625, 0.78125), (0.59375, 0.78125), (0.59375, 0.75), (0.59375, 0.75), (0.59375, 0.78125), (0.5625, 0.78125), (0.5625, 0.75), (0.5625, 0.75), (0.5625, 0.78125), (0.53125, 0.78125), (0.53125, 0.75), (0.53125, 0.75), (0.53125, 0.78125), (0.5, 0.78125), (0.5, 0.75), (0.5, 0.75), (0.5, 0.78125), (0.46875, 0.78125), (0.46875, 0.75), (0.46875, 0.75), (0.46875, 0.78125), (0.4375, 0.78125), (0.4375, 0.75), (0.4375, 0.75), (0.4375, 0.78125), (0.40625, 0.78125), (0.40625, 0.75), (0.40625, 0.75), (0.40625, 0.78125), (0.375, 0.78125), (0.375, 0.75), (0.375, 0.75), (0.375, 0.78125), (0.34375, 0.78125), (0.34375, 0.75), (0.34375, 0.75), (0.34375, 0.78125), (0.3125, 0.78125), (0.3125, 0.75), (0.3125, 0.75), (0.3125, 0.78125), (0.28125, 0.78125), (0.28125, 0.75), (0.28125, 0.75), (0.28125, 0.78125), (0.25, 0.78125), (0.25, 0.75), (0.25, 0.75), (0.25, 0.78125), (0.21875, 0.78125), (0.21875, 0.75), (0.21875, 0.75), (0.21875, 0.78125), (0.1875, 0.78125), (0.1875, 0.75), (0.1875, 0.75), (0.1875, 0.78125), (0.15625, 0.78125), (0.15625, 0.75), (0.15625, 0.75), (0.15625, 0.78125), (0.125, 0.78125), (0.125, 0.75), (0.125, 0.75), (0.125, 0.78125), (0.09375, 0.78125), (0.09375, 0.75), (0.09375, 0.75), (0.09375, 0.78125), (0.0625, 0.78125), (0.0625, 0.75), (0.0625, 0.75), (0.0625, 0.78125), (0.03125, 0.78125), (0.03125, 0.75), (0.03125, 0.75), (0.03125, 0.78125), (1, 0.78125), (1, 0.75), (1, 0.78125), (1, 0.8125), (0.96875, 0.8125), (0.96875, 0.78125), (0.96875, 0.78125), (0.96875, 0.8125), (0.9375, 0.8125), (0.9375, 0.78125), (0.9375, 0.78125), (0.9375, 0.8125), (0.90625, 0.8125), (0.90625, 0.78125), (0.90625, 0.78125), (0.90625, 0.8125), (0.875, 0.8125), (0.875, 0.78125), (0.875, 0.78125), (0.875, 0.8125), (0.84375, 0.8125), (0.84375, 0.78125), (0.84375, 0.78125), (0.84375, 0.8125), (0.8125, 0.8125), (0.8125, 0.78125), (0.8125, 0.78125), (0.8125, 0.8125), (0.78125, 0.8125), (0.78125, 0.78125), (0.78125, 0.78125), (0.78125, 0.8125), (0.75, 0.8125), (0.75, 0.78125), (0.75, 0.78125), (0.75, 0.8125), (0.71875, 0.8125), (0.71875, 0.78125), (0.71875, 0.78125), (0.71875, 0.8125), (0.6875, 0.8125), (0.6875, 0.78125), (0.6875, 0.78125), (0.6875, 0.8125), (0.65625, 0.8125), (0.65625, 0.78125), (0.65625, 0.78125), (0.65625, 0.8125), (0.625, 0.8125), (0.625, 0.78125), (0.625, 0.78125), (0.625, 0.8125), (0.59375, 0.8125), (0.59375, 0.78125), (0.59375, 0.78125), (0.59375, 0.8125), (0.5625, 0.8125), (0.5625, 0.78125), (0.5625, 0.78125), (0.5625, 0.8125), (0.53125, 0.8125), (0.53125, 0.78125), (0.53125, 0.78125), (0.53125, 0.8125), (0.5, 0.8125), (0.5, 0.78125), (0.5, 0.78125), (0.5, 0.8125), (0.46875, 0.8125), (0.46875, 0.78125), (0.46875, 0.78125), (0.46875, 0.8125), (0.4375, 0.8125), (0.4375, 0.78125), (0.4375, 0.78125), (0.4375, 0.8125), (0.40625, 0.8125), (0.40625, 0.78125), (0.40625, 0.78125), (0.40625, 0.8125), (0.375, 0.8125), (0.375, 0.78125), (0.375, 0.78125), (0.375, 0.8125), (0.34375, 0.8125), (0.34375, 0.78125), (0.34375, 0.78125), (0.34375, 0.8125), (0.3125, 0.8125), (0.3125, 0.78125), (0.3125, 0.78125), (0.3125, 0.8125), (0.28125, 0.8125), (0.28125, 0.78125), (0.28125, 0.78125), (0.28125, 0.8125), (0.25, 0.8125), (0.25, 0.78125), (0.25, 0.78125), (0.25, 0.8125), (0.21875, 0.8125), (0.21875, 0.78125), (0.21875, 0.78125), (0.21875, 0.8125), (0.1875, 0.8125), (0.1875, 0.78125), (0.1875, 0.78125), (0.1875, 0.8125), (0.15625, 0.8125), (0.15625, 0.78125), (0.15625, 0.78125), (0.15625, 0.8125), (0.125, 0.8125), (0.125, 0.78125), (0.125, 0.78125), (0.125, 0.8125), (0.09375, 0.8125), (0.09375, 0.78125), (0.09375, 0.78125), (0.09375, 0.8125), (0.0625, 0.8125), (0.0625, 0.78125), (0.0625, 0.78125), (0.0625, 0.8125), (0.03125, 0.8125), (0.03125, 0.78125), (0.03125, 0.78125), (0.03125, 0.8125), (1, 0.8125), (1, 0.78125), (1, 0.8125), (1, 0.84375), (0.96875, 0.84375), (0.96875, 0.8125), (0.96875, 0.8125), (0.96875, 0.84375), (0.9375, 0.84375), (0.9375, 0.8125), (0.9375, 0.8125), (0.9375, 0.84375), (0.90625, 0.84375), (0.90625, 0.8125), (0.90625, 0.8125), (0.90625, 0.84375), (0.875, 0.84375), (0.875, 0.8125), (0.875, 0.8125), (0.875, 0.84375), (0.84375, 0.84375), (0.84375, 0.8125), (0.84375, 0.8125), (0.84375, 0.84375), (0.8125, 0.84375), (0.8125, 0.8125), (0.8125, 0.8125), (0.8125, 0.84375), (0.78125, 0.84375), (0.78125, 0.8125), (0.78125, 0.8125), (0.78125, 0.84375), (0.75, 0.84375), (0.75, 0.8125), (0.75, 0.8125), (0.75, 0.84375), (0.71875, 0.84375), (0.71875, 0.8125), (0.71875, 0.8125), (0.71875, 0.84375), (0.6875, 0.84375), (0.6875, 0.8125), (0.6875, 0.8125), (0.6875, 0.84375), (0.65625, 0.84375), (0.65625, 0.8125), (0.65625, 0.8125), (0.65625, 0.84375), (0.625, 0.84375), (0.625, 0.8125), (0.625, 0.8125), (0.625, 0.84375), (0.59375, 0.84375), (0.59375, 0.8125), (0.59375, 0.8125), (0.59375, 0.84375), (0.5625, 0.84375), (0.5625, 0.8125), (0.5625, 0.8125), (0.5625, 0.84375), (0.53125, 0.84375), (0.53125, 0.8125), (0.53125, 0.8125), (0.53125, 0.84375), (0.5, 0.84375), (0.5, 0.8125), (0.5, 0.8125), (0.5, 0.84375), (0.46875, 0.84375), (0.46875, 0.8125), (0.46875, 0.8125), (0.46875, 0.84375), (0.4375, 0.84375), (0.4375, 0.8125), (0.4375, 0.8125), (0.4375, 0.84375), (0.40625, 0.84375), (0.40625, 0.8125), (0.40625, 0.8125), (0.40625, 0.84375), (0.375, 0.84375), (0.375, 0.8125), (0.375, 0.8125), (0.375, 0.84375), (0.34375, 0.84375), (0.34375, 0.8125), (0.34375, 0.8125), (0.34375, 0.84375), (0.3125, 0.84375), (0.3125, 0.8125), (0.3125, 0.8125), (0.3125, 0.84375), (0.28125, 0.84375), (0.28125, 0.8125), (0.28125, 0.8125), (0.28125, 0.84375), (0.25, 0.84375), (0.25, 0.8125), (0.25, 0.8125), (0.25, 0.84375), (0.21875, 0.84375), (0.21875, 0.8125), (0.21875, 0.8125), (0.21875, 0.84375), (0.1875, 0.84375), (0.1875, 0.8125), (0.1875, 0.8125), (0.1875, 0.84375), (0.15625, 0.84375), (0.15625, 0.8125), (0.15625, 0.8125), (0.15625, 0.84375), (0.125, 0.84375), (0.125, 0.8125), (0.125, 0.8125), (0.125, 0.84375), (0.09375, 0.84375), (0.09375, 0.8125), (0.09375, 0.8125), (0.09375, 0.84375), (0.0625, 0.84375), (0.0625, 0.8125), (0.0625, 0.8125), (0.0625, 0.84375), (0.03125, 0.84375), (0.03125, 0.8125), (0.03125, 0.8125), (0.03125, 0.84375), (1, 0.84375), (1, 0.8125), (1, 0.84375), (1, 0.875), (0.96875, 0.875), (0.96875, 0.84375), (0.96875, 0.84375), (0.96875, 0.875), (0.9375, 0.875), (0.9375, 0.84375), (0.9375, 0.84375), (0.9375, 0.875), (0.90625, 0.875), (0.90625, 0.84375), (0.90625, 0.84375), (0.90625, 0.875), (0.875, 0.875), (0.875, 0.84375), (0.875, 0.84375), (0.875, 0.875), (0.84375, 0.875), (0.84375, 0.84375), (0.84375, 0.84375), (0.84375, 0.875), (0.8125, 0.875), (0.8125, 0.84375), (0.8125, 0.84375), (0.8125, 0.875), (0.78125, 0.875), (0.78125, 0.84375), (0.78125, 0.84375), (0.78125, 0.875), (0.75, 0.875), (0.75, 0.84375), (0.75, 0.84375), (0.75, 0.875), (0.71875, 0.875), (0.71875, 0.84375), (0.71875, 0.84375), (0.71875, 0.875), (0.6875, 0.875), (0.6875, 0.84375), (0.6875, 0.84375), (0.6875, 0.875), (0.65625, 0.875), (0.65625, 0.84375), (0.65625, 0.84375), (0.65625, 0.875), (0.625, 0.875), (0.625, 0.84375), (0.625, 0.84375), (0.625, 0.875), (0.59375, 0.875), (0.59375, 0.84375), (0.59375, 0.84375), (0.59375, 0.875), (0.5625, 0.875), (0.5625, 0.84375), (0.5625, 0.84375), (0.5625, 0.875), (0.53125, 0.875), (0.53125, 0.84375), (0.53125, 0.84375), (0.53125, 0.875), (0.5, 0.875), (0.5, 0.84375), (0.5, 0.84375), (0.5, 0.875), (0.46875, 0.875), (0.46875, 0.84375), (0.46875, 0.84375), (0.46875, 0.875), (0.4375, 0.875), (0.4375, 0.84375), (0.4375, 0.84375), (0.4375, 0.875), (0.40625, 0.875), (0.40625, 0.84375), (0.40625, 0.84375), (0.40625, 0.875), (0.375, 0.875), (0.375, 0.84375), (0.375, 0.84375), (0.375, 0.875), (0.34375, 0.875), (0.34375, 0.84375), (0.34375, 0.84375), (0.34375, 0.875), (0.3125, 0.875), (0.3125, 0.84375), (0.3125, 0.84375), (0.3125, 0.875), (0.28125, 0.875), (0.28125, 0.84375), (0.28125, 0.84375), (0.28125, 0.875), (0.25, 0.875), (0.25, 0.84375), (0.25, 0.84375), (0.25, 0.875), (0.21875, 0.875), (0.21875, 0.84375), (0.21875, 0.84375), (0.21875, 0.875), (0.1875, 0.875), (0.1875, 0.84375), (0.1875, 0.84375), (0.1875, 0.875), (0.15625, 0.875), (0.15625, 0.84375), (0.15625, 0.84375), (0.15625, 0.875), (0.125, 0.875), (0.125, 0.84375), (0.125, 0.84375), (0.125, 0.875), (0.09375, 0.875), (0.09375, 0.84375), (0.09375, 0.84375), (0.09375, 0.875), (0.0625, 0.875), (0.0625, 0.84375), (0.0625, 0.84375), (0.0625, 0.875), (0.03125, 0.875), (0.03125, 0.84375), (0.03125, 0.84375), (0.03125, 0.875), (1, 0.875), (1, 0.84375), (1, 0.875), (1, 0.90625), (0.96875, 0.90625), (0.96875, 0.875), (0.96875, 0.875), (0.96875, 0.90625), (0.9375, 0.90625), (0.9375, 0.875), (0.9375, 0.875), (0.9375, 0.90625), (0.90625, 0.90625), (0.90625, 0.875), (0.90625, 0.875), (0.90625, 0.90625), (0.875, 0.90625), (0.875, 0.875), (0.875, 0.875), (0.875, 0.90625), (0.84375, 0.90625), (0.84375, 0.875), (0.84375, 0.875), (0.84375, 0.90625), (0.8125, 0.90625), (0.8125, 0.875), (0.8125, 0.875), (0.8125, 0.90625), (0.78125, 0.90625), (0.78125, 0.875), (0.78125, 0.875), (0.78125, 0.90625), (0.75, 0.90625), (0.75, 0.875), (0.75, 0.875), (0.75, 0.90625), (0.71875, 0.90625), (0.71875, 0.875), (0.71875, 0.875), (0.71875, 0.90625), (0.6875, 0.90625), (0.6875, 0.875), (0.6875, 0.875), (0.6875, 0.90625), (0.65625, 0.90625), (0.65625, 0.875), (0.65625, 0.875), (0.65625, 0.90625), (0.625, 0.90625), (0.625, 0.875), (0.625, 0.875), (0.625, 0.90625), (0.59375, 0.90625), (0.59375, 0.875), (0.59375, 0.875), (0.59375, 0.90625), (0.5625, 0.90625), (0.5625, 0.875), (0.5625, 0.875), (0.5625, 0.90625), (0.53125, 0.90625), (0.53125, 0.875), (0.53125, 0.875), (0.53125, 0.90625), (0.5, 0.90625), (0.5, 0.875), (0.5, 0.875), (0.5, 0.90625), (0.46875, 0.90625), (0.46875, 0.875), (0.46875, 0.875), (0.46875, 0.90625), (0.4375, 0.90625), (0.4375, 0.875), (0.4375, 0.875), (0.4375, 0.90625), (0.40625, 0.90625), (0.40625, 0.875), (0.40625, 0.875), (0.40625, 0.90625), (0.375, 0.90625), (0.375, 0.875), (0.375, 0.875), (0.375, 0.90625), (0.34375, 0.90625), (0.34375, 0.875), (0.34375, 0.875), (0.34375, 0.90625), (0.3125, 0.90625), (0.3125, 0.875), (0.3125, 0.875), (0.3125, 0.90625), (0.28125, 0.90625), (0.28125, 0.875), (0.28125, 0.875), (0.28125, 0.90625), (0.25, 0.90625), (0.25, 0.875), (0.25, 0.875), (0.25, 0.90625), (0.21875, 0.90625), (0.21875, 0.875), (0.21875, 0.875), (0.21875, 0.90625), (0.1875, 0.90625), (0.1875, 0.875), (0.1875, 0.875), (0.1875, 0.90625), (0.15625, 0.90625), (0.15625, 0.875), (0.15625, 0.875), (0.15625, 0.90625), (0.125, 0.90625), (0.125, 0.875), (0.125, 0.875), (0.125, 0.90625), (0.09375, 0.90625), (0.09375, 0.875), (0.09375, 0.875), (0.09375, 0.90625), (0.0625, 0.90625), (0.0625, 0.875), (0.0625, 0.875), (0.0625, 0.90625), (0.03125, 0.90625), (0.03125, 0.875), (0.03125, 0.875), (0.03125, 0.90625), (1, 0.90625), (1, 0.875), (1, 0.90625), (1, 0.9375), (0.96875, 0.9375), (0.96875, 0.90625), (0.96875, 0.90625), (0.96875, 0.9375), (0.9375, 0.9375), (0.9375, 0.90625), (0.9375, 0.90625), (0.9375, 0.9375), (0.90625, 0.9375), (0.90625, 0.90625), (0.90625, 0.90625), (0.90625, 0.9375), (0.875, 0.9375), (0.875, 0.90625), (0.875, 0.90625), (0.875, 0.9375), (0.84375, 0.9375), (0.84375, 0.90625), (0.84375, 0.90625), (0.84375, 0.9375), (0.8125, 0.9375), (0.8125, 0.90625), (0.8125, 0.90625), (0.8125, 0.9375), (0.78125, 0.9375), (0.78125, 0.90625), (0.78125, 0.90625), (0.78125, 0.9375), (0.75, 0.9375), (0.75, 0.90625), (0.75, 0.90625), (0.75, 0.9375), (0.71875, 0.9375), (0.71875, 0.90625), (0.71875, 0.90625), (0.71875, 0.9375), (0.6875, 0.9375), (0.6875, 0.90625), (0.6875, 0.90625), (0.6875, 0.9375), (0.65625, 0.9375), (0.65625, 0.90625), (0.65625, 0.90625), (0.65625, 0.9375), (0.625, 0.9375), (0.625, 0.90625), (0.625, 0.90625), (0.625, 0.9375), (0.59375, 0.9375), (0.59375, 0.90625), (0.59375, 0.90625), (0.59375, 0.9375), (0.5625, 0.9375), (0.5625, 0.90625), (0.5625, 0.90625), (0.5625, 0.9375), (0.53125, 0.9375), (0.53125, 0.90625), (0.53125, 0.90625), (0.53125, 0.9375), (0.5, 0.9375), (0.5, 0.90625), (0.5, 0.90625), (0.5, 0.9375), (0.46875, 0.9375), (0.46875, 0.90625), (0.46875, 0.90625), (0.46875, 0.9375), (0.4375, 0.9375), (0.4375, 0.90625), (0.4375, 0.90625), (0.4375, 0.9375), (0.40625, 0.9375), (0.40625, 0.90625), (0.40625, 0.90625), (0.40625, 0.9375), (0.375, 0.9375), (0.375, 0.90625), (0.375, 0.90625), (0.375, 0.9375), (0.34375, 0.9375), (0.34375, 0.90625), (0.34375, 0.90625), (0.34375, 0.9375), (0.3125, 0.9375), (0.3125, 0.90625), (0.3125, 0.90625), (0.3125, 0.9375), (0.28125, 0.9375), (0.28125, 0.90625), (0.28125, 0.90625), (0.28125, 0.9375), (0.25, 0.9375), (0.25, 0.90625), (0.25, 0.90625), (0.25, 0.9375), (0.21875, 0.9375), (0.21875, 0.90625), (0.21875, 0.90625), (0.21875, 0.9375), (0.1875, 0.9375), (0.1875, 0.90625), (0.1875, 0.90625), (0.1875, 0.9375), (0.15625, 0.9375), (0.15625, 0.90625), (0.15625, 0.90625), (0.15625, 0.9375), (0.125, 0.9375), (0.125, 0.90625), (0.125, 0.90625), (0.125, 0.9375), (0.09375, 0.9375), (0.09375, 0.90625), (0.09375, 0.90625), (0.09375, 0.9375), (0.0625, 0.9375), (0.0625, 0.90625), (0.0625, 0.90625), (0.0625, 0.9375), (0.03125, 0.9375), (0.03125, 0.90625), (0.03125, 0.90625), (0.03125, 0.9375), (1, 0.9375), (1, 0.90625), (1, 0.9375), (1, 0.96875), (0.96875, 0.96875), (0.96875, 0.9375), (0.96875, 0.9375), (0.96875, 0.96875), (0.9375, 0.96875), (0.9375, 0.9375), (0.9375, 0.9375), (0.9375, 0.96875), (0.90625, 0.96875), (0.90625, 0.9375), (0.90625, 0.9375), (0.90625, 0.96875), (0.875, 0.96875), (0.875, 0.9375), (0.875, 0.9375), (0.875, 0.96875), (0.84375, 0.96875), (0.84375, 0.9375), (0.84375, 0.9375), (0.84375, 0.96875), (0.8125, 0.96875), (0.8125, 0.9375), (0.8125, 0.9375), (0.8125, 0.96875), (0.78125, 0.96875), (0.78125, 0.9375), (0.78125, 0.9375), (0.78125, 0.96875), (0.75, 0.96875), (0.75, 0.9375), (0.75, 0.9375), (0.75, 0.96875), (0.71875, 0.96875), (0.71875, 0.9375), (0.71875, 0.9375), (0.71875, 0.96875), (0.6875, 0.96875), (0.6875, 0.9375), (0.6875, 0.9375), (0.6875, 0.96875), (0.65625, 0.96875), (0.65625, 0.9375), (0.65625, 0.9375), (0.65625, 0.96875), (0.625, 0.96875), (0.625, 0.9375), (0.625, 0.9375), (0.625, 0.96875), (0.59375, 0.96875), (0.59375, 0.9375), (0.59375, 0.9375), (0.59375, 0.96875), (0.5625, 0.96875), (0.5625, 0.9375), (0.5625, 0.9375), (0.5625, 0.96875), (0.53125, 0.96875), (0.53125, 0.9375), (0.53125, 0.9375), (0.53125, 0.96875), (0.5, 0.96875), (0.5, 0.9375), (0.5, 0.9375), (0.5, 0.96875), (0.46875, 0.96875), (0.46875, 0.9375), (0.46875, 0.9375), (0.46875, 0.96875), (0.4375, 0.96875), (0.4375, 0.9375), (0.4375, 0.9375), (0.4375, 0.96875), (0.40625, 0.96875), (0.40625, 0.9375), (0.40625, 0.9375), (0.40625, 0.96875), (0.375, 0.96875), (0.375, 0.9375), (0.375, 0.9375), (0.375, 0.96875), (0.34375, 0.96875), (0.34375, 0.9375), (0.34375, 0.9375), (0.34375, 0.96875), (0.3125, 0.96875), (0.3125, 0.9375), (0.3125, 0.9375), (0.3125, 0.96875), (0.28125, 0.96875), (0.28125, 0.9375), (0.28125, 0.9375), (0.28125, 0.96875), (0.25, 0.96875), (0.25, 0.9375), (0.25, 0.9375), (0.25, 0.96875), (0.21875, 0.96875), (0.21875, 0.9375), (0.21875, 0.9375), (0.21875, 0.96875), (0.1875, 0.96875), (0.1875, 0.9375), (0.1875, 0.9375), (0.1875, 0.96875), (0.15625, 0.96875), (0.15625, 0.9375), (0.15625, 0.9375), (0.15625, 0.96875), (0.125, 0.96875), (0.125, 0.9375), (0.125, 0.9375), (0.125, 0.96875), (0.09375, 0.96875), (0.09375, 0.9375), (0.09375, 0.9375), (0.09375, 0.96875), (0.0625, 0.96875), (0.0625, 0.9375), (0.0625, 0.9375), (0.0625, 0.96875), (0.03125, 0.96875), (0.03125, 0.9375), (0.03125, 0.9375), (0.03125, 0.96875), (1, 0.96875), (1, 0.9375), (1, 0.96875), (1, 1), (0.96875, 1), (0.96875, 0.96875), (0.96875, 0.96875), (0.96875, 1), (0.9375, 1), (0.9375, 0.96875), (0.9375, 0.96875), (0.9375, 1), (0.90625, 1), (0.90625, 0.96875), (0.90625, 0.96875), (0.90625, 1), (0.875, 1), (0.875, 0.96875), (0.875, 0.96875), (0.875, 1), (0.84375, 1), (0.84375, 0.96875), (0.84375, 0.96875), (0.84375, 1), (0.8125, 1), (0.8125, 0.96875), (0.8125, 0.96875), (0.8125, 1), (0.78125, 1), (0.78125, 0.96875), (0.78125, 0.96875), (0.78125, 1), (0.75, 1), (0.75, 0.96875), (0.75, 0.96875), (0.75, 1), (0.71875, 1), (0.71875, 0.96875), (0.71875, 0.96875), (0.71875, 1), (0.6875, 1), (0.6875, 0.96875), (0.6875, 0.96875), (0.6875, 1), (0.65625, 1), (0.65625, 0.96875), (0.65625, 0.96875), (0.65625, 1), (0.625, 1), (0.625, 0.96875), (0.625, 0.96875), (0.625, 1), (0.59375, 1), (0.59375, 0.96875), (0.59375, 0.96875), (0.59375, 1), (0.5625, 1), (0.5625, 0.96875), (0.5625, 0.96875), (0.5625, 1), (0.53125, 1), (0.53125, 0.96875), (0.53125, 0.96875), (0.53125, 1), (0.5, 1), (0.5, 0.96875), (0.5, 0.96875), (0.5, 1), (0.46875, 1), (0.46875, 0.96875), (0.46875, 0.96875), (0.46875, 1), (0.4375, 1), (0.4375, 0.96875), (0.4375, 0.96875), (0.4375, 1), (0.40625, 1), (0.40625, 0.96875), (0.40625, 0.96875), (0.40625, 1), (0.375, 1), (0.375, 0.96875), (0.375, 0.96875), (0.375, 1), (0.34375, 1), (0.34375, 0.96875), (0.34375, 0.96875), (0.34375, 1), (0.3125, 1), (0.3125, 0.96875), (0.3125, 0.96875), (0.3125, 1), (0.28125, 1), (0.28125, 0.96875), (0.28125, 0.96875), (0.28125, 1), (0.25, 1), (0.25, 0.96875), (0.25, 0.96875), (0.25, 1), (0.21875, 1), (0.21875, 0.96875), (0.21875, 0.96875), (0.21875, 1), (0.1875, 1), (0.1875, 0.96875), (0.1875, 0.96875), (0.1875, 1), (0.15625, 1), (0.15625, 0.96875), (0.15625, 0.96875), (0.15625, 1), (0.125, 1), (0.125, 0.96875), (0.125, 0.96875), (0.125, 1), (0.09375, 1), (0.09375, 0.96875), (0.09375, 0.96875), (0.09375, 1), (0.0625, 1), (0.0625, 0.96875), (0.0625, 0.96875), (0.0625, 1), (0.03125, 1), (0.03125, 0.96875), (0.03125, 0.96875), (0.03125, 1), (1, 1), (1, 0.96875)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (191.829495, 0, 193.258567) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Cube_02" ( + kind = "model" + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 4, 5, 1, 4, 0, 2, 6, 5, 4, 6, 7, 1, 5, 7, 3, 0, 1, 3, 2, 3, 7, 6, 2] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (-50, -50, 50), (-50, 50, -50), (-50, 50, 50), (50, -50, -50), (50, -50, 50), (50, 50, -50), (50, 50, 50)] + float2[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateZYX = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-212.165768, 0, 190.799459) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Cube_03" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (196.331, 0, -195.614) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniSurface_Cube" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-283.52087292432554, -1.6370904631912708e-11, -221.57136403754635) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniSurface_Cube_01" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-192.6883712993065, -1.6370904631912708e-11, -221.57136403754635) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def BasisCurves "OmniHair_BasisCurves" ( + prepend apiSchemas = ["MaterialBindingAPI"] + doc = "basisCurves from maya XGen-groom" + ) + { + uniform token basis = "bspline" + int[] curveVertexCounts = [6, 6, 6, 6] + float3[] extent = [(-46.947018, 3.6487765, 0.8009007), (40.807438, 51.74496, 20.45557)] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + point3f[] points = [(32.945724, 5.988041, 1.6308595), (34.137173, 10.148499, 1.3009007), (36.233295, 14.192265, 1.9558597), (36.296688, 17.675957, 2.4883246), (38.503635, 21.709782, 1.667905), (40.307438, 25.821293, 2.5520527), (-38.29307, 4.1487765, 3.3738482), (-39.96345, 9.926143, 3.413236), (-41.56703, 15.577562, 3.3603835), (-43.884335, 20.371292, 3.6131015), (-44.77227, 26.43213, 4.1838765), (-46.447018, 31.399565, 4.4703255), (8.541511, 21.105211, 2.5770526), (12.117597, 23.706623, 3.7534091), (16.399153, 33.008896, 5.090405), (20.606, 36.174828, 5.8582), (23.601883, 45.069645, 5.251637), (22.881294, 51.24496, 8.579195), (-12.140077, 16.870716, 7.574891), (-15.955103, 23.039955, 10.669359), (-19.113739, 25.761543, 16.080956), (-24.594814, 36.63467, 18.58584), (-30.864456, 42.528637, 19.731884), (-31.6773, 43.52253, 19.95557)] + color3f[] primvars:displayColor = [(1, 1, 1)] ( + interpolation = "constant" + ) + int primvars:endcaps = 0 + texCoord2f[] primvars:st1 = [(0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108)] ( + interpolation = "vertex" + ) + texCoord2f[] primvars:st2 = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)] ( + interpolation = "vertex" + ) + uniform token type = "cubic" + token ui:displayGroup = "Material Graphs" + token ui:displayName = "hair_basisCurves" + int ui:order = 1024 + float[] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ( + interpolation = "vertex" + ) + uniform token wrap = "pinned" + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-120, 0, -100) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniHair_Cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 4, 6, 7, 5, 6, 2, 3, 7, 4, 5, 1, 0, 4, 0, 2, 6, 5, 7, 3, 1] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, 50), (50, -50, 50), (-50, 50, 50), (50, 50, 50), (-50, -50, -50), (50, -50, -50), (-50, 50, -50), (50, 50, -50)] + texCoord2f[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 0), (0, 1), (0, 0), (1, 0), (1, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-90, 0, -221) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "PreviewSurface_mono_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-283.52087292432554, -1.6370904631912708e-11, 315.4231402711175) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "PreviewSurface_mono_lite_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-175.5202052948077, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "DebugWhite_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-67.89003031098687, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "Default_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (184.19079372412423, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "DebugWhiteEmissive_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (44.18136069402303, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } +} + diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/icon.png b/source/extensions/iot_samples.usd_explorer.setup/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/icon.png differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/icons/caret_s2_left_dark.svg b/source/extensions/iot_samples.usd_explorer.setup/data/icons/caret_s2_left_dark.svg new file mode 100644 index 0000000..c2529a3 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/data/icons/caret_s2_left_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/icons/caret_s2_right_dark.svg b/source/extensions/iot_samples.usd_explorer.setup/data/icons/caret_s2_right_dark.svg new file mode 100644 index 0000000..9a0b309 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/data/icons/caret_s2_right_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/icons/navOpen_dark.svg b/source/extensions/iot_samples.usd_explorer.setup/data/icons/navOpen_dark.svg new file mode 100644 index 0000000..10be3db --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/data/icons/navOpen_dark.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Blue_Sky.usd b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Blue_Sky.usd new file mode 100644 index 0000000..04c4089 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Blue_Sky.usd differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Grey_Sky.usd b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Grey_Sky.usd new file mode 100644 index 0000000..e0044d1 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Grey_Sky.usd differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/CarLight_512x256.hdr b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/CarLight_512x256.hdr new file mode 100644 index 0000000..c036907 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/CarLight_512x256.hdr differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/Env_Gradient_001.png b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/Env_Gradient_001.png new file mode 100644 index 0000000..856a5a5 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/Env_Gradient_001.png differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/partly_cloudy.hdr b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/partly_cloudy.hdr new file mode 100644 index 0000000..943e466 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/HDR/partly_cloudy.hdr differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/High_Contrast.usd b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/High_Contrast.usd new file mode 100644 index 0000000..bf69aa8 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/High_Contrast.usd differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Neutral_Lighting.usd b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Neutral_Lighting.usd new file mode 100644 index 0000000..8002791 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Neutral_Lighting.usd differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Sunny_Sky.usd b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Sunny_Sky.usd new file mode 100644 index 0000000..a70499a Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/Sunny_Sky.usd differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/CarLight_512x256.hdr b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/CarLight_512x256.hdr new file mode 100644 index 0000000..c036907 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/CarLight_512x256.hdr differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/Gradient_Backdrop.exr b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/Gradient_Backdrop.exr new file mode 100644 index 0000000..5f8b89d Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/Gradient_Backdrop.exr differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/partly_cloudy.hdr b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/partly_cloudy.hdr new file mode 100644 index 0000000..943e466 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/light_rigs/subusds/partly_cloudy.hdr differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer.ico b/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer.ico new file mode 100644 index 0000000..3f1140f Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer.ico differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer.png b/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer.png new file mode 100644 index 0000000..537b92d Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer.png differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer_about.png b/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer_about.png new file mode 100644 index 0000000..42e0f37 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/nvidia-omniverse-usd_explorer_about.png differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/data/preview.png b/source/extensions/iot_samples.usd_explorer.setup/data/preview.png new file mode 100644 index 0000000..9653535 Binary files /dev/null and b/source/extensions/iot_samples.usd_explorer.setup/data/preview.png differ diff --git a/source/extensions/iot_samples.usd_explorer.setup/docs/CHANGELOG.md b/source/extensions/iot_samples.usd_explorer.setup/docs/CHANGELOG.md new file mode 100644 index 0000000..f6a49d2 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/docs/CHANGELOG.md @@ -0,0 +1,134 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [1.0.32] - 2023-11-02 +### Changed +- OMFP-3224: Added regression test +- Added unit tests for state manager + +## [1.0.31] - 2023-10-25 +### Changed +- OMFP-3094: Restored Window/Viewport menu + +## [1.0.30] - 2023-10-26 +### Changed +- OMFP-2904: Show "Examples" by default in Layout mode + +## [1.0.29] - 2023-10-25 +### Changed +- OMFP-3224: Fix stage template light directions. + +## [1.0.28] - 2023-10-23 +### Changed +- OMFP-2654: Upgraded carb.imgui with omni.kit.imgui + +## [1.0.27] - 2023-10-20 +### Changed +- OMFP-2649: Missed the Layout item, it is now hidden as requested. + +## [1.0.26] - 2023-10-20 +### Changed +- Update embedded light rigs and textures + +## [1.0.25] - 2023-10-19 +### Changed +- Added regression test for OMFP-2304 + +## [1.0.24] - 2023-10-19 +### Changed +- OMFP-1981: always load the default layout when startup the app + +## [1.0.23] - 2023-10-18 +### Changed +- OMFP-2649: Hiding menu entries. + +## [1.0.22] - 2023-10-18 +### Changed +- Updated About dialog PNG to match the new application icon. + +## [1.0.21] - 2023-10-18 +### Changed +- OMFP-2737: Do no rebuild menu (change menu layout) if layout is same + +## [1.0.20] - 2023-10-18 +### Changed +- make windows invisible which are not desired to be in Review mode, OMFP-2252 activity progress window and OMFP-1981 scene optimizer window. +- OMFP-1981: when user switch between modes, make sure the user defined layout in Layout mode is kept. + +## [1.0.19] - 2023-10-17 +### Changed +- OMFP-2547 - remove markup from modal list, markup window visibility is now handled in omni.kit.markup.core + +## [1.0.18] - 2023-10-17 +### Changed +- Fixed test + +## [1.0.17] - 2023-10-16 +### Changed +- Navigation bar visibility fixes + +## [1.0.16] - 2023-10-13 +### Changed +- Waypoint and markup visibilities are bound to their list windows + +## [1.0.15] - 2023-10-12 +### Changed +- OMFP-2417 - Rename 'comment' -> 'review' and 'modify' -> 'layout' + +## [1.0.14] - 2023-10-12 +### Changed +- Added more unit tests. + +## [1.0.13] - 2023-10-11 +### Changed +- OMFP-2328: Fix "Sunnysky" oriented incorrectly + +## [1.0.12] - 2023-10-10 +### Changed +- OMFP-2226 - Remove second Viewport menu item from layouts. + +## [1.0.11] - 2023-10-11 +### Changed +- Added UI state manager. + +## [1.0.10] - 2023-10-10 +### Changed +- Deactivate tools when app mode is changed. + +## [1.0.9] - 2023-10-09 +### Changed +- OMFP-2200 - Disabling the viewport expansion, this should keep us locked to a 16:9 aspect ratio. + +## [1.0.8] - 2023-10-06 +### Changed +- Added a new stage template and made it default + +## [1.0.7] - 2023-10-06 +### Changed +- Enable UI aware "expand_viewport" mode rather than lower-level fill_viewport mode + +## [1.0.6] - 2023-10-05 +### Changed +- Used allowlists for building main menu entries to guard against unexpected menus. + +## [1.0.5] - 2023-10-05 +### Fixed +- Regression in hiding viewport toolbar. + +## [1.0.4] - 2023-10-04 +### Changed +- Modify mode now shows selected menus on main menubar. + +## [1.0.3] - 2023-10-04 +- Hide Viewport top toolbar in Comment Mode + +## [1.0.2] - 2023-10-03 +- Navigation Toolbar hidden by default in Modify Mode + +## [1.0.1] - 2023-09-27 +- Renamed to omni.usd_explorer.setup + + +## [1.0.0] - 2021-04-26 +- Initial version of extension UI template with a window diff --git a/source/extensions/iot_samples.usd_explorer.setup/docs/README.md b/source/extensions/iot_samples.usd_explorer.setup/docs/README.md new file mode 100644 index 0000000..df074bc --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/docs/README.md @@ -0,0 +1 @@ +# IoT Samples Setup Extension [iot_samples.usd_explorer.setup] \ No newline at end of file diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/__init__.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/__init__.py new file mode 100644 index 0000000..9030605 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/__init__.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .setup import * diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/menu_helper.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/menu_helper.py new file mode 100644 index 0000000..6d1c94f --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/menu_helper.py @@ -0,0 +1,135 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + +import asyncio + +import carb.settings +import omni.kit.app +import omni.kit.commands +import omni.kit.menu.utils +import omni.renderer_capture +from omni.kit.menu.utils import MenuLayout + +SETTINGS_APPLICATION_MODE_PATH = "/app/application_mode" + + +class MenuHelper: + def __init__(self) -> None: + self._settings = carb.settings.get_settings() + self._current_layout = None + self._pending_layout = None + self._changing_layout_task: asyncio.Task = None + + self._menu_layout_empty = [] + self._menu_layout_modify = [] + + omni.kit.menu.utils.add_hook(self._menu_hook) + + self._app_mode_sub = self._settings.subscribe_to_node_change_events( + SETTINGS_APPLICATION_MODE_PATH, self._on_application_mode_changed + ) + self._menu_hook() + + def destroy(self) -> None: + omni.kit.menu.utils.remove_hook(self._menu_hook) + + if self._changing_layout_task and not self._changing_layout_task.done(): + self._changing_layout_task.cancel() + self._changing_layout_task = None + + if self._app_mode_sub: + self._settings.unsubscribe_to_change_events(self._app_mode_sub) + self._app_mode_sub = None + + self._app_ready_sub = None + + if self._current_layout: + omni.kit.menu.utils.remove_layout(self._current_layout) + self._current_layout = None + + def _menu_hook(self, *args, **kwargs) -> None: + if self._settings.get_as_bool("/app/view/debug/menus"): + return + + LAYOUT_EMPTY_ALLOWED_MENUS = set(["Developer",]) + LAYOUT_MODIFY_ALLOWED_MENUS = {"File", "Edit", "Window", "Tools", "Help", "Developer",} + + # make NEW list object instead of clear original + # the original list may be held by self._current_layout and omni.kit.menu.utils + self._menu_layout_empty = [] + self._menu_layout_modify = [] + + menu_instance = omni.kit.menu.utils.get_instance() + if not menu_instance: # pragma: no cover + return + + # Build new layouts using allowlists + for key in menu_instance._menu_defs: + if key.lower().endswith("widget"): + continue + + if key not in LAYOUT_EMPTY_ALLOWED_MENUS: + self._menu_layout_empty.append(MenuLayout.Menu(key, remove=True)) + + if key not in LAYOUT_MODIFY_ALLOWED_MENUS: + self._menu_layout_modify.append(MenuLayout.Menu(key, remove=True)) + + # Remove 'Viewport 2' entry + if key == "Window": + for menu_item_1 in menu_instance._menu_defs[key]: + for menu_item_2 in menu_item_1: + if menu_item_2.name == "Viewport": + menu_item_2.sub_menu = [mi for mi in menu_item_2.sub_menu if mi.name != "Viewport 2"] + + if self._changing_layout_task is None or self._changing_layout_task.done(): + self._changing_layout_task = asyncio.ensure_future(self._delayed_change_layout()) + + def _on_application_mode_changed(self, *args) -> None: + if self._changing_layout_task is None or self._changing_layout_task.done(): + self._changing_layout_task = asyncio.ensure_future(self._delayed_change_layout()) + + async def _delayed_change_layout(self): + mode = self._settings.get_as_string(SETTINGS_APPLICATION_MODE_PATH) + if mode in ["present", "review"]: + pending_layout = self._menu_layout_empty + else: + pending_layout = self._menu_layout_modify + + # Don't change layout inside of menu callback _on_application_mode_changed + # omni.ui throws error + if self._current_layout: + # Here only check number of layout menu items and name of every of layout menu item + same_layout = len(self._current_layout) == len(pending_layout) + if same_layout: + for index, item in enumerate(self._current_layout): + if item.name != pending_layout[index].name: + same_layout = False + if same_layout: + return + + omni.kit.menu.utils.remove_layout(self._current_layout) + self._current_layout = None + + omni.kit.menu.utils.add_layout(pending_layout) # type: ignore + self._current_layout = pending_layout.copy() + + self._changing_layout_task = None diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/menubar_helper.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/menubar_helper.py new file mode 100644 index 0000000..38e3969 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/menubar_helper.py @@ -0,0 +1,100 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + +from pathlib import Path + +import carb +import carb.settings +import carb.tokens +import omni.ui as ui +from omni.ui import color as cl + +ICON_PATH = carb.tokens.get_tokens_interface().resolve("${iot_samples.usd_explorer.setup}/data/icons") + +VIEW_MENUBAR_STYLE = { + "MenuBar.Window": {"background_color": 0xA0000000}, + "MenuBar.Item.Background": { "background_color": 0, }, + "Menu.Item.Background": { "background_color": 0, } +} +VIEWPORT_CAMERA_STYLE = { + "Menu.Item.Icon::Expand": {"image_url": f"{ICON_PATH}/caret_s2_right_dark.svg", "color": cl.viewport_menubar_light}, + "Menu.Item.Icon::Expand:checked": {"image_url": f"{ICON_PATH}/caret_s2_left_dark.svg"}, +} + +class MenubarHelper: + def __init__(self) -> None: + self._settings = carb.settings.get_settings() + + # Set menubar background and style + try: + from omni.kit.viewport.menubar.core import DEFAULT_MENUBAR_NAME + from omni.kit.viewport.menubar.core import get_instance as get_menubar_instance + instance = get_menubar_instance() + if not instance: # pragma: no cover + return + + default_menubar = instance.get_menubar(DEFAULT_MENUBAR_NAME) + default_menubar.background_visible = True + default_menubar.style.update(VIEW_MENUBAR_STYLE) + default_menubar.show_separator = True + except ImportError: # pragma: no cover + carb.log_warn("Viewport menubar not found!") + + try: + import omni.kit.viewport.menubar.camera + self._camera_menubar_instance = omni.kit.viewport.menubar.camera.get_instance() + if not self._camera_menubar_instance: # pragma: no cover + return + + # Change expand button icon + self._camera_menubar_instance._camera_menu._style.update(VIEWPORT_CAMERA_STYLE) + # New menu item for camera speed + self._camera_menubar_instance.register_menu_item(self._create_camera_speed, order=100) + self._camera_menubar_instance.deregister_menu_item(self._camera_menubar_instance._camera_menu._build_create_camera) + except ImportError: + carb.log_warn("Viewport menubar not found!") + self._camera_menubar_instance = None + except AttributeError: # pragma: no cover + self._camera_menubar_instance = None + + # Hide default render and settings menubar + self._settings.set("/persistent/exts/omni.kit.viewport.menubar.render/visible", False) + self._settings.set("/persistent/exts/omni.kit.viewport.menubar.settings/visible", False) + + def destroy(self) -> None: + if self._camera_menubar_instance: + self._camera_menubar_instance.deregister_menu_item(self._create_camera_speed) + + def _create_camera_speed(self, _vc, _r: ui.Menu) -> None: + from omni.kit.viewport.menubar.core import SettingModel, SliderMenuDelegate + ui.MenuItem( + "Speed", + hide_on_click=False, + delegate=SliderMenuDelegate( + model=SettingModel("/persistent/app/viewport/camMoveVelocity", draggable=True), + min=self._settings.get_as_float("/persistent/app/viewport/camVelocityMin") or 0.01, + max=self._settings.get_as_float("/persistent/app/viewport/camVelocityMax"), + tooltip="Set the Fly Mode navigation speed", + width=0, + reserve_status=True, + ), + ) diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/navigation.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/navigation.py new file mode 100644 index 0000000..753e18c --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/navigation.py @@ -0,0 +1,162 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + +import asyncio + +import carb +import carb.settings +import carb.tokens +import carb.dictionary +import omni.kit.app +import omni.ext +import omni.ui as ui +import omni.kit.actions.core +from omni.kit.viewport.navigation.core import ( + NAVIGATION_TOOL_OPERATION_ACTIVE, + ViewportNavigationTooltip, + get_navigation_bar, +) + +__all__ = ["Navigation"] + + +CURRENT_TOOL_PATH = "/app/viewport/currentTool" +SETTING_NAVIGATION_ROOT = "/exts/omni.kit.tool.navigation/" +NAVIGATION_BAR_VISIBLE_PATH = "/exts/omni.kit.viewport.navigation.core/isVisible" +APPLICATION_MODE_PATH = "/app/application_mode" +WALK_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.walk/visible" +CAPTURE_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.capture/visible" +MARKUP_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.markup/visible" +MEASURE_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.measure/visible" +SECTION_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.section/visible" +TELEPORT_SEPARATOR_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.teleport/spvisible" +WAYPOINT_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.waypoint/visible" +VIEWPORT_CONTEXT_MENU_PATH = "/exts/omni.kit.window.viewport/showContextMenu" +MENUBAR_APP_MODES_PATH = "/exts/omni.kit.usd_explorer.main.menubar/include_modify_mode" +WELCOME_WINDOW_VISIBLE_PATH = "/exts/omni.kit.usd_explorer.window.welcome/visible" +ACTIVE_OPERATION_PATH = "/exts/omni.kit.viewport.navigation.core/activeOperation" + +class Navigation: + NAVIGATION_BAR_NAME = None + + # ext_id is current extension id. It can be used with extension manager to query additional information, like where + # this extension is located on filesystem. + def on_startup(self, ext_id: str) -> None: + sections = ext_id.split("-") + self._ext_name = sections[0] + + self._settings = carb.settings.get_settings() + self._navigation_bar = get_navigation_bar() + + self._tool_bar_button = None + + self._dict = carb.dictionary.get_dictionary() + self._panel_visible = True + self._navigation_bar.show() + self._settings.set(CURRENT_TOOL_PATH, "navigation") + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "teleport") + + self._viewport_welcome_window_visibility_changed_sub = self._settings.subscribe_to_node_change_events( + WELCOME_WINDOW_VISIBLE_PATH, self._on_welcome_window_visibility_change + ) + + self._settings.set(WALK_VISIBLE_PATH, False) + self._settings.set(MARKUP_VISIBLE_PATH, True) + self._settings.set(WAYPOINT_VISIBLE_PATH, True) + self._settings.set(TELEPORT_SEPARATOR_VISIBLE_PATH, True) + self._settings.set(CAPTURE_VISIBLE_PATH, True) + self._settings.set(MEASURE_VISIBLE_PATH, True) + self._settings.set(SECTION_VISIBLE_PATH, True) + + self._application_mode_changed_sub = self._settings.subscribe_to_node_change_events( + APPLICATION_MODE_PATH, self._on_application_mode_changed + ) + + self._show_tooltips = False + self._nav_bar_visibility_sub = self._settings.subscribe_to_node_change_events( + NAVIGATION_BAR_VISIBLE_PATH, self._delay_reset_tooltip) + + _prev_navbar_vis = None + _prev_tool = None + _prev_operation = None + def _on_welcome_window_visibility_change(self, item: carb.dictionary.Item, *_) -> None: + if not isinstance(self._dict, (carb.dictionary.IDictionary, dict)): + return + + welcome_window_vis = self._dict.get(item) + + # preserve the state of the navbar upon closing the Welcome window if the app is in Layout mode + if self._settings.get_as_string(APPLICATION_MODE_PATH).lower() == "layout": + # preserve the state of the navbar visibility + if welcome_window_vis: + self._prev_navbar_vis = self._settings.get_as_bool(NAVIGATION_BAR_VISIBLE_PATH) + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, not(welcome_window_vis)) + self._prev_tool = self._settings.get(CURRENT_TOOL_PATH) + self._prev_operation = self._settings.get(ACTIVE_OPERATION_PATH) + else: # restore the state of the navbar visibility + if self._prev_navbar_vis is not None: + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, self._prev_navbar_vis) + self._prev_navbar_vis = None + if self._prev_tool is not None: + self._settings.set(CURRENT_TOOL_PATH, self._prev_tool) + if self._prev_operation is not None: + self._settings.set(ACTIVE_OPERATION_PATH, self._prev_operation) + return + else: + if welcome_window_vis: + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "none") + else: + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "teleport") + + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, not(welcome_window_vis)) + + def _on_application_mode_changed(self, item: carb.dictionary.Item, *_) -> None: + if not isinstance(self._dict, (carb.dictionary.IDictionary, dict)): + return + + current_mode = self._dict.get(item) + self._test = asyncio.ensure_future(self._switch_by_mode(current_mode)) + + async def _switch_by_mode(self, current_mode: str) -> None: + await omni.kit.app.get_app().next_update_async() + state = True if current_mode == "review" else False + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, state) + self._settings.set(VIEWPORT_CONTEXT_MENU_PATH, not(state)) # toggle RMB viewport context menu + self._delay_reset_tooltip(None) + + def _delay_reset_tooltip(self, *_) -> None: + async def delay_set_tooltip() -> None: + for _i in range(4): + await omni.kit.app.get_app().next_update_async() # type: ignore + ViewportNavigationTooltip.set_visible(self._show_tooltips) + asyncio.ensure_future(delay_set_tooltip()) + + def _on_showtips_click(self, *_) -> None: + self._show_tooltips = not self._show_tooltips + ViewportNavigationTooltip.set_visible(self._show_tooltips) + + def on_shutdown(self) -> None: + self._navigation_bar = None + self._viewport_welcome_window_visibility_changed_sub = None + self._settings.unsubscribe_to_change_events(self._application_mode_changed_sub) # type:ignore + self._application_mode_changed_sub = None + self._dict = None diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/setup.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/setup.py new file mode 100644 index 0000000..7cda082 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/setup.py @@ -0,0 +1,528 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + + +import asyncio +import weakref +from functools import partial +import os +from pathlib import Path +from typing import cast, Optional + +import omni.client +import omni.ext +import omni.kit.menu.utils +import omni.kit.app +import omni.kit.context_menu +import omni.kit.ui +import omni.usd + +from omni.kit.quicklayout import QuickLayout +from omni.kit.menu.utils import MenuLayout +from omni.kit.window.title import get_main_window_title +from omni.kit.usd.layers import LayerUtils + +from omni.kit.viewport.menubar.core import get_instance as get_mb_inst, DEFAULT_MENUBAR_NAME +from omni.kit.viewport.menubar.core.viewport_menu_model import ViewportMenuModel +from omni.kit.viewport.utility import get_active_viewport, get_active_viewport_window, disable_selection + +import carb +import carb.settings +import carb.dictionary +import carb.events +import carb.tokens +import carb.input + +import omni.kit.imgui as _imgui +from pxr import Sdf, Usd + +from .navigation import Navigation +from .menu_helper import MenuHelper +from .menubar_helper import MenubarHelper +from .stage_template import SunnySkyStage +from .ui_state_manager import UIStateManager + +SETTINGS_PATH_FOCUSED = "/app/workspace/currentFocused" +APPLICATION_MODE_PATH = "/app/application_mode" +MODAL_TOOL_ACTIVE_PATH = "/app/tools/modal_tool_active" +CURRENT_TOOL_PATH = "/app/viewport/currentTool" +ROOT_WINDOW_NAME = "DockSpace" +ICON_PATH = carb.tokens.get_tokens_interface().resolve("${iot_samples.usd_explorer.setup}/data/icons") +SETTINGS_STARTUP_EXPAND_VIEWPORT = "/app/startup/expandViewport" +VIEWPORT_CONTEXT_MENU_PATH = "/exts/omni.kit.window.viewport/showContextMenu" +TELEPORT_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.teleport/visible" + + +async def _load_layout_startup(layout_file: str, keep_windows_open: bool=False) -> None: + try: + # few frames delay to avoid the conflict with the layout of omni.kit.mainwindow + for i in range(3): + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + + # WOR: some layout don't happy collectly the first time + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + except Exception as exc: # pragma: no cover (Can't be tested because a non-existing layout file prints an log_error in QuickLayout and does not throw an exception) + carb.log_warn(f"Failed to load layout {layout_file}: {exc}") + + +async def _load_layout(layout_file: str, keep_windows_open:bool=False) -> None: + try: + # few frames delay to avoid the conflict with the layout of omni.kit.mainwindow + for i in range(3): + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + + except Exception as exc: # pragma: no cover (Can't be tested because a non-existing layout file prints an log_error in QuickLayout and does not throw an exception) + carb.log_warn(f"Failed to load layout {layout_file}: {exc}") + +async def _clear_startup_scene_edits() -> None: + try: + for i in range(50): # This could possibly be a smaller value. I want to ensure this happens after RTX startup + await omni.kit.app.get_app().next_update_async() # type: ignore + omni.usd.get_context().set_pending_edit(False) + except Exception as exc: # pragma: no cover + carb.log_warn(f"Failed to clear stage edits on startup: {exc}") + + +# This extension is mostly loading the Layout updating menu +class SetupExtension(omni.ext.IExt): + # ext_id is current extension id. It can be used with extension manager to query additional information, like where + # this extension is located on filesystem. + + @property + def _app(self): + return omni.kit.app.get_app() + + @property + def _settings(self): + return carb.settings.get_settings() + + def on_startup(self, ext_id: str) -> None: + self._ext_id = ext_id + self._menubar_helper = MenubarHelper() + self._menu_helper = MenuHelper() + + # using imgui directly to adjust some color and Variable + imgui = _imgui.acquire_imgui() + + # match Create overides + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrab, carb.Float4(0.4, 0.4, 0.4, 1)) + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrabHovered, carb.Float4(0.6, 0.6, 0.6, 1)) + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrabActive, carb.Float4(0.8, 0.8, 0.8, 1)) + + # DockSplitterSize is the variable that drive the size of the Dock Split connection + imgui.push_style_var_float(_imgui.StyleVar.DockSplitterSize, 2) + + # setup the Layout for your app + self._layouts_path = carb.tokens.get_tokens_interface().resolve("${iot_samples.usd_explorer.setup}/layouts") + layout_file = Path(self._layouts_path).joinpath(f"{self._settings.get('/app/layout/name')}.json") + self.__setup_window_task = asyncio.ensure_future(_load_layout_startup(f"{layout_file}", True)) + + self.review_layout_path = str(Path(self._layouts_path) / "comment_layout.json") + self.default_layout_path = str(Path(self._layouts_path) / "default.json") + self.layout_user_path = str(Path(self._layouts_path) / "layout_user.json") + + # remove the user defined layout so that we always load the default layout when startup + if os.path.exists(self.layout_user_path): + os.remove(self.layout_user_path) + + # setup the menu and their layout + self._current_layout_priority = 0 + self._layout_menu_items = [] + self._layout_file_menu() + self._menu_layout = [] + if self._settings.get_as_bool('/app/view/debug/menus'): + self._layout_menu() + + + # setup the Application Title + window_title = get_main_window_title() + if window_title: + window_title.set_app_version("0.1.0") + + # self._context_menu() + self._register_my_menu() + self._navigation = Navigation() + self._navigation.on_startup(ext_id) + + self._application_mode_changed_sub = self._settings.subscribe_to_node_change_events( + APPLICATION_MODE_PATH, weakref.proxy(self)._on_application_mode_changed + ) + + self._set_viewport_menubar_visibility(False) + self._test = asyncio.ensure_future(_clear_startup_scene_edits()) + + self._usd_context = omni.usd.get_context() + self._stage_event_sub = self._usd_context.get_stage_event_stream().create_subscription_to_pop( + self._on_stage_open_event, name="TeleportDefaultOn" + ) + if self._settings.get_as_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT): + self._set_viewport_fill_on() + + self._stage_templates = [SunnySkyStage()] + + disable_selection(get_active_viewport()) + + self._ui_state_manager = UIStateManager() + self._setup_ui_state_changes() + omni.kit.menu.utils.add_layout([ + MenuLayout.Menu("Window", [ + MenuLayout.Item("Viewport", source="Window/Viewport/Viewport 1"), + MenuLayout.Item("Playlist", remove=True), + MenuLayout.Item("Layout", remove=True), + MenuLayout.Sort(exclude_items=["Extensions"], sort_submenus=True), + ]) + ]) + def show_documentation(*x): + import webbrowser + webbrowser.open("http://docs.omniverse.nvidia.com/explorer") + self._help_menu_items = [ + omni.kit.menu.utils.MenuItemDescription(name="Documentation", + onclick_fn=show_documentation, + appear_after=[omni.kit.menu.utils.MenuItemOrder.FIRST]) + ] + omni.kit.menu.utils.add_menu_items(self._help_menu_items, name="Help") + + def _on_stage_open_event(self, event: carb.events.IEvent) -> None: + if event.type == int(omni.usd.StageEventType.OPENED): + app_mode = self._settings.get_as_string(APPLICATION_MODE_PATH).lower() + + # exit all tools + self._settings.set(CURRENT_TOOL_PATH, "none") + + if app_mode == "review": + asyncio.ensure_future(self._stage_post_open_teleport_toggle()) + + # toggle RMB viewport context menu based on application mode + value = False if app_mode == "review" else True + self._settings.set(VIEWPORT_CONTEXT_MENU_PATH, value) + + # teleport is activated after loading a stage and app is in Review mode + async def _stage_post_open_teleport_toggle(self) -> None: + await self._app.next_update_async() + if hasattr(self, "_usd_context") and self._usd_context is not None and not self._usd_context.is_new_stage(): + self._settings.set("/exts/omni.kit.viewport.navigation.core/activeOperation", "teleport") + + def _set_viewport_fill_on(self) -> None: + vp_window = get_active_viewport_window() + vp_widget = vp_window.viewport_widget if vp_window else None + if vp_widget: + vp_widget.expand_viewport = True + + def _set_viewport_menubar_visibility(self, show: bool) -> None: + mb_inst = get_mb_inst() + if mb_inst and hasattr(mb_inst, "get_menubar"): + main_menubar = mb_inst.get_menubar(DEFAULT_MENUBAR_NAME) + if main_menubar.visible_model.as_bool != show: + main_menubar.visible_model.set_value(show) + ViewportMenuModel()._item_changed(None) # type: ignore + + def _on_application_mode_changed(self, item: carb.dictionary.Item, _typ: carb.settings.ChangeEventType) -> None: + if self._settings.get_as_string(APPLICATION_MODE_PATH).lower() == "review": + omni.usd.get_context().get_selection().clear_selected_prim_paths() + disable_selection(get_active_viewport()) + + current_mode: str = cast(str, item.get_dict()) + asyncio.ensure_future(self.defer_load_layout(current_mode)) + + async def defer_load_layout(self, current_mode: str) -> None: + keep_windows = True + # Focus Mode Toolbar + self._settings.set_bool(SETTINGS_PATH_FOCUSED, True) # current_mode not in ("review", "layout")) + + # Turn off all tools and modal + self._settings.set_string(CURRENT_TOOL_PATH, "none") + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + if current_mode == "review": + # save the current layout for restoring later if switch back + QuickLayout.save_file(self.layout_user_path) + # we don't want to keep any windows except the ones which are visible in self.review_layout_path + await _load_layout(self.review_layout_path, False) + else: # current_mode == "layout": + # check if there is any user modified layout, if yes use that one + layout_filename = self.layout_user_path if os.path.exists(self.layout_user_path) else self.default_layout_path + await _load_layout(layout_filename, keep_windows) + + self._set_viewport_menubar_visibility(current_mode == "layout") + + def _setup_ui_state_changes(self) -> None: + windows_to_hide_on_modal = ["Measure", "Section", "Waypoints"] + self._ui_state_manager.add_hide_on_modal(window_names=windows_to_hide_on_modal, restore=True) + + window_titles = ["Markups", "Waypoints"] + for window in window_titles: + setting_name = f'/exts/omni.usd_explorer.setup/{window}/visible' + self._ui_state_manager.add_window_visibility_setting(window, setting_name) + + # toggle icon visibilites based on window visibility + + self._ui_state_manager.add_settings_copy_dependency( + source_path="/exts/omni.usd_explorer.setup/Markups/visible", + target_path="/exts/omni.kit.markup.core/show_icons", + ) + + self._ui_state_manager.add_settings_copy_dependency( + source_path="/exts/omni.usd_explorer.setup/Waypoints/visible", + target_path="/exts/omni.kit.waypoint.core/show_icons", + ) + + def _custom_quicklayout_menu(self) -> None: + # we setup a simple ways to Load custom layout from the exts + def add_layout_menu_entry(name, parameter, key): + import inspect + + editor_menu = omni.kit.ui.get_editor_menu() + + layouts_path = carb.tokens.get_tokens_interface().resolve("${iot_samples.usd_explorer.setup}/layouts") + + menu_path = f"Layout/{name}" + menu = editor_menu.add_item(menu_path, None, False, self._current_layout_priority) # type: ignore + self._current_layout_priority = self._current_layout_priority + 1 + + if inspect.isfunction(parameter): # pragma: no cover (Never used, see commented out section below regarding quick save/load) + menu_action = omni.kit.menu.utils.add_action_to_menu( + menu_path, + lambda *_: asyncio.ensure_future(parameter()), + name, + (carb.input.KEYBOARD_MODIFIER_FLAG_CONTROL, key), + ) + else: + menu_action = omni.kit.menu.utils.add_action_to_menu( + menu_path, + lambda *_: asyncio.ensure_future(_load_layout(f"{layouts_path}/{parameter}.json")), + name, + (carb.input.KEYBOARD_MODIFIER_FLAG_CONTROL, key), + ) + + self._layout_menu_items.append((menu, menu_action)) + + add_layout_menu_entry("Reset Layout", "default", carb.input.KeyboardInput.KEY_1) + add_layout_menu_entry("Viewport Only", "viewport_only", carb.input.KeyboardInput.KEY_2) + add_layout_menu_entry("Markup Editor", "markup_editor", carb.input.KeyboardInput.KEY_3) + # add_layout_menu_entry("Waypoint Viewer", "waypoint_viewer", carb.input.KeyboardInput.KEY_4) + + # # you can enable Quick Save and Quick Load here + # if False: + # # create Quick Load & Quick Save + # from omni.kit.quicklayout import QuickLayout + + # async def quick_save(): + # QuickLayout.quick_save(None, None) + + # async def quick_load(): + # QuickLayout.quick_load(None, None) + + # add_layout_menu_entry("Quick Save", quick_save, carb.input.KeyboardInput.KEY_7) + # add_layout_menu_entry("Quick Load", quick_load, carb.input.KeyboardInput.KEY_8) + + def _register_my_menu(self) -> None: + context_menu: Optional[omni.kit.context_menu.ContextMenuExtension] = omni.kit.context_menu.get_instance() + if not context_menu: # pragma: no cover + return + + def _layout_file_menu(self) -> None: + self._menu_file_layout = [ + MenuLayout.Menu( + "File", + [ + MenuLayout.Item("New"), + MenuLayout.Item("New From Stage Template"), + MenuLayout.Item("Open"), + MenuLayout.Item("Open Recent"), + MenuLayout.Seperator(), + MenuLayout.Item("Re-open with New Edit Layer"), + MenuLayout.Seperator(), + MenuLayout.Item("Share"), + MenuLayout.Seperator(), + MenuLayout.Item("Save"), + MenuLayout.Item("Save As..."), + MenuLayout.Item("Save With Options"), + MenuLayout.Item("Save Selected"), + MenuLayout.Item("Save Flattened As...", remove=True), + MenuLayout.Seperator(), + MenuLayout.Item("Collect As..."), + MenuLayout.Item("Export"), + MenuLayout.Seperator(), + MenuLayout.Item("Import"), + MenuLayout.Item("Add Reference"), + MenuLayout.Item("Add Payload"), + MenuLayout.Seperator(), + MenuLayout.Item("Exit"), + ] + ) + ] + omni.kit.menu.utils.add_layout(self._menu_file_layout) + + + def _layout_menu(self) -> None: + self._menu_layout = [ + MenuLayout.Menu( + "Window", + [ + MenuLayout.SubMenu( + "Animation", + [ + MenuLayout.Item("Timeline"), + MenuLayout.Item("Sequencer"), + MenuLayout.Item("Curve Editor"), + MenuLayout.Item("Retargeting"), + MenuLayout.Item("Animation Graph"), + MenuLayout.Item("Animation Graph Samples"), + ], + ), + MenuLayout.SubMenu( + "Layout", + [ + MenuLayout.Item("Quick Save", remove=True), + MenuLayout.Item("Quick Load", remove=True), + ], + ), + MenuLayout.SubMenu( + "Browsers", + [ + MenuLayout.Item("Content", source="Window/Content"), + MenuLayout.Item("Materials"), + MenuLayout.Item("Skies"), + ], + ), + MenuLayout.SubMenu( + "Rendering", + [ + MenuLayout.Item("Render Settings"), + MenuLayout.Item("Movie Capture"), + MenuLayout.Item("MDL Material Graph"), + MenuLayout.Item("Tablet XR"), + ], + ), + MenuLayout.SubMenu( + "Simulation", + [ + MenuLayout.Group( + "Flow", + [ + MenuLayout.Item("Presets", source="Window/Flow/Presets"), + MenuLayout.Item("Monitor", source="Window/Flow/Monitor"), + ], + ), + MenuLayout.Group( + "Blast", + [ + MenuLayout.Item("Settings", source="Window/Blast/Settings"), + MenuLayout.SubMenu( + "Documentation", + [ + MenuLayout.Item("Kit UI", source="Window/Blast/Documentation/Kit UI"), + MenuLayout.Item( + "Programming", source="Window/Blast/Documentation/Programming" + ), + MenuLayout.Item( + "USD Schemas", source="Window/Blast/Documentation/USD Schemas" + ), + ], + ), + ], + ), + MenuLayout.Item("Debug"), + # MenuLayout.Item("Performance"), + MenuLayout.Group( + "Physics", + [ + MenuLayout.Item("Demo Scenes"), + MenuLayout.Item("Settings", source="Window/Physics/Settings"), + MenuLayout.Item("Debug"), + MenuLayout.Item("Test Runner"), + MenuLayout.Item("Character Controller"), + MenuLayout.Item("OmniPVD"), + MenuLayout.Item("Physics Helpers"), + ], + ), + ], + ), + MenuLayout.SubMenu( + "Utilities", + [ + MenuLayout.Item("Console"), + MenuLayout.Item("Profiler"), + MenuLayout.Item("USD Paths"), + MenuLayout.Item("Statistics"), + MenuLayout.Item("Activity Monitor"), + ], + ), + # Remove 'Viewport 2' entry + MenuLayout.SubMenu( + "Viewport", + [ + MenuLayout.Item("Viewport 2", remove=True), + ], + ), + MenuLayout.Sort(exclude_items=["Extensions"]), + MenuLayout.Item("New Viewport Window", remove=True), + ], + ), + # that is you enable the Quick Layout Menu + MenuLayout.Menu( + "Layout", + [ + MenuLayout.Item("Default", source="Reset Layout"), + MenuLayout.Item("Viewport Only"), + MenuLayout.Item("Markup Editor"), + MenuLayout.Item("Waypoint Viewer"), + MenuLayout.Seperator(), + MenuLayout.Item("UI Toggle Visibility", source="Window/UI Toggle Visibility"), + MenuLayout.Item("Fullscreen Mode", source="Window/Fullscreen Mode"), + MenuLayout.Seperator(), + MenuLayout.Item("Save Layout", source="Window/Layout/Save Layout..."), + MenuLayout.Item("Load Layout", source="Window/Layout/Load Layout..."), + # MenuLayout.Seperator(), + # MenuLayout.Item("Quick Save", source="Window/Layout/Quick Save"), + # MenuLayout.Item("Quick Load", source="Window/Layout/Quick Load"), + ], + ), + MenuLayout.Menu("Tools", [MenuLayout.SubMenu("Animation", remove=True)]), + ] + omni.kit.menu.utils.add_layout(self._menu_layout) # type: ignore + + # if you want to support the Quick Layout Menu + self._custom_quicklayout_menu() + + def on_shutdown(self): + if self._menu_layout: + omni.kit.menu.utils.remove_layout(self._menu_layout) # type: ignore + self._menu_layout.clear() + self._layout_menu_items.clear() + self._navigation.on_shutdown() + del self._navigation + self._settings.unsubscribe_to_change_events(self._application_mode_changed_sub) + del self._application_mode_changed_sub + + self._stage_event_sub = None + + # From View setup + self._menubar_helper.destroy() + if self._menu_helper and hasattr(self._menu_helper, "destroy"): + self._menu_helper.destroy() + self._menu_helper = None + + self._stage_templates = [] diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/stage_template.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/stage_template.py new file mode 100644 index 0000000..828f391 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/stage_template.py @@ -0,0 +1,112 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import carb +import omni.ext +import omni.kit.commands +from omni.kit.stage_templates import register_template, unregister_template +from pxr import Gf, Sdf, Usd, UsdGeom, UsdLux + + +class SunnySkyStage: + def __init__(self): + register_template("SunnySky", self.new_stage) + + def __del__(self): + unregister_template("SunnySky") + + def new_stage(self, rootname, usd_context_name): + # Create basic DistantLight + usd_context = omni.usd.get_context(usd_context_name) + stage = usd_context.get_stage() + # get up axis + up_axis = UsdGeom.GetStageUpAxis(stage) + with Usd.EditContext(stage, stage.GetRootLayer()): + # create Environment + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment", + prim_type="Xform", + select_new_prim=False, + create_default_xform=True, + context_name=usd_context_name + ) + + texture_path = carb.tokens.get_tokens_interface().resolve("${iot_samples.usd_explorer.setup}/data/light_rigs/HDR/partly_cloudy.hdr") + + # create Sky + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment/Sky", + prim_type="DomeLight", + select_new_prim=False, + attributes={ + UsdLux.Tokens.inputsIntensity: 1000, + UsdLux.Tokens.inputsTextureFile: texture_path, + UsdLux.Tokens.inputsTextureFormat: UsdLux.Tokens.latlong, + UsdLux.Tokens.inputsSpecular: 1, + UsdGeom.Tokens.visibility: "inherited", + } if hasattr(UsdLux.Tokens, 'inputsIntensity') else \ + { + UsdLux.Tokens.intensity: 1000, + UsdLux.Tokens.textureFile: texture_path, + UsdLux.Tokens.textureFormat: UsdLux.Tokens.latlong, + UsdGeom.Tokens.visibility: "inherited", + }, + create_default_xform=True, + context_name=usd_context_name + ) + prim = stage.GetPrimAtPath("/Environment/Sky") + prim.CreateAttribute("xformOp:scale", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(1, 1, 1)) + prim.CreateAttribute("xformOp:translate", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 0)) + if up_axis == "Y": + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(270, 0, 0)) + else: + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 90)) + prim.CreateAttribute("xformOpOrder", Sdf.ValueTypeNames.String, False).Set(["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]) + + # create DistantLight + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment/DistantLight", + prim_type="DistantLight", + select_new_prim=False, + attributes={ + UsdLux.Tokens.inputsAngle: 4.3, + UsdLux.Tokens.inputsIntensity: 3000, + UsdGeom.Tokens.visibility: "inherited", + } if hasattr(UsdLux.Tokens, 'inputsIntensity') else \ + { + UsdLux.Tokens.angle: 4.3, + UsdLux.Tokens.intensity: 3000, + UsdGeom.Tokens.visibility: "inherited", + }, + create_default_xform=True, + context_name=usd_context_name + ) + prim = stage.GetPrimAtPath("/Environment/DistantLight") + prim.CreateAttribute("xformOp:scale", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(1, 1, 1)) + prim.CreateAttribute("xformOp:translate", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 0)) + if up_axis == "Y": + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(310.6366313590111, -125.93251524567805, 0.8821359067542289)) + else: + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(41.35092544555664, 0.517652153968811, -35.92928695678711)) + prim.CreateAttribute("xformOpOrder", Sdf.ValueTypeNames.String, False).Set(["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]) diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/__init__.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/__init__.py new file mode 100644 index 0000000..b159143 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/__init__.py @@ -0,0 +1,27 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +# run startup tests first +from .test_app_startup import * +# run all other tests after +from .test_extensions import * +from .test import * +from .test_state_manager import * diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test.py new file mode 100644 index 0000000..687a30d --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test.py @@ -0,0 +1,214 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import omni.kit.app + +from omni.ui.tests.test_base import OmniUiTest +from omni.kit import ui_test + + +ext_id = 'iot_samples.usd_explorer.setup' + + +class TestSetupToolExtension(OmniUiTest): + async def test_extension(self): + manager = omni.kit.app.get_app().get_extension_manager() + self.assertTrue(ext_id) + self.assertTrue(manager.is_extension_enabled(ext_id)) + + app = omni.kit.app.get_app() + for _ in range(500): + await app.next_update_async() + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + + self.assertTrue(not manager.is_extension_enabled(ext_id)) + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menubar_helper_camera_dependency(self): + manager = omni.kit.app.get_app().get_extension_manager() + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled('omni.kit.viewport.menubar.camera', True) + await ui_test.human_delay() + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menu_helper(self): + from ..menu_helper import MenuHelper + + menu_helper = MenuHelper() + menu_helper.destroy() + + async def test_menubar_helper_menu(self): + from ..menubar_helper import MenubarHelper + + menubar_helper = MenubarHelper() + menubar_helper._create_camera_speed(None, None) + menubar_helper.destroy() + + async def test_menu_helper_debug_setting(self): + SETTINGS_VIEW_DEBUG_MENUS = '/app/view/debug/menus' + + import carb.settings + settings = carb.settings.get_settings() + + manager = omni.kit.app.get_app().get_extension_manager() + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + orig_value = settings.get(SETTINGS_VIEW_DEBUG_MENUS) + settings.set_bool(SETTINGS_VIEW_DEBUG_MENUS, True) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + settings.set_bool(SETTINGS_VIEW_DEBUG_MENUS, orig_value) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menu_helper_application_mode_change(self): + from ..menu_helper import SETTINGS_APPLICATION_MODE_PATH + + import carb.settings + settings = carb.settings.get_settings() + + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'welcome') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'comment') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + + async def test_menu_helper_widget_menu(self): + import omni.kit.menu.utils + omni.kit.menu.utils.add_menu_items([], name='test widget') + + from ..menu_helper import MenuHelper + menu_helper = MenuHelper() + menu_helper.destroy() + + async def test_startup_expand_viewport(self): + from ..setup import SETTINGS_STARTUP_EXPAND_VIEWPORT + + import carb.settings + settings = carb.settings.get_settings() + + orig_value = settings.get(SETTINGS_STARTUP_EXPAND_VIEWPORT) + settings.set_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT, True) + + manager = omni.kit.app.get_app().get_extension_manager() + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + settings.set_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT, orig_value) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_navigation_invalid_dict(self): + from ..navigation import Navigation + + navigation = Navigation() + navigation._show_tooltips = False + navigation._dict = 42 + navigation._on_application_mode_changed(None, None) + navigation._on_showtips_click() + + async def test_navigation_current_tool_mode_change(self): + from ..navigation import CURRENT_TOOL_PATH, APPLICATION_MODE_PATH + + import carb.settings + settings = carb.settings.get_settings() + + settings.set_string(APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'welcome') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + async def test_setup_clear_startup_scene_edits(self): + from ..setup import _clear_startup_scene_edits + await _clear_startup_scene_edits() + + import omni.usd + self.assertFalse(omni.usd.get_context().has_pending_edit()) + + async def test_stage_template(self): + import omni.kit.stage_templates + omni.kit.stage_templates.new_stage(template='SunnySky') diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_app_startup.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_app_startup.py new file mode 100644 index 0000000..03f32ec --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_app_startup.py @@ -0,0 +1,51 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import omni.kit.app +from omni.kit.test import AsyncTestCase + + +class TestAppStartup(AsyncTestCase): + async def test_l1_app_startup_time(self): + """Get startup time - send to nvdf""" + for _ in range(60): + await omni.kit.app.get_app().next_update_async() + + try: + from omni.kit.core.tests import app_startup_time + + app_startup_time(self.id()) + except: # noqa + pass + self.assertTrue(True) + + async def test_l1_app_startup_warning_count(self): + """Get the count of warnings during startup - send to nvdf""" + for _ in range(60): + await omni.kit.app.get_app().next_update_async() + + try: + from omni.kit.core.tests import app_startup_warning_count + + app_startup_warning_count(self.id()) + except: # noqa + pass + self.assertTrue(True) diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_extensions.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_extensions.py new file mode 100644 index 0000000..bb9b346 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_extensions.py @@ -0,0 +1,79 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import sys + +import carb.settings +import omni.kit.app +import omni.kit.actions.core +from omni.kit.core.tests import validate_extensions_load, validate_extensions_tests +from omni.kit.test import AsyncTestCase +from pxr import Usd, UsdGeom, Gf + + +class TestUSDExplorerExtensions(AsyncTestCase): + async def test_l1_extensions_load(self): + """Loop all enabled extensions to see if they loaded correctly""" + self.assertEqual(validate_extensions_load(), 0) + + async def test_regression_omfp_2304(self): + loaded_omni_kit_collaboration_selection_outline = False + manager = omni.kit.app.get_app().get_extension_manager() + for ext in manager.get_extensions(): + if ext["name"] == "omni.kit.collaboration.selection_outline": + loaded_omni_kit_collaboration_selection_outline = True + break + self.assertTrue(loaded_omni_kit_collaboration_selection_outline) + + async def _wait(self, frames: int = 10): + for _ in range(frames): + await omni.kit.app.get_app().next_update_async() + + async def wait_stage_loading(self): + while True: + _, files_loaded, total_files = omni.usd.get_context().get_stage_loading_status() + if files_loaded or total_files: + await self._wait() + continue + break + await self._wait(100) + + async def _get_1_1_1_rotation(self) -> Gf.Vec3d: + """Loads a stage and returns the transformation of the (1,1,1) vector by the directional light's rotation""" + await self._wait() + omni.kit.actions.core.execute_action("omni.kit.window.file", "new") + await self.wait_stage_loading() + context = omni.usd.get_context() + self.assertIsNotNone(context) + stage = context.get_stage() + self.assertIsNotNone(stage) + + prim_path = '/Environment/DistantLight' + prim = stage.GetPrimAtPath(prim_path) + self.assertTrue(prim.IsValid()) + + # Extract the prim's transformation matrix in world space + xformAPI = UsdGeom.XformCache() + transform_matrix_world = xformAPI.GetLocalToWorldTransform(prim) + + unit_point = Gf.Vec3d(1, 1, 1) + transformed_point = transform_matrix_world.Transform(unit_point) + return transformed_point diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_state_manager.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_state_manager.py new file mode 100644 index 0000000..39c3d1b --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/tests/test_state_manager.py @@ -0,0 +1,141 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import carb.settings +import omni.kit.app +import omni.ui as ui +from omni.kit.test import AsyncTestCase +from ..ui_state_manager import UIStateManager, MODAL_TOOL_ACTIVE_PATH + + +class TestUIStateManager(AsyncTestCase): + async def setUp(self): + self._sm = UIStateManager() + self._settings = carb.settings.get_settings() + + async def tearDown(self): + self._sm = None + + async def test_destroy(self): + self._sm.add_hide_on_modal('dummy', False) + self._sm.add_settings_copy_dependency('a', 'b') + self._sm.add_settings_dependency('c', 'd', {1: 2}) + self._sm.add_window_visibility_setting('my_window', 'my_setting') + + self._sm.destroy() + + async def test_hide_on_modal(self): + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + self._sm.add_hide_on_modal('NO_RESTORE', False) + self._sm.add_hide_on_modal(['A_RESTORE', 'B_RESTORE'], True) + + window_no_restore = ui.Window('NO_RESTORE') + window_restore_1 = ui.Window('A_RESTORE') + window_restore_2 = ui.Window('B_RESTORE') + window_no_restore.visible = True + window_restore_1.visible = True + window_restore_2.visible = False + await self._wait() + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, True) + await self._wait() + self.assertFalse(window_no_restore.visible) + self.assertFalse(window_restore_1.visible) + self.assertFalse(window_restore_2.visible) + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + await self._wait() + self.assertFalse(window_no_restore.visible) + self.assertTrue(window_restore_1.visible) + self.assertFalse(window_restore_2.visible) + + self._sm.remove_hide_on_modal(window_restore_1.title) + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, True) + await self._wait() + self.assertTrue(window_restore_1.visible) + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + async def test_window_visibility_setting(self): + window_name = 'Dummy' + setting_path = '/apps/dummy' + setting_path2 = '/apps/dummy2' + window = ui.Window(window_name) + window.visible = True + await self._wait() + + self._sm.add_window_visibility_setting(window_name=window_name, setting_path=setting_path) + self._sm.add_window_visibility_setting(window_name=window_name, setting_path=setting_path2) + self.assertIsNotNone(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path2)) + + window.visible = False + self.assertFalse(self._settings.get(setting_path)) + self.assertFalse(self._settings.get(setting_path2)) + + window.visible = True + self.assertTrue(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path2)) + + self._sm.remove_window_visibility_setting(window_name=window_name, setting_path=setting_path) + window.visible = False + self.assertTrue(self._settings.get(setting_path)) + self.assertFalse(self._settings.get(setting_path2)) + + self._sm.remove_all_window_visibility_settings(window_name=window_name) + window.visible = True + self.assertFalse(self._settings.get(setting_path2)) + + async def test_setting_dependency(self): + setting_path_copy_from = '/app/copy_from' + setting_path_copy_to = '/ext/copy_to' + + setting_path_map_from = '/ext/map_from' + setting_path_map_to = '/something/map_to' + + self._sm.add_settings_copy_dependency(setting_path_copy_from, setting_path_copy_to) + self._settings.set_string(setting_path_copy_from, 'hello_world') + self.assertEqual(self._settings.get(setting_path_copy_from), self._settings.get(setting_path_copy_to)) + # doesn't work the other way around + self._settings.set_string(setting_path_copy_to, 'no_copy_back') + self.assertEqual(self._settings.get(setting_path_copy_from), 'hello_world') + + self._sm.add_settings_dependency(setting_path_map_from, setting_path_map_to, {1: 2, 3: 4}) + self._settings.set_int(setting_path_map_from, 1) + self.assertEqual(self._settings.get(setting_path_map_to), 2) + self._settings.set_int(setting_path_map_from, 3) + self.assertEqual(self._settings.get(setting_path_map_to), 4) + # not in the map + self._settings.set_int(setting_path_map_from, 42) + self.assertEqual(self._settings.get(setting_path_map_to), 4) + + self.assertEqual(self._settings.get(setting_path_copy_from), 'hello_world') + self.assertEqual(self._settings.get(setting_path_copy_to), 'no_copy_back') + + self._sm.remove_settings_dependency(setting_path_copy_from, setting_path_copy_to) + self._settings.set_string(setting_path_copy_from, 'this_is_not_copied') + self.assertEqual(self._settings.get(setting_path_copy_to), 'no_copy_back') + + async def _wait(self, frames: int = 5): + for _ in range(frames): + await omni.kit.app.get_app().next_update_async() \ No newline at end of file diff --git a/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/ui_state_manager.py b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/ui_state_manager.py new file mode 100644 index 0000000..9514035 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/iot_samples/usd_explorer/setup/ui_state_manager.py @@ -0,0 +1,167 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import carb.dictionary +import carb.settings +import omni.ui as ui +from functools import partial +from typing import Any, Dict, List, Tuple, Union + + +MODAL_TOOL_ACTIVE_PATH = "/app/tools/modal_tool_active" + + +class UIStateManager: + def __init__(self) -> None: + self._settings = carb.settings.acquire_settings_interface() + + self._modal_changed_sub = self._settings.subscribe_to_node_change_events( + MODAL_TOOL_ACTIVE_PATH, + self._on_modal_setting_changed + ) + + self._hide_on_modal: List[Tuple[str,bool]] = [] + self._modal_restore_window_states: Dict[str,bool] = {} + self._settings_dependencies: Dict[Tuple(str,str), Dict[Any, Any]] = {} + self._settings_changed_subs = {} + self._window_settings = {} + + self._window_vis_changed_id = ui.Workspace.set_window_visibility_changed_callback(self._on_window_vis_changed) + + def destroy(self) -> None: + if self._settings: + if self._modal_changed_sub: + self._settings.unsubscribe_to_change_events(self._modal_changed_sub) + self._settings = None + self._hide_on_modal = [] + self._modal_restore_window_states = {} + self._settings_dependencies = {} + self._window_settings = {} + if self._window_vis_changed_id: + ui.Workspace.remove_window_visibility_changed_callback(self._window_vis_changed_id) + self._window_vis_changed_id = None + + def __del__(self) -> None: + self.destroy() + + def add_hide_on_modal(self, window_names: Union[str, List[str]], restore: bool) -> None: + if isinstance(window_names, str): + window_names = [window_names] + for window_name in window_names: + if window_name not in self._hide_on_modal: + self._hide_on_modal.append((window_name, restore)) + + def remove_hide_on_modal(self, window_names: Union[str, List[str]]) -> None: + if isinstance(window_names, str): + window_names = [window_names] + self._hide_on_modal = [item for item in self._hide_on_modal if item[0] not in window_names] + + def add_window_visibility_setting(self, window_name: str, setting_path: str) -> None: + window = ui.Workspace.get_window(window_name) + if window is not None: + self._settings.set(setting_path, window.visible) + else: + # handle the case when the window is created later + self._settings.set(setting_path, False) + if window_name not in self._window_settings.keys(): + self._window_settings[window_name] = [] + self._window_settings[window_name].append(setting_path) + + def remove_window_visibility_setting(self, window_name: str, setting_path: str) -> None: + if window_name in self._window_settings.keys(): + setting_list = self._window_settings[window_name] + if setting_path in setting_list: + setting_list.remove(setting_path) + if len(setting_list) == 0: + del self._window_settings[window_name] + + def remove_all_window_visibility_settings(self, window_name: str) -> None: + if window_name in self._window_settings.keys(): + del self._window_settings[window_name] + + def add_settings_dependency(self, source_path: str, target_path: str, value_map: Dict[Any, Any]) -> None: + key = (source_path, target_path) + if key in self._settings_dependencies.keys(): + carb.log_error(f'Settings dependency {source_path} -> {target_path} already exists. Ignoring.') + return + self._settings_dependencies[key] = value_map + self._settings_changed_subs[key] = self._settings.subscribe_to_node_change_events( + source_path, + partial(self._on_settings_dependency_changed, source_path) + ) + + def add_settings_copy_dependency(self, source_path: str, target_path: str) -> None: + self.add_settings_dependency(source_path, target_path, None) + + def remove_settings_dependency(self, source_path: str, target_path: str) -> None: + key = (source_path, target_path) + if key in self._settings_dependencies.keys(): + del self._settings_dependencies[key] + if key in self._settings_changed_subs.keys(): + sub = self._settings_changed_subs.pop(key) + self._settings.unsubscribe_to_change_events(sub) + + def _on_settings_dependency_changed(self, path: str, item, event_type) -> None: + value = self._settings.get(path) + # setting does not exist + if value is None: + return + target_settings = [source_target[1] for source_target in self._settings_dependencies.keys() if source_target[0] == path] + for target_setting in target_settings: + value_map = self._settings_dependencies[(path, target_setting)] + # None means copy everything + if value_map is None: + self._settings.set(target_setting, value) + elif value in value_map.keys(): + self._settings.set(target_setting, value_map[value]) + + def _on_modal_setting_changed(self, item, event_type) -> None: + modal = self._settings.get_as_bool(MODAL_TOOL_ACTIVE_PATH) + if modal: + self._hide_windows() + else: + self._restore_windows() + + def _hide_windows(self) -> None: + for window_info in self._hide_on_modal: + window_name, restore_later = window_info[0], window_info[1] + window = ui.Workspace.get_window(window_name) + if window is not None: + if restore_later: + self._modal_restore_window_states[window_name] = window.visible + window.visible = False + + def _restore_windows(self) -> None: + for window_info in self._hide_on_modal: + window_name, restore_later = window_info[0], window_info[1] + if restore_later: + if window_name in self._modal_restore_window_states.keys(): + old_visibility = self._modal_restore_window_states[window_name] + if old_visibility is not None: + window = ui.Workspace.get_window(window_name) + if window is not None: + window.visible = old_visibility + self._modal_restore_window_states[window_name] = None + + def _on_window_vis_changed(self, title: str, state: bool) -> None: + if title in self._window_settings.keys(): + for setting in self._window_settings[title]: + self._settings.set_bool(setting, state) diff --git a/source/extensions/iot_samples.usd_explorer.setup/layouts/comment_layout.json b/source/extensions/iot_samples.usd_explorer.setup/layouts/comment_layout.json new file mode 100644 index 0000000..9736d66 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/layouts/comment_layout.json @@ -0,0 +1,315 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0, + "doc_id": 5 + } + ], + "dock_id": 3, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1187.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 536.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": false, + "width": 44.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Markup Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 32.0, + "position_x": 834.0, + "position_y": 384.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": false, + "width": 32.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Node Description Editor", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Toolkit", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 2389297972960", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Materials", + "visible": false, + "width": 0.0 + } +] diff --git a/source/extensions/iot_samples.usd_explorer.setup/layouts/default.json b/source/extensions/iot_samples.usd_explorer.setup/layouts/default.json new file mode 100644 index 0000000..e202891 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/layouts/default.json @@ -0,0 +1,344 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_id": 5, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 690.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1408.0 + } + ], + "dock_id": 5, + "position": "LEFT" + }, + { + "children": [ + { + "dock_id": 6, + "height": 690.0, + "position_x": 1410.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": true, + "width": 44.0 + } + ], + "dock_id": 6, + "position": "RIGHT" + } + ], + "dock_id": 3, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 4, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 267.0, + "position_x": 0.0, + "position_y": 718.0, + "selected_in_dock": true, + "title": "Content", + "visible": true, + "width": 1454.0 + }, + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": true, + "width": 1454.0 + }, + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Materials", + "visible": true, + "width": 1454.0 + } + , + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Examples", + "visible": true, + "width": 1454.0 + } + ], + "dock_id": 4, + "position": "BOTTOM" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "children": [ + { + "children": [ + { + "dock_id": 7, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 477.0, + "position_x": 1456.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Stage", + "visible": true, + "width": 464.0 + } + ], + "dock_id": 7, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 8, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 480.0, + "position_x": 1456.0, + "position_y": 505.0, + "selected_in_dock": true, + "title": "Property", + "visible": true, + "width": 464.0 + } + ], + "dock_id": 8, + "position": "BOTTOM" + } + ], + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 267.0, + "position_x": 0.0, + "position_y": 718.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1454.0 + }, + { + "dock_id": 0, + "height": 116.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 332.0 + }, + { + "dock_id": 0, + "height": 480.0, + "position_x": 1344.0, + "position_y": 22.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 576.0 + }, + { + "dock_id": 0, + "height": 320.0, + "position_x": 610.0, + "position_y": 348.0, + "selected_in_dock": false, + "title": "Welcome", + "visible": false, + "width": 700.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 650.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 465.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Measure Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 190.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Design Render Settings", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Timeline Session", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 540.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "About", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markups", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Waypoints", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 212.0, + "position_x": 120.0, + "position_y": 744.0, + "selected_in_dock": false, + "title": "0", + "visible": false, + "width": 860.0 + }, + { + "dock_id": 0, + "height": 148.0, + "position_x": 1004.0, + "position_y": 768.0, + "selected_in_dock": false, + "title": "Add bookmark", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 400.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Targets", + "visible": false, + "width": 400.0 + } +] \ No newline at end of file diff --git a/source/extensions/iot_samples.usd_explorer.setup/layouts/markup_editor.json b/source/extensions/iot_samples.usd_explorer.setup/layouts/markup_editor.json new file mode 100644 index 0000000..032d24b --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/layouts/markup_editor.json @@ -0,0 +1,275 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_id": 3, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "USD Explorer Toolbar", + "visible": true, + "width": 44.0 + } + ], + "dock_id": 3, + "position": "RIGHT" + }, + { + "children": [ + { + "dock_id": 4, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0 + } + ], + "dock_id": 4, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "children": [ + { + "dock_id": 2, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 742.0, + "position_x": 1183.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Markup Manager", + "visible": false, + "width": 517.0 + } + ], + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1184.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 516.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1185.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1185.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1183.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1183.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 1560346058432", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + } +] diff --git a/source/extensions/iot_samples.usd_explorer.setup/layouts/viewport_only.json b/source/extensions/iot_samples.usd_explorer.setup/layouts/viewport_only.json new file mode 100644 index 0000000..9736d66 --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/layouts/viewport_only.json @@ -0,0 +1,315 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0, + "doc_id": 5 + } + ], + "dock_id": 3, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1187.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 536.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": false, + "width": 44.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Markup Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 32.0, + "position_x": 834.0, + "position_y": 384.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": false, + "width": 32.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Node Description Editor", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Toolkit", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 2389297972960", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Materials", + "visible": false, + "width": 0.0 + } +] diff --git a/source/extensions/iot_samples.usd_explorer.setup/premake5.lua b/source/extensions/iot_samples.usd_explorer.setup/premake5.lua new file mode 100644 index 0000000..474184a --- /dev/null +++ b/source/extensions/iot_samples.usd_explorer.setup/premake5.lua @@ -0,0 +1,12 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, + { "layouts", ext.target_dir.."/layouts" }, + { "iot_samples", ext.target_dir.."/iot_samples" }, +} diff --git a/source/ingest_app_csv/app.py b/source/ingest_app_csv/app.py index 4aff1c5..2db4fee 100644 --- a/source/ingest_app_csv/app.py +++ b/source/ingest_app_csv/app.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a @@ -27,6 +27,7 @@ from pxr import Usd, Sdf, Gf from pathlib import Path import pandas as pd + import time from omni.live import LiveEditSession, LiveCube, getUserNameFromToken @@ -65,9 +66,14 @@ def initialize_device_prim(live_layer, iot_topic): iot_spec.RemoveProperty(attrib) IOT_TOPIC_DATA = f"{CONTENT_DIR}/{iot_topic}_iot_data.csv" + if os.path.exists(IOT_TOPIC_DATA): + print("File exists") + else: + print("File does not exist") + data = pd.read_csv(IOT_TOPIC_DATA) data.head() - + print(IOT_TOPIC_DATA) # create all the IoT attributes that will be written attr = Sdf.AttributeSpec(iot_spec, "_ts", Sdf.ValueTypeNames.Double) if not attr: @@ -112,7 +118,7 @@ async def initialize_async(iot_topic): # place the cube on the conveyor live_cube = LiveCube(stage) live_cube.scale(Gf.Vec3f(0.5)) - live_cube.translate(Gf.Vec3f(100.0, -30.0, 195.0)) + live_cube.translate(Gf.Vec3f(60.0, -15.0, 100.0)) omni.client.live_process() return stage, live_layer diff --git a/source/ingest_app_csv/run_app.py b/source/ingest_app_csv/run_app.py index 3ec63ec..5ba89e3 100644 --- a/source/ingest_app_csv/run_app.py +++ b/source/ingest_app_csv/run_app.py @@ -1,9 +1,23 @@ -# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. import os import argparse @@ -19,8 +33,8 @@ CURRENT_PLATFORM = f"{PLATFORM_SYSTEM}-{PLATFORM_MACHINE}" -default_username = os.environ.get("OMNI_USER") -default_password = os.environ.get("OMNI_PASS") +default_username = os.environ.get("OMNI_USER", "omniverse") +default_password = os.environ.get("OMNI_PASS", "omniverse") default_server = os.environ.get("OMNI_HOST", "localhost") parser = argparse.ArgumentParser() @@ -47,6 +61,7 @@ str(USD_LIB_DIR.joinpath("python")), str(CLIENT_LIB_DIR.joinpath("bindings-python")), str(BUILD_DIR.joinpath("bindings-python")), + str(DEPS_DIR.joinpath("pip_prebundle")), ] if PLATFORM_SYSTEM == "windows": @@ -71,8 +86,6 @@ plugin_paths = DEPS_DIR.joinpath("omni_usd_resolver", args.config, "usd", "omniverse", "resources") os.environ["PXR_PLUGINPATH_NAME"] = str(plugin_paths) -REQ_FILE = ROOT_DIR.joinpath("requirements.txt") -subprocess.run(f"{PYTHON_EXE} -m pip install -r {REQ_FILE}", shell=True) result = subprocess.run( [PYTHON_EXE, os.path.join(SCRIPT_DIR, "app.py")], stderr=subprocess.STDOUT, diff --git a/source/ingest_app_mqtt/app.py b/source/ingest_app_mqtt/app.py index e0cc479..945d0f1 100644 --- a/source/ingest_app_mqtt/app.py +++ b/source/ingest_app_mqtt/app.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a @@ -113,7 +113,7 @@ async def initialize_async(iot_topic): # place the cube on the conveyor live_cube = LiveCube(stage) live_cube.scale(Gf.Vec3f(0.5)) - live_cube.translate(Gf.Vec3f(100.0, -30.0, 195.0)) + live_cube.translate(Gf.Vec3f(60.0, -15.0, 100.0)) omni.client.live_process() return stage, live_layer diff --git a/source/ingest_app_mqtt/run_app.py b/source/ingest_app_mqtt/run_app.py index 3ec63ec..6bf4e7b 100644 --- a/source/ingest_app_mqtt/run_app.py +++ b/source/ingest_app_mqtt/run_app.py @@ -1,9 +1,23 @@ -# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. import os import argparse @@ -47,6 +61,7 @@ str(USD_LIB_DIR.joinpath("python")), str(CLIENT_LIB_DIR.joinpath("bindings-python")), str(BUILD_DIR.joinpath("bindings-python")), + str(DEPS_DIR.joinpath("pip_prebundle")), ] if PLATFORM_SYSTEM == "windows": @@ -71,8 +86,6 @@ plugin_paths = DEPS_DIR.joinpath("omni_usd_resolver", args.config, "usd", "omniverse", "resources") os.environ["PXR_PLUGINPATH_NAME"] = str(plugin_paths) -REQ_FILE = ROOT_DIR.joinpath("requirements.txt") -subprocess.run(f"{PYTHON_EXE} -m pip install -r {REQ_FILE}", shell=True) result = subprocess.run( [PYTHON_EXE, os.path.join(SCRIPT_DIR, "app.py")], stderr=subprocess.STDOUT, diff --git a/source/omni/live/live_cube.py b/source/omni/live/live_cube.py index 7290684..b815612 100644 --- a/source/omni/live/live_cube.py +++ b/source/omni/live/live_cube.py @@ -1,3 +1,25 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + + import random from pxr import Usd, Gf, UsdGeom, Sdf, UsdShade @@ -33,8 +55,8 @@ def __init__(self, stage: Usd.Stage): self.mesh.CreateDoubleSidedAttr().Set(False) self.mesh.CreateSubdivisionSchemeAttr("bilinear") self.mesh.CreateDisplayColorAttr().Set([(0.463, 0.725, 0.0)]) - self.mesh.AddTranslateOp().Set(Gf.Vec3d(0.0)) self.mesh.AddScaleOp().Set(Gf.Vec3f(0.8535)) + self.mesh.AddTranslateOp().Set(Gf.Vec3d(0.0)) self.mesh.AddTransformOp().Set(Gf.Matrix4d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)) texCoords = UsdGeom.PrimvarsAPI(self.mesh).CreatePrimvar( "st", Sdf.ValueTypeNames.TexCoord2fArray, UsdGeom.Tokens.varying @@ -62,8 +84,13 @@ def __init__(self, stage: Usd.Stage): if op.GetOpType() == UsdGeom.XformOp.TypeTranslate: self._translate = op + if self._translate is None: + self._translate = self.cube.AddTranslateOp() if self._rotateXYZOp is None: self._rotateXYZOp = self.cube.AddRotateXYZOp() + if self._scale is None: + self._scale = self.cube.AddScaleOp() + self.scale(Gf.Vec3f(1.0)) self._rotation = Gf.Vec3f(0.0, 0.0, 0.0) self._rotateXYZOp.Set(self._rotation) diff --git a/source/omni/live/live_edit_session.py b/source/omni/live/live_edit_session.py index c8b49a6..69cfc91 100644 --- a/source/omni/live/live_edit_session.py +++ b/source/omni/live/live_edit_session.py @@ -1,3 +1,24 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + import os from .nucleus_client_error import NucleusClientError diff --git a/source/omni/live/nucleus_client_error.py b/source/omni/live/nucleus_client_error.py index a1c4a7b..6a24829 100644 --- a/source/omni/live/nucleus_client_error.py +++ b/source/omni/live/nucleus_client_error.py @@ -1,3 +1,24 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + from fastapi import HTTPException class NucleusClientError(HTTPException): diff --git a/source/omni/live/nucleus_server_config.py b/source/omni/live/nucleus_server_config.py index f2b68fd..73a26b7 100644 --- a/source/omni/live/nucleus_server_config.py +++ b/source/omni/live/nucleus_server_config.py @@ -1,3 +1,24 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + import omni.client def nucleus_server_config(live_edit_session): diff --git a/source/requirements.py b/source/requirements.py new file mode 100644 index 0000000..daf4b58 --- /dev/null +++ b/source/requirements.py @@ -0,0 +1,28 @@ +# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. +# NVIDIA CORPORATION and its licensors retain all intellectual property +# and proprietary rights in and to this software, related documentation +# and any modifications thereto. Any use, reproduction, disclosure or +# distribution of this software and related documentation without an express +# license agreement from NVIDIA CORPORATION is strictly prohibited. + +import os +import platform +import subprocess +from pathlib import Path + +PLATFORM_SYSTEM = platform.system().lower() +PLATFORM_MACHINE = platform.machine() + +if PLATFORM_MACHINE == "i686" or PLATFORM_MACHINE == "AMD64": + PLATFORM_MACHINE = "x86_64" + +SCRIPT_DIR = Path(os.path.dirname(os.path.realpath(__file__))).resolve() +ROOT_DIR = SCRIPT_DIR.parents[0] +DEPS_DIR = ROOT_DIR.joinpath("_build", "target-deps") + +if PLATFORM_SYSTEM == "windows": + PYTHON_EXE = DEPS_DIR.joinpath("python", "python") +else: + PYTHON_EXE = DEPS_DIR.joinpath("python", "bin", "python3") +REQ_FILE = SCRIPT_DIR.joinpath("requirements.txt") +subprocess.run(f"{PYTHON_EXE} -m pip install -r {REQ_FILE}", shell=True) diff --git a/requirements.txt b/source/requirements.txt similarity index 100% rename from requirements.txt rename to source/requirements.txt diff --git a/source/transform_geometry/app.py b/source/transform_geometry/app.py index 9eb95d0..a3eb224 100644 --- a/source/transform_geometry/app.py +++ b/source/transform_geometry/app.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a diff --git a/source/transform_geometry/run_app.py b/source/transform_geometry/run_app.py index 3ec63ec..b3de1da 100644 --- a/source/transform_geometry/run_app.py +++ b/source/transform_geometry/run_app.py @@ -1,9 +1,23 @@ -# Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved. -# NVIDIA CORPORATION and its licensors retain all intellectual property -# and proprietary rights in and to this software, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this software and related documentation without an express -# license agreement from NVIDIA CORPORATION is strictly prohibited. +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. import os import argparse @@ -19,10 +33,11 @@ CURRENT_PLATFORM = f"{PLATFORM_SYSTEM}-{PLATFORM_MACHINE}" -default_username = os.environ.get("OMNI_USER") -default_password = os.environ.get("OMNI_PASS") +default_username = os.environ.get("OMNI_USER", "omniverse") +default_password = os.environ.get("OMNI_PASS", "omniverse") default_server = os.environ.get("OMNI_HOST", "localhost") + parser = argparse.ArgumentParser() parser.add_argument("--server", "-s", default=default_server) parser.add_argument("--username", "-u", default=default_username) @@ -47,6 +62,7 @@ str(USD_LIB_DIR.joinpath("python")), str(CLIENT_LIB_DIR.joinpath("bindings-python")), str(BUILD_DIR.joinpath("bindings-python")), + str(DEPS_DIR.joinpath("pip_prebundle")), ] if PLATFORM_SYSTEM == "windows": @@ -71,8 +87,6 @@ plugin_paths = DEPS_DIR.joinpath("omni_usd_resolver", args.config, "usd", "omniverse", "resources") os.environ["PXR_PLUGINPATH_NAME"] = str(plugin_paths) -REQ_FILE = ROOT_DIR.joinpath("requirements.txt") -subprocess.run(f"{PYTHON_EXE} -m pip install -r {REQ_FILE}", shell=True) result = subprocess.run( [PYTHON_EXE, os.path.join(SCRIPT_DIR, "app.py")], stderr=subprocess.STDOUT, diff --git a/tar_ignore.txt b/tar_ignore.txt index 79d2907..abe9810 100644 --- a/tar_ignore.txt +++ b/tar_ignore.txt @@ -18,13 +18,27 @@ **/obj **/secrets.dev.yaml **/values.dev.yaml +**/_build/deps **/_build/generated +**/_build/intermediate +**/_build/PACKAGE-LICENSES **/_build/host-deps **/_build/linux-aarch64 **/_build/linux-x86_64 -**/_build/PACKAGE-LICENSES +**/_build/windows-x86_64 +**/_build/target-deps/pip_prebundle **/_compiler +**/_conan +**/_deps **/_repo -**/deps -LICENSES +**/readme-assets +**/source/apps +**/source/extensions +**/templates +**/tools +repo_tools.toml +repo.bat +repo.sh +repo.toml README.md +tar_ignore.txt diff --git a/templates/apps/kit_base_editor/README.md b/templates/apps/kit_base_editor/README.md new file mode 100644 index 0000000..8a1bc46 --- /dev/null +++ b/templates/apps/kit_base_editor/README.md @@ -0,0 +1,176 @@ +# Kit Base Editor App Template + +![Kit Base Editor Image](../../../readme-assets/kit_base_editor.png) + +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The Kit Base Editor App Template provides a minimal starting point for developers aiming to create interactive 3D applications within the NVIDIA Omniverse ecosystem. This template simplifies the process of crafting applications capable of loading, manipulating, and rendering Open Universal Scene Description (OpenUSD) content via a graphical user interface. + +### Use Cases +This template is ideal for developers looking to build: + +- 3D viewing and editing applications and tools from a functional, minimal starting point. + + +### Key Features + +- Scene loading +- RTX Renderer +- Basic UI for manipulating and exploring 3D scenes. + +## Usage + +This section provides instructions for the setup and use of the Kit Base Editor Application Template. + +### Getting Started + +To get started with the Kit Base Editor, ensure your development environment meets the prerequisites outlined in the top-level README. + +#### Cloning the Repository + +```bash +git clone https://github.com/NVIDIA-Omniverse/kit-app-template.git +cd kit-app-template +``` + +#### Create New Application + +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Application +- **? Select with arrow keys your desired template:** Kit Base Editor +- **? Enter name of application .kit file [name-spaced, lowercase, alphanumeric]:** [set application name] +- **? Enter application_display_name:** [set application display name] +- **? Enter version:**: [set application version] + +### Build and Launch + +#### Build your application using the provided build scripts: +Note that the build step will build all applications contained in the `source` directory. Outside of initial experimentation, it is recommended that you build only the application you are actively developing. + +**Linux:** +```bash +./repo.sh build +``` +**Windows:** +```powershell +.\repo.bat build +``` + + If you experience issues related to build, please see the [Usage and Troubleshooting](readme-assets/additional-docs/usage_and_troubleshooting.md) section for additional information. + +#### Launch your application: + +**Linux:** +```bash +./repo.sh launch +``` +**Windows:** +```powershell +.\repo.bat launch +``` + +**? Select with arrow keys which App would you like to launch:** [Select the desired editor application] + +***NOTE:* The initial startup may take 5 to 8 minutes as shaders compile for the first time. After initial shader compilation, startup time will reduce dramatically** + +### Testing +Applications and their associated extensions can be tested using the `repo test` tooling provided. Each application template includes an initial test suite that can be run to verify the application's functionality. + +**Note:** Testing will only be run on applications and extensions within the build directory. **A successful build is required before testing.** + +**Linux:** +```bash +./repo.sh test +``` + +**Windows:** +```powershell +.\repo.bat test +``` + +### Customization + +#### Enable Extension +- On launch of the Application enable the developer bundle by adding the `--dev-bundle` or `-d` flag to the launch command. + + **Linux:** + ```bash + ./repo.sh launch --dev-bundle + ``` + **Windows:** + ```powershell + .\repo.bat launch --dev-bundle + ``` +- From the running application select `Developer` > `Utilities` > `Extensions` + +- Browse and enable extensions of interest from the Extension Manager. + - Enabling the extensions within the Extension Manager UI will allow you to try out the features of the extension in the currently running application. + + - To permanently add the extension to the application, you will need to add the extension to the `.kit` file. For example, adding the Layer View extension would require adding `omni.kit.widget.layers` to the dependencies section of the `.kit` file. + +- For additional information on the Developer Bundle Extensions, refer to the [BETA - Developer Bundle Extensions](readme-assets/additional-docs/developer_bundle_extensions.md) documentation. + +#### Create Custom Extension + +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Extension +- **? Select with arrow keys your desired template:**: [choose extension template] +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:**: [set extension name] +- **? Enter extension_display_name:**: [set extension display name] +- **? Enter version:**: [set extension version] + + +#### Adding Extension to .kit File +**Importantly** For an extension to become a persistent part of an application, the extension will need to be added to the `.kit` file. + +```toml +[dependencies] +"extension.name" = {} +``` + +#### Build with New Extensions +After a new extension has been added to the `.kit` file, the application should be rebuilt to ensure extensions are populated to the build directory. + + +### Packaging and Deployment + +For deploying your application, create a deployable package using the `package` command: + +**Linux:** +```bash +./repo.sh package --name [package_name] +``` +**Windows:** +```powershell +.\repo.bat package --name [package_name] +``` + +This will bundle your application into a distributable format, ready for deployment on compatible platforms. + +:warning: **Important Note for Packaging:** Because the packaging operation will package everything within the `source/` directory the package version will need to be set independently of a given `kit` file. **The version is set within the `tools/VERSION.md` file.** + +## Additional Learning + +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) diff --git a/templates/apps/kit_base_editor/kit_base_editor.kit b/templates/apps/kit_base_editor/kit_base_editor.kit new file mode 100644 index 0000000..0e9e61d --- /dev/null +++ b/templates/apps/kit_base_editor/kit_base_editor.kit @@ -0,0 +1,104 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +[package] +title = "{{ application_display_name }}" +version = "{{ version }}" +description = """A foundation for a base editor application.""" +keywords = ["app"] # That makes it browsable in UI with "app" filter +template_name = "kit_base_editor" + +[dependencies] +"omni.activity.profiler" = {} # For showing RTX loading progress +"omni.activity.pump" = {} # For shouwing RTX loading progress +"omni.anim.curve.core" = {} # Runtime support for animcurves +"omni.graph.action" = {} # Action graph runtime +"omni.graph.core" = {} # Omni Graph runtime +"omni.graph.nodes" = {} # Action graph nodes +"omni.graph.scriptnode" = {} # Scriptnode support +"omni.graph.ui_nodes" = {} # Action graph ui nodes +"omni.hydra.engine.stats" = {} # Load the stats HUD (resolution, fps, etc..) +"omni.hydra.rtx" = {} # Viewport renderer +"omni.kit.mainwindow" = {} # Main uiapp +"omni.kit.manipulator.camera" = {} # Load the camera-manipulator (navigation) +"omni.kit.manipulator.prim" = {} # Load the prim-manipulator (translate, rotate, scale) +"omni.kit.manipulator.selection" = {} # Load the selection-manipulator (selecteable prims) +"omni.kit.material.library" = {} # Create and assign materials. +"omni.kit.menu.create" = {} # Create menu +"omni.kit.menu.edit" = {} # Edit menu +"omni.kit.menu.file" = {} # File menu +"omni.kit.property.bundle" = {} # all the property editors +"omni.kit.raycast.query" = {} # RTX Raycast Query +"omni.kit.stage_template.core" = {} # For creating new empty stages +"omni.kit.telemetry" = {} # Telemetry +"omni.kit.tool.asset_importer" = {} # Add Asset Importer functionality. +"omni.kit.tool.collect" = {} # USD Collect tool +"omni.kit.viewport.legacy_gizmos" = {} # Load the legacy grid and gizmo drawing for now +"omni.kit.viewport.menubar.camera" = {} # Load the view-from-camera menu +"omni.kit.viewport.menubar.display" = {} # Load the display type menu +"omni.kit.viewport.menubar.lighting" = {} # Load the viewport settings menu +"omni.kit.viewport.menubar.render" = {} # Load the renderer selection menu +"omni.kit.viewport.menubar.settings" = {} # Load the viewport settings menu +"omni.kit.viewport.ready" = {} # Show RTX loading information during startup +"omni.kit.viewport.scene_camera_model" = {} # Sync camera to scene UI +"omni.kit.viewport.window" = {} # Load the actual ViewportWindow extension +"omni.kit.window.console" = {} # Console/log +"omni.kit.window.content_browser" = {} # Add content browser to UI +"omni.kit.window.property" = {} # Property editor window +"omni.kit.window.stage" = {} # Stage tree +"omni.kit.window.status_bar" = {} # Status Bar +"omni.kit.window.toolbar" = {} # Manipular Toolbar +"omni.physx.stageupdate" = {} # Physics runtime support - will pull in physx dependencies. +"omni.rtx.settings.core" = {} # RTX Settings +"omni.uiaudio" = {} # for audio playback. +"omni.warp.core" = {} # Warp support + + +[settings] +exts."omni.kit.material.library".ui_show_list = ["OmniPBR", "OmniSurface", "USD Preview Surface"] +exts."omni.rtx.window.settings".window_menu = "Window" # Where to put the render settings menuitem +exts."omni.kit.viewport.menubar.lighting".defaultRigIgnorePattern = "" # Allows auto light rig with anon layers +exts."omni.kit.viewport.window".windowMenu.entryCount = 1 +exts."omni.kit.viewport.window".windowMenu.label="" # Put Viewport menuitem under Window menu + + +renderer.gpuEnumeration.glInterop.enabled = false # Improves startup speed. +renderer.asyncInit = true # Don't block while renderer inits +rtx.ecoMode.enabled = true +rtx.hydra.mdlMaterialWarmup = true # start loading the MDL shaders needed before any delegate is actually created. + + +[settings.app] +content.emptyStageOnStart = true +font.file = "${fonts}/OpenSans-SemiBold.ttf" +font.size = 16 +hangDetector.enabled = true +hangDetector.timeout = 120 +renderer.skipWhileMinimized = true +window.title = "{{ application_display_name }}" + + +[settings.app.exts] +folders.'++' = ["${app}/../exts", "${app}/../extscache/"] # Search paths for extensions. + + +[settings.app.viewport.defaults] +fillViewport = true # default to fill viewport + + +[settings.telemetry] +# Anonymous Kit application usage telemetry +enableAnonymousData = true + + +[[test]] +args = [ + "--/app/file/ignoreUnsavedOnExit=true" +] diff --git a/templates/apps/kit_service/README.md b/templates/apps/kit_service/README.md new file mode 100644 index 0000000..04b0ca8 --- /dev/null +++ b/templates/apps/kit_service/README.md @@ -0,0 +1,168 @@ +# Kit Service App Template + +![Kit Service Image](../../../readme-assets/kit_service.png) + +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The Kit Service App Template offers a starting point for creating headless services within the NVIDIA Omniverse ecosystem. Designed to leverage the capabilities of the Omniverse Kit SDK, this template enables developers to build solutions that operate without a graphical user interface, ideal for background processes or server-side applications. + +### Use Cases +The Kit Service Template is particularly well-suited for: + +- Automation services that perform tasks in the background. +- Headless batch processing of 3D content for optimization, conversion, or analysis. +- Integrations with other software ecosystems that require 3D data processing without direct user interaction. + + +### Key Features + +- **Headless Operation**: Runs without a graphical user interface for efficient background processing. +- **Fully Extensible**: Leverage and extend the existing functionalities of Omniverse Kit SDK. + +## Usage + +This section provides comprehensive instructions to leverage the Kit Service App Template effectively. + +### Getting Started + +To get started with the Kit Service Template, ensure your development environment meets the prerequisites outlined in the top-level README. + +#### Cloning the Repository + +```bash +git clone https://github.com/NVIDIA-Omniverse/kit-app-template.git +cd kit-app-template +``` + +#### Create New Application + +**Note for Kit Service Template** : Some applications require a setup extension to function as intended. During Application configuration, you will be prompted for information about this extension. This extension will be created alongside the application and automatically added to your .kit file. Subsequent extensions can be added to the .kit file manually. + +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Application +- **? Select with arrow keys your desired template:** Kit Service +- **? Enter name of application .kit file [name-spaced, lowercase, alphanumeric]:** [set application name] +- **? Enter application_display_name:** [set application display name] +- **? Enter version:** [set app version] + +*The application template you have selected requires a setup extension. +Setup Extension -> kit_service_setup* +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:** [set extension name] +- **? Enter extension_display_name:** [set extension display name] +- **? Enter version:** [set extension version] + +### Build and Launch + +#### Build your application using the provided build scripts: +Note that the build step will build all applications contained in the `source` directory. Outside of initial experimentation, it is recommended that you build only the application you are actively developing. + +**Linux:** +```bash +./repo.sh build +``` +**Windows:** +```powershell +.\repo.bat build +``` + + If you experience issues related to build, please see the [Usage and Troubleshooting](readme-assets/additional-docs/usage_and_troubleshooting.md) section for additional information. + +#### Launch your application: + +**Linux:** +```bash +./repo.sh launch +``` +**Windows:** +```powershell +.\repo.bat launch +``` + +**? Select with arrow keys which App would you like to launch:** [Select the desired service application] + +#### View your running Service: +- Visit `http://localhost:8011/docs` in your web browser to view the interactive documentation for the running service. +- By default the service will have a POST endpoint which will prompt you for input to generate a simple USD scene. + +### Testing +Applications and their associated extensions can be tested using the `repo test` tooling provided. Each application template includes an initial test suite that can be run to verify the application's functionality. + +**Note:** Testing will only be run on applications and extensions within the build directory. **A successful build is required before testing.** + +**Linux:** +```bash +./repo.sh test +``` + +**Windows:** +```powershell +.\repo.bat test +``` + + +### Customization +You can customize your Service Setup extension by adding new endpoints to, modifying existing ones, or adding new functionality to `service.py` or `extension.py`. If you would like to create a reusable component that might be used in other Omniverse services or applications, it is recommended that you create a new extension. + +#### Create Custom Extension + +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Extension +- **? Select with arrow keys your desired template:**: [choose extension template] +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:**: [set extension name] +- **? Enter extension_display_name:**: [set extension display name] +- **? Enter version:**: [set extension version] + + +#### Adding Extension to .kit File +**Importantly** For an extension (beyond the initial setup extension) to become a persistent part of an application, the extension will need to be added to the application `.kit` file. + +```toml +[dependencies] +"my_company.my_extension" = {} +``` + +#### Build with New Extensions +After a new extension has been added to the `.kit` file, the application should be rebuilt to ensure extensions are populated to the build directory. + +### Packaging and Deployment + +For deploying your application, create a deployable package using the `package` command: + +**Linux:** +```bash +./repo.sh package --name [package_name] +``` +**Windows:** +```powershell +.\repo.bat package --name [package_name] +``` + +This will bundle your application into a distributable format, ready for deployment on compatible platforms. + +:warning: **Important Note for Packaging:** Because the packaging operation will package everything within the `source/` directory the package version will need to be set independently of a given `kit` file. **The version is set within the `tools/VERSION.md` file.** + +## Additional Learning + +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) diff --git a/templates/apps/kit_service/kit_service.kit b/templates/apps/kit_service/kit_service.kit new file mode 100644 index 0000000..7486811 --- /dev/null +++ b/templates/apps/kit_service/kit_service.kit @@ -0,0 +1,34 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +[package] +title = '{{ application_display_name }}' +version = '{{ version }}' +description = """This Simple application shows you how to make a Kit Service""" +keywords = ["app"] # That makes it browsable in UI with "app" filter +template_name = "kit_service" + + +[dependencies] +"omni.kit.telemetry" = {} # Telemetry +"{{ extension_name }}" = { order = 10000 } + + +[settings.app] +name = "{{ application_display_name }}" + + +[settings.app.exts] +folders.'++' = ["${app}/../exts", "${app}/../extscache/"] # Search paths for extensions. + + +[settings.telemetry] +# Anonymous Kit application usage telemetry +enableAnonymousData = true diff --git a/templates/apps/usd_explorer/README.md b/templates/apps/usd_explorer/README.md new file mode 100644 index 0000000..c7df430 --- /dev/null +++ b/templates/apps/usd_explorer/README.md @@ -0,0 +1,193 @@ +# USD Explorer App Template + +![USD Explorer Hero Image](../../../readme-assets/usd_explorer.jpg) + +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The USD Explorer App Template is designed to provide a robust starting point for developers looking to visualize and interact with large-scale environments such as factories, warehouses, and other expansive scenes using Open Universal Scene Description (OpenUSD). This template showcases high-performance rendering, scene optimization, live collaboration, and more. It is a great fit for interacting with large or complex 3D scenes. + +By integrating advanced features such as instancing, optimization techniques, and new extension examples for planning, commenting, and reviewing, the USD Explorer Template simplifies the process of aggregating and examining large scenes. It offers a dual-mode UI, catering both to novices seeking ease of use and to advanced users requiring detailed scene manipulation capabilities. + +### Use Cases + +The USD Explorer Template is perfectly suited for: + +- Visualizing complex industrial environments for planning and review. +- Collaborating on large-scale design projects in real-time. +- Building digital twins for industries to simulate and analyze real-world performance. + +This template stands out by providing specialized tools for handling large scenes, making it an ideal choice for applications requiring detailed spatial analysis and collaborative review functionalities. + +### Key Features + +- **OpenUSD File Aggregation**: Seamlessly combine and manage multiple USD files in a unified scene. +- **Simple User Interface**: Intuitive interface designed for ease of use by non-specialized personnel. +- **Dual Mode Interface**: Toggle between simplified and advanced user interfaces based on user proficiency. +- **Easy Navigation**: Tools for smoothly navigating through large-scale scenes. +- **Annotation Tools**: Integrated tools for annotating and commenting within the scene for collaborative reviewing. +- **CAD Converter Import**: Directly import and convert CAD files into the OpenUSD format. +- **Live Collaboration**: Real-time collaboration tools allowing multiple users to view and edit scenes concurrently. +- **Content Library - Materials & Assets**: Extensive library of materials and assets for scene enhancement and realism. + +## Usage + +### Getting Started + +To get started with the Kit Base Editor, ensure your development environment meets the prerequisites outlined in the top-level README. + +#### Cloning the Repository + +```bash +git clone https://github.com/NVIDIA-Omniverse/kit-app-template.git +cd kit-app-template +``` + +#### Create New Application + +**Note for USD Explorer** : Some applications require setup extensions to function as intended. In the case of USD Explorer, the setup extension controls the configuration of the extensions within the application, their layout, and other settings. During Application configuration, you will be prompted for information about this extension. + +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Application +- **? Select with arrow keys your desired template:** USD Explorer +- **? Enter name of application .kit file [name-spaced, lowercase, alphanumeric]:** [set application name] +- **? Enter application_display_name:** [set application display name] +- **? Enter version:** [set app version] + +*The application template you have selected requires a setup extension. +Setup Extension -> omni_usd_explorer_setup* +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:** [set extension name] +- **? Enter extension_display_name:** [set extension display name] +- **? Enter version:** [set extension version] + +### Build and Launch +Note that the build step will build all applications contained in the `source` directory. Outside of initial experimentation, it is recommended that you build only the application you are actively developing. + +#### Build your application using the provided build scripts: + +**Linux:** +```bash +./repo.sh build +``` +**Windows:** +```powershell +.\repo.bat build +``` + + If you experience issues related to build, please see the [Usage and Troubleshooting](readme-assets/additional-docs/usage_and_troubleshooting.md) section for additional information. + +#### Launch your application: + +**Linux:** +```bash +./repo.sh launch +``` +**Windows:** +```powershell +.\repo.bat launch +``` + +**? Select with arrow keys which App would you like to launch:** [Select the desired explorer application] + +***NOTE:* The initial startup may take 5 to 8 minutes as shaders compile for the first time. After initial shader compilation, startup time will reduce dramatically** + +### Testing +Applications and their associated extensions can be tested using the `repo test` tooling provided. Each application template includes an initial test suite that can be run to verify the application's functionality. + +**Note:** Testing will only be run on applications and extensions within the build directory. **A successful build is required before testing.** + +**Linux:** +```bash +./repo.sh test +``` + +**Windows:** +```powershell +.\repo.bat test +``` + +### Customization + +#### Enable Extension +- On launch of the Application enable the developer bundle by adding the `--dev-bundle` or `-d` flag to the launch command. + + **Linux:** + ```bash + ./repo.sh launch --dev-bundle + ``` + **Windows:** + ```powershell + .\repo.bat launch --dev-bundle + ``` +- From the running application select `Developer` > `Utilities` > `Extensions` + +- Browse and enable extensions of interest from the Extension Manager. + - Enabling the extensions within the Extension Manager UI will allow you to try out the features of the extension in the currently running application. + + - To permanently add the extension to the application, you will need to add the extension to the `.kit` file. For example, adding the Layer View extension would require adding `omni.kit.widget.layers` to the dependencies section of the `.kit` file. + +- For additional information on the Developer Bundle Extensions, refer to the [BETA - Developer Bundle Extensions](readme-assets/additional-docs/developer_bundle_extensions.md) documentation. + + +#### Create Custom Extension + +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Extension +- **? Select with arrow keys your desired template:**: [choose extension template] +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:**: [set extension name] +- **? Enter extension_display_name:**: [set extension display name] +- **? Enter version:**: [set extension version] + + +#### Adding Extension to .kit File +**Importantly** For an extension to become a persistent part of an application, the extension will need to be added to the `.kit` file. + +```toml +[dependencies] +"extension.name" = {} +``` + +#### Build with New Extensions +After a new extension has been added to the `.kit` file, the application should be rebuilt to ensure extensions are populated to the build directory. + +### Packaging and Deployment + +For deploying your application, create a deployable package using the `package` command: + +**Linux:** +```bash +./repo.sh package --name [package_name] +``` +**Windows:** +```powershell +.\repo.bat package --name [package_name] +``` + +This will bundle your application into a distributable format, ready for deployment on compatible platforms. + +:warning: **Important Note for Packaging:** Because the packaging operation will package everything within the `source/` directory the package version will need to be set independently of a given `kit` file. **The version is set within the `tools/VERSION.md` file.** + +## Additional Learning + +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) diff --git a/templates/apps/usd_explorer/omni.usd_explorer.kit b/templates/apps/usd_explorer/omni.usd_explorer.kit new file mode 100644 index 0000000..5d5144f --- /dev/null +++ b/templates/apps/usd_explorer/omni.usd_explorer.kit @@ -0,0 +1,684 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +[package] +title = "{{ application_display_name }}" +version = "{{ version | default("0.0.1") }}" +description = "A reference application for reviewing and constructing large facilities such as factories, warehouses and more." +keywords = ["app", "usd", "explore"] # That makes it browsable in UI with "experience" filter +template_name = "omni.usd_explorer" + +[dependencies] +"omni.activity.ui" = {} +"omni.activity.usd_resolver" = {} +"omni.hydra.engine.stats" = {} +"omni.hydra.pxr" = {} +"omni.hydra.pxr.settings" = {} +"omni.kit.asset_converter" = {} # File format conversion +"omni.kit.browser.asset" = {} # Enable the NVIDIA asset Browsing only +"omni.kit.browser.sample" = {} # Examples +"omni.kit.collaboration.channel_manager" = {} +"omni.kit.collaboration.presence_layer" = {} +"omni.kit.collaboration.selection_outline" = {} +"omni.kit.collaboration.telemetry" = {} +"omni.kit.collaboration.viewport.camera" = {} +"omni.kit.context_menu" = {} +"omni.kit.converter.cad" = {} +"omni.kit.converter.cad_core" = {} +"omni.kit.converter.jt_core" = {} +"omni.kit.converter.dgn_core" = {} +"omni.kit.converter.common" = {} +"omni.kit.manipulator.camera" = {} # Manipulator for the Viewport +"omni.kit.manipulator.prim" = {} +"omni.kit.manipulator.selection" = {} +"omni.kit.manipulator.transform" = {} +"omni.kit.manipulator.viewport" = {} +"omni.kit.menu.edit" = {} +"omni.kit.menu.file" = {} +"omni.kit.property.bundle" = {} +"omni.kit.property.layer" = {} +"omni.kit.quicklayout" = {} # Quicklayout is on enabling custom layouts +"omni.kit.renderer.core" = {} +"omni.kit.search.service" = {} +"omni.kit.selection" = {} +"omni.kit.stage_column.payload" = {} # Those are extra stage window columns that are not enabled by default +"omni.kit.stage_templates" = {} # Stage templates +"omni.kit.telemetry" = {} # Telemetry +"omni.kit.thumbnails.usd" = {} +"omni.kit.timeline.minibar" = {} # For animation +"omni.kit.tool.asset_importer" = {} +"omni.kit.tool.camera_playlist" = {} +"omni.kit.tool.markup" = {} +"omni.kit.tool.measure" = {} +"omni.kit.tool.remove_unused.controller" = {} +"omni.kit.uiapp" = {} # The Main UI App. Bring everything needed for UI application. +"omni.kit.usd_explorer.main.menubar" = { order = 12000 } +"omni.kit.usd_explorer.window.welcome" = { order = 10 } +"omni.kit.viewport.legacy_gizmos" = {} +"omni.kit.viewport.menubar.camera" = {} +"omni.kit.viewport.menubar.framerate" = {} +"omni.kit.viewport.menubar.lighting" = {} +"omni.kit.viewport.menubar.markup" = {} +"omni.kit.viewport.menubar.nav_bar_toggle" = { order = -30 } +"omni.kit.viewport.menubar.timeline" = { order = -20 } +"omni.kit.viewport.menubar.waypoint" = {} +"omni.kit.viewport.ready" = {} +"omni.kit.viewport.rtx" = {} # Load the RTX rendering bundle +"omni.kit.viewport.scene_camera_model" = {} # Push camera changes to Viewport ui.scene as fast as possible +"omni.kit.viewport.window" = {} +"omni.kit.waypoint.playlist" = {} +"omni.kit.widget.filebrowser" = {} # General purpose widgets to browsder and select fles +"omni.kit.widget.layers" = {} +"omni.kit.widget.live" = {} # Includes Cache status display +"omni.kit.window.about" = {} +"omni.kit.window.console" = {} # Enable to write some python script, disable by default +"omni.kit.window.content_browser" = {} +"omni.kit.window.cursor" = {} +"omni.kit.window.drop_support" = {} +"omni.kit.window.file" = {} +"omni.kit.window.filepicker" = {} +"omni.kit.window.material" = {} # Material Management and browsing +"omni.kit.window.preferences" = { order = 1000 } # Execute last so the menu is in the correct place +"omni.kit.window.property" = {} +"omni.kit.window.section" = {} +"omni.kit.window.stage" = {} +"omni.kit.window.stats" = { order = 1000 } # Show the stats of the renderer +"omni.kit.window.status_bar" = {} +"omni.kit.window.title" = {} +"omni.kit.window.toolbar" = {} +"omni.resourcemonitor" = {} # Needed for Fabric delegate +"omni.rtx.settings.core" = {} # This is the Render Settings 2.0 +"omni.scene.optimizer.bundle" = {} +"omni.stats" = {} # This is not strictly needed +"omni.timeline.live_session" = {} +"omni.usd.metrics.assembler.ui" = {} +"omni.usd.schema.metrics.assembler" = {} +"omni.warp.core" = {} +"usdrt.scenegraph" = {} +"{{ extension_name }}" = { order = 10000 } # This is your application setup Extensions. order = 10000 makes it run last + +[dependencies."filter:platform"."windows-x86_64"] +"omni.kit.window.modifier.titlebar" = {version = "=105.2.16"} # Use exact version to avoid supported target platform check + +[settings.app] +name = "{{ application_display_name }}" +fastShutdown = true # Fast shutdown by default +useFabricSceneDelegate = true # Turn on the Fabric scene delegate by default + +[settings.app.content] +emptyStageOnStart = true # This will create a stage during the startup process. + +[settings.app.create] +forceViewportSettings = true # Force enable Axis, Grid, Outline and Lights at startup + +[settings.app.docks] +autoHideTabBar = false +noWindowMenuButton = false + +[settings.app.extensions] +excluded = [ + "omni.kit.viewport.menubar.render", + "omni.kit.viewport.menubar.settings", +] +generatedVersionLockExclude = [ + "omni.app.usd_explorer", + "{{ extension_name }}", +] +registryEnabled = true +skipPublishVerification = false + +[settings.app.extensions."filter:platform"."linux-x86_64"] +# Windows only extensions. For all of them set exact=true to not be included into generated version lock. +# That will break linux otherwise, as version lock is platform agnostic currently. +excluded = [ + "omni.kit.window.modifier.titlebar", +] + +[settings.app.exts] +folders.'++' = ["${app}/../exts", "${app}/../extscache/"] # Search paths for extensions. + +[settings.app.font] +file = "${fonts}/OpenSans-SemiBold.ttf" +size = 16 + +[settings.app.hangDetector] +# Hang Detector +enabled = false +timeout = 120 + +[settings.app.liveSession] +enableMenuFollowUser = false + +[settings.app.material] +disableMtlx = true # Disable MaterialX to ensure Material Watcher doesn't impact startup time + +[settings.app.menu] +compatibility_mode = false # Use omni.ui.Menu for the MenuBar +legacy_mode = false # Deprecate support for old kit.ui.menu + +[settings.app."omni.usd"] +getRenderablePaths.parallel = 4 # Enable parallel mode for selection performance +loadRenderSettingsFromUsdStage = false # Ensure consistent settings across all USD stages independently of what was saved to them + +[settings.app.primCreation] +enableMenuAudio = false +enableMenuCamera = false +hideShapes = true # Don't show Create->Shape menus + +[settings.app.renderer] +resolution.height = 1080 +resolution.width = 1920 +skipWhileMinimized = true + +[settings.app.settings] +dev_build = true +persistent = true + +[settings.app.startup] +expandViewport = true + +[settings.app.tools] +modal_tool_active = false # Tool State Management + +[settings.app.usdrt.population.utils] +mergeInstances = false # When populating Fabric from USD, merge meshes under scene graph instances. + +[settings.app.usdrt.scene_delegate] +enableProxyCubes = false +numFramesBetweenLoadBatches = 1 +timeSampledDataStatic = true + +[settings.app.usdrt.scene_delegate.geometryStreaming] +# 0: Display everything +# 0.0005: Display all geometry down to around the size of a pixel +# 0.001: Display all geometry bigger than a few pixels +enabled = false # Disabling FSD geometry streaming +numberOfVerticesToLoadPerChunk = 800000 +solidAngleLimit = 0 + +[settings.app.viewport] +boundingBoxes.hideWhenManipulating = true +createCameraModelRep = true # Enable creation of camera meshes in USD +grid.enabled = true +outline.enabled = true +showCameraMenu = false +showHideMenu = false +showRendererMenu = false +showSettingMenu = false +snapEnabled = true + +[settings.app.viewport.defaultCamera.target.distance] +enabled = true +units = "meters" +value = 5 + +[settings.app.viewport.defaults] +fillViewport = false # default to fill viewport + +[settings.app.viewport.defaults.hud] +camera.controllerUseSRT = true +captureFrame.viewport = true +deviceMemory.visible=false +hostMemory.visible=false +primCreation.typedDefaults.camera.focalLength = 15 +renderFPS.visible=false +rendering.whiteModeExceptions = 'GizmoTex, Gizmo, OmniGlass, SunsetSkyMat, ProceduralSky, Blue_Glass, Clear_Glass, Dull_Glass, Frosted_Glass, Glazed_Glass, Green_Glass, Mirror, Red_Glass, Tinted_Glass, Tinted_Glass_R02, Tinted_Glass_R25, Tinted_Glass_R50, Tinted_Glass_R75, Tinted_Glass_R85, Tinted_Glass_R98, Cirrus, CumulusHeavy, CumulusLight, Overcast, NightSky' +renderProgress.visible=false +renderResolution.visible=false +transform.gizmoUseSRT = true + +[settings.app.viewport.defaults.hud.file] +initDialogHeight = 800 +initDialogWidth = 1200 +recentFiles = [] +save.showUnsavedLayersDialog = true + +[settings.app.viewport.defaults.hud.omniverse] +content_browser.options_menu.show_details = true # Make Detail panel visible by default +filepicker.options_menu.show_details = true +tooltipEnabled = false + +[settings.app.viewport.defaults.hud.stage] +instanceableOnCreatingReference = false +movePrimInPlace = false +upAxis = 'Z' + +[settings.app.viewport.defaults.hud.viewport] +camInertiaAmount = 0.0 +camInertiaEnabled = false +camVelocityMax = 20.0 +displayOptions = 32767 # Disable Frame Rate and Resoltion by default +previewOnPeek = false +snapToSurface = false +Viewport0.fillViewport = false +Viewport1.fillViewport = false + +[settings.app.viewport.offsets] +navBottom = 0 + +[settings.app.viewport.show] +audio = false +camera = false +lights = false + +[settings.app.window] +displayModeLock = false +fullscreen = false +height = 1010 +iconPath = "${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/data/nvidia-omniverse-usd_explorer.ico" +imagePath = "${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/data/nvidia-omniverse-usd_explorer_about.png" +minimalPanelsOnStartup = true +showStartup = true +showStatusBar = false +title = "{{ application_display_name }}" +toolBarHorizontal = false +uiStyle = 'NvidiaDark' +width = 1920 +x = -1 +y = -1 + +[settings.crashreporter.data] +experience = "USD Explorer" + +[settings.ext."omni.kit.widget.viewport".sceneView.singleCameraModel] +enabled = true # Enable single Viewport camera model (setting w/ typo in current Kit) + +[settings.exts.foundation] +verifyOsVersion.enabled = false + +[settings.exts."omni.kit.browser.asset"] +folders = [ + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Commercial", + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial", + "http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse", +] + +[settings.exts."omni.kit.browser.material"] +enabled = false +folders = [ + "Base::http://omniverse-content-production.s3-us-west-2.amazonaws.com/Materials/2023_1/Base", +] + +[settings.exts."omni.kit.browser.sample"] +folders = [ + "https://omniverse-content-production.s3.us-west-2.amazonaws.com/Usd_Explorer/Samples/Examples/2023_2", +] +folders_hide_in_category = [ + "2023_2", +] + +[settings.exts."omni.kit.browser.sky"] +folders = [ + "Skies (S3)::https://omniverse-content-production.s3.us-west-2.amazonaws.com/Assets/Skies/2022_1/Skies/", +] + +[settings.exts."omni.kit.compatibility_checker"] +supportedGpus = [ + "*GeForce RTX ????*", + "*Quadro RTX ????*", + "*RTX ?????*", + "*RTX????*", + "*TITAN RTX*" +] + +[settings.exts."omni.kit.manipulator.tool.snap"] +# Have snap to surface as default option +providerNames = [ + "Surface (Framebuffer Based)", + "Surface (Mesh Based)", +] + +[settings.exts."omni.kit.markup.core"] +enable_hotkeys = true +show_icons = false + +[settings.exts."omni.kit.material.library"] +lib_paths = [ + "${kit}/mdl/core/Base", + "", +] +original_svg_color = true +ui_hidden_list = [ + "${kit}/mdl/core/Base/OmniPBR_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl", + "${kit}/mdl/core/Base/OmniGlass_Opacity.mdl", + "${kit}/mdl/core/Base/SimPBR_Model.mdl", + "${kit}/mdl/core/Base/OmniEmissive.mdl", + "${kit}/mdl/core/Base/OmniHair.mdl", + "${kit}/mdl/core/Base/OmniHairPresets.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat.mdl", + "${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBR_Opacity.mdl", + "${kit}/mdl/core/Base/OmniPBRBase.mdl", + "${kit}/mdl/core/Base/OmniSurface.mdl", + "${kit}/mdl/core/Base/OmniSurfaceBlend.mdl", + "${kit}/mdl/core/Base/OmniSurfaceLite.mdl", + "${kit}/mdl/core/Base/OmniSurfacePresets.mdl", + "${kit}/mdl/core/Base/SimPBR.mdl", + "${kit}/mdl/core/Base/SimPBR_Model.mdl", + "${kit}/mdl/core/Base/SimPBR_Translucent.mdl", +] + +[settings.exts."omni.kit.mesh.raycast"] +bvhBuildOnFirstRequired = true # Avoids mesh raycast to initialize during stage open + +[settings.exts."omni.kit.menu.utils"] +logDeprecated = false + +[settings.exts."omni.kit.playlist.core"] +smooth_with_time_sampling = true + +[settings.exts."omni.kit.property.usd"] +show_prefs = false + +[settings.exts."omni.kit.renderer.core".imgui] +enableMips = true + +[settings.exts."omni.kit.timeline.minibar"] +offsetBottom = 10 +scale_with_nav_bar = true +stay_on_playing = true +toggleByHover = false + +[settings.exts."omni.kit.tool.asset_importer"] +useNewFilePicker = true + +[settings.exts."omni.kit.tool.collect"] +useNewFilePicker = true + +[settings.exts."omni.kit.tool.markup"] +toolbar.offset = 160 # Markup toolbar offset, keeps us above the navbar + +[settings.exts."omni.kit.tool.measure"] +enable_hotkeys = true + +[settings.exts."omni.kit.tool.teleport"] +basicGizmo = true +beamVisible = false +eyeHeight = 175 +max_slope_angle = 30.0 +simple_camera = false +widgetScale = 0.7 + +[settings.exts."omni.kit.usd_explorer.main.menubar"] +include_approve_mode = false +include_file_menu = true +include_modify_mode = true +include_present_mode = false +include_render_modes = false +switch_to_present_on_open = false + +[settings.exts."omni.kit.usd_explorer.window.welcome"] +alwaysClosable = true + +[settings.exts."omni.kit.waypoint.core"] +enable_hotkeys = true +show_icons = false + +[settings.exts."omni.kit.widget.cloud_share"] +require_access_code = false + +[settings.exts."omni.kit.widget.graph"] +raster_nodes = true + +[settings.exts."omni.kit.widget.layers"] +useNewFilePicker = true + +[settings.exts."omni.kit.widget.live_session_management"] +quick_join_enabled = false +session_list_select = "DefaultSession" + +[settings.exts."omni.kit.widget.toolbar".PlayButton] +enabled = false + +[settings.exts."omni.kit.widget.viewport".sceneView.singleCameraModel] +enabled = true # Enable single Viewport camera model + +[settings.exts."omni.kit.window.content_browser"] +enable_thumbnail_generation_images = false +show_grid_view = false + +[settings.exts."omni.kit.window.extensions"] +hideNonToggleableExts = true +showFeatureOnly = false + +[settings.exts."omni.kit.window.file"] +useNewFilePicker = true + +[settings.exts."omni.kit.window.material"] +load_after_startup = true +show_capture_thumbnail_menu = true + +[settings.exts."omni.kit.window.modifier.titlebar"] +changeWindowRegion = true +colors.caption = 0x0F0F0F +colors.client = 0x0F0F0F +defaultFont.color = 0xD0D0D0 +defaultFont.size = 18 +icon.file = "${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/data/nvidia-omniverse-usd_explorer.ico" +icon.size = 18 +icon.use_size = false +respondOnMouseUp = true +separator.color = 0x00B976 +separator.width = 1 +showFileFullPath = true +titleFormatString = " {{ application_display_name }} {{version}} {separator} {file, board=true}" +windowBorder.color = 0x0F0F0F +windowBorder.width = 2 + +[settings.exts."omni.kit.window.preferences"] +show_audio = false +show_rendering = false +show_resource_monitor = false +show_tagging = false +show_thumbnail_generation_mdl = false + +[settings.exts."omni.kit.window.viewport"] +blockingGetViewportDrawable = false + +[settings.exts."omni.kit.viewport.menubar.camera"] +expand = true # Expand the extra-camera settings by default +showManualExposure = true # Enable FOV drop-down in viewport ribbon +showStageCameras = false + +[settings.exts."omni.kit.viewport.menubar.display".showByType] +exclude_list = ["Audio"] + +[settings.exts."omni.kit.viewport.menubar.framerate"] +visible = false + +[settings.exts."omni.kit.viewport.menubar.lighting"] +autoLightRig.enableWithoutMenu = true # Enable adding a light rig whether menu item is loaded/visible or not +defaultRig = "Sunny Sky" # Set the default light-rig to apply for a stage opened without any lights in it +rigImport.lightRemovalLimit = 3 +rigs = "${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/data/light_rigs" # Setup path to the light-rig items in the lighting menu + +[settings.exts."omni.kit.viewport.navigation.camera_manipulator"] +orbitAutoFrameSelected = true + +[settings.exts."omni.kit.viewport.navigation.core"] +bottom_offset = 10 +bottom_spacing = 10 +enable_hotkeys = true +isVisible = false # Hide navigation bar while welcome window is visible + +[settings.exts."omni.kit.viewport.navigation.markup"] +visible = false + +[settings.exts."omni.kit.viewport.navigation.waypoint"] +visible = false + +[settings.exts."omni.kit.viewport.window"] +startup.windowName = "Viewport" +hud.hostMemory.perProcess = true + +[settings.exts."omni.services.transport.server.http"] +port = 8311 # Setting the port for the embedded http server, using custom port for your application make sure not to collide with other apps + +[settings.exts."omni.ui".raster] +default_rasterpolicy_enabled = true # reduce overhead of UI in Layout mode + +[settings.exts."omni.ui".workpace.draw_freeze] +enabled = true +frames = 5 + +[settings.exts."omni.usd"] +enableUsdMaterialWatcherForFsd = true + +[settings.omnihydra] +parallelHydraSprimSync = true # Sync materials in parallel from within Hydra + +[settings.persistent.app.newStage] +defaultTemplate = "SunnySky" # Change default stage template to what we have in the setup extension + +[settings.persistent.app.stage] +upAxis = 'Z' + +[settings.persistent.app.viewport] +camMoveVelocity = 1.5 +camVelocityMax = 50 +camVelocityMin = 0.01 +pickingMode = "kind:model.ALL" + +[settings.persistent.app.viewport.manipulator.camera] +flyAcceleration = 1000.0 +flyDampening = 10.0 +lookAcceleration = 2000.0 +lookDampening = 20.0 +moveAcceleration = 1000.0 +moveDampening = 10.0 +tumbleAcceleration = 2000.0 +tumbleDampening = 20.0 + +[settings.persistent.exts."omni.kit.environment.core".rtx.env.ground] +enable = false # Making a ground for whatever reason bewteen scene loads is causing side car issues. + +[settings.persistent.exts."omni.kit.manipulator.camera"] +inertiaDecay = 3 +tumbleSpeed = 720 + +[setings.persistent.exts."omni.kit.manipulator.prim".manipulator] +placement = "Bounding Box Base" + +[settings.persistent.exts."omni.kit.manipulator.tool.snap"] +# Snap tool default persistent settings +conformToTarget = true +conformUpAxis = "Stage" +explicitTransform.rotate = 15.0 +explicitTransform.scale = 1.0 +explicitTransform.translate = 10.0 +keepSpacing = true + +[settings.persistent.exts."omni.kit.manipulator.transform"] +tools.defaultCollapsed = false # Expand prim manipulator toolbar + +[settings.persistent.exts."omni.kit.viewport.menubar.camera"] +expand = true # expand was set to False in omni.kit.viewport.bundle + +[settings.persistent.exts."omni.kit.viewport.menubar.lighting"] +autoLightRig.enabled = true + +[settings.persistent.exts."omni.kit.viewport.window"] +cameraSpeedMessage.showFlyViewLock = true + +[settings.privacy] +externalBuild = false + +[settings.renderer] +active = "rtx" # RTX As the default renderer always +enabled = "rtx" # only enable rtx renderer by default + +[setetings.renderer.multiGpu] +enabled = false # do not enable Multi-GPU, will choose the "best" GPU +maxGpuCount = 1 # this ensures at most one GPU is enabled even if /persistent/renderer/multiGpu/enabled=true was saved in user.config.json + +[settings.rtx.directLighting.sampledLighting] +enabled = true + +[settings.rtx.domeLight] +upperLowerStrategy = 4 # Approximated Image-Based Lighting + +[settings.rtx.ecoMode] +enabled = true + +[settings.rtx.hydra] +minFreeDeviceMemory = 3000 +readTransformsFromFabricInRenderDelegate = true + +[settings.rtx.newDenoiser] +enabled = true + +[settings.rtx.post] +dlss.execMode = 1 # DLSS Balanced mode instead of Auto +histogram.enabled = true # auto-exposure + +[settings.rtx.reflections] +maxRoughness = 0.11 # instead of default of 0.3, reduces GPU time spent on reflections + +[settings.rtx.sceneDb] +ambientLightIntensity = 1.0 + +[settings.rtx-flags] +rendermode = 1 + +[settings.rtx-transient.hydra] +conservativeMemoryLimits = true # Enable a more conservative approach to stop loading geometry when the amount of free GPU and system memory go below specified thresholds +maxInstanceCount = 12000000 # Limit the number of instances to 12 million to cap performance and memory impact of larger instance counts + +[settings.rtx-transient.meshlights] +forceDisable = true # Disable use mesh light sampling, not critical + +[settings.rtx-transient.scenedb] +useUniformsReindexing = true + +[settings.structuredLog] +enable = true + +[settings.telemetry] +# Anonymous Kit application usage telemetry +enableAnonymousData = true + + +[[test]] +samplingFactor = 1.0 # No test sampling for these tests + +dependencies = [ + "omni.kit.test_suite.helpers", + "omni.kit.ui_test", + "omni.kit.core.tests", + #"omni.hydra.pxr", + # NOTE: test_extensions.py (with imports from omni.kit.core.tests) need dependencies from some extensions + "omni.kit.test_helpers_gfx", # test dependency from omni.renderer.core + "omni.rtx.tests", # test dependency from omni.hydra.scene_api +] + + +pythonTests.include = [ + "{{ extension_name }}.tests.*", +] +args = [ + "--portable", + "--/app/window/width=1600", + "--/app/window/height=900", + "--/app/window/dpiScaleOverride=1.0", + "--/app/window/scaleToMonitor=false", + "--/app/file/ignoreUnsavedOnExit=true", + "--/app/testMode=1", + "--/app/fastShutdown=1", + "--/exts/omni.kit.test/testExtCodeChangeAnalyzerEnabled=false", + "--no-window", + "--/exts/omni.kit.pipapi/allowOnlineIndex=0", # Make sure it starts without any pip installs +] + +stdoutFailPatterns.exclude = [ + "*Warning: The NumPy module was reloaded*" +] + +timeout = 600 diff --git a/templates/extensions/basic_cpp/README.md b/templates/extensions/basic_cpp/README.md new file mode 100644 index 0000000..2e1211b --- /dev/null +++ b/templates/extensions/basic_cpp/README.md @@ -0,0 +1,90 @@ +# Basic C++ Extension Template + +

+ +

+ +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The Basic C++ Extension Template is a starting point for developers looking to build C++ based extensions within the NVIDIA Omniverse ecosystem. This template offers a best practices foundation and structure to easily integrate with the broader capabilities of the Omniverse Kit SDK. + +### Use Cases + +This template is ideal for developers looking to build: + +- A reusable C++ extension that can be easily integrated with Omniverse Kit SDK applications. +- Performance sensitive extensions that require the performance benefits of C++. +- Extensions that require direct access to the Omniverse Kit or Carbonite SDK C++ API. +- Integrating with existing C++ libraries or codebases. + + +### Key Features + +- Structure well suited for the build, test and packaging tooling within this repository. +- All required setup code for use with the Omniverse Kit SDK. + + +## Usage + +This section provides instructions for the setup and use of the Basic C++ Extension Template. + +### Getting Started + +To get started with the Basic C++ Extension, ensure your development environment meets the prerequisites outlined in the [top-level README](../../../README.md#prerequisites-and-environment-setup). + +#### Cloning the Repository + +```bash +git clone https://github.com/NVIDIA-Omniverse/kit-app-template.git +cd kit-app-template +``` + +#### Create New Extension +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Extension +- **? Select with arrow keys your desired template:** Basic C++ Extension +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:** [set extension name] +- **? Enter extension_display_name:** [set extension display name] +- **? Enter version:** [set extension version] + +#### Build and Launch + +While C++ extensions do require compilation this is typically not done in isolation, this template is structured to properly interact with the Omniverse Kit SDK application build and packaging tooling. + +Launching the extension typically requires that they be a part of an Omniverse [Service](../../apps/kit_service/README.md) or [Editor](../../apps/kit_base_editor/README.md) application. + +**Adding an Extension to an Application** + +To add your extension to an application, declare it in the dependencies section of the application's `.kit` file: + +```toml +[dependencies] +"my_company.my_extension" = {} +``` + +#### Build with New Extensions +After a new extension has been added to the `.kit` file, the application should be rebuilt to ensure extensions are populated to the build directory. + + +### Customization + +Customization of a C++ Extension might involve writing new C++ classes or functions, or integrating existing libraries. + +As is the case with Applications, extensions can also depend on and be depended on by other extensions. These can be custom developed extensions or those provided by the NVIDIA managed extension registry. **It should be noted that a limited number of registry extensions expose a C++ API**. A view of available registry extensions can be found within the Extension Manager accessible via the developer bundle available when running `./repo.sh launch --dev-bundle`(Linux) or `.\repo.bat launch --dev-bundle`(Windows) to launch the Base Editor or USD Explorer Application Templates (select `Developer` > `Utilities` > `Extensions`) + +## Additional Learning +- [Kit Manual Extension Docs](https://docs.omniverse.nvidia.com/kit/docs/kit-manual) +- [C++ Extension Examples](https://github.com/NVIDIA-Omniverse/kit-extension-template-cpp) +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) \ No newline at end of file diff --git a/templates/extensions/basic_cpp/template/config/extension.toml b/templates/extensions/basic_cpp/template/config/extension.toml new file mode 100644 index 0000000..34cd018 --- /dev/null +++ b/templates/extensions/basic_cpp/template/config/extension.toml @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +[package] +# Semantic Versionning is used: https://semver.org/ +version = "{{ version }}" + +# Lists people or organizations that are considered the "authors" of the package. +authors = [ + "Author Name ", +] + +# The title and description fields are primarily for displaying extension info in the UI +title = '{{ extension_display_name }}' +description = "Simple example of an extension that loads a C++ plugin." + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# Path (relative to the root) of changelog +# More info on writing changelog: https://keepachangelog.com/en/1.0.0/ +changelog = "docs/CHANGELOG.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for the UI. +category = "Example" + +# Keywords for the extension +keywords = ["kit", "example"] + +# Preview image and icon. Folder named "data" automatically goes in git lfs (see .gitattributes file). +# Preview image is shown in "Overview" of Extension manager. Screenshot of an extension might be a good preview image. +preview_image = "data/preview.png" + +# Icon is shown in the Extension manager. It is recommended to be square, of size 256x256. +icon = "data/icon.png" + +[[native.plugin]] +path = "bin/*.plugin" +recursive = false + +[documentation] +pages = [ + "docs/Overview.md", + "docs/CHANGELOG.md", +] \ No newline at end of file diff --git a/templates/extensions/basic_cpp/template/data/icon.png b/templates/extensions/basic_cpp/template/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/templates/extensions/basic_cpp/template/data/icon.png differ diff --git a/templates/extensions/basic_cpp/template/data/preview.png b/templates/extensions/basic_cpp/template/data/preview.png new file mode 100644 index 0000000..5c3fc19 Binary files /dev/null and b/templates/extensions/basic_cpp/template/data/preview.png differ diff --git a/templates/extensions/basic_cpp/template/docs/CHANGELOG.md b/templates/extensions/basic_cpp/template/docs/CHANGELOG.md new file mode 100644 index 0000000..c4b72cc --- /dev/null +++ b/templates/extensions/basic_cpp/template/docs/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + + +## [{{ version }}] - {{ current_date }} +- Initial version of basic C++ extension template diff --git a/templates/extensions/basic_cpp/template/docs/Overview.md b/templates/extensions/basic_cpp/template/docs/Overview.md new file mode 100644 index 0000000..4bba659 --- /dev/null +++ b/templates/extensions/basic_cpp/template/docs/Overview.md @@ -0,0 +1 @@ +# Overview \ No newline at end of file diff --git a/templates/extensions/basic_cpp/template/docs/README.md b/templates/extensions/basic_cpp/template/docs/README.md new file mode 100644 index 0000000..a274305 --- /dev/null +++ b/templates/extensions/basic_cpp/template/docs/README.md @@ -0,0 +1,3 @@ +# {{ extension_display_name }} [{{ extension_name }}] + +Simple example of an extension that loads a C++ plugin. diff --git a/templates/extensions/basic_cpp/template/plugins/{{extension_name}}/CppExtension.cpp b/templates/extensions/basic_cpp/template/plugins/{{extension_name}}/CppExtension.cpp new file mode 100644 index 0000000..98db521 --- /dev/null +++ b/templates/extensions/basic_cpp/template/plugins/{{extension_name}}/CppExtension.cpp @@ -0,0 +1,92 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#define CARB_EXPORTS + +#include +#include + +#include +#include + +#include + + +#define EXTENSION_NAME "{{ extension_name }}.plugin" + +using namespace carb; + +// Plugin Implementation Descriptor +const struct carb::PluginImplDesc kPluginImpl = { + EXTENSION_NAME, // Name of the plugin (e.g. "carb.dictionary.plugin"). Must be globally unique. + "Example of a native plugin extension.", // Helpful text describing the plugin. Used for debugging/tools. + "NVIDIA", // Author + carb::PluginHotReload::eEnabled, // If hot reloading is supported by the plugin. (Note: hot reloading is deprecated) + "dev" // Build version of the plugin. +}; + +// List dependencies for this plugin +CARB_PLUGIN_IMPL_DEPS(omni::kit::IApp, carb::logging::ILogging) + + +class NativeExtensionExample : public omni::ext::IExt +{ +public: + void onStartup(const char* extId) override + { + printf(EXTENSION_NAME ": in onStartup\n"); + // Get app interface using Carbonite Framework + omni::kit::IApp* app = carb::getFramework()->acquireInterface(); + + // Subscribe to update events and count them + m_holder = carb::events::createSubscriptionToPop( + app->getUpdateEventStream(), + [this](carb::events::IEvent* event) + { + if (m_counter % 100 == 0) + { + printf(EXTENSION_NAME ": %d updates passed.\n", m_counter); + CARB_LOG_INFO(EXTENSION_NAME ": %d updates passed.\n", m_counter); + } + m_counter++; + }); + } + + void onShutdown() override + { + // Unsubscribes from the event stream + m_holder = nullptr; + } + +private: + int m_counter = 0; + carb::ObjectPtr m_holder; +}; + +// Generate boilerplate code +CARB_PLUGIN_IMPL(kPluginImpl, NativeExtensionExample) + +// There must be a fillInterface(InterfaceType&) function for each interface type that is exported by this plugin. +void fillInterface(NativeExtensionExample& iface) +{ +} diff --git a/templates/extensions/basic_cpp/template/premake5.lua b/templates/extensions/basic_cpp/template/premake5.lua new file mode 100644 index 0000000..a3c86c0 --- /dev/null +++ b/templates/extensions/basic_cpp/template/premake5.lua @@ -0,0 +1,18 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, +} + +-- Build Carbonite plugin to be loaded by the extension. This plugin implements +-- omni::ext::IExt interface to be automatically started by extension system. +project_ext_plugin(ext, "{{ extension_name }}.plugin") + local plugin_name = "{{ extension_name }}" + add_files("iface", "%{root}/include/omni/ext", "IExt.h") + add_files("impl", "plugins/"..plugin_name) + includedirs { "plugins/"..plugin_name } diff --git a/templates/extensions/basic_python/README.md b/templates/extensions/basic_python/README.md new file mode 100644 index 0000000..39724d0 --- /dev/null +++ b/templates/extensions/basic_python/README.md @@ -0,0 +1,85 @@ +# Basic Python Extension Template + +

+ +

+ +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The Basic Python Extension Template is a starting point for developers looking to build Python-based extensions within the NVIDIA Omniverse ecosystem. This template offers a best practices foundation and structure to easily integrate with the broader capabilities of the Omniverse Kit SDK. + +### Use Cases + +This template is ideal for developers looking to build: + +- A reusable Python extension that can be easily integrated with Omniverse Kit SDK applications. + + +### Key Features + +- Structure well suited for the build, test and packaging tooling within this repository. +- All required setup code for use with the Omniverse Kit SDK. + + +## Usage + +This section provides instructions for the setup and use of the Basic Python Extension Template. + +### Getting Started + +To get started with the Basic Python Extension, ensure your development environment meets the prerequisites outlined in the [top-level README](../../../README.md#prerequisites-and-environment-setup). + +#### Cloning the Repository + +```bash +git clone https://github.com/NVIDIA-Omniverse/kit-app-template.git +cd kit-app-template +``` + +#### Create New Extension +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Extension +- **? Select with arrow keys your desired template:**: Basic Python Extension +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:**: [set extension name] +- **? Enter extension_display_name:**: [set extension display name] +- **? Enter version:**: [set extension version] + +#### Build and Launch + +While Python extensions typically do not require a build step in isolation, this template is structured to properly interact with the Omniverse Kit SDK application build and packaging tooling. + +Launching the extension typically requires that they be a part of an Omniverse [Service](../../apps/kit_service/README.md) or [Editor](../../apps/kit_base_editor/README.md) application. + +**Adding an Extension to an Application** + +To add your extension to an application, declare it in the dependencies section of the application's `.kit` file: + +```toml +[dependencies] +"my_company.my_extension" = {} +``` + +#### Build with New Extensions +After a new extension has been added to the `.kit` file, the application should be rebuilt to ensure extensions are populated to the build directory. + +### Customization + +Customization of a Python Extension might involve writing new Python modules, or integrating existing libraries. + +As is the case with Applications, extensions can also depend on and be depended on by other extensions. These can be custom developed extensions or those provided by the NVIDIA managed extension registry. A view of available registry extensions can be found within the Extension Manager accessible via the developer bundle available when running `./repo.sh launch --dev-bundle`(Linux) or `.\repo.bat launch --dev-bundle`(Windows) to launch the Base Editor or USD Explorer Application Templates (select `Developer` > `Utilities` > `Extensions`) + +## Additional Learning +- [Kit Manual Extension Docs](https://docs.omniverse.nvidia.com/kit/docs/kit-manual/latest/guide/extensions_basic.html) +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) \ No newline at end of file diff --git a/templates/extensions/basic_python/template/config/extension.toml b/templates/extensions/basic_python/template/config/extension.toml new file mode 100644 index 0000000..f830e35 --- /dev/null +++ b/templates/extensions/basic_python/template/config/extension.toml @@ -0,0 +1,75 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +[package] +# Semantic Versionning is used: https://semver.org/ +version = "{{ version }}" + +# Lists people or organizations that are considered the "authors" of the package. +authors = [ + "Author Name ", +] + +# The title and description fields are primarily for displaying extension info in the UI +title = '{{ extension_display_name }}' +description = "The simplest python extension example. Use it as a starting point for your extensions." + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# Path (relative to the root) of changelog +# More info on writing changelog: https://keepachangelog.com/en/1.0.0/ +changelog = "docs/CHANGELOG.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for the UI. +category = "Example" + +# Keywords for the extension +keywords = ["kit", "example"] + +# Preview image and icon. Folder named "data" automatically goes in git lfs (see .gitattributes file). +# Preview image is shown in "Overview" of Extension manager. Screenshot of an extension might be a good preview image. +preview_image = "data/preview.png" + +# Icon is shown in the Extension manager. It is recommended to be square, of size 256x256. +icon = "data/icon.png" + +[dependencies] +# none + +# Main python module this extension provides, it will be publicly available as "import {{python_module}}". +[[python.module]] +name = "{{ extension_name }}" + +[[test]] +# Extra dependencies only to be used during test run +dependencies = [ + # none +] + +[documentation] +pages = [ + "docs/Overview.md", + "docs/CHANGELOG.md", +] \ No newline at end of file diff --git a/templates/extensions/basic_python/template/data/icon.png b/templates/extensions/basic_python/template/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/templates/extensions/basic_python/template/data/icon.png differ diff --git a/templates/extensions/basic_python/template/data/preview.png b/templates/extensions/basic_python/template/data/preview.png new file mode 100644 index 0000000..5c3fc19 Binary files /dev/null and b/templates/extensions/basic_python/template/data/preview.png differ diff --git a/templates/extensions/basic_python/template/docs/CHANGELOG.md b/templates/extensions/basic_python/template/docs/CHANGELOG.md new file mode 100644 index 0000000..57615a1 --- /dev/null +++ b/templates/extensions/basic_python/template/docs/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + + +## [{{ version }}] - {{current_date}} +- Initial version of basic python extension template diff --git a/templates/extensions/basic_python/template/docs/Overview.md b/templates/extensions/basic_python/template/docs/Overview.md new file mode 100644 index 0000000..4bba659 --- /dev/null +++ b/templates/extensions/basic_python/template/docs/Overview.md @@ -0,0 +1 @@ +# Overview \ No newline at end of file diff --git a/templates/extensions/basic_python/template/docs/README.md b/templates/extensions/basic_python/template/docs/README.md new file mode 100644 index 0000000..b5e8315 --- /dev/null +++ b/templates/extensions/basic_python/template/docs/README.md @@ -0,0 +1,3 @@ +# {{ extension_display_name }} [{{ extension_name }}] + +This is an example of pure python Kit extension. It is intended to be copied and to serve as a template to create new ones. diff --git a/templates/extensions/basic_python/template/premake5.lua b/templates/extensions/basic_python/template/premake5.lua new file mode 100644 index 0000000..be788a1 --- /dev/null +++ b/templates/extensions/basic_python/template/premake5.lua @@ -0,0 +1,11 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, + { "{{ python_module_toplevel }}", ext.target_dir.."/{{ python_module_toplevel }}" }, +} \ No newline at end of file diff --git a/templates/extensions/basic_python/template/{{python_module_path}}/__init__.py b/templates/extensions/basic_python/template/{{python_module_path}}/__init__.py new file mode 100644 index 0000000..31f8e97 --- /dev/null +++ b/templates/extensions/basic_python/template/{{python_module_path}}/__init__.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .extension import * diff --git a/templates/extensions/basic_python/template/{{python_module_path}}/extension.py b/templates/extensions/basic_python/template/{{python_module_path}}/extension.py new file mode 100644 index 0000000..a1333a6 --- /dev/null +++ b/templates/extensions/basic_python/template/{{python_module_path}}/extension.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import omni.ext + + +# Functions and vars are available to other extensions as usual in python: `{{python_module}}.some_public_function(x)` +def some_public_function(x: int): + print(f"[{{ extension_name }}] some_public_function was called with {x}") + return x**x + + +# Any class derived from `omni.ext.IExt` in the top level module (defined in `python.modules` of `extension.toml`) will +# be instantiated when the extension gets enabled, and `on_startup(ext_id)` will be called. +# Later when the extension gets disabled on_shutdown() is called. +class MyExtension(omni.ext.IExt): + # ext_id is the current extension id. It can be used with the extension manager to query additional information, + # like where this extension is located on the filesystem. + def on_startup(self, ext_id): + print("[{{ extension_name }}] Extension startup") + + def on_shutdown(self): + print("[{{ extension_name }}] Extension shutdown") diff --git a/templates/extensions/basic_python/template/{{python_module_path}}/tests/__init__.py b/templates/extensions/basic_python/template/{{python_module_path}}/tests/__init__.py new file mode 100644 index 0000000..8d8a85e --- /dev/null +++ b/templates/extensions/basic_python/template/{{python_module_path}}/tests/__init__.py @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .test_benchmarks import * +from .test_hello import * diff --git a/templates/extensions/basic_python/template/{{python_module_path}}/tests/test_benchmarks.py b/templates/extensions/basic_python/template/{{python_module_path}}/tests/test_benchmarks.py new file mode 100644 index 0000000..e16e131 --- /dev/null +++ b/templates/extensions/basic_python/template/{{python_module_path}}/tests/test_benchmarks.py @@ -0,0 +1,72 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import asyncio + +from omni.kit.test import AsyncTestCase, BenchmarkTestCase + + +class TestBenchmarks(BenchmarkTestCase): + """ + Example Benchmark class with custom metrics. + * To use custom metrics one has to derive from `BenchmarkTestCase`. + * Benchmark methods have to start with the 'benchmark' prefix. + * The runtime of the benchmark methods and their skip state + belong to the default metrics which are always reported. + """ + + def setUp(self): + pass + + async def benchmark_sleepy_with_custom_metrics(self): + """ + Benchmark method using custom metrics. + """ + # sample for custom metric 'sleep_time' is set to 0.1s + self.set_metric_sample(name="sleep_time", value=0.1, unit="s") + await asyncio.sleep(0.1) + # sample for custom metric 'runs' is set to 1 + self.set_metric_sample(name="runs", value=1) + + async def benchmark_sleepy_with_custom_metrics_array(self): + """ + Another benchmark method using custom metrics to demonstrate setting arrays for a metric, and to show that + there's no crosstalk of metrics between benchmarks. + """ + # array of samples for custom metric 'my_other_metric' is set to [1.2ms, 0.9ms, 1.1ms] + self.set_metric_sample_array(name="my_other_metric", values=[1.2, 0.9, 1.1], unit="ms") + await asyncio.sleep(0.01) + + +class TestBenchmarksNoCustomMetric(AsyncTestCase): + """ + Example Benchmark class without custom metrics. + * If you are not planning to use custom metrics you can derive from `AsyncTestCase`. + * Benchmark methods have to start with the 'benchmark' prefix. + * The runtime of the benchmark methods and their skip state + belong to the default metrics which are always reported. + """ + + def setUp(self): + pass + + async def benchmark_sleepy_no_custom(self): + await asyncio.sleep(0.1) diff --git a/templates/extensions/basic_python/template/{{python_module_path}}/tests/test_hello.py b/templates/extensions/basic_python/template/{{python_module_path}}/tests/test_hello.py new file mode 100644 index 0000000..32e460a --- /dev/null +++ b/templates/extensions/basic_python/template/{{python_module_path}}/tests/test_hello.py @@ -0,0 +1,44 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +# NOTE: +# omni.kit.test - std python's unittest module with additional wrapping to add support for async/await tests +# For most things refer to unittest docs: https://docs.python.org/3/library/unittest.html +# Import extension python module we are testing with absolute import path, as if we are an external user (other extension) +import {{ python_module }} +import omni.kit.test + + +# Having a test class derived from omni.kit.test.AsyncTestCase declared on the root of the module +# will make it auto-discoverable by omni.kit.test +class Test(omni.kit.test.AsyncTestCaseFailOnLogError): + # Before running each test + async def setUp(self): + pass + + # After running each test + async def tearDown(self): + pass + + # Actual test, notice it is an "async" function, so "await" can be used if needed + async def test_hello_public_function(self): + result = {{ python_module }}.some_public_function(4) + self.assertEqual(result, 256) diff --git a/templates/extensions/python_ui/README.md b/templates/extensions/python_ui/README.md new file mode 100644 index 0000000..43dc5d1 --- /dev/null +++ b/templates/extensions/python_ui/README.md @@ -0,0 +1,87 @@ +# Python UI Extension Template + +

+ +

+ +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The Python UI Extension Template offers a simple starting point for developers looking to build Python-based extensions with performant User Interfaces. This template offers a best practices foundation and structure to easily integrate with the broader capabilities of the Omniverse Kit SDK. + +### Use Cases + +This template is ideal for developers looking to build: + +- UI based extensions that can be easily integrated with Omniverse Kit SDK applications. + + +### Key Features + +- A simple starter UI demonstrating how to build using the Omni UI framework. +- Structure well suited for the build, test and packaging tooling within this repository. +- All required setup code for use with the Omniverse Kit SDK. + + +## Usage + +This section provides instructions for the setup and use of the Python UI Extension Template. + +### Getting Started + +To get started with the Python UI Extension, ensure your development environment meets the prerequisites outlined in the [top-level README](../../../README.md#prerequisites-and-environment-setup). + +#### Cloning the Repository + +```bash +git clone https://github.com/NVIDIA-Omniverse/kit-app-template.git +cd kit-app-template +``` + +#### Create New Extension +**Linux:** +```bash +./repo.sh template new +``` + +**Windows:** +```powershell +.\repo.bat template new +``` + +Follow the prompt instructions: +- **? Select with arrow keys what you want to create:** Extension +- **? Select with arrow keys your desired template:**: Python UI Extension +- **? Enter name of extension [name-spaced, lowercase, alphanumeric]:**: [set extension name] +- **? Enter extension_display_name:**: [set extension display name] +- **? Enter version:**: [set extension version] + +#### Build and Launch + +While Python extensions typically do not require a build step in isolation, this template is structured to properly interact with the Omniverse Kit SDK application build and packaging tooling. + +Launching the extension typically requires that they be a part of an Omniverse [Service](../../apps/kit_service/README.md) or [Editor](../../apps/kit_base_editor/README.md) application. + +**Adding an Extension to an Application** + +To add your extension to an application, declare it in the dependencies section of the application's `.kit` file: + +```toml +[dependencies] +"my_company.my_extension" = {} +``` + +#### Build with New Extensions +After a new extension has been added to the `.kit` file, the application should be rebuilt to ensure extensions are populated to the build directory. + +### Customization + +Customization of a Python Extension might involve writing new Python modules, or integrating existing libraries. + +As is the case with Applications, extensions can also depend on and be depended on by other extensions. These can be custom developed extensions or those provided by the NVIDIA managed extension registry. A view of available registry extensions can be found within the Extension Manager accessible via the developer bundle available when running `./repo.sh launch --dev-bundle`(Linux) or `.\repo.bat launch --dev-bundle`(Windows) to launch the Base Editor or USD Explorer Application Templates (select `Developer` > `Utilities` > `Extensions`) + +## Additional Learning +- [Kit Manual Extension Docs](https://docs.omniverse.nvidia.com/kit/docs/kit-manual/latest/guide/extensions_basic.html) +- [Omni UI Documentation](https://docs.omniverse.nvidia.com/kit/docs/omni.ui) +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) \ No newline at end of file diff --git a/templates/extensions/python_ui/template/config/extension.toml b/templates/extensions/python_ui/template/config/extension.toml new file mode 100644 index 0000000..2e2448c --- /dev/null +++ b/templates/extensions/python_ui/template/config/extension.toml @@ -0,0 +1,77 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +[package] +# Semantic Versionning is used: https://semver.org/ +version = "{{ version }}" + +# Lists people or organizations that are considered the "authors" of the package. +authors = [ + "Author Name ", +] + +# The title and description fields are primarily for displaying extension info in the UI +title = '{{ extension_display_name }}' +description = "The simplest python UI extension example. Use it as a starting point for your extensions." + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# Path (relative to the root) of changelog +# More info on writing changelog: https://keepachangelog.com/en/1.0.0/ +changelog = "docs/CHANGELOG.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for the UI. +category = "Example" + +# Keywords for the extension +keywords = ["kit", "example"] + +# Preview image and icon. Folder named "data" automatically goes in git lfs (see .gitattributes file). +# Preview image is shown in "Overview" of Extensions window. Screenshot of an extension might be a good preview image. +preview_image = "data/preview.png" + +# Icon is shown in Extension manager. It is recommended to be square, of size 256x256. +icon = "data/icon.png" + +# Use omni.ui to build simple UI +[dependencies] +"omni.kit.uiapp" = {} + +# Main python module this extension provides, it will be publicly available as "import {{python_module}}". +[[python.module]] +name = "{{ extension_name }}" + +[[test]] +# Extra dependencies only to be used during test run +dependencies = [ + "omni.kit.test", + "omni.kit.ui_test" # UI testing extension +] + +[documentation] +pages = [ + "docs/Overview.md", + "docs/CHANGELOG.md", +] \ No newline at end of file diff --git a/templates/extensions/python_ui/template/data/icon.png b/templates/extensions/python_ui/template/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/templates/extensions/python_ui/template/data/icon.png differ diff --git a/templates/extensions/python_ui/template/data/preview.png b/templates/extensions/python_ui/template/data/preview.png new file mode 100644 index 0000000..5c3fc19 Binary files /dev/null and b/templates/extensions/python_ui/template/data/preview.png differ diff --git a/templates/extensions/python_ui/template/docs/CHANGELOG.md b/templates/extensions/python_ui/template/docs/CHANGELOG.md new file mode 100644 index 0000000..4f6aa30 --- /dev/null +++ b/templates/extensions/python_ui/template/docs/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + + +## [{{ version }}] - {{current_date}} +- Initial version of extension UI template with a window diff --git a/templates/extensions/python_ui/template/docs/Overview.md b/templates/extensions/python_ui/template/docs/Overview.md new file mode 100644 index 0000000..4bba659 --- /dev/null +++ b/templates/extensions/python_ui/template/docs/Overview.md @@ -0,0 +1 @@ +# Overview \ No newline at end of file diff --git a/templates/extensions/python_ui/template/docs/README.md b/templates/extensions/python_ui/template/docs/README.md new file mode 100644 index 0000000..99140c2 --- /dev/null +++ b/templates/extensions/python_ui/template/docs/README.md @@ -0,0 +1,3 @@ +# {{ extension_display_name }} [{{ extension_name }}] + +A simple python UI extension example. Use it as a starting point for your extensions. diff --git a/templates/extensions/python_ui/template/premake5.lua b/templates/extensions/python_ui/template/premake5.lua new file mode 100644 index 0000000..efb08a3 --- /dev/null +++ b/templates/extensions/python_ui/template/premake5.lua @@ -0,0 +1,11 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, + { "{{ python_module_toplevel }}", ext.target_dir.."/{{ python_module_toplevel }}" }, +} diff --git a/templates/extensions/python_ui/template/{{python_module_path}}/__init__.py b/templates/extensions/python_ui/template/{{python_module_path}}/__init__.py new file mode 100644 index 0000000..31f8e97 --- /dev/null +++ b/templates/extensions/python_ui/template/{{python_module_path}}/__init__.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .extension import * diff --git a/templates/extensions/python_ui/template/{{python_module_path}}/extension.py b/templates/extensions/python_ui/template/{{python_module_path}}/extension.py new file mode 100644 index 0000000..bacffcc --- /dev/null +++ b/templates/extensions/python_ui/template/{{python_module_path}}/extension.py @@ -0,0 +1,63 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import omni.ext +import omni.ui as ui + + +# Functions and vars are available to other extensions as usual in python: `{{python_module}}.some_public_function(x)` +def some_public_function(x: int): + print(f"[{{ extension_name }}] some_public_function was called with {x}") + return x ** x + + +# Any class derived from `omni.ext.IExt` in the top level module (defined in `python.modules` of `extension.toml`) will +# be instantiated when the extension gets enabled, and `on_startup(ext_id)` will be called. +# Later when the extension gets disabled on_shutdown() is called. +class MyExtension(omni.ext.IExt): + # ext_id is the current extension id. It can be used with the extension manager to query additional information, + # like where this extension is located on the filesystem. + def on_startup(self, ext_id): + print("[{{ extension_name }}] Extension startup") + + self._count = 0 + + self._window = ui.Window("{{ extension_display_name }}", width=300, height=300) + with self._window.frame: + with ui.VStack(): + label = ui.Label("") + + def on_click(): + self._count += 1 + label.text = f"count: {self._count}" + + def on_reset(): + self._count = 0 + label.text = "empty" + + on_reset() + + with ui.HStack(): + ui.Button("Add", clicked_fn=on_click) + ui.Button("Reset", clicked_fn=on_reset) + + def on_shutdown(self): + print("[{{ extension_name }}] Extension shutdown") diff --git a/templates/extensions/python_ui/template/{{python_module_path}}/tests/__init__.py b/templates/extensions/python_ui/template/{{python_module_path}}/tests/__init__.py new file mode 100644 index 0000000..a4ba33d --- /dev/null +++ b/templates/extensions/python_ui/template/{{python_module_path}}/tests/__init__.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .test_hello_world import * diff --git a/templates/extensions/python_ui/template/{{python_module_path}}/tests/test_hello_world.py b/templates/extensions/python_ui/template/{{python_module_path}}/tests/test_hello_world.py new file mode 100644 index 0000000..82325a3 --- /dev/null +++ b/templates/extensions/python_ui/template/{{python_module_path}}/tests/test_hello_world.py @@ -0,0 +1,66 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +# NOTE: +# omni.kit.test - std python's unittest module with additional wrapping to add suport for async/await tests +# For most things refer to unittest docs: https://docs.python.org/3/library/unittest.html +import omni.kit.test + +# Extension for writing UI tests (to simulate UI interaction) +import omni.kit.ui_test as ui_test + +# Import extension python module we are testing with absolute import path, as if we are external user (other extension) +import {{ python_module }} + + +# Having a test class dervived from omni.kit.test.AsyncTestCase declared on the root of module will make it auto-discoverable by omni.kit.test +class Test(omni.kit.test.AsyncTestCase): + # Before running each test + async def setUp(self): + pass + + # After running each test + async def tearDown(self): + pass + + # Actual test, notice it is an "async" function, so "await" can be used if needed + async def test_hello_public_function(self): + result = {{ python_module }}.some_public_function(4) + self.assertEqual(result, 256) + + async def test_window_button(self): + + # Find a label in our window + label = ui_test.find("{{ extension_display_name }}//Frame/**/Label[*]") + + # Find buttons in our window + add_button = ui_test.find("{{ extension_display_name }}//Frame/**/Button[*].text=='Add'") + reset_button = ui_test.find("{{ extension_display_name }}//Frame/**/Button[*].text=='Reset'") + + # Click reset button + await reset_button.click() + self.assertEqual(label.widget.text, "empty") + + await add_button.click() + self.assertEqual(label.widget.text, "count: 1") + + await add_button.click() + self.assertEqual(label.widget.text, "count: 2") diff --git a/templates/extensions/service.setup/README.md b/templates/extensions/service.setup/README.md new file mode 100644 index 0000000..fb84d2b --- /dev/null +++ b/templates/extensions/service.setup/README.md @@ -0,0 +1,31 @@ +# Service Setup Extension Template + +![Kit Service Image](../../../readme-assets/kit_service.png) + +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The Service Setup Extension Template is designed to facilitate the configuration and setup of a headless service that leverages the Omniverse Kit SDK. + +Though it is possible in this case, setup extensions are not typically intended to be used as a generic extension but as a specific component of a particular application. + +### Use Cases + +This setup extension is well suited for: + +- Developers building headless services that require Kit SDK functionalities. + +### Key Features + +- Sample ServiceAPIRouter setup. +- Sample endpoint to demonstrate interaction patterns within service Kit SDK and OpenUSD. + +## Usage + +This extension is automatically created and configured when you generate a new service application using the [Service Application Template](../../apps/kit_service/README.md). + + +## Additional Learning +- [Omniverse Kit Service Documentation](https://docs.omniverse.nvidia.com/services/latest/index.html) +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) \ No newline at end of file diff --git a/templates/extensions/service.setup/template/config/extension.toml b/templates/extensions/service.setup/template/config/extension.toml new file mode 100644 index 0000000..df86157 --- /dev/null +++ b/templates/extensions/service.setup/template/config/extension.toml @@ -0,0 +1,78 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +[package] +# Semantic Versionning is used: https://semver.org/ +version = '{{ version }}' + +# Lists people or organizations that are considered the "authors" of the package. +authors = [ + "Author Name ", +] + +# The title and description fields are primarily for displaying extension info in the UI +title = '{{ extension_display_name }}' +description = "The simplest python service example extension. Use it as a starting point for your extensions." + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# Path (relative to the root) of changelog +# More info on writing changelog: https://keepachangelog.com/en/1.0.0/ +changelog = "docs/CHANGELOG.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for the UI. +category = "Example" + +# Keywords for the extension +keywords = ["kit", "example"] + +# Preview image and icon. Folder named "data" automatically goes in git lfs (see .gitattributes file). +# Preview image is shown in "Overview" of Extension manager. Screenshot of an extension might be a good preview image. +preview_image = "data/preview.png" + +# Icon is shown in the Extension manager. It is recommended to be square, of size 256x256. +icon = "data/icon.png" + +[dependencies] +"omni.services.core" = {} +"omni.services.transport.server.http" = {} +"omni.usd" = {} +"omni.kit.commands" = {} + +# Main python module this extension provides, it will be publicly available as "import {{python_module}}". +[[python.module]] +name = '{{ extension_name }}' + +[[test]] +# Extra dependencies only to be used during test run +dependencies = [ + # none +] + +[documentation] +pages = [ + "docs/Overview.md", + "docs/CHANGELOG.md", +] \ No newline at end of file diff --git a/templates/extensions/service.setup/template/data/icon.png b/templates/extensions/service.setup/template/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/templates/extensions/service.setup/template/data/icon.png differ diff --git a/templates/extensions/service.setup/template/data/preview.png b/templates/extensions/service.setup/template/data/preview.png new file mode 100644 index 0000000..5c3fc19 Binary files /dev/null and b/templates/extensions/service.setup/template/data/preview.png differ diff --git a/templates/extensions/service.setup/template/docs/CHANGELOG.md b/templates/extensions/service.setup/template/docs/CHANGELOG.md new file mode 100644 index 0000000..0b9356b --- /dev/null +++ b/templates/extensions/service.setup/template/docs/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + + +## [{{ version }}] - 2024-03-13 +- Initial version based on kit service extension template diff --git a/templates/extensions/service.setup/template/docs/Overview.md b/templates/extensions/service.setup/template/docs/Overview.md new file mode 100644 index 0000000..4bba659 --- /dev/null +++ b/templates/extensions/service.setup/template/docs/Overview.md @@ -0,0 +1 @@ +# Overview \ No newline at end of file diff --git a/templates/extensions/service.setup/template/docs/README.md b/templates/extensions/service.setup/template/docs/README.md new file mode 100644 index 0000000..19e4250 --- /dev/null +++ b/templates/extensions/service.setup/template/docs/README.md @@ -0,0 +1,3 @@ +# {{ extension_display_name }} [{{ extension_name }}] + +This is an example of a simple Kit Service extension. It is intended to be copied and to serve as a template to create new ones. diff --git a/templates/extensions/service.setup/template/premake5.lua b/templates/extensions/service.setup/template/premake5.lua new file mode 100644 index 0000000..be788a1 --- /dev/null +++ b/templates/extensions/service.setup/template/premake5.lua @@ -0,0 +1,11 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, + { "{{ python_module_toplevel }}", ext.target_dir.."/{{ python_module_toplevel }}" }, +} \ No newline at end of file diff --git a/templates/extensions/service.setup/template/{{python_module_path}}/__init__.py b/templates/extensions/service.setup/template/{{python_module_path}}/__init__.py new file mode 100644 index 0000000..31f8e97 --- /dev/null +++ b/templates/extensions/service.setup/template/{{python_module_path}}/__init__.py @@ -0,0 +1,22 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .extension import * diff --git a/templates/extensions/service.setup/template/{{python_module_path}}/extension.py b/templates/extensions/service.setup/template/{{python_module_path}}/extension.py new file mode 100644 index 0000000..4ab8543 --- /dev/null +++ b/templates/extensions/service.setup/template/{{python_module_path}}/extension.py @@ -0,0 +1,41 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import omni.ext +from omni.services.core import main +from .service import router + + +# Any class derived from `omni.ext.IExt` in the top level module (defined in `python.modules` of `extension.toml`) will +# be instantiated when the extension gets enabled, and `on_startup(ext_id)` will be called. +# Later when the extension gets disabled on_shutdown() is called. +class MyExtension(omni.ext.IExt): + # ext_id is the current extension id. It can be used with the extension manager to + # query additional information, like where this extension is located on the filesystem. + def on_startup(self, ext_id): + + main.register_router(router) + + print("[{{ extension_name }}] MyExtension startup : Local Docs - http://localhost:8011/docs") + + def on_shutdown(self): + main.deregister_router(router) + print("[{{ extension_name }}] MyExtension shutdown") \ No newline at end of file diff --git a/templates/extensions/service.setup/template/{{python_module_path}}/service.py b/templates/extensions/service.setup/template/{{python_module_path}}/service.py new file mode 100644 index 0000000..0170a5a --- /dev/null +++ b/templates/extensions/service.setup/template/{{python_module_path}}/service.py @@ -0,0 +1,90 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from pathlib import Path +import omni.usd +import omni.kit.commands +from pydantic import BaseModel, Field +from omni.services.core.routers import ServiceAPIRouter + + +router = ServiceAPIRouter(tags=["{{ extension_display_name }}"]) + + +class CubeDataModel(BaseModel): + """Model of a request for generating a cube.""" + + asset_write_location: str = Field( + default="/asset_write_path", + title="Asset Path", + description="Location on device to write generated asset", + ) + + asset_name: str = Field( + default="cube", + title="Asset Name", + description="Name of the asset to be generated, .usda will be appended to the name", + ) + + cube_scale: float = Field( + default=100, + title="Cube Scale", + description="Scale of the cube", + ) + + +@router.post( + "/generate_cube", + summary="Generate a cube", + description="An endpoint to generate a usda file containing a cube of given scale", +) +async def generate_cube(cube_data: CubeDataModel): + print("[{{ extension_name }}] generate_cube was called") + + # Create a new stage + usd_context = omni.usd.get_context() + usd_context.new_stage() + stage = omni.usd.get_context().get_stage() + + # Set the default prim + default_prim_path = "/World" + stage.DefinePrim(default_prim_path, "Xform") + prim = stage.GetPrimAtPath(default_prim_path) + stage.SetDefaultPrim(prim) + + # Create cube + prim_type = "Cube" + prim_path = f"/World/{prim_type}" + + omni.kit.commands.execute( + "CreatePrim", + prim_path=prim_path, + prim_type=prim_type, + attributes={"size": cube_data.cube_scale}, + select_new_prim=False, + ) + + # save stage + asset_file_path = str(Path(cube_data.asset_write_location).joinpath(f"{cube_data.asset_name}.usda")) + stage.GetRootLayer().Export(asset_file_path) + msg = f"[{{ extension_name }}] Wrote a cube to this path: {asset_file_path}" + print(msg) + return msg diff --git a/templates/extensions/service.setup/template/{{python_module_path}}/tests/__init__.py b/templates/extensions/service.setup/template/{{python_module_path}}/tests/__init__.py new file mode 100644 index 0000000..7322e13 --- /dev/null +++ b/templates/extensions/service.setup/template/{{python_module_path}}/tests/__init__.py @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +from .test_benchmarks import * +from .test_service import * diff --git a/templates/extensions/service.setup/template/{{python_module_path}}/tests/test_benchmarks.py b/templates/extensions/service.setup/template/{{python_module_path}}/tests/test_benchmarks.py new file mode 100644 index 0000000..e16e131 --- /dev/null +++ b/templates/extensions/service.setup/template/{{python_module_path}}/tests/test_benchmarks.py @@ -0,0 +1,72 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +import asyncio + +from omni.kit.test import AsyncTestCase, BenchmarkTestCase + + +class TestBenchmarks(BenchmarkTestCase): + """ + Example Benchmark class with custom metrics. + * To use custom metrics one has to derive from `BenchmarkTestCase`. + * Benchmark methods have to start with the 'benchmark' prefix. + * The runtime of the benchmark methods and their skip state + belong to the default metrics which are always reported. + """ + + def setUp(self): + pass + + async def benchmark_sleepy_with_custom_metrics(self): + """ + Benchmark method using custom metrics. + """ + # sample for custom metric 'sleep_time' is set to 0.1s + self.set_metric_sample(name="sleep_time", value=0.1, unit="s") + await asyncio.sleep(0.1) + # sample for custom metric 'runs' is set to 1 + self.set_metric_sample(name="runs", value=1) + + async def benchmark_sleepy_with_custom_metrics_array(self): + """ + Another benchmark method using custom metrics to demonstrate setting arrays for a metric, and to show that + there's no crosstalk of metrics between benchmarks. + """ + # array of samples for custom metric 'my_other_metric' is set to [1.2ms, 0.9ms, 1.1ms] + self.set_metric_sample_array(name="my_other_metric", values=[1.2, 0.9, 1.1], unit="ms") + await asyncio.sleep(0.01) + + +class TestBenchmarksNoCustomMetric(AsyncTestCase): + """ + Example Benchmark class without custom metrics. + * If you are not planning to use custom metrics you can derive from `AsyncTestCase`. + * Benchmark methods have to start with the 'benchmark' prefix. + * The runtime of the benchmark methods and their skip state + belong to the default metrics which are always reported. + """ + + def setUp(self): + pass + + async def benchmark_sleepy_no_custom(self): + await asyncio.sleep(0.1) diff --git a/templates/extensions/service.setup/template/{{python_module_path}}/tests/test_service.py b/templates/extensions/service.setup/template/{{python_module_path}}/tests/test_service.py new file mode 100644 index 0000000..4d5caee --- /dev/null +++ b/templates/extensions/service.setup/template/{{python_module_path}}/tests/test_service.py @@ -0,0 +1,50 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +# NOTE: +# omni.kit.test - std python's unittest module with additional wrapping to add support for async/await tests +# For most things refer to unittest docs: https://docs.python.org/3/library/unittest.html +# Import extension python module we are testing with absolute import path, as if we are an external user (other extension) +import {{ python_module }} +from {{ python_module }}.service import router +import omni.kit.test + + +# Having a test class derived from omni.kit.test.AsyncTestCase declared on the root of the module +# will make it auto-discoverable by omni.kit.test +class Test(omni.kit.test.AsyncTestCaseFailOnLogError): + # Before running each test + async def setUp(self): + pass + + # After running each test + async def tearDown(self): + pass + + # Test to ensure that the router is properly initialized and not None + async def test_router_initialization(self): + # Check that router is not None + self.assertIsNotNone(router, "Router should be initialized") + + # Optionally, check that router has the endpoint registered (by checking its routes) + # This step assumes that the route '/generate_cube' should be one of the registered routes + routes = [route for route in router.routes if route.path == "/generate_cube"] + self.assertTrue(len(routes) > 0, "The generate_cube endpoint should be registered in the router") diff --git a/templates/extensions/usd_explorer.setup/README.md b/templates/extensions/usd_explorer.setup/README.md new file mode 100644 index 0000000..d8bfc4a --- /dev/null +++ b/templates/extensions/usd_explorer.setup/README.md @@ -0,0 +1,32 @@ +# USD Explorer Setup Extension Template + +![USD Explorer Hero Image](../../../readme-assets/usd_explorer.jpg) + +**Based On:** `Omniverse Kit SDK 106.0` + +## Overview + +The USD Explorer Setup Extension Template is specifically designed to configure the USD Explorer Template application. This setup extension ensures the proper integration and configuration of specific components and extensions required for the USD Explorer Template application to function as intended. + +### Use Cases + +This setup extension is particularly useful for: + +- Customizing the setup and configuration of the USD Explorer Application Template. +- Learning more (by example) about advanced usage of the Kit SDK and Omniverse Extensions. + +### Key Features + +- Custom configurations tailored to the USD Explorer Template Application. + + +## Usage + +This extension is automatically created and configured when you generate a new application based on the [USD Explorer Template Application](../../apps/usd_explorer/README.md). + +This extension does provide a learning opportunity for developers to understand how applications can be extensively customized and configured using a setup extension. + +## Additional Learning + +- [Kit Manual - Advanced Extensions](https://docs.omniverse.nvidia.com/kit/docs/kit-manual/latest/guide/extensions_advanced.html) +- [Kit App Template Companion Tutorial](https://docs.omniverse.nvidia.com/kit/docs/kit-app-template/latest/docs/intro.html) \ No newline at end of file diff --git a/templates/extensions/usd_explorer.setup/template/config/extension.toml b/templates/extensions/usd_explorer.setup/template/config/extension.toml new file mode 100644 index 0000000..99627f1 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/config/extension.toml @@ -0,0 +1,107 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +[package] +# Semantic Versionning is used: https://semver.org/ +version = "{{ version }}" + +# The title and description fields are primarily for displaying extension info in UI +title = "{{ extension_display_name }}" +description = "A setup extension for a USD Explorer based template applicaiton" + +# Path (relative to the root) or content of readme markdown file for UI. +readme = "docs/README.md" + +# URL of the extension source repository. +# repository = "https://github.com/example/repository_name" + +# One of categories for UI. +category = "setup" + +# Keywords for the extension +keywords = ["kit", "app", "setup"] + +# Icon to show in the extension manager +icon = "data/icon.png" + +# Preview to show in the extension manager +preview_image = "data/preview.png" + +# Use omni.ui to build simple UI +[dependencies] +"omni.kit.quicklayout" = {} +"omni.kit.window.title" = {} +"omni.kit.browser.asset" = {} +"omni.kit.window.console" = {} +"omni.kit.window.content_browser" = {} +"omni.kit.window.material" = {} +"omni.kit.window.toolbar" = {} +"omni.kit.property.bundle" = {} +"omni.kit.property.layer" = {} +"omni.kit.stage_templates" = {} +"omni.kit.viewport.navigation.usd_explorer.bundle" = {} +"omni.kit.window.preferences" = {} + +# from omni.view.app.setup +"omni.kit.viewport.menubar.camera" = { optional=true } +"omni.kit.widget.layers" = { optional=true } +"omni.kit.widgets.custom" = {} +"omni.kit.window.file" = {} + +# Main python module this extension provides, it will be publicly available as "import omni.hello.world". +[[python.module]] +name = "{{ extension_name }}" + +[settings] +app.layout.name = "viewport_only" +app.application_mode = "review" +exts."omni.kit.viewport.menubar.camera".expand = true # Expand the extra-camera settings by default +exts."omni.kit.window.file".useNewFilePicker = true +exts."omni.kit.tool.asset_importer".useNewFilePicker = true +exts."omni.kit.tool.collect".useNewFilePicker = true +exts."omni.kit.widget.layers".useNewFilePicker = true +exts."omni.kit.renderer.core".imgui.enableMips = true +exts."omni.kit.browser.material".enabled = false +exts."omni.kit.window.material".load_after_startup = true +exts."omni.kit.widget.cloud_share".require_access_code = false +exts."omni.kit.mesh.raycast".bvhBuildOnFirstRequired = true # Avoids mesh raycast to initialize during stage open +app.content.emptyStageOnStart = true +app.viewport.createCameraModelRep = false # Disable creation of camera meshes in USD + +# USDRT +app.usdrt.scene_delegate.enableProxyCubes = false +app.usdrt.scene_delegate.geometryStreaming.enabled = true +app.usdrt.scene_delegate.numFramesBetweenLoadBatches = 2 +app.usdrt.scene_delegate.geometryStreaming.numberOfVerticesToLoadPerChunk = 600000 + +exts."omni.kit.viewport.navigation.camera_manipulator".defaultOperation = "" + +[[test]] +dependencies = [ + "omni.kit.core.tests", + "omni.kit.ui_test", + "omni.kit.mainwindow", + "omni.kit.stage_templates", + "omni.kit.viewport.window", + "omni.kit.viewport.utility", +] +args = [ + "--/app/file/ignoreUnsavedOnExit=true", + # "--/renderer/enabled=pxr", + # "--/renderer/active=pxr", + "--/app/window/width=1280", + "--/app/window/height=720", + "--/app/window/dpiScaleOverride=1.0", + "--/app/window/scaleToMonitor=false", + "--/exts/omni.kit.viewport.window/startup/windowName=Viewport", + "--reset-user", + "--no-window", + "--/app/fastShutdown=1" +] diff --git a/templates/extensions/usd_explorer.setup/template/data/BuiltInMaterials.usda b/templates/extensions/usd_explorer.setup/template/data/BuiltInMaterials.usda new file mode 100644 index 0000000..b63f55d --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/data/BuiltInMaterials.usda @@ -0,0 +1,984 @@ +#usda 1.0 +( + customLayerData = { + dictionary audioSettings = { + double dopplerLimit = 2 + double dopplerScale = 1 + double nonSpatialTimeScale = 1 + double spatialTimeScale = 1 + double speedOfSound = 340 + } + dictionary cameraSettings = { + dictionary Front = { + double3 position = (0, 0, 50000) + double radius = 500 + double3 target = (0, 0, 0) + } + dictionary Perspective = { + double3 position = (-585.5409829436198, 535.6688465310699, 562.1769926693995) + double radius = 1131.7878009131487 + double3 target = (-27.520387592247175, -243.6256650263898, -39.70065745223519) + } + dictionary Right = { + double3 position = (-50000, 0, -1.1102230246251565e-11) + double radius = 500 + double3 target = (0, 0, 0) + } + dictionary Top = { + double3 position = (-8.11833802720775e-12, 50000, 1.1102230246251565e-11) + double radius = 500 + double3 target = (0, 0, 0) + } + string boundCamera = "/OmniverseKit_Persp" + } + dictionary navmeshSettings = { + double agentHeight = 180 + double agentRadius = 20 + bool excludeRigidBodies = 1 + int ver = 1 + double voxelCeiling = 460 + } + dictionary omni_layer = { + string authoring_layer = "./BuiltInMaterials.usda" + dictionary locked = { + } + dictionary muteness = { + } + } + int refinementOverrideImplVersion = 0 + dictionary renderSettings = { + float3 "rtx:debugView:pixelDebug:textColor" = (0, 1e18, 0) + float3 "rtx:fog:fogColor" = (0.75, 0.75, 0.75) + float3 "rtx:index:regionOfInterestMax" = (0, 0, 0) + float3 "rtx:index:regionOfInterestMin" = (0, 0, 0) + float3 "rtx:iray:environment_dome_ground_position" = (0, 0, 0) + float3 "rtx:iray:environment_dome_ground_reflectivity" = (0, 0, 0) + float3 "rtx:iray:environment_dome_rotation_axis" = (3.4028235e38, 3.4028235e38, 3.4028235e38) + float3 "rtx:post:backgroundZeroAlpha:backgroundDefaultColor" = (0, 0, 0) + float3 "rtx:post:colorcorr:contrast" = (1, 1, 1) + float3 "rtx:post:colorcorr:gain" = (1, 1, 1) + float3 "rtx:post:colorcorr:gamma" = (1, 1, 1) + float3 "rtx:post:colorcorr:offset" = (0, 0, 0) + float3 "rtx:post:colorcorr:saturation" = (1, 1, 1) + float3 "rtx:post:colorgrad:blackpoint" = (0, 0, 0) + float3 "rtx:post:colorgrad:contrast" = (1, 1, 1) + float3 "rtx:post:colorgrad:gain" = (1, 1, 1) + float3 "rtx:post:colorgrad:gamma" = (1, 1, 1) + float3 "rtx:post:colorgrad:lift" = (0, 0, 0) + float3 "rtx:post:colorgrad:multiply" = (1, 1, 1) + float3 "rtx:post:colorgrad:offset" = (0, 0, 0) + float3 "rtx:post:colorgrad:whitepoint" = (1, 1, 1) + float3 "rtx:post:lensDistortion:lensFocalLengthArray" = (10, 30, 50) + float3 "rtx:post:lensFlares:anisoFlareFalloffX" = (450, 475, 500) + float3 "rtx:post:lensFlares:anisoFlareFalloffY" = (10, 10, 10) + float3 "rtx:post:lensFlares:cutoffPoint" = (2, 2, 2) + float3 "rtx:post:lensFlares:haloFlareFalloff" = (10, 10, 10) + float3 "rtx:post:lensFlares:haloFlareRadius" = (75, 75, 75) + float3 "rtx:post:lensFlares:isotropicFlareFalloff" = (50, 50, 50) + float3 "rtx:post:tonemap:whitepoint" = (1, 1, 1) + float3 "rtx:raytracing:inscattering:singleScatteringAlbedo" = (0.9, 0.9, 0.9) + float3 "rtx:raytracing:inscattering:transmittanceColor" = (0.5, 0.5, 0.5) + token "rtx:rendermode" = "PathTracing" + float3 "rtx:sceneDb:ambientLightColor" = (0.1, 0.1, 0.1) + } + } + defaultPrim = "World" + metersPerUnit = 0.009999999776482582 + timeCodesPerSecond = 24 + upAxis = "Y" +) + +def Xform "World" +{ + def DistantLight "defaultLight" ( + prepend apiSchemas = ["ShapingAPI"] + kind = "model" + ) + { + float angle = 1 + float intensity = 3000 + float shaping:cone:angle = 180 + float shaping:cone:softness + float shaping:focus + color3f shaping:focusTint + asset shaping:ies:file + float3 xformOp:rotateZYX = (315, 0, 0) + float3 xformOp:translate = (0, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX"] + } + + def Cube "Cube" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double size = 100 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-210.281097, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Scope "Looks" ( + kind = "model" + ) + { + def Material "OmniGlass" + { + color3f inputs:glass_color = (0.02953589, 0.15239275, 1) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (0, 0, 0) + float3 min = (0, 0, 0) + } + } + displayGroup = "Color" + displayName = "Glass Color" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniGlass.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniGlass" + color3f inputs:glass_color.connect = + token outputs:out + } + } + + def Material "OmniPBR" + { + color3f inputs:diffuse_tint = (0.78902954, 0.6577549, 0.49272734) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR" + color3f inputs:diffuse_tint ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Albedo" + displayName = "Color Tint" + doc = "When enabled, this color value is multiplied over the final albedo color" + hidden = false + ) + color3f inputs:diffuse_tint.connect = + token outputs:out + } + } + + def Material "OmniPBR_Opacity" + { + color3f inputs:diffuse_tint = (0.37539837, 0.7552743, 0.34417564) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_Opacity" + color3f inputs:diffuse_tint.connect = + token outputs:out + } + } + + def Material "PreviewSurface" + { + token outputs:surface.connect = + + def Shader "Shader" + { + reorder properties = ["inputs:diffuseColor", "inputs:emissiveColor", "inputs:useSpecularWorkflow", "inputs:specularColor", "inputs:metallic", "inputs:roughness", "inputs:clearcoat", "inputs:clearcoatRoughness", "inputs:opacity", "inputs:opacityThreshold", "inputs:ior", "inputs:normal", "inputs:displacement", "inputs:occlusion", "outputs:surface", "outputs:displacement"] + uniform token info:id = "UsdPreviewSurface" + float inputs:clearcoat + float inputs:clearcoatRoughness = 0.01 + color3f inputs:diffuseColor = (0.06402108, 0.19669037, 0.24472576) + float inputs:displacement + color3f inputs:emissiveColor + float inputs:ior = 1.5 + float inputs:metallic + normal3f inputs:normal = (0, 0, 1) + float inputs:occlusion = 1 + float inputs:opacity = 1 + float inputs:opacityThreshold + float inputs:roughness = 0.5 ( + customData = { + dictionary range = { + double max = 1 + double min = 0 + } + } + ) + color3f inputs:specularColor + int inputs:useSpecularWorkflow ( + customData = { + dictionary range = { + int max = 1 + int min = 0 + } + } + ) + token outputs:displacement + token outputs:surface + } + } + + def Material "OmniPBR_ClearCoat" + { + float inputs:clearcoat_reflection_roughness = 0.051 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Roughness" + ) + color3f inputs:clearcoat_tint = (0, 0.9873462, 1) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Tint" + ) + color3f inputs:diffuse_tint = (0.050134417, 0.74261606, 0.10272784) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + bool inputs:enable_clearcoat = 1 ( + customData = { + bool default = 0 + } + displayGroup = "Clearcoat" + displayName = "Enable Clearcoat Layer" + ) + float inputs:metallic_constant = 1 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Reflectivity" + displayName = "Metallic Amount" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_ClearCoat.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_ClearCoat" + float inputs:clearcoat_reflection_roughness.connect = + color3f inputs:clearcoat_tint.connect = + color3f inputs:diffuse_tint.connect = + bool inputs:enable_clearcoat.connect = + float inputs:metallic_constant.connect = + token outputs:out + } + } + + def Material "OmniPBR_ClearCoat_Opacity" + { + float inputs:clearcoat_reflection_roughness = 0.079 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Roughness" + ) + color3f inputs:clearcoat_tint = (0.9999908, 1, 0.99999) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Clearcoat" + displayName = "Clearcoat Tint" + ) + color3f inputs:diffuse_tint = (0.93670887, 0.039523557, 0.039523557) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (100000, 100000, 100000) + float3 min = (0, 0, 0) + } + } + displayGroup = "Albedo" + displayName = "Color Tint" + ) + bool inputs:enable_clearcoat = 1 ( + customData = { + bool default = 0 + } + displayGroup = "Clearcoat" + displayName = "Enable Clearcoat Layer" + ) + float inputs:metallic_constant = 1 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Reflectivity" + displayName = "Metallic Amount" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniPBR_ClearCoat_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR_ClearCoat_Opacity" + float inputs:clearcoat_reflection_roughness.connect = + color3f inputs:clearcoat_tint.connect = + color3f inputs:diffuse_tint.connect = + bool inputs:enable_clearcoat.connect = + float inputs:metallic_constant.connect = + token outputs:out + } + } + + def Material "OmniGlass_Opacity" + { + color3f inputs:glass_color = (1, 0, 0) ( + customData = { + float3 default = (1, 1, 1) + dictionary range = { + float3 max = (0, 0, 0) + float3 min = (0, 0, 0) + } + } + displayGroup = "Color" + displayName = "Glass Color" + ) + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniGlass_Opacity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniGlass_Opacity" + color3f inputs:glass_color.connect = + token outputs:out + } + } + + def Material "OmniVolumeDensity" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniVolumeDensity.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniVolumeDensity" + token outputs:out + } + } + + def Material "OmniSurface" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniSurface.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniSurface" + float inputs:coat_weight = 0.35999998 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Coat" + displayName = "Weight" + hidden = false + ) + color3f inputs:diffuse_reflection_color = (0.06820113, 0.28957528, 0.117775105) ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Base" + displayName = "Color" + hidden = false + ) + float inputs:metalness = 0 ( + customData = { + float default = 0 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Base" + displayName = "Metalness" + hidden = false + ) + float inputs:specular_reflection_roughness = 0.42 ( + customData = { + float default = 0.2 + dictionary range = { + float max = 1 + float min = 0 + } + } + displayGroup = "Specular" + displayName = "Roughness" + hidden = false + ) + token outputs:out + } + } + + def Material "OmniSurfaceLite" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniSurfaceLite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniSurfaceLite" + color3f inputs:diffuse_reflection_color = (0.23333995, 0.053487573, 0.3011583) ( + customData = { + float3 default = (1, 1, 1) + } + displayGroup = "Base" + displayName = "Color" + hidden = false + ) + token outputs:out + } + } + + def Material "OmniHair" + { + token outputs:mdl:displacement.connect = + token outputs:mdl:surface.connect = + token outputs:mdl:volume.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @OmniHair.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "OmniHair" + token outputs:out ( + renderType = "material" + ) + } + } + + def Material "PreviewSurface_monolithic" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @UsdPreviewSurfaceMonolithic.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "UsdPreviewSurfaceMonolithic" + color3f inputs:diffuseColor = (1, 1, 0) ( + customData = { + float3 default = (0.18, 0.18, 0.18) + } + hidden = false + renderType = "color" + ) + token outputs:out + } + } + + def Material "PreviewSurface_monolithic_lite" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @UsdPreviewSurfaceMonolithicLite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "UsdPreviewSurfaceMonolithicLite" + color3f inputs:diffuseColor = (0, 1, 1) + token outputs:out + } + } + + def Material "DebugWhite" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @DebugWhite.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "DebugWhite" + token outputs:out + } + } + + def Material "Default" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @Default.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "Default" + token outputs:out + } + } + + def Material "DebugWhiteEmissive" + { + token outputs:mdl:surface.connect = + + def Shader "Shader" + { + uniform token info:implementationSource = "sourceAsset" + uniform asset info:mdl:sourceAsset = @DebugWhiteEmissive.mdl@ + uniform token info:mdl:sourceAsset:subIdentifier = "DebugWhiteEmissive" + token outputs:out + } + } + } + + def Cube "Cube_01" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double size = 100 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (6.813209, 0.170179, 6.813209) + double3 xformOp:translate = (0, -61.738472, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Sphere "Sphere" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (197.062866, 0, 0) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Sphere "Sphere_02" ( + kind = "model" + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (4.04462, 0, -168.7586) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Cylinder "Cylinder" ( + kind = "model" + ) + { + uniform token axis = "Y" + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + double height = 100 + rel material:binding = ( + bindMaterialAs = "strongerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + } + + def Cone "Cone" ( + kind = "model" + ) + { + uniform token axis = "Y" + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + double height = 100 + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + double radius = 50 + custom bool refinementEnableOverride = 1 + custom int refinementLevel = 2 + double3 xformOp:rotateZYX = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (0, 0, 168.965569) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Torus" ( + kind = "model" + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 32, 33, 1, 1, 33, 34, 2, 2, 34, 35, 3, 3, 35, 36, 4, 4, 36, 37, 5, 5, 37, 38, 6, 6, 38, 39, 7, 7, 39, 40, 8, 8, 40, 41, 9, 9, 41, 42, 10, 10, 42, 43, 11, 11, 43, 44, 12, 12, 44, 45, 13, 13, 45, 46, 14, 14, 46, 47, 15, 15, 47, 48, 16, 16, 48, 49, 17, 17, 49, 50, 18, 18, 50, 51, 19, 19, 51, 52, 20, 20, 52, 53, 21, 21, 53, 54, 22, 22, 54, 55, 23, 23, 55, 56, 24, 24, 56, 57, 25, 25, 57, 58, 26, 26, 58, 59, 27, 27, 59, 60, 28, 28, 60, 61, 29, 29, 61, 62, 30, 30, 62, 63, 31, 31, 63, 32, 0, 32, 64, 65, 33, 33, 65, 66, 34, 34, 66, 67, 35, 35, 67, 68, 36, 36, 68, 69, 37, 37, 69, 70, 38, 38, 70, 71, 39, 39, 71, 72, 40, 40, 72, 73, 41, 41, 73, 74, 42, 42, 74, 75, 43, 43, 75, 76, 44, 44, 76, 77, 45, 45, 77, 78, 46, 46, 78, 79, 47, 47, 79, 80, 48, 48, 80, 81, 49, 49, 81, 82, 50, 50, 82, 83, 51, 51, 83, 84, 52, 52, 84, 85, 53, 53, 85, 86, 54, 54, 86, 87, 55, 55, 87, 88, 56, 56, 88, 89, 57, 57, 89, 90, 58, 58, 90, 91, 59, 59, 91, 92, 60, 60, 92, 93, 61, 61, 93, 94, 62, 62, 94, 95, 63, 63, 95, 64, 32, 64, 96, 97, 65, 65, 97, 98, 66, 66, 98, 99, 67, 67, 99, 100, 68, 68, 100, 101, 69, 69, 101, 102, 70, 70, 102, 103, 71, 71, 103, 104, 72, 72, 104, 105, 73, 73, 105, 106, 74, 74, 106, 107, 75, 75, 107, 108, 76, 76, 108, 109, 77, 77, 109, 110, 78, 78, 110, 111, 79, 79, 111, 112, 80, 80, 112, 113, 81, 81, 113, 114, 82, 82, 114, 115, 83, 83, 115, 116, 84, 84, 116, 117, 85, 85, 117, 118, 86, 86, 118, 119, 87, 87, 119, 120, 88, 88, 120, 121, 89, 89, 121, 122, 90, 90, 122, 123, 91, 91, 123, 124, 92, 92, 124, 125, 93, 93, 125, 126, 94, 94, 126, 127, 95, 95, 127, 96, 64, 96, 128, 129, 97, 97, 129, 130, 98, 98, 130, 131, 99, 99, 131, 132, 100, 100, 132, 133, 101, 101, 133, 134, 102, 102, 134, 135, 103, 103, 135, 136, 104, 104, 136, 137, 105, 105, 137, 138, 106, 106, 138, 139, 107, 107, 139, 140, 108, 108, 140, 141, 109, 109, 141, 142, 110, 110, 142, 143, 111, 111, 143, 144, 112, 112, 144, 145, 113, 113, 145, 146, 114, 114, 146, 147, 115, 115, 147, 148, 116, 116, 148, 149, 117, 117, 149, 150, 118, 118, 150, 151, 119, 119, 151, 152, 120, 120, 152, 153, 121, 121, 153, 154, 122, 122, 154, 155, 123, 123, 155, 156, 124, 124, 156, 157, 125, 125, 157, 158, 126, 126, 158, 159, 127, 127, 159, 128, 96, 128, 160, 161, 129, 129, 161, 162, 130, 130, 162, 163, 131, 131, 163, 164, 132, 132, 164, 165, 133, 133, 165, 166, 134, 134, 166, 167, 135, 135, 167, 168, 136, 136, 168, 169, 137, 137, 169, 170, 138, 138, 170, 171, 139, 139, 171, 172, 140, 140, 172, 173, 141, 141, 173, 174, 142, 142, 174, 175, 143, 143, 175, 176, 144, 144, 176, 177, 145, 145, 177, 178, 146, 146, 178, 179, 147, 147, 179, 180, 148, 148, 180, 181, 149, 149, 181, 182, 150, 150, 182, 183, 151, 151, 183, 184, 152, 152, 184, 185, 153, 153, 185, 186, 154, 154, 186, 187, 155, 155, 187, 188, 156, 156, 188, 189, 157, 157, 189, 190, 158, 158, 190, 191, 159, 159, 191, 160, 128, 160, 192, 193, 161, 161, 193, 194, 162, 162, 194, 195, 163, 163, 195, 196, 164, 164, 196, 197, 165, 165, 197, 198, 166, 166, 198, 199, 167, 167, 199, 200, 168, 168, 200, 201, 169, 169, 201, 202, 170, 170, 202, 203, 171, 171, 203, 204, 172, 172, 204, 205, 173, 173, 205, 206, 174, 174, 206, 207, 175, 175, 207, 208, 176, 176, 208, 209, 177, 177, 209, 210, 178, 178, 210, 211, 179, 179, 211, 212, 180, 180, 212, 213, 181, 181, 213, 214, 182, 182, 214, 215, 183, 183, 215, 216, 184, 184, 216, 217, 185, 185, 217, 218, 186, 186, 218, 219, 187, 187, 219, 220, 188, 188, 220, 221, 189, 189, 221, 222, 190, 190, 222, 223, 191, 191, 223, 192, 160, 192, 224, 225, 193, 193, 225, 226, 194, 194, 226, 227, 195, 195, 227, 228, 196, 196, 228, 229, 197, 197, 229, 230, 198, 198, 230, 231, 199, 199, 231, 232, 200, 200, 232, 233, 201, 201, 233, 234, 202, 202, 234, 235, 203, 203, 235, 236, 204, 204, 236, 237, 205, 205, 237, 238, 206, 206, 238, 239, 207, 207, 239, 240, 208, 208, 240, 241, 209, 209, 241, 242, 210, 210, 242, 243, 211, 211, 243, 244, 212, 212, 244, 245, 213, 213, 245, 246, 214, 214, 246, 247, 215, 215, 247, 248, 216, 216, 248, 249, 217, 217, 249, 250, 218, 218, 250, 251, 219, 219, 251, 252, 220, 220, 252, 253, 221, 221, 253, 254, 222, 222, 254, 255, 223, 223, 255, 224, 192, 224, 256, 257, 225, 225, 257, 258, 226, 226, 258, 259, 227, 227, 259, 260, 228, 228, 260, 261, 229, 229, 261, 262, 230, 230, 262, 263, 231, 231, 263, 264, 232, 232, 264, 265, 233, 233, 265, 266, 234, 234, 266, 267, 235, 235, 267, 268, 236, 236, 268, 269, 237, 237, 269, 270, 238, 238, 270, 271, 239, 239, 271, 272, 240, 240, 272, 273, 241, 241, 273, 274, 242, 242, 274, 275, 243, 243, 275, 276, 244, 244, 276, 277, 245, 245, 277, 278, 246, 246, 278, 279, 247, 247, 279, 280, 248, 248, 280, 281, 249, 249, 281, 282, 250, 250, 282, 283, 251, 251, 283, 284, 252, 252, 284, 285, 253, 253, 285, 286, 254, 254, 286, 287, 255, 255, 287, 256, 224, 256, 288, 289, 257, 257, 289, 290, 258, 258, 290, 291, 259, 259, 291, 292, 260, 260, 292, 293, 261, 261, 293, 294, 262, 262, 294, 295, 263, 263, 295, 296, 264, 264, 296, 297, 265, 265, 297, 298, 266, 266, 298, 299, 267, 267, 299, 300, 268, 268, 300, 301, 269, 269, 301, 302, 270, 270, 302, 303, 271, 271, 303, 304, 272, 272, 304, 305, 273, 273, 305, 306, 274, 274, 306, 307, 275, 275, 307, 308, 276, 276, 308, 309, 277, 277, 309, 310, 278, 278, 310, 311, 279, 279, 311, 312, 280, 280, 312, 313, 281, 281, 313, 314, 282, 282, 314, 315, 283, 283, 315, 316, 284, 284, 316, 317, 285, 285, 317, 318, 286, 286, 318, 319, 287, 287, 319, 288, 256, 288, 320, 321, 289, 289, 321, 322, 290, 290, 322, 323, 291, 291, 323, 324, 292, 292, 324, 325, 293, 293, 325, 326, 294, 294, 326, 327, 295, 295, 327, 328, 296, 296, 328, 329, 297, 297, 329, 330, 298, 298, 330, 331, 299, 299, 331, 332, 300, 300, 332, 333, 301, 301, 333, 334, 302, 302, 334, 335, 303, 303, 335, 336, 304, 304, 336, 337, 305, 305, 337, 338, 306, 306, 338, 339, 307, 307, 339, 340, 308, 308, 340, 341, 309, 309, 341, 342, 310, 310, 342, 343, 311, 311, 343, 344, 312, 312, 344, 345, 313, 313, 345, 346, 314, 314, 346, 347, 315, 315, 347, 348, 316, 316, 348, 349, 317, 317, 349, 350, 318, 318, 350, 351, 319, 319, 351, 320, 288, 320, 352, 353, 321, 321, 353, 354, 322, 322, 354, 355, 323, 323, 355, 356, 324, 324, 356, 357, 325, 325, 357, 358, 326, 326, 358, 359, 327, 327, 359, 360, 328, 328, 360, 361, 329, 329, 361, 362, 330, 330, 362, 363, 331, 331, 363, 364, 332, 332, 364, 365, 333, 333, 365, 366, 334, 334, 366, 367, 335, 335, 367, 368, 336, 336, 368, 369, 337, 337, 369, 370, 338, 338, 370, 371, 339, 339, 371, 372, 340, 340, 372, 373, 341, 341, 373, 374, 342, 342, 374, 375, 343, 343, 375, 376, 344, 344, 376, 377, 345, 345, 377, 378, 346, 346, 378, 379, 347, 347, 379, 380, 348, 348, 380, 381, 349, 349, 381, 382, 350, 350, 382, 383, 351, 351, 383, 352, 320, 352, 384, 385, 353, 353, 385, 386, 354, 354, 386, 387, 355, 355, 387, 388, 356, 356, 388, 389, 357, 357, 389, 390, 358, 358, 390, 391, 359, 359, 391, 392, 360, 360, 392, 393, 361, 361, 393, 394, 362, 362, 394, 395, 363, 363, 395, 396, 364, 364, 396, 397, 365, 365, 397, 398, 366, 366, 398, 399, 367, 367, 399, 400, 368, 368, 400, 401, 369, 369, 401, 402, 370, 370, 402, 403, 371, 371, 403, 404, 372, 372, 404, 405, 373, 373, 405, 406, 374, 374, 406, 407, 375, 375, 407, 408, 376, 376, 408, 409, 377, 377, 409, 410, 378, 378, 410, 411, 379, 379, 411, 412, 380, 380, 412, 413, 381, 381, 413, 414, 382, 382, 414, 415, 383, 383, 415, 384, 352, 384, 416, 417, 385, 385, 417, 418, 386, 386, 418, 419, 387, 387, 419, 420, 388, 388, 420, 421, 389, 389, 421, 422, 390, 390, 422, 423, 391, 391, 423, 424, 392, 392, 424, 425, 393, 393, 425, 426, 394, 394, 426, 427, 395, 395, 427, 428, 396, 396, 428, 429, 397, 397, 429, 430, 398, 398, 430, 431, 399, 399, 431, 432, 400, 400, 432, 433, 401, 401, 433, 434, 402, 402, 434, 435, 403, 403, 435, 436, 404, 404, 436, 437, 405, 405, 437, 438, 406, 406, 438, 439, 407, 407, 439, 440, 408, 408, 440, 441, 409, 409, 441, 442, 410, 410, 442, 443, 411, 411, 443, 444, 412, 412, 444, 445, 413, 413, 445, 446, 414, 414, 446, 447, 415, 415, 447, 416, 384, 416, 448, 449, 417, 417, 449, 450, 418, 418, 450, 451, 419, 419, 451, 452, 420, 420, 452, 453, 421, 421, 453, 454, 422, 422, 454, 455, 423, 423, 455, 456, 424, 424, 456, 457, 425, 425, 457, 458, 426, 426, 458, 459, 427, 427, 459, 460, 428, 428, 460, 461, 429, 429, 461, 462, 430, 430, 462, 463, 431, 431, 463, 464, 432, 432, 464, 465, 433, 433, 465, 466, 434, 434, 466, 467, 435, 435, 467, 468, 436, 436, 468, 469, 437, 437, 469, 470, 438, 438, 470, 471, 439, 439, 471, 472, 440, 440, 472, 473, 441, 441, 473, 474, 442, 442, 474, 475, 443, 443, 475, 476, 444, 444, 476, 477, 445, 445, 477, 478, 446, 446, 478, 479, 447, 447, 479, 448, 416, 448, 480, 481, 449, 449, 481, 482, 450, 450, 482, 483, 451, 451, 483, 484, 452, 452, 484, 485, 453, 453, 485, 486, 454, 454, 486, 487, 455, 455, 487, 488, 456, 456, 488, 489, 457, 457, 489, 490, 458, 458, 490, 491, 459, 459, 491, 492, 460, 460, 492, 493, 461, 461, 493, 494, 462, 462, 494, 495, 463, 463, 495, 496, 464, 464, 496, 497, 465, 465, 497, 498, 466, 466, 498, 499, 467, 467, 499, 500, 468, 468, 500, 501, 469, 469, 501, 502, 470, 470, 502, 503, 471, 471, 503, 504, 472, 472, 504, 505, 473, 473, 505, 506, 474, 474, 506, 507, 475, 475, 507, 508, 476, 476, 508, 509, 477, 477, 509, 510, 478, 478, 510, 511, 479, 479, 511, 480, 448, 480, 512, 513, 481, 481, 513, 514, 482, 482, 514, 515, 483, 483, 515, 516, 484, 484, 516, 517, 485, 485, 517, 518, 486, 486, 518, 519, 487, 487, 519, 520, 488, 488, 520, 521, 489, 489, 521, 522, 490, 490, 522, 523, 491, 491, 523, 524, 492, 492, 524, 525, 493, 493, 525, 526, 494, 494, 526, 527, 495, 495, 527, 528, 496, 496, 528, 529, 497, 497, 529, 530, 498, 498, 530, 531, 499, 499, 531, 532, 500, 500, 532, 533, 501, 501, 533, 534, 502, 502, 534, 535, 503, 503, 535, 536, 504, 504, 536, 537, 505, 505, 537, 538, 506, 506, 538, 539, 507, 507, 539, 540, 508, 508, 540, 541, 509, 509, 541, 542, 510, 510, 542, 543, 511, 511, 543, 512, 480, 512, 544, 545, 513, 513, 545, 546, 514, 514, 546, 547, 515, 515, 547, 548, 516, 516, 548, 549, 517, 517, 549, 550, 518, 518, 550, 551, 519, 519, 551, 552, 520, 520, 552, 553, 521, 521, 553, 554, 522, 522, 554, 555, 523, 523, 555, 556, 524, 524, 556, 557, 525, 525, 557, 558, 526, 526, 558, 559, 527, 527, 559, 560, 528, 528, 560, 561, 529, 529, 561, 562, 530, 530, 562, 563, 531, 531, 563, 564, 532, 532, 564, 565, 533, 533, 565, 566, 534, 534, 566, 567, 535, 535, 567, 568, 536, 536, 568, 569, 537, 537, 569, 570, 538, 538, 570, 571, 539, 539, 571, 572, 540, 540, 572, 573, 541, 541, 573, 574, 542, 542, 574, 575, 543, 543, 575, 544, 512, 544, 576, 577, 545, 545, 577, 578, 546, 546, 578, 579, 547, 547, 579, 580, 548, 548, 580, 581, 549, 549, 581, 582, 550, 550, 582, 583, 551, 551, 583, 584, 552, 552, 584, 585, 553, 553, 585, 586, 554, 554, 586, 587, 555, 555, 587, 588, 556, 556, 588, 589, 557, 557, 589, 590, 558, 558, 590, 591, 559, 559, 591, 592, 560, 560, 592, 593, 561, 561, 593, 594, 562, 562, 594, 595, 563, 563, 595, 596, 564, 564, 596, 597, 565, 565, 597, 598, 566, 566, 598, 599, 567, 567, 599, 600, 568, 568, 600, 601, 569, 569, 601, 602, 570, 570, 602, 603, 571, 571, 603, 604, 572, 572, 604, 605, 573, 573, 605, 606, 574, 574, 606, 607, 575, 575, 607, 576, 544, 576, 608, 609, 577, 577, 609, 610, 578, 578, 610, 611, 579, 579, 611, 612, 580, 580, 612, 613, 581, 581, 613, 614, 582, 582, 614, 615, 583, 583, 615, 616, 584, 584, 616, 617, 585, 585, 617, 618, 586, 586, 618, 619, 587, 587, 619, 620, 588, 588, 620, 621, 589, 589, 621, 622, 590, 590, 622, 623, 591, 591, 623, 624, 592, 592, 624, 625, 593, 593, 625, 626, 594, 594, 626, 627, 595, 595, 627, 628, 596, 596, 628, 629, 597, 597, 629, 630, 598, 598, 630, 631, 599, 599, 631, 632, 600, 600, 632, 633, 601, 601, 633, 634, 602, 602, 634, 635, 603, 603, 635, 636, 604, 604, 636, 637, 605, 605, 637, 638, 606, 606, 638, 639, 607, 607, 639, 608, 576, 608, 640, 641, 609, 609, 641, 642, 610, 610, 642, 643, 611, 611, 643, 644, 612, 612, 644, 645, 613, 613, 645, 646, 614, 614, 646, 647, 615, 615, 647, 648, 616, 616, 648, 649, 617, 617, 649, 650, 618, 618, 650, 651, 619, 619, 651, 652, 620, 620, 652, 653, 621, 621, 653, 654, 622, 622, 654, 655, 623, 623, 655, 656, 624, 624, 656, 657, 625, 625, 657, 658, 626, 626, 658, 659, 627, 627, 659, 660, 628, 628, 660, 661, 629, 629, 661, 662, 630, 630, 662, 663, 631, 631, 663, 664, 632, 632, 664, 665, 633, 633, 665, 666, 634, 634, 666, 667, 635, 635, 667, 668, 636, 636, 668, 669, 637, 637, 669, 670, 638, 638, 670, 671, 639, 639, 671, 640, 608, 640, 672, 673, 641, 641, 673, 674, 642, 642, 674, 675, 643, 643, 675, 676, 644, 644, 676, 677, 645, 645, 677, 678, 646, 646, 678, 679, 647, 647, 679, 680, 648, 648, 680, 681, 649, 649, 681, 682, 650, 650, 682, 683, 651, 651, 683, 684, 652, 652, 684, 685, 653, 653, 685, 686, 654, 654, 686, 687, 655, 655, 687, 688, 656, 656, 688, 689, 657, 657, 689, 690, 658, 658, 690, 691, 659, 659, 691, 692, 660, 660, 692, 693, 661, 661, 693, 694, 662, 662, 694, 695, 663, 663, 695, 696, 664, 664, 696, 697, 665, 665, 697, 698, 666, 666, 698, 699, 667, 667, 699, 700, 668, 668, 700, 701, 669, 669, 701, 702, 670, 670, 702, 703, 671, 671, 703, 672, 640, 672, 704, 705, 673, 673, 705, 706, 674, 674, 706, 707, 675, 675, 707, 708, 676, 676, 708, 709, 677, 677, 709, 710, 678, 678, 710, 711, 679, 679, 711, 712, 680, 680, 712, 713, 681, 681, 713, 714, 682, 682, 714, 715, 683, 683, 715, 716, 684, 684, 716, 717, 685, 685, 717, 718, 686, 686, 718, 719, 687, 687, 719, 720, 688, 688, 720, 721, 689, 689, 721, 722, 690, 690, 722, 723, 691, 691, 723, 724, 692, 692, 724, 725, 693, 693, 725, 726, 694, 694, 726, 727, 695, 695, 727, 728, 696, 696, 728, 729, 697, 697, 729, 730, 698, 698, 730, 731, 699, 699, 731, 732, 700, 700, 732, 733, 701, 701, 733, 734, 702, 702, 734, 735, 703, 703, 735, 704, 672, 704, 736, 737, 705, 705, 737, 738, 706, 706, 738, 739, 707, 707, 739, 740, 708, 708, 740, 741, 709, 709, 741, 742, 710, 710, 742, 743, 711, 711, 743, 744, 712, 712, 744, 745, 713, 713, 745, 746, 714, 714, 746, 747, 715, 715, 747, 748, 716, 716, 748, 749, 717, 717, 749, 750, 718, 718, 750, 751, 719, 719, 751, 752, 720, 720, 752, 753, 721, 721, 753, 754, 722, 722, 754, 755, 723, 723, 755, 756, 724, 724, 756, 757, 725, 725, 757, 758, 726, 726, 758, 759, 727, 727, 759, 760, 728, 728, 760, 761, 729, 729, 761, 762, 730, 730, 762, 763, 731, 731, 763, 764, 732, 732, 764, 765, 733, 733, 765, 766, 734, 734, 766, 767, 735, 735, 767, 736, 704, 736, 768, 769, 737, 737, 769, 770, 738, 738, 770, 771, 739, 739, 771, 772, 740, 740, 772, 773, 741, 741, 773, 774, 742, 742, 774, 775, 743, 743, 775, 776, 744, 744, 776, 777, 745, 745, 777, 778, 746, 746, 778, 779, 747, 747, 779, 780, 748, 748, 780, 781, 749, 749, 781, 782, 750, 750, 782, 783, 751, 751, 783, 784, 752, 752, 784, 785, 753, 753, 785, 786, 754, 754, 786, 787, 755, 755, 787, 788, 756, 756, 788, 789, 757, 757, 789, 790, 758, 758, 790, 791, 759, 759, 791, 792, 760, 760, 792, 793, 761, 761, 793, 794, 762, 762, 794, 795, 763, 763, 795, 796, 764, 764, 796, 797, 765, 765, 797, 798, 766, 766, 798, 799, 767, 767, 799, 768, 736, 768, 800, 801, 769, 769, 801, 802, 770, 770, 802, 803, 771, 771, 803, 804, 772, 772, 804, 805, 773, 773, 805, 806, 774, 774, 806, 807, 775, 775, 807, 808, 776, 776, 808, 809, 777, 777, 809, 810, 778, 778, 810, 811, 779, 779, 811, 812, 780, 780, 812, 813, 781, 781, 813, 814, 782, 782, 814, 815, 783, 783, 815, 816, 784, 784, 816, 817, 785, 785, 817, 818, 786, 786, 818, 819, 787, 787, 819, 820, 788, 788, 820, 821, 789, 789, 821, 822, 790, 790, 822, 823, 791, 791, 823, 824, 792, 792, 824, 825, 793, 793, 825, 826, 794, 794, 826, 827, 795, 795, 827, 828, 796, 796, 828, 829, 797, 797, 829, 830, 798, 798, 830, 831, 799, 799, 831, 800, 768, 800, 832, 833, 801, 801, 833, 834, 802, 802, 834, 835, 803, 803, 835, 836, 804, 804, 836, 837, 805, 805, 837, 838, 806, 806, 838, 839, 807, 807, 839, 840, 808, 808, 840, 841, 809, 809, 841, 842, 810, 810, 842, 843, 811, 811, 843, 844, 812, 812, 844, 845, 813, 813, 845, 846, 814, 814, 846, 847, 815, 815, 847, 848, 816, 816, 848, 849, 817, 817, 849, 850, 818, 818, 850, 851, 819, 819, 851, 852, 820, 820, 852, 853, 821, 821, 853, 854, 822, 822, 854, 855, 823, 823, 855, 856, 824, 824, 856, 857, 825, 825, 857, 858, 826, 826, 858, 859, 827, 827, 859, 860, 828, 828, 860, 861, 829, 829, 861, 862, 830, 830, 862, 863, 831, 831, 863, 832, 800, 832, 864, 865, 833, 833, 865, 866, 834, 834, 866, 867, 835, 835, 867, 868, 836, 836, 868, 869, 837, 837, 869, 870, 838, 838, 870, 871, 839, 839, 871, 872, 840, 840, 872, 873, 841, 841, 873, 874, 842, 842, 874, 875, 843, 843, 875, 876, 844, 844, 876, 877, 845, 845, 877, 878, 846, 846, 878, 879, 847, 847, 879, 880, 848, 848, 880, 881, 849, 849, 881, 882, 850, 850, 882, 883, 851, 851, 883, 884, 852, 852, 884, 885, 853, 853, 885, 886, 854, 854, 886, 887, 855, 855, 887, 888, 856, 856, 888, 889, 857, 857, 889, 890, 858, 858, 890, 891, 859, 859, 891, 892, 860, 860, 892, 893, 861, 861, 893, 894, 862, 862, 894, 895, 863, 863, 895, 864, 832, 864, 896, 897, 865, 865, 897, 898, 866, 866, 898, 899, 867, 867, 899, 900, 868, 868, 900, 901, 869, 869, 901, 902, 870, 870, 902, 903, 871, 871, 903, 904, 872, 872, 904, 905, 873, 873, 905, 906, 874, 874, 906, 907, 875, 875, 907, 908, 876, 876, 908, 909, 877, 877, 909, 910, 878, 878, 910, 911, 879, 879, 911, 912, 880, 880, 912, 913, 881, 881, 913, 914, 882, 882, 914, 915, 883, 883, 915, 916, 884, 884, 916, 917, 885, 885, 917, 918, 886, 886, 918, 919, 887, 887, 919, 920, 888, 888, 920, 921, 889, 889, 921, 922, 890, 890, 922, 923, 891, 891, 923, 924, 892, 892, 924, 925, 893, 893, 925, 926, 894, 894, 926, 927, 895, 895, 927, 896, 864, 896, 928, 929, 897, 897, 929, 930, 898, 898, 930, 931, 899, 899, 931, 932, 900, 900, 932, 933, 901, 901, 933, 934, 902, 902, 934, 935, 903, 903, 935, 936, 904, 904, 936, 937, 905, 905, 937, 938, 906, 906, 938, 939, 907, 907, 939, 940, 908, 908, 940, 941, 909, 909, 941, 942, 910, 910, 942, 943, 911, 911, 943, 944, 912, 912, 944, 945, 913, 913, 945, 946, 914, 914, 946, 947, 915, 915, 947, 948, 916, 916, 948, 949, 917, 917, 949, 950, 918, 918, 950, 951, 919, 919, 951, 952, 920, 920, 952, 953, 921, 921, 953, 954, 922, 922, 954, 955, 923, 923, 955, 956, 924, 924, 956, 957, 925, 925, 957, 958, 926, 926, 958, 959, 927, 927, 959, 928, 896, 928, 960, 961, 929, 929, 961, 962, 930, 930, 962, 963, 931, 931, 963, 964, 932, 932, 964, 965, 933, 933, 965, 966, 934, 934, 966, 967, 935, 935, 967, 968, 936, 936, 968, 969, 937, 937, 969, 970, 938, 938, 970, 971, 939, 939, 971, 972, 940, 940, 972, 973, 941, 941, 973, 974, 942, 942, 974, 975, 943, 943, 975, 976, 944, 944, 976, 977, 945, 945, 977, 978, 946, 946, 978, 979, 947, 947, 979, 980, 948, 948, 980, 981, 949, 949, 981, 982, 950, 950, 982, 983, 951, 951, 983, 984, 952, 952, 984, 985, 953, 953, 985, 986, 954, 954, 986, 987, 955, 955, 987, 988, 956, 956, 988, 989, 957, 957, 989, 990, 958, 958, 990, 991, 959, 959, 991, 960, 928, 960, 992, 993, 961, 961, 993, 994, 962, 962, 994, 995, 963, 963, 995, 996, 964, 964, 996, 997, 965, 965, 997, 998, 966, 966, 998, 999, 967, 967, 999, 1000, 968, 968, 1000, 1001, 969, 969, 1001, 1002, 970, 970, 1002, 1003, 971, 971, 1003, 1004, 972, 972, 1004, 1005, 973, 973, 1005, 1006, 974, 974, 1006, 1007, 975, 975, 1007, 1008, 976, 976, 1008, 1009, 977, 977, 1009, 1010, 978, 978, 1010, 1011, 979, 979, 1011, 1012, 980, 980, 1012, 1013, 981, 981, 1013, 1014, 982, 982, 1014, 1015, 983, 983, 1015, 1016, 984, 984, 1016, 1017, 985, 985, 1017, 1018, 986, 986, 1018, 1019, 987, 987, 1019, 1020, 988, 988, 1020, 1021, 989, 989, 1021, 1022, 990, 990, 1022, 1023, 991, 991, 1023, 992, 960, 992, 0, 1, 993, 993, 1, 2, 994, 994, 2, 3, 995, 995, 3, 4, 996, 996, 4, 5, 997, 997, 5, 6, 998, 998, 6, 7, 999, 999, 7, 8, 1000, 1000, 8, 9, 1001, 1001, 9, 10, 1002, 1002, 10, 11, 1003, 1003, 11, 12, 1004, 1004, 12, 13, 1005, 1005, 13, 14, 1006, 1006, 14, 15, 1007, 1007, 15, 16, 1008, 1008, 16, 17, 1009, 1009, 17, 18, 1010, 1010, 18, 19, 1011, 1011, 19, 20, 1012, 1012, 20, 21, 1013, 1013, 21, 22, 1014, 1014, 22, 23, 1015, 1015, 23, 24, 1016, 1016, 24, 25, 1017, 1017, 25, 26, 1018, 1018, 26, 27, 1019, 1019, 27, 28, 1020, 1020, 28, 29, 1021, 1021, 29, 30, 1022, 1022, 30, 31, 1023, 1023, 31, 0, 992] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(1, 0, 0), (0.98078525, 0.19509032, 0), (0.96193975, 0.19509032, 0.19134171), (0.98078525, 0, 0.19509032), (0.98078525, 0, 0.19509032), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.19509032, 0.37533027), (0.9238795, 0, 0.38268343), (0.9238795, 0, 0.38268343), (0.90612745, 0.19509032, 0.37533027), (0.81549317, 0.19509032, 0.5448951), (0.8314696, 0, 0.55557024), (0.8314696, 0, 0.55557024), (0.81549317, 0.19509032, 0.5448951), (0.69351995, 0.19509032, 0.69351995), (0.70710677, 0, 0.70710677), (0.70710677, 0, 0.70710677), (0.69351995, 0.19509032, 0.69351995), (0.5448951, 0.19509032, 0.81549317), (0.55557024, 0, 0.8314696), (0.55557024, 0, 0.8314696), (0.5448951, 0.19509032, 0.81549317), (0.37533027, 0.19509032, 0.90612745), (0.38268343, 0, 0.9238795), (0.38268343, 0, 0.9238795), (0.37533027, 0.19509032, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.19509032, 0, 0.98078525), (0.19509032, 0, 0.98078525), (0.19134171, 0.19509032, 0.96193975), (6.005578e-17, 0.19509032, 0.98078525), (6.123234e-17, 0, 1), (6.123234e-17, 0, 1), (6.005578e-17, 0.19509032, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.19509032, 0, 0.98078525), (-0.19509032, 0, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.37533027, 0.19509032, 0.90612745), (-0.38268343, 0, 0.9238795), (-0.38268343, 0, 0.9238795), (-0.37533027, 0.19509032, 0.90612745), (-0.5448951, 0.19509032, 0.81549317), (-0.55557024, 0, 0.8314696), (-0.55557024, 0, 0.8314696), (-0.5448951, 0.19509032, 0.81549317), (-0.69351995, 0.19509032, 0.69351995), (-0.70710677, 0, 0.70710677), (-0.70710677, 0, 0.70710677), (-0.69351995, 0.19509032, 0.69351995), (-0.81549317, 0.19509032, 0.5448951), (-0.8314696, 0, 0.55557024), (-0.8314696, 0, 0.55557024), (-0.81549317, 0.19509032, 0.5448951), (-0.90612745, 0.19509032, 0.37533027), (-0.9238795, 0, 0.38268343), (-0.9238795, 0, 0.38268343), (-0.90612745, 0.19509032, 0.37533027), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0, 0.19509032), (-0.98078525, 0, 0.19509032), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0.19509032, 1.2011156e-16), (-1, 0, 1.2246469e-16), (-1, 0, 1.2246469e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.96193975, 0.19509032, -0.19134171), (-0.98078525, 0, -0.19509032), (-0.98078525, 0, -0.19509032), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.19509032, -0.37533027), (-0.9238795, 0, -0.38268343), (-0.9238795, 0, -0.38268343), (-0.90612745, 0.19509032, -0.37533027), (-0.81549317, 0.19509032, -0.5448951), (-0.8314696, 0, -0.55557024), (-0.8314696, 0, -0.55557024), (-0.81549317, 0.19509032, -0.5448951), (-0.69351995, 0.19509032, -0.69351995), (-0.70710677, 0, -0.70710677), (-0.70710677, 0, -0.70710677), (-0.69351995, 0.19509032, -0.69351995), (-0.5448951, 0.19509032, -0.81549317), (-0.55557024, 0, -0.8314696), (-0.55557024, 0, -0.8314696), (-0.5448951, 0.19509032, -0.81549317), (-0.37533027, 0.19509032, -0.90612745), (-0.38268343, 0, -0.9238795), (-0.38268343, 0, -0.9238795), (-0.37533027, 0.19509032, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.19509032, 0, -0.98078525), (-0.19509032, 0, -0.98078525), (-0.19134171, 0.19509032, -0.96193975), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.8369701e-16, 0, -1), (-1.8369701e-16, 0, -1), (-1.8016734e-16, 0.19509032, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.19509032, 0, -0.98078525), (0.19509032, 0, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.37533027, 0.19509032, -0.90612745), (0.38268343, 0, -0.9238795), (0.38268343, 0, -0.9238795), (0.37533027, 0.19509032, -0.90612745), (0.5448951, 0.19509032, -0.81549317), (0.55557024, 0, -0.8314696), (0.55557024, 0, -0.8314696), (0.5448951, 0.19509032, -0.81549317), (0.69351995, 0.19509032, -0.69351995), (0.70710677, 0, -0.70710677), (0.70710677, 0, -0.70710677), (0.69351995, 0.19509032, -0.69351995), (0.81549317, 0.19509032, -0.5448951), (0.8314696, 0, -0.55557024), (0.8314696, 0, -0.55557024), (0.81549317, 0.19509032, -0.5448951), (0.90612745, 0.19509032, -0.37533027), (0.9238795, 0, -0.38268343), (0.9238795, 0, -0.38268343), (0.90612745, 0.19509032, -0.37533027), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0, -0.19509032), (0.98078525, 0, -0.19509032), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0.19509032, 0), (1, 0, 0), (0.98078525, 0.19509032, 0), (0.9238795, 0.38268343, 0), (0.90612745, 0.38268343, 0.18023996), (0.96193975, 0.19509032, 0.19134171), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.38268343, 0.18023996), (0.8535534, 0.38268343, 0.35355338), (0.90612745, 0.19509032, 0.37533027), (0.90612745, 0.19509032, 0.37533027), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.38268343, 0.51328), (0.81549317, 0.19509032, 0.5448951), (0.81549317, 0.19509032, 0.5448951), (0.76817775, 0.38268343, 0.51328), (0.6532815, 0.38268343, 0.6532815), (0.69351995, 0.19509032, 0.69351995), (0.69351995, 0.19509032, 0.69351995), (0.6532815, 0.38268343, 0.6532815), (0.51328, 0.38268343, 0.76817775), (0.5448951, 0.19509032, 0.81549317), (0.5448951, 0.19509032, 0.81549317), (0.51328, 0.38268343, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.37533027, 0.19509032, 0.90612745), (0.37533027, 0.19509032, 0.90612745), (0.35355338, 0.38268343, 0.8535534), (0.18023996, 0.38268343, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.19134171, 0.19509032, 0.96193975), (0.18023996, 0.38268343, 0.90612745), (5.6571306e-17, 0.38268343, 0.9238795), (6.005578e-17, 0.19509032, 0.98078525), (6.005578e-17, 0.19509032, 0.98078525), (5.6571306e-17, 0.38268343, 0.9238795), (-0.18023996, 0.38268343, 0.90612745), (-0.19134171, 0.19509032, 0.96193975), (-0.19134171, 0.19509032, 0.96193975), (-0.18023996, 0.38268343, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.37533027, 0.19509032, 0.90612745), (-0.37533027, 0.19509032, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.51328, 0.38268343, 0.76817775), (-0.5448951, 0.19509032, 0.81549317), (-0.5448951, 0.19509032, 0.81549317), (-0.51328, 0.38268343, 0.76817775), (-0.6532815, 0.38268343, 0.6532815), (-0.69351995, 0.19509032, 0.69351995), (-0.69351995, 0.19509032, 0.69351995), (-0.6532815, 0.38268343, 0.6532815), (-0.76817775, 0.38268343, 0.51328), (-0.81549317, 0.19509032, 0.5448951), (-0.81549317, 0.19509032, 0.5448951), (-0.76817775, 0.38268343, 0.51328), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.19509032, 0.37533027), (-0.90612745, 0.19509032, 0.37533027), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.38268343, 0.18023996), (-0.96193975, 0.19509032, 0.19134171), (-0.96193975, 0.19509032, 0.19134171), (-0.90612745, 0.38268343, 0.18023996), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.98078525, 0.19509032, 1.2011156e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.90612745, 0.38268343, -0.18023996), (-0.96193975, 0.19509032, -0.19134171), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.38268343, -0.18023996), (-0.8535534, 0.38268343, -0.35355338), (-0.90612745, 0.19509032, -0.37533027), (-0.90612745, 0.19509032, -0.37533027), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.38268343, -0.51328), (-0.81549317, 0.19509032, -0.5448951), (-0.81549317, 0.19509032, -0.5448951), (-0.76817775, 0.38268343, -0.51328), (-0.6532815, 0.38268343, -0.6532815), (-0.69351995, 0.19509032, -0.69351995), (-0.69351995, 0.19509032, -0.69351995), (-0.6532815, 0.38268343, -0.6532815), (-0.51328, 0.38268343, -0.76817775), (-0.5448951, 0.19509032, -0.81549317), (-0.5448951, 0.19509032, -0.81549317), (-0.51328, 0.38268343, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.37533027, 0.19509032, -0.90612745), (-0.37533027, 0.19509032, -0.90612745), (-0.35355338, 0.38268343, -0.8535534), (-0.18023996, 0.38268343, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.19134171, 0.19509032, -0.96193975), (-0.18023996, 0.38268343, -0.90612745), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.8016734e-16, 0.19509032, -0.98078525), (-1.6971392e-16, 0.38268343, -0.9238795), (0.18023996, 0.38268343, -0.90612745), (0.19134171, 0.19509032, -0.96193975), (0.19134171, 0.19509032, -0.96193975), (0.18023996, 0.38268343, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.37533027, 0.19509032, -0.90612745), (0.37533027, 0.19509032, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.51328, 0.38268343, -0.76817775), (0.5448951, 0.19509032, -0.81549317), (0.5448951, 0.19509032, -0.81549317), (0.51328, 0.38268343, -0.76817775), (0.6532815, 0.38268343, -0.6532815), (0.69351995, 0.19509032, -0.69351995), (0.69351995, 0.19509032, -0.69351995), (0.6532815, 0.38268343, -0.6532815), (0.76817775, 0.38268343, -0.51328), (0.81549317, 0.19509032, -0.5448951), (0.81549317, 0.19509032, -0.5448951), (0.76817775, 0.38268343, -0.51328), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.19509032, -0.37533027), (0.90612745, 0.19509032, -0.37533027), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.38268343, -0.18023996), (0.96193975, 0.19509032, -0.19134171), (0.96193975, 0.19509032, -0.19134171), (0.90612745, 0.38268343, -0.18023996), (0.9238795, 0.38268343, 0), (0.98078525, 0.19509032, 0), (0.9238795, 0.38268343, 0), (0.8314696, 0.55557024, 0), (0.81549317, 0.55557024, 0.16221167), (0.90612745, 0.38268343, 0.18023996), (0.90612745, 0.38268343, 0.18023996), (0.81549317, 0.55557024, 0.16221167), (0.76817775, 0.55557024, 0.31818965), (0.8535534, 0.38268343, 0.35355338), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.55557024, 0.31818965), (0.6913417, 0.55557024, 0.46193975), (0.76817775, 0.38268343, 0.51328), (0.76817775, 0.38268343, 0.51328), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.55557024, 0.5879378), (0.6532815, 0.38268343, 0.6532815), (0.6532815, 0.38268343, 0.6532815), (0.5879378, 0.55557024, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.51328, 0.38268343, 0.76817775), (0.51328, 0.38268343, 0.76817775), (0.46193975, 0.55557024, 0.6913417), (0.31818965, 0.55557024, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.35355338, 0.38268343, 0.8535534), (0.31818965, 0.55557024, 0.76817775), (0.16221167, 0.55557024, 0.81549317), (0.18023996, 0.38268343, 0.90612745), (0.18023996, 0.38268343, 0.90612745), (0.16221167, 0.55557024, 0.81549317), (5.091283e-17, 0.55557024, 0.8314696), (5.6571306e-17, 0.38268343, 0.9238795), (5.6571306e-17, 0.38268343, 0.9238795), (5.091283e-17, 0.55557024, 0.8314696), (-0.16221167, 0.55557024, 0.81549317), (-0.18023996, 0.38268343, 0.90612745), (-0.18023996, 0.38268343, 0.90612745), (-0.16221167, 0.55557024, 0.81549317), (-0.31818965, 0.55557024, 0.76817775), (-0.35355338, 0.38268343, 0.8535534), (-0.35355338, 0.38268343, 0.8535534), (-0.31818965, 0.55557024, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.51328, 0.38268343, 0.76817775), (-0.51328, 0.38268343, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.5879378, 0.55557024, 0.5879378), (-0.6532815, 0.38268343, 0.6532815), (-0.6532815, 0.38268343, 0.6532815), (-0.5879378, 0.55557024, 0.5879378), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.38268343, 0.51328), (-0.76817775, 0.38268343, 0.51328), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.55557024, 0.31818965), (-0.8535534, 0.38268343, 0.35355338), (-0.8535534, 0.38268343, 0.35355338), (-0.76817775, 0.55557024, 0.31818965), (-0.81549317, 0.55557024, 0.16221167), (-0.90612745, 0.38268343, 0.18023996), (-0.90612745, 0.38268343, 0.18023996), (-0.81549317, 0.55557024, 0.16221167), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.9238795, 0.38268343, 1.1314261e-16), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.81549317, 0.55557024, -0.16221167), (-0.90612745, 0.38268343, -0.18023996), (-0.90612745, 0.38268343, -0.18023996), (-0.81549317, 0.55557024, -0.16221167), (-0.76817775, 0.55557024, -0.31818965), (-0.8535534, 0.38268343, -0.35355338), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.55557024, -0.31818965), (-0.6913417, 0.55557024, -0.46193975), (-0.76817775, 0.38268343, -0.51328), (-0.76817775, 0.38268343, -0.51328), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.55557024, -0.5879378), (-0.6532815, 0.38268343, -0.6532815), (-0.6532815, 0.38268343, -0.6532815), (-0.5879378, 0.55557024, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.51328, 0.38268343, -0.76817775), (-0.51328, 0.38268343, -0.76817775), (-0.46193975, 0.55557024, -0.6913417), (-0.31818965, 0.55557024, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.35355338, 0.38268343, -0.8535534), (-0.31818965, 0.55557024, -0.76817775), (-0.16221167, 0.55557024, -0.81549317), (-0.18023996, 0.38268343, -0.90612745), (-0.18023996, 0.38268343, -0.90612745), (-0.16221167, 0.55557024, -0.81549317), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.6971392e-16, 0.38268343, -0.9238795), (-1.5273849e-16, 0.55557024, -0.8314696), (0.16221167, 0.55557024, -0.81549317), (0.18023996, 0.38268343, -0.90612745), (0.18023996, 0.38268343, -0.90612745), (0.16221167, 0.55557024, -0.81549317), (0.31818965, 0.55557024, -0.76817775), (0.35355338, 0.38268343, -0.8535534), (0.35355338, 0.38268343, -0.8535534), (0.31818965, 0.55557024, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.51328, 0.38268343, -0.76817775), (0.51328, 0.38268343, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.5879378, 0.55557024, -0.5879378), (0.6532815, 0.38268343, -0.6532815), (0.6532815, 0.38268343, -0.6532815), (0.5879378, 0.55557024, -0.5879378), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.38268343, -0.51328), (0.76817775, 0.38268343, -0.51328), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.55557024, -0.31818965), (0.8535534, 0.38268343, -0.35355338), (0.8535534, 0.38268343, -0.35355338), (0.76817775, 0.55557024, -0.31818965), (0.81549317, 0.55557024, -0.16221167), (0.90612745, 0.38268343, -0.18023996), (0.90612745, 0.38268343, -0.18023996), (0.81549317, 0.55557024, -0.16221167), (0.8314696, 0.55557024, 0), (0.9238795, 0.38268343, 0), (0.8314696, 0.55557024, 0), (0.70710677, 0.70710677, 0), (0.69351995, 0.70710677, 0.13794969), (0.81549317, 0.55557024, 0.16221167), (0.81549317, 0.55557024, 0.16221167), (0.69351995, 0.70710677, 0.13794969), (0.6532815, 0.70710677, 0.27059805), (0.76817775, 0.55557024, 0.31818965), (0.76817775, 0.55557024, 0.31818965), (0.6532815, 0.70710677, 0.27059805), (0.5879378, 0.70710677, 0.39284748), (0.6913417, 0.55557024, 0.46193975), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.70710677, 0.39284748), (0.5, 0.70710677, 0.5), (0.5879378, 0.55557024, 0.5879378), (0.5879378, 0.55557024, 0.5879378), (0.5, 0.70710677, 0.5), (0.39284748, 0.70710677, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.46193975, 0.55557024, 0.6913417), (0.39284748, 0.70710677, 0.5879378), (0.27059805, 0.70710677, 0.6532815), (0.31818965, 0.55557024, 0.76817775), (0.31818965, 0.55557024, 0.76817775), (0.27059805, 0.70710677, 0.6532815), (0.13794969, 0.70710677, 0.69351995), (0.16221167, 0.55557024, 0.81549317), (0.16221167, 0.55557024, 0.81549317), (0.13794969, 0.70710677, 0.69351995), (4.3297803e-17, 0.70710677, 0.70710677), (5.091283e-17, 0.55557024, 0.8314696), (5.091283e-17, 0.55557024, 0.8314696), (4.3297803e-17, 0.70710677, 0.70710677), (-0.13794969, 0.70710677, 0.69351995), (-0.16221167, 0.55557024, 0.81549317), (-0.16221167, 0.55557024, 0.81549317), (-0.13794969, 0.70710677, 0.69351995), (-0.27059805, 0.70710677, 0.6532815), (-0.31818965, 0.55557024, 0.76817775), (-0.31818965, 0.55557024, 0.76817775), (-0.27059805, 0.70710677, 0.6532815), (-0.39284748, 0.70710677, 0.5879378), (-0.46193975, 0.55557024, 0.6913417), (-0.46193975, 0.55557024, 0.6913417), (-0.39284748, 0.70710677, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.55557024, 0.5879378), (-0.5879378, 0.55557024, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.70710677, 0.39284748), (-0.6913417, 0.55557024, 0.46193975), (-0.6913417, 0.55557024, 0.46193975), (-0.5879378, 0.70710677, 0.39284748), (-0.6532815, 0.70710677, 0.27059805), (-0.76817775, 0.55557024, 0.31818965), (-0.76817775, 0.55557024, 0.31818965), (-0.6532815, 0.70710677, 0.27059805), (-0.69351995, 0.70710677, 0.13794969), (-0.81549317, 0.55557024, 0.16221167), (-0.81549317, 0.55557024, 0.16221167), (-0.69351995, 0.70710677, 0.13794969), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.8314696, 0.55557024, 1.0182566e-16), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.69351995, 0.70710677, -0.13794969), (-0.81549317, 0.55557024, -0.16221167), (-0.81549317, 0.55557024, -0.16221167), (-0.69351995, 0.70710677, -0.13794969), (-0.6532815, 0.70710677, -0.27059805), (-0.76817775, 0.55557024, -0.31818965), (-0.76817775, 0.55557024, -0.31818965), (-0.6532815, 0.70710677, -0.27059805), (-0.5879378, 0.70710677, -0.39284748), (-0.6913417, 0.55557024, -0.46193975), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.70710677, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.5879378, 0.55557024, -0.5879378), (-0.5879378, 0.55557024, -0.5879378), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.70710677, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.46193975, 0.55557024, -0.6913417), (-0.39284748, 0.70710677, -0.5879378), (-0.27059805, 0.70710677, -0.6532815), (-0.31818965, 0.55557024, -0.76817775), (-0.31818965, 0.55557024, -0.76817775), (-0.27059805, 0.70710677, -0.6532815), (-0.13794969, 0.70710677, -0.69351995), (-0.16221167, 0.55557024, -0.81549317), (-0.16221167, 0.55557024, -0.81549317), (-0.13794969, 0.70710677, -0.69351995), (-1.298934e-16, 0.70710677, -0.70710677), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.5273849e-16, 0.55557024, -0.8314696), (-1.298934e-16, 0.70710677, -0.70710677), (0.13794969, 0.70710677, -0.69351995), (0.16221167, 0.55557024, -0.81549317), (0.16221167, 0.55557024, -0.81549317), (0.13794969, 0.70710677, -0.69351995), (0.27059805, 0.70710677, -0.6532815), (0.31818965, 0.55557024, -0.76817775), (0.31818965, 0.55557024, -0.76817775), (0.27059805, 0.70710677, -0.6532815), (0.39284748, 0.70710677, -0.5879378), (0.46193975, 0.55557024, -0.6913417), (0.46193975, 0.55557024, -0.6913417), (0.39284748, 0.70710677, -0.5879378), (0.5, 0.70710677, -0.5), (0.5879378, 0.55557024, -0.5879378), (0.5879378, 0.55557024, -0.5879378), (0.5, 0.70710677, -0.5), (0.5879378, 0.70710677, -0.39284748), (0.6913417, 0.55557024, -0.46193975), (0.6913417, 0.55557024, -0.46193975), (0.5879378, 0.70710677, -0.39284748), (0.6532815, 0.70710677, -0.27059805), (0.76817775, 0.55557024, -0.31818965), (0.76817775, 0.55557024, -0.31818965), (0.6532815, 0.70710677, -0.27059805), (0.69351995, 0.70710677, -0.13794969), (0.81549317, 0.55557024, -0.16221167), (0.81549317, 0.55557024, -0.16221167), (0.69351995, 0.70710677, -0.13794969), (0.70710677, 0.70710677, 0), (0.8314696, 0.55557024, 0), (0.70710677, 0.70710677, 0), (0.55557024, 0.8314696, 0), (0.5448951, 0.8314696, 0.108386375), (0.69351995, 0.70710677, 0.13794969), (0.69351995, 0.70710677, 0.13794969), (0.5448951, 0.8314696, 0.108386375), (0.51328, 0.8314696, 0.21260752), (0.6532815, 0.70710677, 0.27059805), (0.6532815, 0.70710677, 0.27059805), (0.51328, 0.8314696, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.5879378, 0.70710677, 0.39284748), (0.5879378, 0.70710677, 0.39284748), (0.46193975, 0.8314696, 0.30865827), (0.39284748, 0.8314696, 0.39284748), (0.5, 0.70710677, 0.5), (0.5, 0.70710677, 0.5), (0.39284748, 0.8314696, 0.39284748), (0.30865827, 0.8314696, 0.46193975), (0.39284748, 0.70710677, 0.5879378), (0.39284748, 0.70710677, 0.5879378), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.8314696, 0.51328), (0.27059805, 0.70710677, 0.6532815), (0.27059805, 0.70710677, 0.6532815), (0.21260752, 0.8314696, 0.51328), (0.108386375, 0.8314696, 0.5448951), (0.13794969, 0.70710677, 0.69351995), (0.13794969, 0.70710677, 0.69351995), (0.108386375, 0.8314696, 0.5448951), (3.4018865e-17, 0.8314696, 0.55557024), (4.3297803e-17, 0.70710677, 0.70710677), (4.3297803e-17, 0.70710677, 0.70710677), (3.4018865e-17, 0.8314696, 0.55557024), (-0.108386375, 0.8314696, 0.5448951), (-0.13794969, 0.70710677, 0.69351995), (-0.13794969, 0.70710677, 0.69351995), (-0.108386375, 0.8314696, 0.5448951), (-0.21260752, 0.8314696, 0.51328), (-0.27059805, 0.70710677, 0.6532815), (-0.27059805, 0.70710677, 0.6532815), (-0.21260752, 0.8314696, 0.51328), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.70710677, 0.5879378), (-0.39284748, 0.70710677, 0.5879378), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.8314696, 0.39284748), (-0.5, 0.70710677, 0.5), (-0.5, 0.70710677, 0.5), (-0.39284748, 0.8314696, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.5879378, 0.70710677, 0.39284748), (-0.5879378, 0.70710677, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.51328, 0.8314696, 0.21260752), (-0.6532815, 0.70710677, 0.27059805), (-0.6532815, 0.70710677, 0.27059805), (-0.51328, 0.8314696, 0.21260752), (-0.5448951, 0.8314696, 0.108386375), (-0.69351995, 0.70710677, 0.13794969), (-0.69351995, 0.70710677, 0.13794969), (-0.5448951, 0.8314696, 0.108386375), (-0.55557024, 0.8314696, 6.803773e-17), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.70710677, 0.70710677, 8.6595606e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.5448951, 0.8314696, -0.108386375), (-0.69351995, 0.70710677, -0.13794969), (-0.69351995, 0.70710677, -0.13794969), (-0.5448951, 0.8314696, -0.108386375), (-0.51328, 0.8314696, -0.21260752), (-0.6532815, 0.70710677, -0.27059805), (-0.6532815, 0.70710677, -0.27059805), (-0.51328, 0.8314696, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.5879378, 0.70710677, -0.39284748), (-0.5879378, 0.70710677, -0.39284748), (-0.46193975, 0.8314696, -0.30865827), (-0.39284748, 0.8314696, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.8314696, -0.39284748), (-0.30865827, 0.8314696, -0.46193975), (-0.39284748, 0.70710677, -0.5879378), (-0.39284748, 0.70710677, -0.5879378), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.8314696, -0.51328), (-0.27059805, 0.70710677, -0.6532815), (-0.27059805, 0.70710677, -0.6532815), (-0.21260752, 0.8314696, -0.51328), (-0.108386375, 0.8314696, -0.5448951), (-0.13794969, 0.70710677, -0.69351995), (-0.13794969, 0.70710677, -0.69351995), (-0.108386375, 0.8314696, -0.5448951), (-1.020566e-16, 0.8314696, -0.55557024), (-1.298934e-16, 0.70710677, -0.70710677), (-1.298934e-16, 0.70710677, -0.70710677), (-1.020566e-16, 0.8314696, -0.55557024), (0.108386375, 0.8314696, -0.5448951), (0.13794969, 0.70710677, -0.69351995), (0.13794969, 0.70710677, -0.69351995), (0.108386375, 0.8314696, -0.5448951), (0.21260752, 0.8314696, -0.51328), (0.27059805, 0.70710677, -0.6532815), (0.27059805, 0.70710677, -0.6532815), (0.21260752, 0.8314696, -0.51328), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.70710677, -0.5879378), (0.39284748, 0.70710677, -0.5879378), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.8314696, -0.39284748), (0.5, 0.70710677, -0.5), (0.5, 0.70710677, -0.5), (0.39284748, 0.8314696, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.5879378, 0.70710677, -0.39284748), (0.5879378, 0.70710677, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.51328, 0.8314696, -0.21260752), (0.6532815, 0.70710677, -0.27059805), (0.6532815, 0.70710677, -0.27059805), (0.51328, 0.8314696, -0.21260752), (0.5448951, 0.8314696, -0.108386375), (0.69351995, 0.70710677, -0.13794969), (0.69351995, 0.70710677, -0.13794969), (0.5448951, 0.8314696, -0.108386375), (0.55557024, 0.8314696, 0), (0.70710677, 0.70710677, 0), (0.55557024, 0.8314696, 0), (0.38268343, 0.9238795, 0), (0.37533027, 0.9238795, 0.074657835), (0.5448951, 0.8314696, 0.108386375), (0.5448951, 0.8314696, 0.108386375), (0.37533027, 0.9238795, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.51328, 0.8314696, 0.21260752), (0.51328, 0.8314696, 0.21260752), (0.35355338, 0.9238795, 0.14644662), (0.31818965, 0.9238795, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.46193975, 0.8314696, 0.30865827), (0.31818965, 0.9238795, 0.21260752), (0.27059805, 0.9238795, 0.27059805), (0.39284748, 0.8314696, 0.39284748), (0.39284748, 0.8314696, 0.39284748), (0.27059805, 0.9238795, 0.27059805), (0.21260752, 0.9238795, 0.31818965), (0.30865827, 0.8314696, 0.46193975), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.9238795, 0.31818965), (0.14644662, 0.9238795, 0.35355338), (0.21260752, 0.8314696, 0.51328), (0.21260752, 0.8314696, 0.51328), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.9238795, 0.37533027), (0.108386375, 0.8314696, 0.5448951), (0.108386375, 0.8314696, 0.5448951), (0.074657835, 0.9238795, 0.37533027), (2.3432602e-17, 0.9238795, 0.38268343), (3.4018865e-17, 0.8314696, 0.55557024), (3.4018865e-17, 0.8314696, 0.55557024), (2.3432602e-17, 0.9238795, 0.38268343), (-0.074657835, 0.9238795, 0.37533027), (-0.108386375, 0.8314696, 0.5448951), (-0.108386375, 0.8314696, 0.5448951), (-0.074657835, 0.9238795, 0.37533027), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.8314696, 0.51328), (-0.21260752, 0.8314696, 0.51328), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.9238795, 0.31818965), (-0.30865827, 0.8314696, 0.46193975), (-0.30865827, 0.8314696, 0.46193975), (-0.21260752, 0.9238795, 0.31818965), (-0.27059805, 0.9238795, 0.27059805), (-0.39284748, 0.8314696, 0.39284748), (-0.39284748, 0.8314696, 0.39284748), (-0.27059805, 0.9238795, 0.27059805), (-0.31818965, 0.9238795, 0.21260752), (-0.46193975, 0.8314696, 0.30865827), (-0.46193975, 0.8314696, 0.30865827), (-0.31818965, 0.9238795, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.51328, 0.8314696, 0.21260752), (-0.51328, 0.8314696, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.37533027, 0.9238795, 0.074657835), (-0.5448951, 0.8314696, 0.108386375), (-0.5448951, 0.8314696, 0.108386375), (-0.37533027, 0.9238795, 0.074657835), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.55557024, 0.8314696, 6.803773e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.37533027, 0.9238795, -0.074657835), (-0.5448951, 0.8314696, -0.108386375), (-0.5448951, 0.8314696, -0.108386375), (-0.37533027, 0.9238795, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.51328, 0.8314696, -0.21260752), (-0.51328, 0.8314696, -0.21260752), (-0.35355338, 0.9238795, -0.14644662), (-0.31818965, 0.9238795, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.46193975, 0.8314696, -0.30865827), (-0.31818965, 0.9238795, -0.21260752), (-0.27059805, 0.9238795, -0.27059805), (-0.39284748, 0.8314696, -0.39284748), (-0.39284748, 0.8314696, -0.39284748), (-0.27059805, 0.9238795, -0.27059805), (-0.21260752, 0.9238795, -0.31818965), (-0.30865827, 0.8314696, -0.46193975), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.9238795, -0.31818965), (-0.14644662, 0.9238795, -0.35355338), (-0.21260752, 0.8314696, -0.51328), (-0.21260752, 0.8314696, -0.51328), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.9238795, -0.37533027), (-0.108386375, 0.8314696, -0.5448951), (-0.108386375, 0.8314696, -0.5448951), (-0.074657835, 0.9238795, -0.37533027), (-7.0297805e-17, 0.9238795, -0.38268343), (-1.020566e-16, 0.8314696, -0.55557024), (-1.020566e-16, 0.8314696, -0.55557024), (-7.0297805e-17, 0.9238795, -0.38268343), (0.074657835, 0.9238795, -0.37533027), (0.108386375, 0.8314696, -0.5448951), (0.108386375, 0.8314696, -0.5448951), (0.074657835, 0.9238795, -0.37533027), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.8314696, -0.51328), (0.21260752, 0.8314696, -0.51328), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.9238795, -0.31818965), (0.30865827, 0.8314696, -0.46193975), (0.30865827, 0.8314696, -0.46193975), (0.21260752, 0.9238795, -0.31818965), (0.27059805, 0.9238795, -0.27059805), (0.39284748, 0.8314696, -0.39284748), (0.39284748, 0.8314696, -0.39284748), (0.27059805, 0.9238795, -0.27059805), (0.31818965, 0.9238795, -0.21260752), (0.46193975, 0.8314696, -0.30865827), (0.46193975, 0.8314696, -0.30865827), (0.31818965, 0.9238795, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.51328, 0.8314696, -0.21260752), (0.51328, 0.8314696, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.37533027, 0.9238795, -0.074657835), (0.5448951, 0.8314696, -0.108386375), (0.5448951, 0.8314696, -0.108386375), (0.37533027, 0.9238795, -0.074657835), (0.38268343, 0.9238795, 0), (0.55557024, 0.8314696, 0), (0.38268343, 0.9238795, 0), (0.19509032, 0.98078525, 0), (0.19134171, 0.98078525, 0.038060233), (0.37533027, 0.9238795, 0.074657835), (0.37533027, 0.9238795, 0.074657835), (0.19134171, 0.98078525, 0.038060233), (0.18023996, 0.98078525, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.35355338, 0.9238795, 0.14644662), (0.18023996, 0.98078525, 0.074657835), (0.16221167, 0.98078525, 0.108386375), (0.31818965, 0.9238795, 0.21260752), (0.31818965, 0.9238795, 0.21260752), (0.16221167, 0.98078525, 0.108386375), (0.13794969, 0.98078525, 0.13794969), (0.27059805, 0.9238795, 0.27059805), (0.27059805, 0.9238795, 0.27059805), (0.13794969, 0.98078525, 0.13794969), (0.108386375, 0.98078525, 0.16221167), (0.21260752, 0.9238795, 0.31818965), (0.21260752, 0.9238795, 0.31818965), (0.108386375, 0.98078525, 0.16221167), (0.074657835, 0.98078525, 0.18023996), (0.14644662, 0.9238795, 0.35355338), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.98078525, 0.18023996), (0.038060233, 0.98078525, 0.19134171), (0.074657835, 0.9238795, 0.37533027), (0.074657835, 0.9238795, 0.37533027), (0.038060233, 0.98078525, 0.19134171), (1.1945837e-17, 0.98078525, 0.19509032), (2.3432602e-17, 0.9238795, 0.38268343), (2.3432602e-17, 0.9238795, 0.38268343), (1.1945837e-17, 0.98078525, 0.19509032), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.9238795, 0.37533027), (-0.074657835, 0.9238795, 0.37533027), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.98078525, 0.18023996), (-0.14644662, 0.9238795, 0.35355338), (-0.14644662, 0.9238795, 0.35355338), (-0.074657835, 0.98078525, 0.18023996), (-0.108386375, 0.98078525, 0.16221167), (-0.21260752, 0.9238795, 0.31818965), (-0.21260752, 0.9238795, 0.31818965), (-0.108386375, 0.98078525, 0.16221167), (-0.13794969, 0.98078525, 0.13794969), (-0.27059805, 0.9238795, 0.27059805), (-0.27059805, 0.9238795, 0.27059805), (-0.13794969, 0.98078525, 0.13794969), (-0.16221167, 0.98078525, 0.108386375), (-0.31818965, 0.9238795, 0.21260752), (-0.31818965, 0.9238795, 0.21260752), (-0.16221167, 0.98078525, 0.108386375), (-0.18023996, 0.98078525, 0.074657835), (-0.35355338, 0.9238795, 0.14644662), (-0.35355338, 0.9238795, 0.14644662), (-0.18023996, 0.98078525, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.37533027, 0.9238795, 0.074657835), (-0.37533027, 0.9238795, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.38268343, 0.9238795, 4.6865205e-17), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.19134171, 0.98078525, -0.038060233), (-0.37533027, 0.9238795, -0.074657835), (-0.37533027, 0.9238795, -0.074657835), (-0.19134171, 0.98078525, -0.038060233), (-0.18023996, 0.98078525, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.35355338, 0.9238795, -0.14644662), (-0.18023996, 0.98078525, -0.074657835), (-0.16221167, 0.98078525, -0.108386375), (-0.31818965, 0.9238795, -0.21260752), (-0.31818965, 0.9238795, -0.21260752), (-0.16221167, 0.98078525, -0.108386375), (-0.13794969, 0.98078525, -0.13794969), (-0.27059805, 0.9238795, -0.27059805), (-0.27059805, 0.9238795, -0.27059805), (-0.13794969, 0.98078525, -0.13794969), (-0.108386375, 0.98078525, -0.16221167), (-0.21260752, 0.9238795, -0.31818965), (-0.21260752, 0.9238795, -0.31818965), (-0.108386375, 0.98078525, -0.16221167), (-0.074657835, 0.98078525, -0.18023996), (-0.14644662, 0.9238795, -0.35355338), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.98078525, -0.18023996), (-0.038060233, 0.98078525, -0.19134171), (-0.074657835, 0.9238795, -0.37533027), (-0.074657835, 0.9238795, -0.37533027), (-0.038060233, 0.98078525, -0.19134171), (-3.583751e-17, 0.98078525, -0.19509032), (-7.0297805e-17, 0.9238795, -0.38268343), (-7.0297805e-17, 0.9238795, -0.38268343), (-3.583751e-17, 0.98078525, -0.19509032), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.9238795, -0.37533027), (0.074657835, 0.9238795, -0.37533027), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.98078525, -0.18023996), (0.14644662, 0.9238795, -0.35355338), (0.14644662, 0.9238795, -0.35355338), (0.074657835, 0.98078525, -0.18023996), (0.108386375, 0.98078525, -0.16221167), (0.21260752, 0.9238795, -0.31818965), (0.21260752, 0.9238795, -0.31818965), (0.108386375, 0.98078525, -0.16221167), (0.13794969, 0.98078525, -0.13794969), (0.27059805, 0.9238795, -0.27059805), (0.27059805, 0.9238795, -0.27059805), (0.13794969, 0.98078525, -0.13794969), (0.16221167, 0.98078525, -0.108386375), (0.31818965, 0.9238795, -0.21260752), (0.31818965, 0.9238795, -0.21260752), (0.16221167, 0.98078525, -0.108386375), (0.18023996, 0.98078525, -0.074657835), (0.35355338, 0.9238795, -0.14644662), (0.35355338, 0.9238795, -0.14644662), (0.18023996, 0.98078525, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.37533027, 0.9238795, -0.074657835), (0.37533027, 0.9238795, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.19509032, 0.98078525, 0), (0.38268343, 0.9238795, 0), (0.19509032, 0.98078525, 0), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, 0.038060233), (0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, 0.074657835), (0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, 0.108386375), (0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, 0.13794969), (0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, 0.16221167), (0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, 0.18023996), (0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, 0.19134171), (0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (1.1945837e-17, 0.98078525, 0.19509032), (1.1945837e-17, 0.98078525, 0.19509032), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, 0.19134171), (-0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, 0.18023996), (-0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, 0.16221167), (-0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, 0.13794969), (-0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, 0.108386375), (-0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, 0.074657835), (-0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, 0.038060233), (-0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (-0.19509032, 0.98078525, 2.3891674e-17), (-0.19509032, 0.98078525, 2.3891674e-17), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, -0.038060233), (-0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, -0.074657835), (-0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, -0.108386375), (-0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, -0.13794969), (-0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, -0.16221167), (-0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, -0.18023996), (-0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, -0.19134171), (-0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (-3.583751e-17, 0.98078525, -0.19509032), (-3.583751e-17, 0.98078525, -0.19509032), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, -0.19134171), (0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, -0.18023996), (0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, -0.16221167), (0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, -0.13794969), (0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, -0.108386375), (0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, -0.074657835), (0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, -0.038060233), (0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (0.19509032, 0.98078525, 0), (0, 1, 0), (-0.19509032, 0.98078525, 0), (-0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, -0.038060233), (-0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, -0.074657835), (-0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, -0.108386375), (-0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, -0.13794969), (-0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, -0.16221167), (-0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, -0.18023996), (-0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, -0.19134171), (-1.1945837e-17, 0.98078525, -0.19509032), (0, 1, 0), (0, 1, 0), (-1.1945837e-17, 0.98078525, -0.19509032), (0.038060233, 0.98078525, -0.19134171), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.98078525, -0.18023996), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, -0.18023996), (0.108386375, 0.98078525, -0.16221167), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, -0.16221167), (0.13794969, 0.98078525, -0.13794969), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, -0.13794969), (0.16221167, 0.98078525, -0.108386375), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, -0.108386375), (0.18023996, 0.98078525, -0.074657835), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, -0.038060233), (0.19509032, 0.98078525, -2.3891674e-17), (0, 1, 0), (0, 1, 0), (0.19509032, 0.98078525, -2.3891674e-17), (0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (0.19134171, 0.98078525, 0.038060233), (0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (0.18023996, 0.98078525, 0.074657835), (0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (0.16221167, 0.98078525, 0.108386375), (0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (0.13794969, 0.98078525, 0.13794969), (0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (0.108386375, 0.98078525, 0.16221167), (0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (0.074657835, 0.98078525, 0.18023996), (0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (0.038060233, 0.98078525, 0.19134171), (3.583751e-17, 0.98078525, 0.19509032), (0, 1, 0), (0, 1, 0), (3.583751e-17, 0.98078525, 0.19509032), (-0.038060233, 0.98078525, 0.19134171), (0, 1, 0), (0, 1, 0), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.98078525, 0.18023996), (0, 1, 0), (0, 1, 0), (-0.074657835, 0.98078525, 0.18023996), (-0.108386375, 0.98078525, 0.16221167), (0, 1, 0), (0, 1, 0), (-0.108386375, 0.98078525, 0.16221167), (-0.13794969, 0.98078525, 0.13794969), (0, 1, 0), (0, 1, 0), (-0.13794969, 0.98078525, 0.13794969), (-0.16221167, 0.98078525, 0.108386375), (0, 1, 0), (0, 1, 0), (-0.16221167, 0.98078525, 0.108386375), (-0.18023996, 0.98078525, 0.074657835), (0, 1, 0), (0, 1, 0), (-0.18023996, 0.98078525, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (0, 1, 0), (0, 1, 0), (-0.19134171, 0.98078525, 0.038060233), (-0.19509032, 0.98078525, 0), (0, 1, 0), (-0.19509032, 0.98078525, 0), (-0.38268343, 0.9238795, 0), (-0.37533027, 0.9238795, -0.074657835), (-0.19134171, 0.98078525, -0.038060233), (-0.19134171, 0.98078525, -0.038060233), (-0.37533027, 0.9238795, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.18023996, 0.98078525, -0.074657835), (-0.18023996, 0.98078525, -0.074657835), (-0.35355338, 0.9238795, -0.14644662), (-0.31818965, 0.9238795, -0.21260752), (-0.16221167, 0.98078525, -0.108386375), (-0.16221167, 0.98078525, -0.108386375), (-0.31818965, 0.9238795, -0.21260752), (-0.27059805, 0.9238795, -0.27059805), (-0.13794969, 0.98078525, -0.13794969), (-0.13794969, 0.98078525, -0.13794969), (-0.27059805, 0.9238795, -0.27059805), (-0.21260752, 0.9238795, -0.31818965), (-0.108386375, 0.98078525, -0.16221167), (-0.108386375, 0.98078525, -0.16221167), (-0.21260752, 0.9238795, -0.31818965), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.98078525, -0.18023996), (-0.074657835, 0.98078525, -0.18023996), (-0.14644662, 0.9238795, -0.35355338), (-0.074657835, 0.9238795, -0.37533027), (-0.038060233, 0.98078525, -0.19134171), (-0.038060233, 0.98078525, -0.19134171), (-0.074657835, 0.9238795, -0.37533027), (-2.3432602e-17, 0.9238795, -0.38268343), (-1.1945837e-17, 0.98078525, -0.19509032), (-1.1945837e-17, 0.98078525, -0.19509032), (-2.3432602e-17, 0.9238795, -0.38268343), (0.074657835, 0.9238795, -0.37533027), (0.038060233, 0.98078525, -0.19134171), (0.038060233, 0.98078525, -0.19134171), (0.074657835, 0.9238795, -0.37533027), (0.14644662, 0.9238795, -0.35355338), (0.074657835, 0.98078525, -0.18023996), (0.074657835, 0.98078525, -0.18023996), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.9238795, -0.31818965), (0.108386375, 0.98078525, -0.16221167), (0.108386375, 0.98078525, -0.16221167), (0.21260752, 0.9238795, -0.31818965), (0.27059805, 0.9238795, -0.27059805), (0.13794969, 0.98078525, -0.13794969), (0.13794969, 0.98078525, -0.13794969), (0.27059805, 0.9238795, -0.27059805), (0.31818965, 0.9238795, -0.21260752), (0.16221167, 0.98078525, -0.108386375), (0.16221167, 0.98078525, -0.108386375), (0.31818965, 0.9238795, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.18023996, 0.98078525, -0.074657835), (0.18023996, 0.98078525, -0.074657835), (0.35355338, 0.9238795, -0.14644662), (0.37533027, 0.9238795, -0.074657835), (0.19134171, 0.98078525, -0.038060233), (0.19134171, 0.98078525, -0.038060233), (0.37533027, 0.9238795, -0.074657835), (0.38268343, 0.9238795, -4.6865205e-17), (0.19509032, 0.98078525, -2.3891674e-17), (0.19509032, 0.98078525, -2.3891674e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.37533027, 0.9238795, 0.074657835), (0.19134171, 0.98078525, 0.038060233), (0.19134171, 0.98078525, 0.038060233), (0.37533027, 0.9238795, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.18023996, 0.98078525, 0.074657835), (0.18023996, 0.98078525, 0.074657835), (0.35355338, 0.9238795, 0.14644662), (0.31818965, 0.9238795, 0.21260752), (0.16221167, 0.98078525, 0.108386375), (0.16221167, 0.98078525, 0.108386375), (0.31818965, 0.9238795, 0.21260752), (0.27059805, 0.9238795, 0.27059805), (0.13794969, 0.98078525, 0.13794969), (0.13794969, 0.98078525, 0.13794969), (0.27059805, 0.9238795, 0.27059805), (0.21260752, 0.9238795, 0.31818965), (0.108386375, 0.98078525, 0.16221167), (0.108386375, 0.98078525, 0.16221167), (0.21260752, 0.9238795, 0.31818965), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.98078525, 0.18023996), (0.074657835, 0.98078525, 0.18023996), (0.14644662, 0.9238795, 0.35355338), (0.074657835, 0.9238795, 0.37533027), (0.038060233, 0.98078525, 0.19134171), (0.038060233, 0.98078525, 0.19134171), (0.074657835, 0.9238795, 0.37533027), (7.0297805e-17, 0.9238795, 0.38268343), (3.583751e-17, 0.98078525, 0.19509032), (3.583751e-17, 0.98078525, 0.19509032), (7.0297805e-17, 0.9238795, 0.38268343), (-0.074657835, 0.9238795, 0.37533027), (-0.038060233, 0.98078525, 0.19134171), (-0.038060233, 0.98078525, 0.19134171), (-0.074657835, 0.9238795, 0.37533027), (-0.14644662, 0.9238795, 0.35355338), (-0.074657835, 0.98078525, 0.18023996), (-0.074657835, 0.98078525, 0.18023996), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.9238795, 0.31818965), (-0.108386375, 0.98078525, 0.16221167), (-0.108386375, 0.98078525, 0.16221167), (-0.21260752, 0.9238795, 0.31818965), (-0.27059805, 0.9238795, 0.27059805), (-0.13794969, 0.98078525, 0.13794969), (-0.13794969, 0.98078525, 0.13794969), (-0.27059805, 0.9238795, 0.27059805), (-0.31818965, 0.9238795, 0.21260752), (-0.16221167, 0.98078525, 0.108386375), (-0.16221167, 0.98078525, 0.108386375), (-0.31818965, 0.9238795, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.18023996, 0.98078525, 0.074657835), (-0.18023996, 0.98078525, 0.074657835), (-0.35355338, 0.9238795, 0.14644662), (-0.37533027, 0.9238795, 0.074657835), (-0.19134171, 0.98078525, 0.038060233), (-0.19134171, 0.98078525, 0.038060233), (-0.37533027, 0.9238795, 0.074657835), (-0.38268343, 0.9238795, 0), (-0.19509032, 0.98078525, 0), (-0.38268343, 0.9238795, 0), (-0.55557024, 0.8314696, 0), (-0.5448951, 0.8314696, -0.108386375), (-0.37533027, 0.9238795, -0.074657835), (-0.37533027, 0.9238795, -0.074657835), (-0.5448951, 0.8314696, -0.108386375), (-0.51328, 0.8314696, -0.21260752), (-0.35355338, 0.9238795, -0.14644662), (-0.35355338, 0.9238795, -0.14644662), (-0.51328, 0.8314696, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.31818965, 0.9238795, -0.21260752), (-0.31818965, 0.9238795, -0.21260752), (-0.46193975, 0.8314696, -0.30865827), (-0.39284748, 0.8314696, -0.39284748), (-0.27059805, 0.9238795, -0.27059805), (-0.27059805, 0.9238795, -0.27059805), (-0.39284748, 0.8314696, -0.39284748), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.9238795, -0.31818965), (-0.21260752, 0.9238795, -0.31818965), (-0.30865827, 0.8314696, -0.46193975), (-0.21260752, 0.8314696, -0.51328), (-0.14644662, 0.9238795, -0.35355338), (-0.14644662, 0.9238795, -0.35355338), (-0.21260752, 0.8314696, -0.51328), (-0.108386375, 0.8314696, -0.5448951), (-0.074657835, 0.9238795, -0.37533027), (-0.074657835, 0.9238795, -0.37533027), (-0.108386375, 0.8314696, -0.5448951), (-3.4018865e-17, 0.8314696, -0.55557024), (-2.3432602e-17, 0.9238795, -0.38268343), (-2.3432602e-17, 0.9238795, -0.38268343), (-3.4018865e-17, 0.8314696, -0.55557024), (0.108386375, 0.8314696, -0.5448951), (0.074657835, 0.9238795, -0.37533027), (0.074657835, 0.9238795, -0.37533027), (0.108386375, 0.8314696, -0.5448951), (0.21260752, 0.8314696, -0.51328), (0.14644662, 0.9238795, -0.35355338), (0.14644662, 0.9238795, -0.35355338), (0.21260752, 0.8314696, -0.51328), (0.30865827, 0.8314696, -0.46193975), (0.21260752, 0.9238795, -0.31818965), (0.21260752, 0.9238795, -0.31818965), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.8314696, -0.39284748), (0.27059805, 0.9238795, -0.27059805), (0.27059805, 0.9238795, -0.27059805), (0.39284748, 0.8314696, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.31818965, 0.9238795, -0.21260752), (0.31818965, 0.9238795, -0.21260752), (0.46193975, 0.8314696, -0.30865827), (0.51328, 0.8314696, -0.21260752), (0.35355338, 0.9238795, -0.14644662), (0.35355338, 0.9238795, -0.14644662), (0.51328, 0.8314696, -0.21260752), (0.5448951, 0.8314696, -0.108386375), (0.37533027, 0.9238795, -0.074657835), (0.37533027, 0.9238795, -0.074657835), (0.5448951, 0.8314696, -0.108386375), (0.55557024, 0.8314696, -6.803773e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.38268343, 0.9238795, -4.6865205e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.5448951, 0.8314696, 0.108386375), (0.37533027, 0.9238795, 0.074657835), (0.37533027, 0.9238795, 0.074657835), (0.5448951, 0.8314696, 0.108386375), (0.51328, 0.8314696, 0.21260752), (0.35355338, 0.9238795, 0.14644662), (0.35355338, 0.9238795, 0.14644662), (0.51328, 0.8314696, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.31818965, 0.9238795, 0.21260752), (0.31818965, 0.9238795, 0.21260752), (0.46193975, 0.8314696, 0.30865827), (0.39284748, 0.8314696, 0.39284748), (0.27059805, 0.9238795, 0.27059805), (0.27059805, 0.9238795, 0.27059805), (0.39284748, 0.8314696, 0.39284748), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.9238795, 0.31818965), (0.21260752, 0.9238795, 0.31818965), (0.30865827, 0.8314696, 0.46193975), (0.21260752, 0.8314696, 0.51328), (0.14644662, 0.9238795, 0.35355338), (0.14644662, 0.9238795, 0.35355338), (0.21260752, 0.8314696, 0.51328), (0.108386375, 0.8314696, 0.5448951), (0.074657835, 0.9238795, 0.37533027), (0.074657835, 0.9238795, 0.37533027), (0.108386375, 0.8314696, 0.5448951), (1.020566e-16, 0.8314696, 0.55557024), (7.0297805e-17, 0.9238795, 0.38268343), (7.0297805e-17, 0.9238795, 0.38268343), (1.020566e-16, 0.8314696, 0.55557024), (-0.108386375, 0.8314696, 0.5448951), (-0.074657835, 0.9238795, 0.37533027), (-0.074657835, 0.9238795, 0.37533027), (-0.108386375, 0.8314696, 0.5448951), (-0.21260752, 0.8314696, 0.51328), (-0.14644662, 0.9238795, 0.35355338), (-0.14644662, 0.9238795, 0.35355338), (-0.21260752, 0.8314696, 0.51328), (-0.30865827, 0.8314696, 0.46193975), (-0.21260752, 0.9238795, 0.31818965), (-0.21260752, 0.9238795, 0.31818965), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.8314696, 0.39284748), (-0.27059805, 0.9238795, 0.27059805), (-0.27059805, 0.9238795, 0.27059805), (-0.39284748, 0.8314696, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.31818965, 0.9238795, 0.21260752), (-0.31818965, 0.9238795, 0.21260752), (-0.46193975, 0.8314696, 0.30865827), (-0.51328, 0.8314696, 0.21260752), (-0.35355338, 0.9238795, 0.14644662), (-0.35355338, 0.9238795, 0.14644662), (-0.51328, 0.8314696, 0.21260752), (-0.5448951, 0.8314696, 0.108386375), (-0.37533027, 0.9238795, 0.074657835), (-0.37533027, 0.9238795, 0.074657835), (-0.5448951, 0.8314696, 0.108386375), (-0.55557024, 0.8314696, 0), (-0.38268343, 0.9238795, 0), (-0.55557024, 0.8314696, 0), (-0.70710677, 0.70710677, 0), (-0.69351995, 0.70710677, -0.13794969), (-0.5448951, 0.8314696, -0.108386375), (-0.5448951, 0.8314696, -0.108386375), (-0.69351995, 0.70710677, -0.13794969), (-0.6532815, 0.70710677, -0.27059805), (-0.51328, 0.8314696, -0.21260752), (-0.51328, 0.8314696, -0.21260752), (-0.6532815, 0.70710677, -0.27059805), (-0.5879378, 0.70710677, -0.39284748), (-0.46193975, 0.8314696, -0.30865827), (-0.46193975, 0.8314696, -0.30865827), (-0.5879378, 0.70710677, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.8314696, -0.39284748), (-0.39284748, 0.8314696, -0.39284748), (-0.5, 0.70710677, -0.5), (-0.39284748, 0.70710677, -0.5879378), (-0.30865827, 0.8314696, -0.46193975), (-0.30865827, 0.8314696, -0.46193975), (-0.39284748, 0.70710677, -0.5879378), (-0.27059805, 0.70710677, -0.6532815), (-0.21260752, 0.8314696, -0.51328), (-0.21260752, 0.8314696, -0.51328), (-0.27059805, 0.70710677, -0.6532815), (-0.13794969, 0.70710677, -0.69351995), (-0.108386375, 0.8314696, -0.5448951), (-0.108386375, 0.8314696, -0.5448951), (-0.13794969, 0.70710677, -0.69351995), (-4.3297803e-17, 0.70710677, -0.70710677), (-3.4018865e-17, 0.8314696, -0.55557024), (-3.4018865e-17, 0.8314696, -0.55557024), (-4.3297803e-17, 0.70710677, -0.70710677), (0.13794969, 0.70710677, -0.69351995), (0.108386375, 0.8314696, -0.5448951), (0.108386375, 0.8314696, -0.5448951), (0.13794969, 0.70710677, -0.69351995), (0.27059805, 0.70710677, -0.6532815), (0.21260752, 0.8314696, -0.51328), (0.21260752, 0.8314696, -0.51328), (0.27059805, 0.70710677, -0.6532815), (0.39284748, 0.70710677, -0.5879378), (0.30865827, 0.8314696, -0.46193975), (0.30865827, 0.8314696, -0.46193975), (0.39284748, 0.70710677, -0.5879378), (0.5, 0.70710677, -0.5), (0.39284748, 0.8314696, -0.39284748), (0.39284748, 0.8314696, -0.39284748), (0.5, 0.70710677, -0.5), (0.5879378, 0.70710677, -0.39284748), (0.46193975, 0.8314696, -0.30865827), (0.46193975, 0.8314696, -0.30865827), (0.5879378, 0.70710677, -0.39284748), (0.6532815, 0.70710677, -0.27059805), (0.51328, 0.8314696, -0.21260752), (0.51328, 0.8314696, -0.21260752), (0.6532815, 0.70710677, -0.27059805), (0.69351995, 0.70710677, -0.13794969), (0.5448951, 0.8314696, -0.108386375), (0.5448951, 0.8314696, -0.108386375), (0.69351995, 0.70710677, -0.13794969), (0.70710677, 0.70710677, -8.6595606e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.55557024, 0.8314696, -6.803773e-17), (0.70710677, 0.70710677, -8.6595606e-17), (0.69351995, 0.70710677, 0.13794969), (0.5448951, 0.8314696, 0.108386375), (0.5448951, 0.8314696, 0.108386375), (0.69351995, 0.70710677, 0.13794969), (0.6532815, 0.70710677, 0.27059805), (0.51328, 0.8314696, 0.21260752), (0.51328, 0.8314696, 0.21260752), (0.6532815, 0.70710677, 0.27059805), (0.5879378, 0.70710677, 0.39284748), (0.46193975, 0.8314696, 0.30865827), (0.46193975, 0.8314696, 0.30865827), (0.5879378, 0.70710677, 0.39284748), (0.5, 0.70710677, 0.5), (0.39284748, 0.8314696, 0.39284748), (0.39284748, 0.8314696, 0.39284748), (0.5, 0.70710677, 0.5), (0.39284748, 0.70710677, 0.5879378), (0.30865827, 0.8314696, 0.46193975), (0.30865827, 0.8314696, 0.46193975), (0.39284748, 0.70710677, 0.5879378), (0.27059805, 0.70710677, 0.6532815), (0.21260752, 0.8314696, 0.51328), (0.21260752, 0.8314696, 0.51328), (0.27059805, 0.70710677, 0.6532815), (0.13794969, 0.70710677, 0.69351995), (0.108386375, 0.8314696, 0.5448951), (0.108386375, 0.8314696, 0.5448951), (0.13794969, 0.70710677, 0.69351995), (1.298934e-16, 0.70710677, 0.70710677), (1.020566e-16, 0.8314696, 0.55557024), (1.020566e-16, 0.8314696, 0.55557024), (1.298934e-16, 0.70710677, 0.70710677), (-0.13794969, 0.70710677, 0.69351995), (-0.108386375, 0.8314696, 0.5448951), (-0.108386375, 0.8314696, 0.5448951), (-0.13794969, 0.70710677, 0.69351995), (-0.27059805, 0.70710677, 0.6532815), (-0.21260752, 0.8314696, 0.51328), (-0.21260752, 0.8314696, 0.51328), (-0.27059805, 0.70710677, 0.6532815), (-0.39284748, 0.70710677, 0.5879378), (-0.30865827, 0.8314696, 0.46193975), (-0.30865827, 0.8314696, 0.46193975), (-0.39284748, 0.70710677, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.39284748, 0.8314696, 0.39284748), (-0.39284748, 0.8314696, 0.39284748), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.70710677, 0.39284748), (-0.46193975, 0.8314696, 0.30865827), (-0.46193975, 0.8314696, 0.30865827), (-0.5879378, 0.70710677, 0.39284748), (-0.6532815, 0.70710677, 0.27059805), (-0.51328, 0.8314696, 0.21260752), (-0.51328, 0.8314696, 0.21260752), (-0.6532815, 0.70710677, 0.27059805), (-0.69351995, 0.70710677, 0.13794969), (-0.5448951, 0.8314696, 0.108386375), (-0.5448951, 0.8314696, 0.108386375), (-0.69351995, 0.70710677, 0.13794969), (-0.70710677, 0.70710677, 0), (-0.55557024, 0.8314696, 0), (-0.70710677, 0.70710677, 0), (-0.8314696, 0.55557024, 0), (-0.81549317, 0.55557024, -0.16221167), (-0.69351995, 0.70710677, -0.13794969), (-0.69351995, 0.70710677, -0.13794969), (-0.81549317, 0.55557024, -0.16221167), (-0.76817775, 0.55557024, -0.31818965), (-0.6532815, 0.70710677, -0.27059805), (-0.6532815, 0.70710677, -0.27059805), (-0.76817775, 0.55557024, -0.31818965), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.70710677, -0.39284748), (-0.5879378, 0.70710677, -0.39284748), (-0.6913417, 0.55557024, -0.46193975), (-0.5879378, 0.55557024, -0.5879378), (-0.5, 0.70710677, -0.5), (-0.5, 0.70710677, -0.5), (-0.5879378, 0.55557024, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.39284748, 0.70710677, -0.5879378), (-0.39284748, 0.70710677, -0.5879378), (-0.46193975, 0.55557024, -0.6913417), (-0.31818965, 0.55557024, -0.76817775), (-0.27059805, 0.70710677, -0.6532815), (-0.27059805, 0.70710677, -0.6532815), (-0.31818965, 0.55557024, -0.76817775), (-0.16221167, 0.55557024, -0.81549317), (-0.13794969, 0.70710677, -0.69351995), (-0.13794969, 0.70710677, -0.69351995), (-0.16221167, 0.55557024, -0.81549317), (-5.091283e-17, 0.55557024, -0.8314696), (-4.3297803e-17, 0.70710677, -0.70710677), (-4.3297803e-17, 0.70710677, -0.70710677), (-5.091283e-17, 0.55557024, -0.8314696), (0.16221167, 0.55557024, -0.81549317), (0.13794969, 0.70710677, -0.69351995), (0.13794969, 0.70710677, -0.69351995), (0.16221167, 0.55557024, -0.81549317), (0.31818965, 0.55557024, -0.76817775), (0.27059805, 0.70710677, -0.6532815), (0.27059805, 0.70710677, -0.6532815), (0.31818965, 0.55557024, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.39284748, 0.70710677, -0.5879378), (0.39284748, 0.70710677, -0.5879378), (0.46193975, 0.55557024, -0.6913417), (0.5879378, 0.55557024, -0.5879378), (0.5, 0.70710677, -0.5), (0.5, 0.70710677, -0.5), (0.5879378, 0.55557024, -0.5879378), (0.6913417, 0.55557024, -0.46193975), (0.5879378, 0.70710677, -0.39284748), (0.5879378, 0.70710677, -0.39284748), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.55557024, -0.31818965), (0.6532815, 0.70710677, -0.27059805), (0.6532815, 0.70710677, -0.27059805), (0.76817775, 0.55557024, -0.31818965), (0.81549317, 0.55557024, -0.16221167), (0.69351995, 0.70710677, -0.13794969), (0.69351995, 0.70710677, -0.13794969), (0.81549317, 0.55557024, -0.16221167), (0.8314696, 0.55557024, -1.0182566e-16), (0.70710677, 0.70710677, -8.6595606e-17), (0.70710677, 0.70710677, -8.6595606e-17), (0.8314696, 0.55557024, -1.0182566e-16), (0.81549317, 0.55557024, 0.16221167), (0.69351995, 0.70710677, 0.13794969), (0.69351995, 0.70710677, 0.13794969), (0.81549317, 0.55557024, 0.16221167), (0.76817775, 0.55557024, 0.31818965), (0.6532815, 0.70710677, 0.27059805), (0.6532815, 0.70710677, 0.27059805), (0.76817775, 0.55557024, 0.31818965), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.70710677, 0.39284748), (0.5879378, 0.70710677, 0.39284748), (0.6913417, 0.55557024, 0.46193975), (0.5879378, 0.55557024, 0.5879378), (0.5, 0.70710677, 0.5), (0.5, 0.70710677, 0.5), (0.5879378, 0.55557024, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.39284748, 0.70710677, 0.5879378), (0.39284748, 0.70710677, 0.5879378), (0.46193975, 0.55557024, 0.6913417), (0.31818965, 0.55557024, 0.76817775), (0.27059805, 0.70710677, 0.6532815), (0.27059805, 0.70710677, 0.6532815), (0.31818965, 0.55557024, 0.76817775), (0.16221167, 0.55557024, 0.81549317), (0.13794969, 0.70710677, 0.69351995), (0.13794969, 0.70710677, 0.69351995), (0.16221167, 0.55557024, 0.81549317), (1.5273849e-16, 0.55557024, 0.8314696), (1.298934e-16, 0.70710677, 0.70710677), (1.298934e-16, 0.70710677, 0.70710677), (1.5273849e-16, 0.55557024, 0.8314696), (-0.16221167, 0.55557024, 0.81549317), (-0.13794969, 0.70710677, 0.69351995), (-0.13794969, 0.70710677, 0.69351995), (-0.16221167, 0.55557024, 0.81549317), (-0.31818965, 0.55557024, 0.76817775), (-0.27059805, 0.70710677, 0.6532815), (-0.27059805, 0.70710677, 0.6532815), (-0.31818965, 0.55557024, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.39284748, 0.70710677, 0.5879378), (-0.39284748, 0.70710677, 0.5879378), (-0.46193975, 0.55557024, 0.6913417), (-0.5879378, 0.55557024, 0.5879378), (-0.5, 0.70710677, 0.5), (-0.5, 0.70710677, 0.5), (-0.5879378, 0.55557024, 0.5879378), (-0.6913417, 0.55557024, 0.46193975), (-0.5879378, 0.70710677, 0.39284748), (-0.5879378, 0.70710677, 0.39284748), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.55557024, 0.31818965), (-0.6532815, 0.70710677, 0.27059805), (-0.6532815, 0.70710677, 0.27059805), (-0.76817775, 0.55557024, 0.31818965), (-0.81549317, 0.55557024, 0.16221167), (-0.69351995, 0.70710677, 0.13794969), (-0.69351995, 0.70710677, 0.13794969), (-0.81549317, 0.55557024, 0.16221167), (-0.8314696, 0.55557024, 0), (-0.70710677, 0.70710677, 0), (-0.8314696, 0.55557024, 0), (-0.9238795, 0.38268343, 0), (-0.90612745, 0.38268343, -0.18023996), (-0.81549317, 0.55557024, -0.16221167), (-0.81549317, 0.55557024, -0.16221167), (-0.90612745, 0.38268343, -0.18023996), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.55557024, -0.31818965), (-0.76817775, 0.55557024, -0.31818965), (-0.8535534, 0.38268343, -0.35355338), (-0.76817775, 0.38268343, -0.51328), (-0.6913417, 0.55557024, -0.46193975), (-0.6913417, 0.55557024, -0.46193975), (-0.76817775, 0.38268343, -0.51328), (-0.6532815, 0.38268343, -0.6532815), (-0.5879378, 0.55557024, -0.5879378), (-0.5879378, 0.55557024, -0.5879378), (-0.6532815, 0.38268343, -0.6532815), (-0.51328, 0.38268343, -0.76817775), (-0.46193975, 0.55557024, -0.6913417), (-0.46193975, 0.55557024, -0.6913417), (-0.51328, 0.38268343, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.31818965, 0.55557024, -0.76817775), (-0.31818965, 0.55557024, -0.76817775), (-0.35355338, 0.38268343, -0.8535534), (-0.18023996, 0.38268343, -0.90612745), (-0.16221167, 0.55557024, -0.81549317), (-0.16221167, 0.55557024, -0.81549317), (-0.18023996, 0.38268343, -0.90612745), (-5.6571306e-17, 0.38268343, -0.9238795), (-5.091283e-17, 0.55557024, -0.8314696), (-5.091283e-17, 0.55557024, -0.8314696), (-5.6571306e-17, 0.38268343, -0.9238795), (0.18023996, 0.38268343, -0.90612745), (0.16221167, 0.55557024, -0.81549317), (0.16221167, 0.55557024, -0.81549317), (0.18023996, 0.38268343, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.31818965, 0.55557024, -0.76817775), (0.31818965, 0.55557024, -0.76817775), (0.35355338, 0.38268343, -0.8535534), (0.51328, 0.38268343, -0.76817775), (0.46193975, 0.55557024, -0.6913417), (0.46193975, 0.55557024, -0.6913417), (0.51328, 0.38268343, -0.76817775), (0.6532815, 0.38268343, -0.6532815), (0.5879378, 0.55557024, -0.5879378), (0.5879378, 0.55557024, -0.5879378), (0.6532815, 0.38268343, -0.6532815), (0.76817775, 0.38268343, -0.51328), (0.6913417, 0.55557024, -0.46193975), (0.6913417, 0.55557024, -0.46193975), (0.76817775, 0.38268343, -0.51328), (0.8535534, 0.38268343, -0.35355338), (0.76817775, 0.55557024, -0.31818965), (0.76817775, 0.55557024, -0.31818965), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.38268343, -0.18023996), (0.81549317, 0.55557024, -0.16221167), (0.81549317, 0.55557024, -0.16221167), (0.90612745, 0.38268343, -0.18023996), (0.9238795, 0.38268343, -1.1314261e-16), (0.8314696, 0.55557024, -1.0182566e-16), (0.8314696, 0.55557024, -1.0182566e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.90612745, 0.38268343, 0.18023996), (0.81549317, 0.55557024, 0.16221167), (0.81549317, 0.55557024, 0.16221167), (0.90612745, 0.38268343, 0.18023996), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.55557024, 0.31818965), (0.76817775, 0.55557024, 0.31818965), (0.8535534, 0.38268343, 0.35355338), (0.76817775, 0.38268343, 0.51328), (0.6913417, 0.55557024, 0.46193975), (0.6913417, 0.55557024, 0.46193975), (0.76817775, 0.38268343, 0.51328), (0.6532815, 0.38268343, 0.6532815), (0.5879378, 0.55557024, 0.5879378), (0.5879378, 0.55557024, 0.5879378), (0.6532815, 0.38268343, 0.6532815), (0.51328, 0.38268343, 0.76817775), (0.46193975, 0.55557024, 0.6913417), (0.46193975, 0.55557024, 0.6913417), (0.51328, 0.38268343, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.31818965, 0.55557024, 0.76817775), (0.31818965, 0.55557024, 0.76817775), (0.35355338, 0.38268343, 0.8535534), (0.18023996, 0.38268343, 0.90612745), (0.16221167, 0.55557024, 0.81549317), (0.16221167, 0.55557024, 0.81549317), (0.18023996, 0.38268343, 0.90612745), (1.6971392e-16, 0.38268343, 0.9238795), (1.5273849e-16, 0.55557024, 0.8314696), (1.5273849e-16, 0.55557024, 0.8314696), (1.6971392e-16, 0.38268343, 0.9238795), (-0.18023996, 0.38268343, 0.90612745), (-0.16221167, 0.55557024, 0.81549317), (-0.16221167, 0.55557024, 0.81549317), (-0.18023996, 0.38268343, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.31818965, 0.55557024, 0.76817775), (-0.31818965, 0.55557024, 0.76817775), (-0.35355338, 0.38268343, 0.8535534), (-0.51328, 0.38268343, 0.76817775), (-0.46193975, 0.55557024, 0.6913417), (-0.46193975, 0.55557024, 0.6913417), (-0.51328, 0.38268343, 0.76817775), (-0.6532815, 0.38268343, 0.6532815), (-0.5879378, 0.55557024, 0.5879378), (-0.5879378, 0.55557024, 0.5879378), (-0.6532815, 0.38268343, 0.6532815), (-0.76817775, 0.38268343, 0.51328), (-0.6913417, 0.55557024, 0.46193975), (-0.6913417, 0.55557024, 0.46193975), (-0.76817775, 0.38268343, 0.51328), (-0.8535534, 0.38268343, 0.35355338), (-0.76817775, 0.55557024, 0.31818965), (-0.76817775, 0.55557024, 0.31818965), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.38268343, 0.18023996), (-0.81549317, 0.55557024, 0.16221167), (-0.81549317, 0.55557024, 0.16221167), (-0.90612745, 0.38268343, 0.18023996), (-0.9238795, 0.38268343, 0), (-0.8314696, 0.55557024, 0), (-0.9238795, 0.38268343, 0), (-0.98078525, 0.19509032, 0), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.38268343, -0.18023996), (-0.90612745, 0.38268343, -0.18023996), (-0.96193975, 0.19509032, -0.19134171), (-0.90612745, 0.19509032, -0.37533027), (-0.8535534, 0.38268343, -0.35355338), (-0.8535534, 0.38268343, -0.35355338), (-0.90612745, 0.19509032, -0.37533027), (-0.81549317, 0.19509032, -0.5448951), (-0.76817775, 0.38268343, -0.51328), (-0.76817775, 0.38268343, -0.51328), (-0.81549317, 0.19509032, -0.5448951), (-0.69351995, 0.19509032, -0.69351995), (-0.6532815, 0.38268343, -0.6532815), (-0.6532815, 0.38268343, -0.6532815), (-0.69351995, 0.19509032, -0.69351995), (-0.5448951, 0.19509032, -0.81549317), (-0.51328, 0.38268343, -0.76817775), (-0.51328, 0.38268343, -0.76817775), (-0.5448951, 0.19509032, -0.81549317), (-0.37533027, 0.19509032, -0.90612745), (-0.35355338, 0.38268343, -0.8535534), (-0.35355338, 0.38268343, -0.8535534), (-0.37533027, 0.19509032, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-0.18023996, 0.38268343, -0.90612745), (-0.18023996, 0.38268343, -0.90612745), (-0.19134171, 0.19509032, -0.96193975), (-6.005578e-17, 0.19509032, -0.98078525), (-5.6571306e-17, 0.38268343, -0.9238795), (-5.6571306e-17, 0.38268343, -0.9238795), (-6.005578e-17, 0.19509032, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.18023996, 0.38268343, -0.90612745), (0.18023996, 0.38268343, -0.90612745), (0.19134171, 0.19509032, -0.96193975), (0.37533027, 0.19509032, -0.90612745), (0.35355338, 0.38268343, -0.8535534), (0.35355338, 0.38268343, -0.8535534), (0.37533027, 0.19509032, -0.90612745), (0.5448951, 0.19509032, -0.81549317), (0.51328, 0.38268343, -0.76817775), (0.51328, 0.38268343, -0.76817775), (0.5448951, 0.19509032, -0.81549317), (0.69351995, 0.19509032, -0.69351995), (0.6532815, 0.38268343, -0.6532815), (0.6532815, 0.38268343, -0.6532815), (0.69351995, 0.19509032, -0.69351995), (0.81549317, 0.19509032, -0.5448951), (0.76817775, 0.38268343, -0.51328), (0.76817775, 0.38268343, -0.51328), (0.81549317, 0.19509032, -0.5448951), (0.90612745, 0.19509032, -0.37533027), (0.8535534, 0.38268343, -0.35355338), (0.8535534, 0.38268343, -0.35355338), (0.90612745, 0.19509032, -0.37533027), (0.96193975, 0.19509032, -0.19134171), (0.90612745, 0.38268343, -0.18023996), (0.90612745, 0.38268343, -0.18023996), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 0.19509032, -1.2011156e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.9238795, 0.38268343, -1.1314261e-16), (0.98078525, 0.19509032, -1.2011156e-16), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.38268343, 0.18023996), (0.90612745, 0.38268343, 0.18023996), (0.96193975, 0.19509032, 0.19134171), (0.90612745, 0.19509032, 0.37533027), (0.8535534, 0.38268343, 0.35355338), (0.8535534, 0.38268343, 0.35355338), (0.90612745, 0.19509032, 0.37533027), (0.81549317, 0.19509032, 0.5448951), (0.76817775, 0.38268343, 0.51328), (0.76817775, 0.38268343, 0.51328), (0.81549317, 0.19509032, 0.5448951), (0.69351995, 0.19509032, 0.69351995), (0.6532815, 0.38268343, 0.6532815), (0.6532815, 0.38268343, 0.6532815), (0.69351995, 0.19509032, 0.69351995), (0.5448951, 0.19509032, 0.81549317), (0.51328, 0.38268343, 0.76817775), (0.51328, 0.38268343, 0.76817775), (0.5448951, 0.19509032, 0.81549317), (0.37533027, 0.19509032, 0.90612745), (0.35355338, 0.38268343, 0.8535534), (0.35355338, 0.38268343, 0.8535534), (0.37533027, 0.19509032, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (0.18023996, 0.38268343, 0.90612745), (0.18023996, 0.38268343, 0.90612745), (0.19134171, 0.19509032, 0.96193975), (1.8016734e-16, 0.19509032, 0.98078525), (1.6971392e-16, 0.38268343, 0.9238795), (1.6971392e-16, 0.38268343, 0.9238795), (1.8016734e-16, 0.19509032, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.18023996, 0.38268343, 0.90612745), (-0.18023996, 0.38268343, 0.90612745), (-0.19134171, 0.19509032, 0.96193975), (-0.37533027, 0.19509032, 0.90612745), (-0.35355338, 0.38268343, 0.8535534), (-0.35355338, 0.38268343, 0.8535534), (-0.37533027, 0.19509032, 0.90612745), (-0.5448951, 0.19509032, 0.81549317), (-0.51328, 0.38268343, 0.76817775), (-0.51328, 0.38268343, 0.76817775), (-0.5448951, 0.19509032, 0.81549317), (-0.69351995, 0.19509032, 0.69351995), (-0.6532815, 0.38268343, 0.6532815), (-0.6532815, 0.38268343, 0.6532815), (-0.69351995, 0.19509032, 0.69351995), (-0.81549317, 0.19509032, 0.5448951), (-0.76817775, 0.38268343, 0.51328), (-0.76817775, 0.38268343, 0.51328), (-0.81549317, 0.19509032, 0.5448951), (-0.90612745, 0.19509032, 0.37533027), (-0.8535534, 0.38268343, 0.35355338), (-0.8535534, 0.38268343, 0.35355338), (-0.90612745, 0.19509032, 0.37533027), (-0.96193975, 0.19509032, 0.19134171), (-0.90612745, 0.38268343, 0.18023996), (-0.90612745, 0.38268343, 0.18023996), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 0.19509032, 0), (-0.9238795, 0.38268343, 0), (-0.98078525, 0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.96193975, 0.19509032, -0.19134171), (-0.96193975, 0.19509032, -0.19134171), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.90612745, 0.19509032, -0.37533027), (-0.90612745, 0.19509032, -0.37533027), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.81549317, 0.19509032, -0.5448951), (-0.81549317, 0.19509032, -0.5448951), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.69351995, 0.19509032, -0.69351995), (-0.69351995, 0.19509032, -0.69351995), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.5448951, 0.19509032, -0.81549317), (-0.5448951, 0.19509032, -0.81549317), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.37533027, 0.19509032, -0.90612745), (-0.37533027, 0.19509032, -0.90612745), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19134171, 0.19509032, -0.96193975), (-0.19134171, 0.19509032, -0.96193975), (-0.19509032, 1.2246469e-16, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (-6.005578e-17, 0.19509032, -0.98078525), (-6.005578e-17, 0.19509032, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (0.19509032, 1.2246469e-16, -0.98078525), (0.19134171, 0.19509032, -0.96193975), (0.19134171, 0.19509032, -0.96193975), (0.19509032, 1.2246469e-16, -0.98078525), (0.38268343, 1.2246469e-16, -0.9238795), (0.37533027, 0.19509032, -0.90612745), (0.37533027, 0.19509032, -0.90612745), (0.38268343, 1.2246469e-16, -0.9238795), (0.55557024, 1.2246469e-16, -0.8314696), (0.5448951, 0.19509032, -0.81549317), (0.5448951, 0.19509032, -0.81549317), (0.55557024, 1.2246469e-16, -0.8314696), (0.70710677, 1.2246469e-16, -0.70710677), (0.69351995, 0.19509032, -0.69351995), (0.69351995, 0.19509032, -0.69351995), (0.70710677, 1.2246469e-16, -0.70710677), (0.8314696, 1.2246469e-16, -0.55557024), (0.81549317, 0.19509032, -0.5448951), (0.81549317, 0.19509032, -0.5448951), (0.8314696, 1.2246469e-16, -0.55557024), (0.9238795, 1.2246469e-16, -0.38268343), (0.90612745, 0.19509032, -0.37533027), (0.90612745, 0.19509032, -0.37533027), (0.9238795, 1.2246469e-16, -0.38268343), (0.98078525, 1.2246469e-16, -0.19509032), (0.96193975, 0.19509032, -0.19134171), (0.96193975, 0.19509032, -0.19134171), (0.98078525, 1.2246469e-16, -0.19509032), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, 0.19509032, -1.2011156e-16), (0.98078525, 0.19509032, -1.2011156e-16), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, 1.2246469e-16, 0.19509032), (0.96193975, 0.19509032, 0.19134171), (0.96193975, 0.19509032, 0.19134171), (0.98078525, 1.2246469e-16, 0.19509032), (0.9238795, 1.2246469e-16, 0.38268343), (0.90612745, 0.19509032, 0.37533027), (0.90612745, 0.19509032, 0.37533027), (0.9238795, 1.2246469e-16, 0.38268343), (0.8314696, 1.2246469e-16, 0.55557024), (0.81549317, 0.19509032, 0.5448951), (0.81549317, 0.19509032, 0.5448951), (0.8314696, 1.2246469e-16, 0.55557024), (0.70710677, 1.2246469e-16, 0.70710677), (0.69351995, 0.19509032, 0.69351995), (0.69351995, 0.19509032, 0.69351995), (0.70710677, 1.2246469e-16, 0.70710677), (0.55557024, 1.2246469e-16, 0.8314696), (0.5448951, 0.19509032, 0.81549317), (0.5448951, 0.19509032, 0.81549317), (0.55557024, 1.2246469e-16, 0.8314696), (0.38268343, 1.2246469e-16, 0.9238795), (0.37533027, 0.19509032, 0.90612745), (0.37533027, 0.19509032, 0.90612745), (0.38268343, 1.2246469e-16, 0.9238795), (0.19509032, 1.2246469e-16, 0.98078525), (0.19134171, 0.19509032, 0.96193975), (0.19134171, 0.19509032, 0.96193975), (0.19509032, 1.2246469e-16, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (1.8016734e-16, 0.19509032, 0.98078525), (1.8016734e-16, 0.19509032, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19134171, 0.19509032, 0.96193975), (-0.19134171, 0.19509032, 0.96193975), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.37533027, 0.19509032, 0.90612745), (-0.37533027, 0.19509032, 0.90612745), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.5448951, 0.19509032, 0.81549317), (-0.5448951, 0.19509032, 0.81549317), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.69351995, 0.19509032, 0.69351995), (-0.69351995, 0.19509032, 0.69351995), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.81549317, 0.19509032, 0.5448951), (-0.81549317, 0.19509032, 0.5448951), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.90612745, 0.19509032, 0.37533027), (-0.90612745, 0.19509032, 0.37533027), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.96193975, 0.19509032, 0.19134171), (-0.96193975, 0.19509032, 0.19134171), (-0.98078525, 1.2246469e-16, 0.19509032), (-1, 1.2246469e-16, 0), (-0.98078525, 0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, -0.19509032, 0), (-0.96193975, -0.19509032, -0.19134171), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.98078525, 1.2246469e-16, -0.19509032), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.19509032, -0.37533027), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.9238795, 1.2246469e-16, -0.38268343), (-0.90612745, -0.19509032, -0.37533027), (-0.81549317, -0.19509032, -0.5448951), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.8314696, 1.2246469e-16, -0.55557024), (-0.81549317, -0.19509032, -0.5448951), (-0.69351995, -0.19509032, -0.69351995), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.70710677, 1.2246469e-16, -0.70710677), (-0.69351995, -0.19509032, -0.69351995), (-0.5448951, -0.19509032, -0.81549317), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.55557024, 1.2246469e-16, -0.8314696), (-0.5448951, -0.19509032, -0.81549317), (-0.37533027, -0.19509032, -0.90612745), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.38268343, 1.2246469e-16, -0.9238795), (-0.37533027, -0.19509032, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19509032, 1.2246469e-16, -0.98078525), (-0.19134171, -0.19509032, -0.96193975), (-6.005578e-17, -0.19509032, -0.98078525), (-6.123234e-17, 1.2246469e-16, -1), (-6.123234e-17, 1.2246469e-16, -1), (-6.005578e-17, -0.19509032, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.19509032, 1.2246469e-16, -0.98078525), (0.19509032, 1.2246469e-16, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.37533027, -0.19509032, -0.90612745), (0.38268343, 1.2246469e-16, -0.9238795), (0.38268343, 1.2246469e-16, -0.9238795), (0.37533027, -0.19509032, -0.90612745), (0.5448951, -0.19509032, -0.81549317), (0.55557024, 1.2246469e-16, -0.8314696), (0.55557024, 1.2246469e-16, -0.8314696), (0.5448951, -0.19509032, -0.81549317), (0.69351995, -0.19509032, -0.69351995), (0.70710677, 1.2246469e-16, -0.70710677), (0.70710677, 1.2246469e-16, -0.70710677), (0.69351995, -0.19509032, -0.69351995), (0.81549317, -0.19509032, -0.5448951), (0.8314696, 1.2246469e-16, -0.55557024), (0.8314696, 1.2246469e-16, -0.55557024), (0.81549317, -0.19509032, -0.5448951), (0.90612745, -0.19509032, -0.37533027), (0.9238795, 1.2246469e-16, -0.38268343), (0.9238795, 1.2246469e-16, -0.38268343), (0.90612745, -0.19509032, -0.37533027), (0.96193975, -0.19509032, -0.19134171), (0.98078525, 1.2246469e-16, -0.19509032), (0.98078525, 1.2246469e-16, -0.19509032), (0.96193975, -0.19509032, -0.19134171), (0.98078525, -0.19509032, -1.2011156e-16), (1, 1.2246469e-16, -1.2246469e-16), (1, 1.2246469e-16, -1.2246469e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.96193975, -0.19509032, 0.19134171), (0.98078525, 1.2246469e-16, 0.19509032), (0.98078525, 1.2246469e-16, 0.19509032), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.19509032, 0.37533027), (0.9238795, 1.2246469e-16, 0.38268343), (0.9238795, 1.2246469e-16, 0.38268343), (0.90612745, -0.19509032, 0.37533027), (0.81549317, -0.19509032, 0.5448951), (0.8314696, 1.2246469e-16, 0.55557024), (0.8314696, 1.2246469e-16, 0.55557024), (0.81549317, -0.19509032, 0.5448951), (0.69351995, -0.19509032, 0.69351995), (0.70710677, 1.2246469e-16, 0.70710677), (0.70710677, 1.2246469e-16, 0.70710677), (0.69351995, -0.19509032, 0.69351995), (0.5448951, -0.19509032, 0.81549317), (0.55557024, 1.2246469e-16, 0.8314696), (0.55557024, 1.2246469e-16, 0.8314696), (0.5448951, -0.19509032, 0.81549317), (0.37533027, -0.19509032, 0.90612745), (0.38268343, 1.2246469e-16, 0.9238795), (0.38268343, 1.2246469e-16, 0.9238795), (0.37533027, -0.19509032, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.19509032, 1.2246469e-16, 0.98078525), (0.19509032, 1.2246469e-16, 0.98078525), (0.19134171, -0.19509032, 0.96193975), (1.8016734e-16, -0.19509032, 0.98078525), (1.8369701e-16, 1.2246469e-16, 1), (1.8369701e-16, 1.2246469e-16, 1), (1.8016734e-16, -0.19509032, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19509032, 1.2246469e-16, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.37533027, -0.19509032, 0.90612745), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.38268343, 1.2246469e-16, 0.9238795), (-0.37533027, -0.19509032, 0.90612745), (-0.5448951, -0.19509032, 0.81549317), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.55557024, 1.2246469e-16, 0.8314696), (-0.5448951, -0.19509032, 0.81549317), (-0.69351995, -0.19509032, 0.69351995), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.70710677, 1.2246469e-16, 0.70710677), (-0.69351995, -0.19509032, 0.69351995), (-0.81549317, -0.19509032, 0.5448951), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.8314696, 1.2246469e-16, 0.55557024), (-0.81549317, -0.19509032, 0.5448951), (-0.90612745, -0.19509032, 0.37533027), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.9238795, 1.2246469e-16, 0.38268343), (-0.90612745, -0.19509032, 0.37533027), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.98078525, 1.2246469e-16, 0.19509032), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, -0.19509032, 0), (-1, 1.2246469e-16, 0), (-0.98078525, -0.19509032, 0), (-0.9238795, -0.38268343, 0), (-0.90612745, -0.38268343, -0.18023996), (-0.96193975, -0.19509032, -0.19134171), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.38268343, -0.18023996), (-0.8535534, -0.38268343, -0.35355338), (-0.90612745, -0.19509032, -0.37533027), (-0.90612745, -0.19509032, -0.37533027), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.38268343, -0.51328), (-0.81549317, -0.19509032, -0.5448951), (-0.81549317, -0.19509032, -0.5448951), (-0.76817775, -0.38268343, -0.51328), (-0.6532815, -0.38268343, -0.6532815), (-0.69351995, -0.19509032, -0.69351995), (-0.69351995, -0.19509032, -0.69351995), (-0.6532815, -0.38268343, -0.6532815), (-0.51328, -0.38268343, -0.76817775), (-0.5448951, -0.19509032, -0.81549317), (-0.5448951, -0.19509032, -0.81549317), (-0.51328, -0.38268343, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.37533027, -0.19509032, -0.90612745), (-0.37533027, -0.19509032, -0.90612745), (-0.35355338, -0.38268343, -0.8535534), (-0.18023996, -0.38268343, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.19134171, -0.19509032, -0.96193975), (-0.18023996, -0.38268343, -0.90612745), (-5.6571306e-17, -0.38268343, -0.9238795), (-6.005578e-17, -0.19509032, -0.98078525), (-6.005578e-17, -0.19509032, -0.98078525), (-5.6571306e-17, -0.38268343, -0.9238795), (0.18023996, -0.38268343, -0.90612745), (0.19134171, -0.19509032, -0.96193975), (0.19134171, -0.19509032, -0.96193975), (0.18023996, -0.38268343, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.37533027, -0.19509032, -0.90612745), (0.37533027, -0.19509032, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.51328, -0.38268343, -0.76817775), (0.5448951, -0.19509032, -0.81549317), (0.5448951, -0.19509032, -0.81549317), (0.51328, -0.38268343, -0.76817775), (0.6532815, -0.38268343, -0.6532815), (0.69351995, -0.19509032, -0.69351995), (0.69351995, -0.19509032, -0.69351995), (0.6532815, -0.38268343, -0.6532815), (0.76817775, -0.38268343, -0.51328), (0.81549317, -0.19509032, -0.5448951), (0.81549317, -0.19509032, -0.5448951), (0.76817775, -0.38268343, -0.51328), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.19509032, -0.37533027), (0.90612745, -0.19509032, -0.37533027), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.38268343, -0.18023996), (0.96193975, -0.19509032, -0.19134171), (0.96193975, -0.19509032, -0.19134171), (0.90612745, -0.38268343, -0.18023996), (0.9238795, -0.38268343, -1.1314261e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.98078525, -0.19509032, -1.2011156e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.90612745, -0.38268343, 0.18023996), (0.96193975, -0.19509032, 0.19134171), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.38268343, 0.18023996), (0.8535534, -0.38268343, 0.35355338), (0.90612745, -0.19509032, 0.37533027), (0.90612745, -0.19509032, 0.37533027), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.38268343, 0.51328), (0.81549317, -0.19509032, 0.5448951), (0.81549317, -0.19509032, 0.5448951), (0.76817775, -0.38268343, 0.51328), (0.6532815, -0.38268343, 0.6532815), (0.69351995, -0.19509032, 0.69351995), (0.69351995, -0.19509032, 0.69351995), (0.6532815, -0.38268343, 0.6532815), (0.51328, -0.38268343, 0.76817775), (0.5448951, -0.19509032, 0.81549317), (0.5448951, -0.19509032, 0.81549317), (0.51328, -0.38268343, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.37533027, -0.19509032, 0.90612745), (0.37533027, -0.19509032, 0.90612745), (0.35355338, -0.38268343, 0.8535534), (0.18023996, -0.38268343, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.19134171, -0.19509032, 0.96193975), (0.18023996, -0.38268343, 0.90612745), (1.6971392e-16, -0.38268343, 0.9238795), (1.8016734e-16, -0.19509032, 0.98078525), (1.8016734e-16, -0.19509032, 0.98078525), (1.6971392e-16, -0.38268343, 0.9238795), (-0.18023996, -0.38268343, 0.90612745), (-0.19134171, -0.19509032, 0.96193975), (-0.19134171, -0.19509032, 0.96193975), (-0.18023996, -0.38268343, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.37533027, -0.19509032, 0.90612745), (-0.37533027, -0.19509032, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.51328, -0.38268343, 0.76817775), (-0.5448951, -0.19509032, 0.81549317), (-0.5448951, -0.19509032, 0.81549317), (-0.51328, -0.38268343, 0.76817775), (-0.6532815, -0.38268343, 0.6532815), (-0.69351995, -0.19509032, 0.69351995), (-0.69351995, -0.19509032, 0.69351995), (-0.6532815, -0.38268343, 0.6532815), (-0.76817775, -0.38268343, 0.51328), (-0.81549317, -0.19509032, 0.5448951), (-0.81549317, -0.19509032, 0.5448951), (-0.76817775, -0.38268343, 0.51328), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.19509032, 0.37533027), (-0.90612745, -0.19509032, 0.37533027), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.38268343, 0.18023996), (-0.96193975, -0.19509032, 0.19134171), (-0.96193975, -0.19509032, 0.19134171), (-0.90612745, -0.38268343, 0.18023996), (-0.9238795, -0.38268343, 0), (-0.98078525, -0.19509032, 0), (-0.9238795, -0.38268343, 0), (-0.8314696, -0.55557024, 0), (-0.81549317, -0.55557024, -0.16221167), (-0.90612745, -0.38268343, -0.18023996), (-0.90612745, -0.38268343, -0.18023996), (-0.81549317, -0.55557024, -0.16221167), (-0.76817775, -0.55557024, -0.31818965), (-0.8535534, -0.38268343, -0.35355338), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.55557024, -0.31818965), (-0.6913417, -0.55557024, -0.46193975), (-0.76817775, -0.38268343, -0.51328), (-0.76817775, -0.38268343, -0.51328), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.55557024, -0.5879378), (-0.6532815, -0.38268343, -0.6532815), (-0.6532815, -0.38268343, -0.6532815), (-0.5879378, -0.55557024, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.51328, -0.38268343, -0.76817775), (-0.51328, -0.38268343, -0.76817775), (-0.46193975, -0.55557024, -0.6913417), (-0.31818965, -0.55557024, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.35355338, -0.38268343, -0.8535534), (-0.31818965, -0.55557024, -0.76817775), (-0.16221167, -0.55557024, -0.81549317), (-0.18023996, -0.38268343, -0.90612745), (-0.18023996, -0.38268343, -0.90612745), (-0.16221167, -0.55557024, -0.81549317), (-5.091283e-17, -0.55557024, -0.8314696), (-5.6571306e-17, -0.38268343, -0.9238795), (-5.6571306e-17, -0.38268343, -0.9238795), (-5.091283e-17, -0.55557024, -0.8314696), (0.16221167, -0.55557024, -0.81549317), (0.18023996, -0.38268343, -0.90612745), (0.18023996, -0.38268343, -0.90612745), (0.16221167, -0.55557024, -0.81549317), (0.31818965, -0.55557024, -0.76817775), (0.35355338, -0.38268343, -0.8535534), (0.35355338, -0.38268343, -0.8535534), (0.31818965, -0.55557024, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.51328, -0.38268343, -0.76817775), (0.51328, -0.38268343, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.5879378, -0.55557024, -0.5879378), (0.6532815, -0.38268343, -0.6532815), (0.6532815, -0.38268343, -0.6532815), (0.5879378, -0.55557024, -0.5879378), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.38268343, -0.51328), (0.76817775, -0.38268343, -0.51328), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.55557024, -0.31818965), (0.8535534, -0.38268343, -0.35355338), (0.8535534, -0.38268343, -0.35355338), (0.76817775, -0.55557024, -0.31818965), (0.81549317, -0.55557024, -0.16221167), (0.90612745, -0.38268343, -0.18023996), (0.90612745, -0.38268343, -0.18023996), (0.81549317, -0.55557024, -0.16221167), (0.8314696, -0.55557024, -1.0182566e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.9238795, -0.38268343, -1.1314261e-16), (0.8314696, -0.55557024, -1.0182566e-16), (0.81549317, -0.55557024, 0.16221167), (0.90612745, -0.38268343, 0.18023996), (0.90612745, -0.38268343, 0.18023996), (0.81549317, -0.55557024, 0.16221167), (0.76817775, -0.55557024, 0.31818965), (0.8535534, -0.38268343, 0.35355338), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.55557024, 0.31818965), (0.6913417, -0.55557024, 0.46193975), (0.76817775, -0.38268343, 0.51328), (0.76817775, -0.38268343, 0.51328), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.55557024, 0.5879378), (0.6532815, -0.38268343, 0.6532815), (0.6532815, -0.38268343, 0.6532815), (0.5879378, -0.55557024, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.51328, -0.38268343, 0.76817775), (0.51328, -0.38268343, 0.76817775), (0.46193975, -0.55557024, 0.6913417), (0.31818965, -0.55557024, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.35355338, -0.38268343, 0.8535534), (0.31818965, -0.55557024, 0.76817775), (0.16221167, -0.55557024, 0.81549317), (0.18023996, -0.38268343, 0.90612745), (0.18023996, -0.38268343, 0.90612745), (0.16221167, -0.55557024, 0.81549317), (1.5273849e-16, -0.55557024, 0.8314696), (1.6971392e-16, -0.38268343, 0.9238795), (1.6971392e-16, -0.38268343, 0.9238795), (1.5273849e-16, -0.55557024, 0.8314696), (-0.16221167, -0.55557024, 0.81549317), (-0.18023996, -0.38268343, 0.90612745), (-0.18023996, -0.38268343, 0.90612745), (-0.16221167, -0.55557024, 0.81549317), (-0.31818965, -0.55557024, 0.76817775), (-0.35355338, -0.38268343, 0.8535534), (-0.35355338, -0.38268343, 0.8535534), (-0.31818965, -0.55557024, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.51328, -0.38268343, 0.76817775), (-0.51328, -0.38268343, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.5879378, -0.55557024, 0.5879378), (-0.6532815, -0.38268343, 0.6532815), (-0.6532815, -0.38268343, 0.6532815), (-0.5879378, -0.55557024, 0.5879378), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.38268343, 0.51328), (-0.76817775, -0.38268343, 0.51328), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.55557024, 0.31818965), (-0.8535534, -0.38268343, 0.35355338), (-0.8535534, -0.38268343, 0.35355338), (-0.76817775, -0.55557024, 0.31818965), (-0.81549317, -0.55557024, 0.16221167), (-0.90612745, -0.38268343, 0.18023996), (-0.90612745, -0.38268343, 0.18023996), (-0.81549317, -0.55557024, 0.16221167), (-0.8314696, -0.55557024, 0), (-0.9238795, -0.38268343, 0), (-0.8314696, -0.55557024, 0), (-0.70710677, -0.70710677, 0), (-0.69351995, -0.70710677, -0.13794969), (-0.81549317, -0.55557024, -0.16221167), (-0.81549317, -0.55557024, -0.16221167), (-0.69351995, -0.70710677, -0.13794969), (-0.6532815, -0.70710677, -0.27059805), (-0.76817775, -0.55557024, -0.31818965), (-0.76817775, -0.55557024, -0.31818965), (-0.6532815, -0.70710677, -0.27059805), (-0.5879378, -0.70710677, -0.39284748), (-0.6913417, -0.55557024, -0.46193975), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.70710677, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.5879378, -0.55557024, -0.5879378), (-0.5879378, -0.55557024, -0.5879378), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.70710677, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.46193975, -0.55557024, -0.6913417), (-0.39284748, -0.70710677, -0.5879378), (-0.27059805, -0.70710677, -0.6532815), (-0.31818965, -0.55557024, -0.76817775), (-0.31818965, -0.55557024, -0.76817775), (-0.27059805, -0.70710677, -0.6532815), (-0.13794969, -0.70710677, -0.69351995), (-0.16221167, -0.55557024, -0.81549317), (-0.16221167, -0.55557024, -0.81549317), (-0.13794969, -0.70710677, -0.69351995), (-4.3297803e-17, -0.70710677, -0.70710677), (-5.091283e-17, -0.55557024, -0.8314696), (-5.091283e-17, -0.55557024, -0.8314696), (-4.3297803e-17, -0.70710677, -0.70710677), (0.13794969, -0.70710677, -0.69351995), (0.16221167, -0.55557024, -0.81549317), (0.16221167, -0.55557024, -0.81549317), (0.13794969, -0.70710677, -0.69351995), (0.27059805, -0.70710677, -0.6532815), (0.31818965, -0.55557024, -0.76817775), (0.31818965, -0.55557024, -0.76817775), (0.27059805, -0.70710677, -0.6532815), (0.39284748, -0.70710677, -0.5879378), (0.46193975, -0.55557024, -0.6913417), (0.46193975, -0.55557024, -0.6913417), (0.39284748, -0.70710677, -0.5879378), (0.5, -0.70710677, -0.5), (0.5879378, -0.55557024, -0.5879378), (0.5879378, -0.55557024, -0.5879378), (0.5, -0.70710677, -0.5), (0.5879378, -0.70710677, -0.39284748), (0.6913417, -0.55557024, -0.46193975), (0.6913417, -0.55557024, -0.46193975), (0.5879378, -0.70710677, -0.39284748), (0.6532815, -0.70710677, -0.27059805), (0.76817775, -0.55557024, -0.31818965), (0.76817775, -0.55557024, -0.31818965), (0.6532815, -0.70710677, -0.27059805), (0.69351995, -0.70710677, -0.13794969), (0.81549317, -0.55557024, -0.16221167), (0.81549317, -0.55557024, -0.16221167), (0.69351995, -0.70710677, -0.13794969), (0.70710677, -0.70710677, -8.6595606e-17), (0.8314696, -0.55557024, -1.0182566e-16), (0.8314696, -0.55557024, -1.0182566e-16), (0.70710677, -0.70710677, -8.6595606e-17), (0.69351995, -0.70710677, 0.13794969), (0.81549317, -0.55557024, 0.16221167), (0.81549317, -0.55557024, 0.16221167), (0.69351995, -0.70710677, 0.13794969), (0.6532815, -0.70710677, 0.27059805), (0.76817775, -0.55557024, 0.31818965), (0.76817775, -0.55557024, 0.31818965), (0.6532815, -0.70710677, 0.27059805), (0.5879378, -0.70710677, 0.39284748), (0.6913417, -0.55557024, 0.46193975), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.70710677, 0.39284748), (0.5, -0.70710677, 0.5), (0.5879378, -0.55557024, 0.5879378), (0.5879378, -0.55557024, 0.5879378), (0.5, -0.70710677, 0.5), (0.39284748, -0.70710677, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.46193975, -0.55557024, 0.6913417), (0.39284748, -0.70710677, 0.5879378), (0.27059805, -0.70710677, 0.6532815), (0.31818965, -0.55557024, 0.76817775), (0.31818965, -0.55557024, 0.76817775), (0.27059805, -0.70710677, 0.6532815), (0.13794969, -0.70710677, 0.69351995), (0.16221167, -0.55557024, 0.81549317), (0.16221167, -0.55557024, 0.81549317), (0.13794969, -0.70710677, 0.69351995), (1.298934e-16, -0.70710677, 0.70710677), (1.5273849e-16, -0.55557024, 0.8314696), (1.5273849e-16, -0.55557024, 0.8314696), (1.298934e-16, -0.70710677, 0.70710677), (-0.13794969, -0.70710677, 0.69351995), (-0.16221167, -0.55557024, 0.81549317), (-0.16221167, -0.55557024, 0.81549317), (-0.13794969, -0.70710677, 0.69351995), (-0.27059805, -0.70710677, 0.6532815), (-0.31818965, -0.55557024, 0.76817775), (-0.31818965, -0.55557024, 0.76817775), (-0.27059805, -0.70710677, 0.6532815), (-0.39284748, -0.70710677, 0.5879378), (-0.46193975, -0.55557024, 0.6913417), (-0.46193975, -0.55557024, 0.6913417), (-0.39284748, -0.70710677, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.55557024, 0.5879378), (-0.5879378, -0.55557024, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.70710677, 0.39284748), (-0.6913417, -0.55557024, 0.46193975), (-0.6913417, -0.55557024, 0.46193975), (-0.5879378, -0.70710677, 0.39284748), (-0.6532815, -0.70710677, 0.27059805), (-0.76817775, -0.55557024, 0.31818965), (-0.76817775, -0.55557024, 0.31818965), (-0.6532815, -0.70710677, 0.27059805), (-0.69351995, -0.70710677, 0.13794969), (-0.81549317, -0.55557024, 0.16221167), (-0.81549317, -0.55557024, 0.16221167), (-0.69351995, -0.70710677, 0.13794969), (-0.70710677, -0.70710677, 0), (-0.8314696, -0.55557024, 0), (-0.70710677, -0.70710677, 0), (-0.55557024, -0.8314696, 0), (-0.5448951, -0.8314696, -0.108386375), (-0.69351995, -0.70710677, -0.13794969), (-0.69351995, -0.70710677, -0.13794969), (-0.5448951, -0.8314696, -0.108386375), (-0.51328, -0.8314696, -0.21260752), (-0.6532815, -0.70710677, -0.27059805), (-0.6532815, -0.70710677, -0.27059805), (-0.51328, -0.8314696, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.5879378, -0.70710677, -0.39284748), (-0.5879378, -0.70710677, -0.39284748), (-0.46193975, -0.8314696, -0.30865827), (-0.39284748, -0.8314696, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.8314696, -0.39284748), (-0.30865827, -0.8314696, -0.46193975), (-0.39284748, -0.70710677, -0.5879378), (-0.39284748, -0.70710677, -0.5879378), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.8314696, -0.51328), (-0.27059805, -0.70710677, -0.6532815), (-0.27059805, -0.70710677, -0.6532815), (-0.21260752, -0.8314696, -0.51328), (-0.108386375, -0.8314696, -0.5448951), (-0.13794969, -0.70710677, -0.69351995), (-0.13794969, -0.70710677, -0.69351995), (-0.108386375, -0.8314696, -0.5448951), (-3.4018865e-17, -0.8314696, -0.55557024), (-4.3297803e-17, -0.70710677, -0.70710677), (-4.3297803e-17, -0.70710677, -0.70710677), (-3.4018865e-17, -0.8314696, -0.55557024), (0.108386375, -0.8314696, -0.5448951), (0.13794969, -0.70710677, -0.69351995), (0.13794969, -0.70710677, -0.69351995), (0.108386375, -0.8314696, -0.5448951), (0.21260752, -0.8314696, -0.51328), (0.27059805, -0.70710677, -0.6532815), (0.27059805, -0.70710677, -0.6532815), (0.21260752, -0.8314696, -0.51328), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.70710677, -0.5879378), (0.39284748, -0.70710677, -0.5879378), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.8314696, -0.39284748), (0.5, -0.70710677, -0.5), (0.5, -0.70710677, -0.5), (0.39284748, -0.8314696, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.5879378, -0.70710677, -0.39284748), (0.5879378, -0.70710677, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.51328, -0.8314696, -0.21260752), (0.6532815, -0.70710677, -0.27059805), (0.6532815, -0.70710677, -0.27059805), (0.51328, -0.8314696, -0.21260752), (0.5448951, -0.8314696, -0.108386375), (0.69351995, -0.70710677, -0.13794969), (0.69351995, -0.70710677, -0.13794969), (0.5448951, -0.8314696, -0.108386375), (0.55557024, -0.8314696, -6.803773e-17), (0.70710677, -0.70710677, -8.6595606e-17), (0.70710677, -0.70710677, -8.6595606e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.5448951, -0.8314696, 0.108386375), (0.69351995, -0.70710677, 0.13794969), (0.69351995, -0.70710677, 0.13794969), (0.5448951, -0.8314696, 0.108386375), (0.51328, -0.8314696, 0.21260752), (0.6532815, -0.70710677, 0.27059805), (0.6532815, -0.70710677, 0.27059805), (0.51328, -0.8314696, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.5879378, -0.70710677, 0.39284748), (0.5879378, -0.70710677, 0.39284748), (0.46193975, -0.8314696, 0.30865827), (0.39284748, -0.8314696, 0.39284748), (0.5, -0.70710677, 0.5), (0.5, -0.70710677, 0.5), (0.39284748, -0.8314696, 0.39284748), (0.30865827, -0.8314696, 0.46193975), (0.39284748, -0.70710677, 0.5879378), (0.39284748, -0.70710677, 0.5879378), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.8314696, 0.51328), (0.27059805, -0.70710677, 0.6532815), (0.27059805, -0.70710677, 0.6532815), (0.21260752, -0.8314696, 0.51328), (0.108386375, -0.8314696, 0.5448951), (0.13794969, -0.70710677, 0.69351995), (0.13794969, -0.70710677, 0.69351995), (0.108386375, -0.8314696, 0.5448951), (1.020566e-16, -0.8314696, 0.55557024), (1.298934e-16, -0.70710677, 0.70710677), (1.298934e-16, -0.70710677, 0.70710677), (1.020566e-16, -0.8314696, 0.55557024), (-0.108386375, -0.8314696, 0.5448951), (-0.13794969, -0.70710677, 0.69351995), (-0.13794969, -0.70710677, 0.69351995), (-0.108386375, -0.8314696, 0.5448951), (-0.21260752, -0.8314696, 0.51328), (-0.27059805, -0.70710677, 0.6532815), (-0.27059805, -0.70710677, 0.6532815), (-0.21260752, -0.8314696, 0.51328), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.70710677, 0.5879378), (-0.39284748, -0.70710677, 0.5879378), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.8314696, 0.39284748), (-0.5, -0.70710677, 0.5), (-0.5, -0.70710677, 0.5), (-0.39284748, -0.8314696, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.5879378, -0.70710677, 0.39284748), (-0.5879378, -0.70710677, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.51328, -0.8314696, 0.21260752), (-0.6532815, -0.70710677, 0.27059805), (-0.6532815, -0.70710677, 0.27059805), (-0.51328, -0.8314696, 0.21260752), (-0.5448951, -0.8314696, 0.108386375), (-0.69351995, -0.70710677, 0.13794969), (-0.69351995, -0.70710677, 0.13794969), (-0.5448951, -0.8314696, 0.108386375), (-0.55557024, -0.8314696, 0), (-0.70710677, -0.70710677, 0), (-0.55557024, -0.8314696, 0), (-0.38268343, -0.9238795, 0), (-0.37533027, -0.9238795, -0.074657835), (-0.5448951, -0.8314696, -0.108386375), (-0.5448951, -0.8314696, -0.108386375), (-0.37533027, -0.9238795, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.51328, -0.8314696, -0.21260752), (-0.51328, -0.8314696, -0.21260752), (-0.35355338, -0.9238795, -0.14644662), (-0.31818965, -0.9238795, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.46193975, -0.8314696, -0.30865827), (-0.31818965, -0.9238795, -0.21260752), (-0.27059805, -0.9238795, -0.27059805), (-0.39284748, -0.8314696, -0.39284748), (-0.39284748, -0.8314696, -0.39284748), (-0.27059805, -0.9238795, -0.27059805), (-0.21260752, -0.9238795, -0.31818965), (-0.30865827, -0.8314696, -0.46193975), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.9238795, -0.31818965), (-0.14644662, -0.9238795, -0.35355338), (-0.21260752, -0.8314696, -0.51328), (-0.21260752, -0.8314696, -0.51328), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.9238795, -0.37533027), (-0.108386375, -0.8314696, -0.5448951), (-0.108386375, -0.8314696, -0.5448951), (-0.074657835, -0.9238795, -0.37533027), (-2.3432602e-17, -0.9238795, -0.38268343), (-3.4018865e-17, -0.8314696, -0.55557024), (-3.4018865e-17, -0.8314696, -0.55557024), (-2.3432602e-17, -0.9238795, -0.38268343), (0.074657835, -0.9238795, -0.37533027), (0.108386375, -0.8314696, -0.5448951), (0.108386375, -0.8314696, -0.5448951), (0.074657835, -0.9238795, -0.37533027), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.8314696, -0.51328), (0.21260752, -0.8314696, -0.51328), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.9238795, -0.31818965), (0.30865827, -0.8314696, -0.46193975), (0.30865827, -0.8314696, -0.46193975), (0.21260752, -0.9238795, -0.31818965), (0.27059805, -0.9238795, -0.27059805), (0.39284748, -0.8314696, -0.39284748), (0.39284748, -0.8314696, -0.39284748), (0.27059805, -0.9238795, -0.27059805), (0.31818965, -0.9238795, -0.21260752), (0.46193975, -0.8314696, -0.30865827), (0.46193975, -0.8314696, -0.30865827), (0.31818965, -0.9238795, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.51328, -0.8314696, -0.21260752), (0.51328, -0.8314696, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.37533027, -0.9238795, -0.074657835), (0.5448951, -0.8314696, -0.108386375), (0.5448951, -0.8314696, -0.108386375), (0.37533027, -0.9238795, -0.074657835), (0.38268343, -0.9238795, -4.6865205e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.55557024, -0.8314696, -6.803773e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.37533027, -0.9238795, 0.074657835), (0.5448951, -0.8314696, 0.108386375), (0.5448951, -0.8314696, 0.108386375), (0.37533027, -0.9238795, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.51328, -0.8314696, 0.21260752), (0.51328, -0.8314696, 0.21260752), (0.35355338, -0.9238795, 0.14644662), (0.31818965, -0.9238795, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.46193975, -0.8314696, 0.30865827), (0.31818965, -0.9238795, 0.21260752), (0.27059805, -0.9238795, 0.27059805), (0.39284748, -0.8314696, 0.39284748), (0.39284748, -0.8314696, 0.39284748), (0.27059805, -0.9238795, 0.27059805), (0.21260752, -0.9238795, 0.31818965), (0.30865827, -0.8314696, 0.46193975), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.9238795, 0.31818965), (0.14644662, -0.9238795, 0.35355338), (0.21260752, -0.8314696, 0.51328), (0.21260752, -0.8314696, 0.51328), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.9238795, 0.37533027), (0.108386375, -0.8314696, 0.5448951), (0.108386375, -0.8314696, 0.5448951), (0.074657835, -0.9238795, 0.37533027), (7.0297805e-17, -0.9238795, 0.38268343), (1.020566e-16, -0.8314696, 0.55557024), (1.020566e-16, -0.8314696, 0.55557024), (7.0297805e-17, -0.9238795, 0.38268343), (-0.074657835, -0.9238795, 0.37533027), (-0.108386375, -0.8314696, 0.5448951), (-0.108386375, -0.8314696, 0.5448951), (-0.074657835, -0.9238795, 0.37533027), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.8314696, 0.51328), (-0.21260752, -0.8314696, 0.51328), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.9238795, 0.31818965), (-0.30865827, -0.8314696, 0.46193975), (-0.30865827, -0.8314696, 0.46193975), (-0.21260752, -0.9238795, 0.31818965), (-0.27059805, -0.9238795, 0.27059805), (-0.39284748, -0.8314696, 0.39284748), (-0.39284748, -0.8314696, 0.39284748), (-0.27059805, -0.9238795, 0.27059805), (-0.31818965, -0.9238795, 0.21260752), (-0.46193975, -0.8314696, 0.30865827), (-0.46193975, -0.8314696, 0.30865827), (-0.31818965, -0.9238795, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.51328, -0.8314696, 0.21260752), (-0.51328, -0.8314696, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.37533027, -0.9238795, 0.074657835), (-0.5448951, -0.8314696, 0.108386375), (-0.5448951, -0.8314696, 0.108386375), (-0.37533027, -0.9238795, 0.074657835), (-0.38268343, -0.9238795, 0), (-0.55557024, -0.8314696, 0), (-0.38268343, -0.9238795, 0), (-0.19509032, -0.98078525, 0), (-0.19134171, -0.98078525, -0.038060233), (-0.37533027, -0.9238795, -0.074657835), (-0.37533027, -0.9238795, -0.074657835), (-0.19134171, -0.98078525, -0.038060233), (-0.18023996, -0.98078525, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.35355338, -0.9238795, -0.14644662), (-0.18023996, -0.98078525, -0.074657835), (-0.16221167, -0.98078525, -0.108386375), (-0.31818965, -0.9238795, -0.21260752), (-0.31818965, -0.9238795, -0.21260752), (-0.16221167, -0.98078525, -0.108386375), (-0.13794969, -0.98078525, -0.13794969), (-0.27059805, -0.9238795, -0.27059805), (-0.27059805, -0.9238795, -0.27059805), (-0.13794969, -0.98078525, -0.13794969), (-0.108386375, -0.98078525, -0.16221167), (-0.21260752, -0.9238795, -0.31818965), (-0.21260752, -0.9238795, -0.31818965), (-0.108386375, -0.98078525, -0.16221167), (-0.074657835, -0.98078525, -0.18023996), (-0.14644662, -0.9238795, -0.35355338), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.98078525, -0.18023996), (-0.038060233, -0.98078525, -0.19134171), (-0.074657835, -0.9238795, -0.37533027), (-0.074657835, -0.9238795, -0.37533027), (-0.038060233, -0.98078525, -0.19134171), (-1.1945837e-17, -0.98078525, -0.19509032), (-2.3432602e-17, -0.9238795, -0.38268343), (-2.3432602e-17, -0.9238795, -0.38268343), (-1.1945837e-17, -0.98078525, -0.19509032), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.9238795, -0.37533027), (0.074657835, -0.9238795, -0.37533027), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.98078525, -0.18023996), (0.14644662, -0.9238795, -0.35355338), (0.14644662, -0.9238795, -0.35355338), (0.074657835, -0.98078525, -0.18023996), (0.108386375, -0.98078525, -0.16221167), (0.21260752, -0.9238795, -0.31818965), (0.21260752, -0.9238795, -0.31818965), (0.108386375, -0.98078525, -0.16221167), (0.13794969, -0.98078525, -0.13794969), (0.27059805, -0.9238795, -0.27059805), (0.27059805, -0.9238795, -0.27059805), (0.13794969, -0.98078525, -0.13794969), (0.16221167, -0.98078525, -0.108386375), (0.31818965, -0.9238795, -0.21260752), (0.31818965, -0.9238795, -0.21260752), (0.16221167, -0.98078525, -0.108386375), (0.18023996, -0.98078525, -0.074657835), (0.35355338, -0.9238795, -0.14644662), (0.35355338, -0.9238795, -0.14644662), (0.18023996, -0.98078525, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.37533027, -0.9238795, -0.074657835), (0.37533027, -0.9238795, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.19509032, -0.98078525, -2.3891674e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.38268343, -0.9238795, -4.6865205e-17), (0.19509032, -0.98078525, -2.3891674e-17), (0.19134171, -0.98078525, 0.038060233), (0.37533027, -0.9238795, 0.074657835), (0.37533027, -0.9238795, 0.074657835), (0.19134171, -0.98078525, 0.038060233), (0.18023996, -0.98078525, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.35355338, -0.9238795, 0.14644662), (0.18023996, -0.98078525, 0.074657835), (0.16221167, -0.98078525, 0.108386375), (0.31818965, -0.9238795, 0.21260752), (0.31818965, -0.9238795, 0.21260752), (0.16221167, -0.98078525, 0.108386375), (0.13794969, -0.98078525, 0.13794969), (0.27059805, -0.9238795, 0.27059805), (0.27059805, -0.9238795, 0.27059805), (0.13794969, -0.98078525, 0.13794969), (0.108386375, -0.98078525, 0.16221167), (0.21260752, -0.9238795, 0.31818965), (0.21260752, -0.9238795, 0.31818965), (0.108386375, -0.98078525, 0.16221167), (0.074657835, -0.98078525, 0.18023996), (0.14644662, -0.9238795, 0.35355338), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.98078525, 0.18023996), (0.038060233, -0.98078525, 0.19134171), (0.074657835, -0.9238795, 0.37533027), (0.074657835, -0.9238795, 0.37533027), (0.038060233, -0.98078525, 0.19134171), (3.583751e-17, -0.98078525, 0.19509032), (7.0297805e-17, -0.9238795, 0.38268343), (7.0297805e-17, -0.9238795, 0.38268343), (3.583751e-17, -0.98078525, 0.19509032), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.9238795, 0.37533027), (-0.074657835, -0.9238795, 0.37533027), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.98078525, 0.18023996), (-0.14644662, -0.9238795, 0.35355338), (-0.14644662, -0.9238795, 0.35355338), (-0.074657835, -0.98078525, 0.18023996), (-0.108386375, -0.98078525, 0.16221167), (-0.21260752, -0.9238795, 0.31818965), (-0.21260752, -0.9238795, 0.31818965), (-0.108386375, -0.98078525, 0.16221167), (-0.13794969, -0.98078525, 0.13794969), (-0.27059805, -0.9238795, 0.27059805), (-0.27059805, -0.9238795, 0.27059805), (-0.13794969, -0.98078525, 0.13794969), (-0.16221167, -0.98078525, 0.108386375), (-0.31818965, -0.9238795, 0.21260752), (-0.31818965, -0.9238795, 0.21260752), (-0.16221167, -0.98078525, 0.108386375), (-0.18023996, -0.98078525, 0.074657835), (-0.35355338, -0.9238795, 0.14644662), (-0.35355338, -0.9238795, 0.14644662), (-0.18023996, -0.98078525, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.37533027, -0.9238795, 0.074657835), (-0.37533027, -0.9238795, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.19509032, -0.98078525, 0), (-0.38268343, -0.9238795, 0), (-0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (-2.220446e-16, -1, -5.551115e-17), (-0.19134171, -0.98078525, -0.038060233), (-0.19134171, -0.98078525, -0.038060233), (-2.220446e-16, -1, -5.551115e-17), (-2.220446e-16, -1, -1.110223e-16), (-0.18023996, -0.98078525, -0.074657835), (-0.18023996, -0.98078525, -0.074657835), (-2.220446e-16, -1, -1.110223e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.16221167, -0.98078525, -0.108386375), (-0.16221167, -0.98078525, -0.108386375), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.13794969, -0.98078525, -0.13794969), (-0.13794969, -0.98078525, -0.13794969), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (-0.108386375, -0.98078525, -0.16221167), (-0.108386375, -0.98078525, -0.16221167), (-2.220446e-16, -1, -2.220446e-16), (-1.110223e-16, -1, -2.220446e-16), (-0.074657835, -0.98078525, -0.18023996), (-0.074657835, -0.98078525, -0.18023996), (-1.110223e-16, -1, -2.220446e-16), (-5.551115e-17, -1, -2.220446e-16), (-0.038060233, -0.98078525, -0.19134171), (-0.038060233, -0.98078525, -0.19134171), (-5.551115e-17, -1, -2.220446e-16), (-2.4651903e-32, -1, -2.220446e-16), (-1.1945837e-17, -0.98078525, -0.19509032), (-1.1945837e-17, -0.98078525, -0.19509032), (-2.4651903e-32, -1, -2.220446e-16), (5.551115e-17, -1, -2.220446e-16), (0.038060233, -0.98078525, -0.19134171), (0.038060233, -0.98078525, -0.19134171), (5.551115e-17, -1, -2.220446e-16), (1.110223e-16, -1, -2.220446e-16), (0.074657835, -0.98078525, -0.18023996), (0.074657835, -0.98078525, -0.18023996), (1.110223e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.108386375, -0.98078525, -0.16221167), (0.108386375, -0.98078525, -0.16221167), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.13794969, -0.98078525, -0.13794969), (0.13794969, -0.98078525, -0.13794969), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (0.16221167, -0.98078525, -0.108386375), (0.16221167, -0.98078525, -0.108386375), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -1.110223e-16), (0.18023996, -0.98078525, -0.074657835), (0.18023996, -0.98078525, -0.074657835), (2.220446e-16, -1, -1.110223e-16), (2.220446e-16, -1, -5.551115e-17), (0.19134171, -0.98078525, -0.038060233), (0.19134171, -0.98078525, -0.038060233), (2.220446e-16, -1, -5.551115e-17), (2.220446e-16, -1, -4.9303807e-32), (0.19509032, -0.98078525, -2.3891674e-17), (0.19509032, -0.98078525, -2.3891674e-17), (2.220446e-16, -1, -4.9303807e-32), (2.220446e-16, -1, 5.551115e-17), (0.19134171, -0.98078525, 0.038060233), (0.19134171, -0.98078525, 0.038060233), (2.220446e-16, -1, 5.551115e-17), (2.220446e-16, -1, 1.110223e-16), (0.18023996, -0.98078525, 0.074657835), (0.18023996, -0.98078525, 0.074657835), (2.220446e-16, -1, 1.110223e-16), (2.220446e-16, -1, 2.220446e-16), (0.16221167, -0.98078525, 0.108386375), (0.16221167, -0.98078525, 0.108386375), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (0.13794969, -0.98078525, 0.13794969), (0.13794969, -0.98078525, 0.13794969), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (0.108386375, -0.98078525, 0.16221167), (0.108386375, -0.98078525, 0.16221167), (2.220446e-16, -1, 2.220446e-16), (1.110223e-16, -1, 2.220446e-16), (0.074657835, -0.98078525, 0.18023996), (0.074657835, -0.98078525, 0.18023996), (1.110223e-16, -1, 2.220446e-16), (5.551115e-17, -1, 2.220446e-16), (0.038060233, -0.98078525, 0.19134171), (0.038060233, -0.98078525, 0.19134171), (5.551115e-17, -1, 2.220446e-16), (4.9303807e-32, -1, 2.220446e-16), (3.583751e-17, -0.98078525, 0.19509032), (3.583751e-17, -0.98078525, 0.19509032), (4.9303807e-32, -1, 2.220446e-16), (-5.551115e-17, -1, 2.220446e-16), (-0.038060233, -0.98078525, 0.19134171), (-0.038060233, -0.98078525, 0.19134171), (-5.551115e-17, -1, 2.220446e-16), (-1.110223e-16, -1, 2.220446e-16), (-0.074657835, -0.98078525, 0.18023996), (-0.074657835, -0.98078525, 0.18023996), (-1.110223e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.108386375, -0.98078525, 0.16221167), (-0.108386375, -0.98078525, 0.16221167), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.13794969, -0.98078525, 0.13794969), (-0.13794969, -0.98078525, 0.13794969), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (-0.16221167, -0.98078525, 0.108386375), (-0.16221167, -0.98078525, 0.108386375), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 1.110223e-16), (-0.18023996, -0.98078525, 0.074657835), (-0.18023996, -0.98078525, 0.074657835), (-2.220446e-16, -1, 1.110223e-16), (-2.220446e-16, -1, 5.551115e-17), (-0.19134171, -0.98078525, 0.038060233), (-0.19134171, -0.98078525, 0.038060233), (-2.220446e-16, -1, 5.551115e-17), (-2.220446e-16, -1, 0), (-0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (0.19509032, -0.98078525, 0), (0.19134171, -0.98078525, 0.038060233), (-2.220446e-16, -1, -5.551115e-17), (-2.220446e-16, -1, -5.551115e-17), (0.19134171, -0.98078525, 0.038060233), (0.18023996, -0.98078525, 0.074657835), (-2.220446e-16, -1, -1.110223e-16), (-2.220446e-16, -1, -1.110223e-16), (0.18023996, -0.98078525, 0.074657835), (0.16221167, -0.98078525, 0.108386375), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.16221167, -0.98078525, 0.108386375), (0.13794969, -0.98078525, 0.13794969), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.13794969, -0.98078525, 0.13794969), (0.108386375, -0.98078525, 0.16221167), (-2.220446e-16, -1, -2.220446e-16), (-2.220446e-16, -1, -2.220446e-16), (0.108386375, -0.98078525, 0.16221167), (0.074657835, -0.98078525, 0.18023996), (-1.110223e-16, -1, -2.220446e-16), (-1.110223e-16, -1, -2.220446e-16), (0.074657835, -0.98078525, 0.18023996), (0.038060233, -0.98078525, 0.19134171), (-5.551115e-17, -1, -2.220446e-16), (-5.551115e-17, -1, -2.220446e-16), (0.038060233, -0.98078525, 0.19134171), (1.1945837e-17, -0.98078525, 0.19509032), (-2.4651903e-32, -1, -2.220446e-16), (-2.4651903e-32, -1, -2.220446e-16), (1.1945837e-17, -0.98078525, 0.19509032), (-0.038060233, -0.98078525, 0.19134171), (5.551115e-17, -1, -2.220446e-16), (5.551115e-17, -1, -2.220446e-16), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.98078525, 0.18023996), (1.110223e-16, -1, -2.220446e-16), (1.110223e-16, -1, -2.220446e-16), (-0.074657835, -0.98078525, 0.18023996), (-0.108386375, -0.98078525, 0.16221167), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.108386375, -0.98078525, 0.16221167), (-0.13794969, -0.98078525, 0.13794969), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.13794969, -0.98078525, 0.13794969), (-0.16221167, -0.98078525, 0.108386375), (2.220446e-16, -1, -2.220446e-16), (2.220446e-16, -1, -2.220446e-16), (-0.16221167, -0.98078525, 0.108386375), (-0.18023996, -0.98078525, 0.074657835), (2.220446e-16, -1, -1.110223e-16), (2.220446e-16, -1, -1.110223e-16), (-0.18023996, -0.98078525, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (2.220446e-16, -1, -5.551115e-17), (2.220446e-16, -1, -5.551115e-17), (-0.19134171, -0.98078525, 0.038060233), (-0.19509032, -0.98078525, 2.3891674e-17), (2.220446e-16, -1, -4.9303807e-32), (2.220446e-16, -1, -4.9303807e-32), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.19134171, -0.98078525, -0.038060233), (2.220446e-16, -1, 5.551115e-17), (2.220446e-16, -1, 5.551115e-17), (-0.19134171, -0.98078525, -0.038060233), (-0.18023996, -0.98078525, -0.074657835), (2.220446e-16, -1, 1.110223e-16), (2.220446e-16, -1, 1.110223e-16), (-0.18023996, -0.98078525, -0.074657835), (-0.16221167, -0.98078525, -0.108386375), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.16221167, -0.98078525, -0.108386375), (-0.13794969, -0.98078525, -0.13794969), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.13794969, -0.98078525, -0.13794969), (-0.108386375, -0.98078525, -0.16221167), (2.220446e-16, -1, 2.220446e-16), (2.220446e-16, -1, 2.220446e-16), (-0.108386375, -0.98078525, -0.16221167), (-0.074657835, -0.98078525, -0.18023996), (1.110223e-16, -1, 2.220446e-16), (1.110223e-16, -1, 2.220446e-16), (-0.074657835, -0.98078525, -0.18023996), (-0.038060233, -0.98078525, -0.19134171), (5.551115e-17, -1, 2.220446e-16), (5.551115e-17, -1, 2.220446e-16), (-0.038060233, -0.98078525, -0.19134171), (-3.583751e-17, -0.98078525, -0.19509032), (4.9303807e-32, -1, 2.220446e-16), (4.9303807e-32, -1, 2.220446e-16), (-3.583751e-17, -0.98078525, -0.19509032), (0.038060233, -0.98078525, -0.19134171), (-5.551115e-17, -1, 2.220446e-16), (-5.551115e-17, -1, 2.220446e-16), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.98078525, -0.18023996), (-1.110223e-16, -1, 2.220446e-16), (-1.110223e-16, -1, 2.220446e-16), (0.074657835, -0.98078525, -0.18023996), (0.108386375, -0.98078525, -0.16221167), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.108386375, -0.98078525, -0.16221167), (0.13794969, -0.98078525, -0.13794969), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.13794969, -0.98078525, -0.13794969), (0.16221167, -0.98078525, -0.108386375), (-2.220446e-16, -1, 2.220446e-16), (-2.220446e-16, -1, 2.220446e-16), (0.16221167, -0.98078525, -0.108386375), (0.18023996, -0.98078525, -0.074657835), (-2.220446e-16, -1, 1.110223e-16), (-2.220446e-16, -1, 1.110223e-16), (0.18023996, -0.98078525, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (-2.220446e-16, -1, 5.551115e-17), (-2.220446e-16, -1, 5.551115e-17), (0.19134171, -0.98078525, -0.038060233), (0.19509032, -0.98078525, 0), (-2.220446e-16, -1, 0), (0.19509032, -0.98078525, 0), (0.38268343, -0.9238795, 0), (0.37533027, -0.9238795, 0.074657835), (0.19134171, -0.98078525, 0.038060233), (0.19134171, -0.98078525, 0.038060233), (0.37533027, -0.9238795, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.18023996, -0.98078525, 0.074657835), (0.18023996, -0.98078525, 0.074657835), (0.35355338, -0.9238795, 0.14644662), (0.31818965, -0.9238795, 0.21260752), (0.16221167, -0.98078525, 0.108386375), (0.16221167, -0.98078525, 0.108386375), (0.31818965, -0.9238795, 0.21260752), (0.27059805, -0.9238795, 0.27059805), (0.13794969, -0.98078525, 0.13794969), (0.13794969, -0.98078525, 0.13794969), (0.27059805, -0.9238795, 0.27059805), (0.21260752, -0.9238795, 0.31818965), (0.108386375, -0.98078525, 0.16221167), (0.108386375, -0.98078525, 0.16221167), (0.21260752, -0.9238795, 0.31818965), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.98078525, 0.18023996), (0.074657835, -0.98078525, 0.18023996), (0.14644662, -0.9238795, 0.35355338), (0.074657835, -0.9238795, 0.37533027), (0.038060233, -0.98078525, 0.19134171), (0.038060233, -0.98078525, 0.19134171), (0.074657835, -0.9238795, 0.37533027), (2.3432602e-17, -0.9238795, 0.38268343), (1.1945837e-17, -0.98078525, 0.19509032), (1.1945837e-17, -0.98078525, 0.19509032), (2.3432602e-17, -0.9238795, 0.38268343), (-0.074657835, -0.9238795, 0.37533027), (-0.038060233, -0.98078525, 0.19134171), (-0.038060233, -0.98078525, 0.19134171), (-0.074657835, -0.9238795, 0.37533027), (-0.14644662, -0.9238795, 0.35355338), (-0.074657835, -0.98078525, 0.18023996), (-0.074657835, -0.98078525, 0.18023996), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.9238795, 0.31818965), (-0.108386375, -0.98078525, 0.16221167), (-0.108386375, -0.98078525, 0.16221167), (-0.21260752, -0.9238795, 0.31818965), (-0.27059805, -0.9238795, 0.27059805), (-0.13794969, -0.98078525, 0.13794969), (-0.13794969, -0.98078525, 0.13794969), (-0.27059805, -0.9238795, 0.27059805), (-0.31818965, -0.9238795, 0.21260752), (-0.16221167, -0.98078525, 0.108386375), (-0.16221167, -0.98078525, 0.108386375), (-0.31818965, -0.9238795, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.18023996, -0.98078525, 0.074657835), (-0.18023996, -0.98078525, 0.074657835), (-0.35355338, -0.9238795, 0.14644662), (-0.37533027, -0.9238795, 0.074657835), (-0.19134171, -0.98078525, 0.038060233), (-0.19134171, -0.98078525, 0.038060233), (-0.37533027, -0.9238795, 0.074657835), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.19509032, -0.98078525, 2.3891674e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.37533027, -0.9238795, -0.074657835), (-0.19134171, -0.98078525, -0.038060233), (-0.19134171, -0.98078525, -0.038060233), (-0.37533027, -0.9238795, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.18023996, -0.98078525, -0.074657835), (-0.18023996, -0.98078525, -0.074657835), (-0.35355338, -0.9238795, -0.14644662), (-0.31818965, -0.9238795, -0.21260752), (-0.16221167, -0.98078525, -0.108386375), (-0.16221167, -0.98078525, -0.108386375), (-0.31818965, -0.9238795, -0.21260752), (-0.27059805, -0.9238795, -0.27059805), (-0.13794969, -0.98078525, -0.13794969), (-0.13794969, -0.98078525, -0.13794969), (-0.27059805, -0.9238795, -0.27059805), (-0.21260752, -0.9238795, -0.31818965), (-0.108386375, -0.98078525, -0.16221167), (-0.108386375, -0.98078525, -0.16221167), (-0.21260752, -0.9238795, -0.31818965), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.98078525, -0.18023996), (-0.074657835, -0.98078525, -0.18023996), (-0.14644662, -0.9238795, -0.35355338), (-0.074657835, -0.9238795, -0.37533027), (-0.038060233, -0.98078525, -0.19134171), (-0.038060233, -0.98078525, -0.19134171), (-0.074657835, -0.9238795, -0.37533027), (-7.0297805e-17, -0.9238795, -0.38268343), (-3.583751e-17, -0.98078525, -0.19509032), (-3.583751e-17, -0.98078525, -0.19509032), (-7.0297805e-17, -0.9238795, -0.38268343), (0.074657835, -0.9238795, -0.37533027), (0.038060233, -0.98078525, -0.19134171), (0.038060233, -0.98078525, -0.19134171), (0.074657835, -0.9238795, -0.37533027), (0.14644662, -0.9238795, -0.35355338), (0.074657835, -0.98078525, -0.18023996), (0.074657835, -0.98078525, -0.18023996), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.9238795, -0.31818965), (0.108386375, -0.98078525, -0.16221167), (0.108386375, -0.98078525, -0.16221167), (0.21260752, -0.9238795, -0.31818965), (0.27059805, -0.9238795, -0.27059805), (0.13794969, -0.98078525, -0.13794969), (0.13794969, -0.98078525, -0.13794969), (0.27059805, -0.9238795, -0.27059805), (0.31818965, -0.9238795, -0.21260752), (0.16221167, -0.98078525, -0.108386375), (0.16221167, -0.98078525, -0.108386375), (0.31818965, -0.9238795, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.18023996, -0.98078525, -0.074657835), (0.18023996, -0.98078525, -0.074657835), (0.35355338, -0.9238795, -0.14644662), (0.37533027, -0.9238795, -0.074657835), (0.19134171, -0.98078525, -0.038060233), (0.19134171, -0.98078525, -0.038060233), (0.37533027, -0.9238795, -0.074657835), (0.38268343, -0.9238795, 0), (0.19509032, -0.98078525, 0), (0.38268343, -0.9238795, 0), (0.55557024, -0.8314696, 0), (0.5448951, -0.8314696, 0.108386375), (0.37533027, -0.9238795, 0.074657835), (0.37533027, -0.9238795, 0.074657835), (0.5448951, -0.8314696, 0.108386375), (0.51328, -0.8314696, 0.21260752), (0.35355338, -0.9238795, 0.14644662), (0.35355338, -0.9238795, 0.14644662), (0.51328, -0.8314696, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.31818965, -0.9238795, 0.21260752), (0.31818965, -0.9238795, 0.21260752), (0.46193975, -0.8314696, 0.30865827), (0.39284748, -0.8314696, 0.39284748), (0.27059805, -0.9238795, 0.27059805), (0.27059805, -0.9238795, 0.27059805), (0.39284748, -0.8314696, 0.39284748), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.9238795, 0.31818965), (0.21260752, -0.9238795, 0.31818965), (0.30865827, -0.8314696, 0.46193975), (0.21260752, -0.8314696, 0.51328), (0.14644662, -0.9238795, 0.35355338), (0.14644662, -0.9238795, 0.35355338), (0.21260752, -0.8314696, 0.51328), (0.108386375, -0.8314696, 0.5448951), (0.074657835, -0.9238795, 0.37533027), (0.074657835, -0.9238795, 0.37533027), (0.108386375, -0.8314696, 0.5448951), (3.4018865e-17, -0.8314696, 0.55557024), (2.3432602e-17, -0.9238795, 0.38268343), (2.3432602e-17, -0.9238795, 0.38268343), (3.4018865e-17, -0.8314696, 0.55557024), (-0.108386375, -0.8314696, 0.5448951), (-0.074657835, -0.9238795, 0.37533027), (-0.074657835, -0.9238795, 0.37533027), (-0.108386375, -0.8314696, 0.5448951), (-0.21260752, -0.8314696, 0.51328), (-0.14644662, -0.9238795, 0.35355338), (-0.14644662, -0.9238795, 0.35355338), (-0.21260752, -0.8314696, 0.51328), (-0.30865827, -0.8314696, 0.46193975), (-0.21260752, -0.9238795, 0.31818965), (-0.21260752, -0.9238795, 0.31818965), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.8314696, 0.39284748), (-0.27059805, -0.9238795, 0.27059805), (-0.27059805, -0.9238795, 0.27059805), (-0.39284748, -0.8314696, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.31818965, -0.9238795, 0.21260752), (-0.31818965, -0.9238795, 0.21260752), (-0.46193975, -0.8314696, 0.30865827), (-0.51328, -0.8314696, 0.21260752), (-0.35355338, -0.9238795, 0.14644662), (-0.35355338, -0.9238795, 0.14644662), (-0.51328, -0.8314696, 0.21260752), (-0.5448951, -0.8314696, 0.108386375), (-0.37533027, -0.9238795, 0.074657835), (-0.37533027, -0.9238795, 0.074657835), (-0.5448951, -0.8314696, 0.108386375), (-0.55557024, -0.8314696, 6.803773e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.38268343, -0.9238795, 4.6865205e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.5448951, -0.8314696, -0.108386375), (-0.37533027, -0.9238795, -0.074657835), (-0.37533027, -0.9238795, -0.074657835), (-0.5448951, -0.8314696, -0.108386375), (-0.51328, -0.8314696, -0.21260752), (-0.35355338, -0.9238795, -0.14644662), (-0.35355338, -0.9238795, -0.14644662), (-0.51328, -0.8314696, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.31818965, -0.9238795, -0.21260752), (-0.31818965, -0.9238795, -0.21260752), (-0.46193975, -0.8314696, -0.30865827), (-0.39284748, -0.8314696, -0.39284748), (-0.27059805, -0.9238795, -0.27059805), (-0.27059805, -0.9238795, -0.27059805), (-0.39284748, -0.8314696, -0.39284748), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.9238795, -0.31818965), (-0.21260752, -0.9238795, -0.31818965), (-0.30865827, -0.8314696, -0.46193975), (-0.21260752, -0.8314696, -0.51328), (-0.14644662, -0.9238795, -0.35355338), (-0.14644662, -0.9238795, -0.35355338), (-0.21260752, -0.8314696, -0.51328), (-0.108386375, -0.8314696, -0.5448951), (-0.074657835, -0.9238795, -0.37533027), (-0.074657835, -0.9238795, -0.37533027), (-0.108386375, -0.8314696, -0.5448951), (-1.020566e-16, -0.8314696, -0.55557024), (-7.0297805e-17, -0.9238795, -0.38268343), (-7.0297805e-17, -0.9238795, -0.38268343), (-1.020566e-16, -0.8314696, -0.55557024), (0.108386375, -0.8314696, -0.5448951), (0.074657835, -0.9238795, -0.37533027), (0.074657835, -0.9238795, -0.37533027), (0.108386375, -0.8314696, -0.5448951), (0.21260752, -0.8314696, -0.51328), (0.14644662, -0.9238795, -0.35355338), (0.14644662, -0.9238795, -0.35355338), (0.21260752, -0.8314696, -0.51328), (0.30865827, -0.8314696, -0.46193975), (0.21260752, -0.9238795, -0.31818965), (0.21260752, -0.9238795, -0.31818965), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.8314696, -0.39284748), (0.27059805, -0.9238795, -0.27059805), (0.27059805, -0.9238795, -0.27059805), (0.39284748, -0.8314696, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.31818965, -0.9238795, -0.21260752), (0.31818965, -0.9238795, -0.21260752), (0.46193975, -0.8314696, -0.30865827), (0.51328, -0.8314696, -0.21260752), (0.35355338, -0.9238795, -0.14644662), (0.35355338, -0.9238795, -0.14644662), (0.51328, -0.8314696, -0.21260752), (0.5448951, -0.8314696, -0.108386375), (0.37533027, -0.9238795, -0.074657835), (0.37533027, -0.9238795, -0.074657835), (0.5448951, -0.8314696, -0.108386375), (0.55557024, -0.8314696, 0), (0.38268343, -0.9238795, 0), (0.55557024, -0.8314696, 0), (0.70710677, -0.70710677, 0), (0.69351995, -0.70710677, 0.13794969), (0.5448951, -0.8314696, 0.108386375), (0.5448951, -0.8314696, 0.108386375), (0.69351995, -0.70710677, 0.13794969), (0.6532815, -0.70710677, 0.27059805), (0.51328, -0.8314696, 0.21260752), (0.51328, -0.8314696, 0.21260752), (0.6532815, -0.70710677, 0.27059805), (0.5879378, -0.70710677, 0.39284748), (0.46193975, -0.8314696, 0.30865827), (0.46193975, -0.8314696, 0.30865827), (0.5879378, -0.70710677, 0.39284748), (0.5, -0.70710677, 0.5), (0.39284748, -0.8314696, 0.39284748), (0.39284748, -0.8314696, 0.39284748), (0.5, -0.70710677, 0.5), (0.39284748, -0.70710677, 0.5879378), (0.30865827, -0.8314696, 0.46193975), (0.30865827, -0.8314696, 0.46193975), (0.39284748, -0.70710677, 0.5879378), (0.27059805, -0.70710677, 0.6532815), (0.21260752, -0.8314696, 0.51328), (0.21260752, -0.8314696, 0.51328), (0.27059805, -0.70710677, 0.6532815), (0.13794969, -0.70710677, 0.69351995), (0.108386375, -0.8314696, 0.5448951), (0.108386375, -0.8314696, 0.5448951), (0.13794969, -0.70710677, 0.69351995), (4.3297803e-17, -0.70710677, 0.70710677), (3.4018865e-17, -0.8314696, 0.55557024), (3.4018865e-17, -0.8314696, 0.55557024), (4.3297803e-17, -0.70710677, 0.70710677), (-0.13794969, -0.70710677, 0.69351995), (-0.108386375, -0.8314696, 0.5448951), (-0.108386375, -0.8314696, 0.5448951), (-0.13794969, -0.70710677, 0.69351995), (-0.27059805, -0.70710677, 0.6532815), (-0.21260752, -0.8314696, 0.51328), (-0.21260752, -0.8314696, 0.51328), (-0.27059805, -0.70710677, 0.6532815), (-0.39284748, -0.70710677, 0.5879378), (-0.30865827, -0.8314696, 0.46193975), (-0.30865827, -0.8314696, 0.46193975), (-0.39284748, -0.70710677, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.39284748, -0.8314696, 0.39284748), (-0.39284748, -0.8314696, 0.39284748), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.70710677, 0.39284748), (-0.46193975, -0.8314696, 0.30865827), (-0.46193975, -0.8314696, 0.30865827), (-0.5879378, -0.70710677, 0.39284748), (-0.6532815, -0.70710677, 0.27059805), (-0.51328, -0.8314696, 0.21260752), (-0.51328, -0.8314696, 0.21260752), (-0.6532815, -0.70710677, 0.27059805), (-0.69351995, -0.70710677, 0.13794969), (-0.5448951, -0.8314696, 0.108386375), (-0.5448951, -0.8314696, 0.108386375), (-0.69351995, -0.70710677, 0.13794969), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.55557024, -0.8314696, 6.803773e-17), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.69351995, -0.70710677, -0.13794969), (-0.5448951, -0.8314696, -0.108386375), (-0.5448951, -0.8314696, -0.108386375), (-0.69351995, -0.70710677, -0.13794969), (-0.6532815, -0.70710677, -0.27059805), (-0.51328, -0.8314696, -0.21260752), (-0.51328, -0.8314696, -0.21260752), (-0.6532815, -0.70710677, -0.27059805), (-0.5879378, -0.70710677, -0.39284748), (-0.46193975, -0.8314696, -0.30865827), (-0.46193975, -0.8314696, -0.30865827), (-0.5879378, -0.70710677, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.8314696, -0.39284748), (-0.39284748, -0.8314696, -0.39284748), (-0.5, -0.70710677, -0.5), (-0.39284748, -0.70710677, -0.5879378), (-0.30865827, -0.8314696, -0.46193975), (-0.30865827, -0.8314696, -0.46193975), (-0.39284748, -0.70710677, -0.5879378), (-0.27059805, -0.70710677, -0.6532815), (-0.21260752, -0.8314696, -0.51328), (-0.21260752, -0.8314696, -0.51328), (-0.27059805, -0.70710677, -0.6532815), (-0.13794969, -0.70710677, -0.69351995), (-0.108386375, -0.8314696, -0.5448951), (-0.108386375, -0.8314696, -0.5448951), (-0.13794969, -0.70710677, -0.69351995), (-1.298934e-16, -0.70710677, -0.70710677), (-1.020566e-16, -0.8314696, -0.55557024), (-1.020566e-16, -0.8314696, -0.55557024), (-1.298934e-16, -0.70710677, -0.70710677), (0.13794969, -0.70710677, -0.69351995), (0.108386375, -0.8314696, -0.5448951), (0.108386375, -0.8314696, -0.5448951), (0.13794969, -0.70710677, -0.69351995), (0.27059805, -0.70710677, -0.6532815), (0.21260752, -0.8314696, -0.51328), (0.21260752, -0.8314696, -0.51328), (0.27059805, -0.70710677, -0.6532815), (0.39284748, -0.70710677, -0.5879378), (0.30865827, -0.8314696, -0.46193975), (0.30865827, -0.8314696, -0.46193975), (0.39284748, -0.70710677, -0.5879378), (0.5, -0.70710677, -0.5), (0.39284748, -0.8314696, -0.39284748), (0.39284748, -0.8314696, -0.39284748), (0.5, -0.70710677, -0.5), (0.5879378, -0.70710677, -0.39284748), (0.46193975, -0.8314696, -0.30865827), (0.46193975, -0.8314696, -0.30865827), (0.5879378, -0.70710677, -0.39284748), (0.6532815, -0.70710677, -0.27059805), (0.51328, -0.8314696, -0.21260752), (0.51328, -0.8314696, -0.21260752), (0.6532815, -0.70710677, -0.27059805), (0.69351995, -0.70710677, -0.13794969), (0.5448951, -0.8314696, -0.108386375), (0.5448951, -0.8314696, -0.108386375), (0.69351995, -0.70710677, -0.13794969), (0.70710677, -0.70710677, 0), (0.55557024, -0.8314696, 0), (0.70710677, -0.70710677, 0), (0.8314696, -0.55557024, 0), (0.81549317, -0.55557024, 0.16221167), (0.69351995, -0.70710677, 0.13794969), (0.69351995, -0.70710677, 0.13794969), (0.81549317, -0.55557024, 0.16221167), (0.76817775, -0.55557024, 0.31818965), (0.6532815, -0.70710677, 0.27059805), (0.6532815, -0.70710677, 0.27059805), (0.76817775, -0.55557024, 0.31818965), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.70710677, 0.39284748), (0.5879378, -0.70710677, 0.39284748), (0.6913417, -0.55557024, 0.46193975), (0.5879378, -0.55557024, 0.5879378), (0.5, -0.70710677, 0.5), (0.5, -0.70710677, 0.5), (0.5879378, -0.55557024, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.39284748, -0.70710677, 0.5879378), (0.39284748, -0.70710677, 0.5879378), (0.46193975, -0.55557024, 0.6913417), (0.31818965, -0.55557024, 0.76817775), (0.27059805, -0.70710677, 0.6532815), (0.27059805, -0.70710677, 0.6532815), (0.31818965, -0.55557024, 0.76817775), (0.16221167, -0.55557024, 0.81549317), (0.13794969, -0.70710677, 0.69351995), (0.13794969, -0.70710677, 0.69351995), (0.16221167, -0.55557024, 0.81549317), (5.091283e-17, -0.55557024, 0.8314696), (4.3297803e-17, -0.70710677, 0.70710677), (4.3297803e-17, -0.70710677, 0.70710677), (5.091283e-17, -0.55557024, 0.8314696), (-0.16221167, -0.55557024, 0.81549317), (-0.13794969, -0.70710677, 0.69351995), (-0.13794969, -0.70710677, 0.69351995), (-0.16221167, -0.55557024, 0.81549317), (-0.31818965, -0.55557024, 0.76817775), (-0.27059805, -0.70710677, 0.6532815), (-0.27059805, -0.70710677, 0.6532815), (-0.31818965, -0.55557024, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.39284748, -0.70710677, 0.5879378), (-0.39284748, -0.70710677, 0.5879378), (-0.46193975, -0.55557024, 0.6913417), (-0.5879378, -0.55557024, 0.5879378), (-0.5, -0.70710677, 0.5), (-0.5, -0.70710677, 0.5), (-0.5879378, -0.55557024, 0.5879378), (-0.6913417, -0.55557024, 0.46193975), (-0.5879378, -0.70710677, 0.39284748), (-0.5879378, -0.70710677, 0.39284748), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.55557024, 0.31818965), (-0.6532815, -0.70710677, 0.27059805), (-0.6532815, -0.70710677, 0.27059805), (-0.76817775, -0.55557024, 0.31818965), (-0.81549317, -0.55557024, 0.16221167), (-0.69351995, -0.70710677, 0.13794969), (-0.69351995, -0.70710677, 0.13794969), (-0.81549317, -0.55557024, 0.16221167), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.70710677, -0.70710677, 8.6595606e-17), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.81549317, -0.55557024, -0.16221167), (-0.69351995, -0.70710677, -0.13794969), (-0.69351995, -0.70710677, -0.13794969), (-0.81549317, -0.55557024, -0.16221167), (-0.76817775, -0.55557024, -0.31818965), (-0.6532815, -0.70710677, -0.27059805), (-0.6532815, -0.70710677, -0.27059805), (-0.76817775, -0.55557024, -0.31818965), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.70710677, -0.39284748), (-0.5879378, -0.70710677, -0.39284748), (-0.6913417, -0.55557024, -0.46193975), (-0.5879378, -0.55557024, -0.5879378), (-0.5, -0.70710677, -0.5), (-0.5, -0.70710677, -0.5), (-0.5879378, -0.55557024, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.39284748, -0.70710677, -0.5879378), (-0.39284748, -0.70710677, -0.5879378), (-0.46193975, -0.55557024, -0.6913417), (-0.31818965, -0.55557024, -0.76817775), (-0.27059805, -0.70710677, -0.6532815), (-0.27059805, -0.70710677, -0.6532815), (-0.31818965, -0.55557024, -0.76817775), (-0.16221167, -0.55557024, -0.81549317), (-0.13794969, -0.70710677, -0.69351995), (-0.13794969, -0.70710677, -0.69351995), (-0.16221167, -0.55557024, -0.81549317), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.298934e-16, -0.70710677, -0.70710677), (-1.298934e-16, -0.70710677, -0.70710677), (-1.5273849e-16, -0.55557024, -0.8314696), (0.16221167, -0.55557024, -0.81549317), (0.13794969, -0.70710677, -0.69351995), (0.13794969, -0.70710677, -0.69351995), (0.16221167, -0.55557024, -0.81549317), (0.31818965, -0.55557024, -0.76817775), (0.27059805, -0.70710677, -0.6532815), (0.27059805, -0.70710677, -0.6532815), (0.31818965, -0.55557024, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.39284748, -0.70710677, -0.5879378), (0.39284748, -0.70710677, -0.5879378), (0.46193975, -0.55557024, -0.6913417), (0.5879378, -0.55557024, -0.5879378), (0.5, -0.70710677, -0.5), (0.5, -0.70710677, -0.5), (0.5879378, -0.55557024, -0.5879378), (0.6913417, -0.55557024, -0.46193975), (0.5879378, -0.70710677, -0.39284748), (0.5879378, -0.70710677, -0.39284748), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.55557024, -0.31818965), (0.6532815, -0.70710677, -0.27059805), (0.6532815, -0.70710677, -0.27059805), (0.76817775, -0.55557024, -0.31818965), (0.81549317, -0.55557024, -0.16221167), (0.69351995, -0.70710677, -0.13794969), (0.69351995, -0.70710677, -0.13794969), (0.81549317, -0.55557024, -0.16221167), (0.8314696, -0.55557024, 0), (0.70710677, -0.70710677, 0), (0.8314696, -0.55557024, 0), (0.9238795, -0.38268343, 0), (0.90612745, -0.38268343, 0.18023996), (0.81549317, -0.55557024, 0.16221167), (0.81549317, -0.55557024, 0.16221167), (0.90612745, -0.38268343, 0.18023996), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.55557024, 0.31818965), (0.76817775, -0.55557024, 0.31818965), (0.8535534, -0.38268343, 0.35355338), (0.76817775, -0.38268343, 0.51328), (0.6913417, -0.55557024, 0.46193975), (0.6913417, -0.55557024, 0.46193975), (0.76817775, -0.38268343, 0.51328), (0.6532815, -0.38268343, 0.6532815), (0.5879378, -0.55557024, 0.5879378), (0.5879378, -0.55557024, 0.5879378), (0.6532815, -0.38268343, 0.6532815), (0.51328, -0.38268343, 0.76817775), (0.46193975, -0.55557024, 0.6913417), (0.46193975, -0.55557024, 0.6913417), (0.51328, -0.38268343, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.31818965, -0.55557024, 0.76817775), (0.31818965, -0.55557024, 0.76817775), (0.35355338, -0.38268343, 0.8535534), (0.18023996, -0.38268343, 0.90612745), (0.16221167, -0.55557024, 0.81549317), (0.16221167, -0.55557024, 0.81549317), (0.18023996, -0.38268343, 0.90612745), (5.6571306e-17, -0.38268343, 0.9238795), (5.091283e-17, -0.55557024, 0.8314696), (5.091283e-17, -0.55557024, 0.8314696), (5.6571306e-17, -0.38268343, 0.9238795), (-0.18023996, -0.38268343, 0.90612745), (-0.16221167, -0.55557024, 0.81549317), (-0.16221167, -0.55557024, 0.81549317), (-0.18023996, -0.38268343, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.31818965, -0.55557024, 0.76817775), (-0.31818965, -0.55557024, 0.76817775), (-0.35355338, -0.38268343, 0.8535534), (-0.51328, -0.38268343, 0.76817775), (-0.46193975, -0.55557024, 0.6913417), (-0.46193975, -0.55557024, 0.6913417), (-0.51328, -0.38268343, 0.76817775), (-0.6532815, -0.38268343, 0.6532815), (-0.5879378, -0.55557024, 0.5879378), (-0.5879378, -0.55557024, 0.5879378), (-0.6532815, -0.38268343, 0.6532815), (-0.76817775, -0.38268343, 0.51328), (-0.6913417, -0.55557024, 0.46193975), (-0.6913417, -0.55557024, 0.46193975), (-0.76817775, -0.38268343, 0.51328), (-0.8535534, -0.38268343, 0.35355338), (-0.76817775, -0.55557024, 0.31818965), (-0.76817775, -0.55557024, 0.31818965), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.38268343, 0.18023996), (-0.81549317, -0.55557024, 0.16221167), (-0.81549317, -0.55557024, 0.16221167), (-0.90612745, -0.38268343, 0.18023996), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.8314696, -0.55557024, 1.0182566e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.90612745, -0.38268343, -0.18023996), (-0.81549317, -0.55557024, -0.16221167), (-0.81549317, -0.55557024, -0.16221167), (-0.90612745, -0.38268343, -0.18023996), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.55557024, -0.31818965), (-0.76817775, -0.55557024, -0.31818965), (-0.8535534, -0.38268343, -0.35355338), (-0.76817775, -0.38268343, -0.51328), (-0.6913417, -0.55557024, -0.46193975), (-0.6913417, -0.55557024, -0.46193975), (-0.76817775, -0.38268343, -0.51328), (-0.6532815, -0.38268343, -0.6532815), (-0.5879378, -0.55557024, -0.5879378), (-0.5879378, -0.55557024, -0.5879378), (-0.6532815, -0.38268343, -0.6532815), (-0.51328, -0.38268343, -0.76817775), (-0.46193975, -0.55557024, -0.6913417), (-0.46193975, -0.55557024, -0.6913417), (-0.51328, -0.38268343, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.31818965, -0.55557024, -0.76817775), (-0.31818965, -0.55557024, -0.76817775), (-0.35355338, -0.38268343, -0.8535534), (-0.18023996, -0.38268343, -0.90612745), (-0.16221167, -0.55557024, -0.81549317), (-0.16221167, -0.55557024, -0.81549317), (-0.18023996, -0.38268343, -0.90612745), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.5273849e-16, -0.55557024, -0.8314696), (-1.6971392e-16, -0.38268343, -0.9238795), (0.18023996, -0.38268343, -0.90612745), (0.16221167, -0.55557024, -0.81549317), (0.16221167, -0.55557024, -0.81549317), (0.18023996, -0.38268343, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.31818965, -0.55557024, -0.76817775), (0.31818965, -0.55557024, -0.76817775), (0.35355338, -0.38268343, -0.8535534), (0.51328, -0.38268343, -0.76817775), (0.46193975, -0.55557024, -0.6913417), (0.46193975, -0.55557024, -0.6913417), (0.51328, -0.38268343, -0.76817775), (0.6532815, -0.38268343, -0.6532815), (0.5879378, -0.55557024, -0.5879378), (0.5879378, -0.55557024, -0.5879378), (0.6532815, -0.38268343, -0.6532815), (0.76817775, -0.38268343, -0.51328), (0.6913417, -0.55557024, -0.46193975), (0.6913417, -0.55557024, -0.46193975), (0.76817775, -0.38268343, -0.51328), (0.8535534, -0.38268343, -0.35355338), (0.76817775, -0.55557024, -0.31818965), (0.76817775, -0.55557024, -0.31818965), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.38268343, -0.18023996), (0.81549317, -0.55557024, -0.16221167), (0.81549317, -0.55557024, -0.16221167), (0.90612745, -0.38268343, -0.18023996), (0.9238795, -0.38268343, 0), (0.8314696, -0.55557024, 0), (0.9238795, -0.38268343, 0), (0.98078525, -0.19509032, 0), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.38268343, 0.18023996), (0.90612745, -0.38268343, 0.18023996), (0.96193975, -0.19509032, 0.19134171), (0.90612745, -0.19509032, 0.37533027), (0.8535534, -0.38268343, 0.35355338), (0.8535534, -0.38268343, 0.35355338), (0.90612745, -0.19509032, 0.37533027), (0.81549317, -0.19509032, 0.5448951), (0.76817775, -0.38268343, 0.51328), (0.76817775, -0.38268343, 0.51328), (0.81549317, -0.19509032, 0.5448951), (0.69351995, -0.19509032, 0.69351995), (0.6532815, -0.38268343, 0.6532815), (0.6532815, -0.38268343, 0.6532815), (0.69351995, -0.19509032, 0.69351995), (0.5448951, -0.19509032, 0.81549317), (0.51328, -0.38268343, 0.76817775), (0.51328, -0.38268343, 0.76817775), (0.5448951, -0.19509032, 0.81549317), (0.37533027, -0.19509032, 0.90612745), (0.35355338, -0.38268343, 0.8535534), (0.35355338, -0.38268343, 0.8535534), (0.37533027, -0.19509032, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (0.18023996, -0.38268343, 0.90612745), (0.18023996, -0.38268343, 0.90612745), (0.19134171, -0.19509032, 0.96193975), (6.005578e-17, -0.19509032, 0.98078525), (5.6571306e-17, -0.38268343, 0.9238795), (5.6571306e-17, -0.38268343, 0.9238795), (6.005578e-17, -0.19509032, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.18023996, -0.38268343, 0.90612745), (-0.18023996, -0.38268343, 0.90612745), (-0.19134171, -0.19509032, 0.96193975), (-0.37533027, -0.19509032, 0.90612745), (-0.35355338, -0.38268343, 0.8535534), (-0.35355338, -0.38268343, 0.8535534), (-0.37533027, -0.19509032, 0.90612745), (-0.5448951, -0.19509032, 0.81549317), (-0.51328, -0.38268343, 0.76817775), (-0.51328, -0.38268343, 0.76817775), (-0.5448951, -0.19509032, 0.81549317), (-0.69351995, -0.19509032, 0.69351995), (-0.6532815, -0.38268343, 0.6532815), (-0.6532815, -0.38268343, 0.6532815), (-0.69351995, -0.19509032, 0.69351995), (-0.81549317, -0.19509032, 0.5448951), (-0.76817775, -0.38268343, 0.51328), (-0.76817775, -0.38268343, 0.51328), (-0.81549317, -0.19509032, 0.5448951), (-0.90612745, -0.19509032, 0.37533027), (-0.8535534, -0.38268343, 0.35355338), (-0.8535534, -0.38268343, 0.35355338), (-0.90612745, -0.19509032, 0.37533027), (-0.96193975, -0.19509032, 0.19134171), (-0.90612745, -0.38268343, 0.18023996), (-0.90612745, -0.38268343, 0.18023996), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.9238795, -0.38268343, 1.1314261e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.38268343, -0.18023996), (-0.90612745, -0.38268343, -0.18023996), (-0.96193975, -0.19509032, -0.19134171), (-0.90612745, -0.19509032, -0.37533027), (-0.8535534, -0.38268343, -0.35355338), (-0.8535534, -0.38268343, -0.35355338), (-0.90612745, -0.19509032, -0.37533027), (-0.81549317, -0.19509032, -0.5448951), (-0.76817775, -0.38268343, -0.51328), (-0.76817775, -0.38268343, -0.51328), (-0.81549317, -0.19509032, -0.5448951), (-0.69351995, -0.19509032, -0.69351995), (-0.6532815, -0.38268343, -0.6532815), (-0.6532815, -0.38268343, -0.6532815), (-0.69351995, -0.19509032, -0.69351995), (-0.5448951, -0.19509032, -0.81549317), (-0.51328, -0.38268343, -0.76817775), (-0.51328, -0.38268343, -0.76817775), (-0.5448951, -0.19509032, -0.81549317), (-0.37533027, -0.19509032, -0.90612745), (-0.35355338, -0.38268343, -0.8535534), (-0.35355338, -0.38268343, -0.8535534), (-0.37533027, -0.19509032, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-0.18023996, -0.38268343, -0.90612745), (-0.18023996, -0.38268343, -0.90612745), (-0.19134171, -0.19509032, -0.96193975), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.6971392e-16, -0.38268343, -0.9238795), (-1.8016734e-16, -0.19509032, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.18023996, -0.38268343, -0.90612745), (0.18023996, -0.38268343, -0.90612745), (0.19134171, -0.19509032, -0.96193975), (0.37533027, -0.19509032, -0.90612745), (0.35355338, -0.38268343, -0.8535534), (0.35355338, -0.38268343, -0.8535534), (0.37533027, -0.19509032, -0.90612745), (0.5448951, -0.19509032, -0.81549317), (0.51328, -0.38268343, -0.76817775), (0.51328, -0.38268343, -0.76817775), (0.5448951, -0.19509032, -0.81549317), (0.69351995, -0.19509032, -0.69351995), (0.6532815, -0.38268343, -0.6532815), (0.6532815, -0.38268343, -0.6532815), (0.69351995, -0.19509032, -0.69351995), (0.81549317, -0.19509032, -0.5448951), (0.76817775, -0.38268343, -0.51328), (0.76817775, -0.38268343, -0.51328), (0.81549317, -0.19509032, -0.5448951), (0.90612745, -0.19509032, -0.37533027), (0.8535534, -0.38268343, -0.35355338), (0.8535534, -0.38268343, -0.35355338), (0.90612745, -0.19509032, -0.37533027), (0.96193975, -0.19509032, -0.19134171), (0.90612745, -0.38268343, -0.18023996), (0.90612745, -0.38268343, -0.18023996), (0.96193975, -0.19509032, -0.19134171), (0.98078525, -0.19509032, 0), (0.9238795, -0.38268343, 0), (0.98078525, -0.19509032, 0), (1, 0, 0), (0.98078525, 0, 0.19509032), (0.96193975, -0.19509032, 0.19134171), (0.96193975, -0.19509032, 0.19134171), (0.98078525, 0, 0.19509032), (0.9238795, 0, 0.38268343), (0.90612745, -0.19509032, 0.37533027), (0.90612745, -0.19509032, 0.37533027), (0.9238795, 0, 0.38268343), (0.8314696, 0, 0.55557024), (0.81549317, -0.19509032, 0.5448951), (0.81549317, -0.19509032, 0.5448951), (0.8314696, 0, 0.55557024), (0.70710677, 0, 0.70710677), (0.69351995, -0.19509032, 0.69351995), (0.69351995, -0.19509032, 0.69351995), (0.70710677, 0, 0.70710677), (0.55557024, 0, 0.8314696), (0.5448951, -0.19509032, 0.81549317), (0.5448951, -0.19509032, 0.81549317), (0.55557024, 0, 0.8314696), (0.38268343, 0, 0.9238795), (0.37533027, -0.19509032, 0.90612745), (0.37533027, -0.19509032, 0.90612745), (0.38268343, 0, 0.9238795), (0.19509032, 0, 0.98078525), (0.19134171, -0.19509032, 0.96193975), (0.19134171, -0.19509032, 0.96193975), (0.19509032, 0, 0.98078525), (6.123234e-17, 0, 1), (6.005578e-17, -0.19509032, 0.98078525), (6.005578e-17, -0.19509032, 0.98078525), (6.123234e-17, 0, 1), (-0.19509032, 0, 0.98078525), (-0.19134171, -0.19509032, 0.96193975), (-0.19134171, -0.19509032, 0.96193975), (-0.19509032, 0, 0.98078525), (-0.38268343, 0, 0.9238795), (-0.37533027, -0.19509032, 0.90612745), (-0.37533027, -0.19509032, 0.90612745), (-0.38268343, 0, 0.9238795), (-0.55557024, 0, 0.8314696), (-0.5448951, -0.19509032, 0.81549317), (-0.5448951, -0.19509032, 0.81549317), (-0.55557024, 0, 0.8314696), (-0.70710677, 0, 0.70710677), (-0.69351995, -0.19509032, 0.69351995), (-0.69351995, -0.19509032, 0.69351995), (-0.70710677, 0, 0.70710677), (-0.8314696, 0, 0.55557024), (-0.81549317, -0.19509032, 0.5448951), (-0.81549317, -0.19509032, 0.5448951), (-0.8314696, 0, 0.55557024), (-0.9238795, 0, 0.38268343), (-0.90612745, -0.19509032, 0.37533027), (-0.90612745, -0.19509032, 0.37533027), (-0.9238795, 0, 0.38268343), (-0.98078525, 0, 0.19509032), (-0.96193975, -0.19509032, 0.19134171), (-0.96193975, -0.19509032, 0.19134171), (-0.98078525, 0, 0.19509032), (-1, 0, 1.2246469e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-0.98078525, -0.19509032, 1.2011156e-16), (-1, 0, 1.2246469e-16), (-0.98078525, 0, -0.19509032), (-0.96193975, -0.19509032, -0.19134171), (-0.96193975, -0.19509032, -0.19134171), (-0.98078525, 0, -0.19509032), (-0.9238795, 0, -0.38268343), (-0.90612745, -0.19509032, -0.37533027), (-0.90612745, -0.19509032, -0.37533027), (-0.9238795, 0, -0.38268343), (-0.8314696, 0, -0.55557024), (-0.81549317, -0.19509032, -0.5448951), (-0.81549317, -0.19509032, -0.5448951), (-0.8314696, 0, -0.55557024), (-0.70710677, 0, -0.70710677), (-0.69351995, -0.19509032, -0.69351995), (-0.69351995, -0.19509032, -0.69351995), (-0.70710677, 0, -0.70710677), (-0.55557024, 0, -0.8314696), (-0.5448951, -0.19509032, -0.81549317), (-0.5448951, -0.19509032, -0.81549317), (-0.55557024, 0, -0.8314696), (-0.38268343, 0, -0.9238795), (-0.37533027, -0.19509032, -0.90612745), (-0.37533027, -0.19509032, -0.90612745), (-0.38268343, 0, -0.9238795), (-0.19509032, 0, -0.98078525), (-0.19134171, -0.19509032, -0.96193975), (-0.19134171, -0.19509032, -0.96193975), (-0.19509032, 0, -0.98078525), (-1.8369701e-16, 0, -1), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.8016734e-16, -0.19509032, -0.98078525), (-1.8369701e-16, 0, -1), (0.19509032, 0, -0.98078525), (0.19134171, -0.19509032, -0.96193975), (0.19134171, -0.19509032, -0.96193975), (0.19509032, 0, -0.98078525), (0.38268343, 0, -0.9238795), (0.37533027, -0.19509032, -0.90612745), (0.37533027, -0.19509032, -0.90612745), (0.38268343, 0, -0.9238795), (0.55557024, 0, -0.8314696), (0.5448951, -0.19509032, -0.81549317), (0.5448951, -0.19509032, -0.81549317), (0.55557024, 0, -0.8314696), (0.70710677, 0, -0.70710677), (0.69351995, -0.19509032, -0.69351995), (0.69351995, -0.19509032, -0.69351995), (0.70710677, 0, -0.70710677), (0.8314696, 0, -0.55557024), (0.81549317, -0.19509032, -0.5448951), (0.81549317, -0.19509032, -0.5448951), (0.8314696, 0, -0.55557024), (0.9238795, 0, -0.38268343), (0.90612745, -0.19509032, -0.37533027), (0.90612745, -0.19509032, -0.37533027), (0.9238795, 0, -0.38268343), (0.98078525, 0, -0.19509032), (0.96193975, -0.19509032, -0.19134171), (0.96193975, -0.19509032, -0.19134171), (0.98078525, 0, -0.19509032), (1, 0, 0), (0.98078525, -0.19509032, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(75, 0, 0), (73.5589, 0, 14.631774), (69.29096, 0, 28.701258), (62.36022, 0, 41.667767), (53.03301, 0, 53.03301), (41.667767, 0, 62.36022), (28.701258, 0, 69.29096), (14.631774, 0, 73.5589), (4.5924254e-15, 0, 75), (-14.631774, 0, 73.5589), (-28.701258, 0, 69.29096), (-41.667767, 0, 62.36022), (-53.03301, 0, 53.03301), (-62.36022, 0, 41.667767), (-69.29096, 0, 28.701258), (-73.5589, 0, 14.631774), (-75, 0, 9.184851e-15), (-73.5589, 0, -14.631774), (-69.29096, 0, -28.701258), (-62.36022, 0, -41.667767), (-53.03301, 0, -53.03301), (-41.667767, 0, -62.36022), (-28.701258, 0, -69.29096), (-14.631774, 0, -73.5589), (-1.3777276e-14, 0, -75), (14.631774, 0, -73.5589), (28.701258, 0, -69.29096), (41.667767, 0, -62.36022), (53.03301, 0, -53.03301), (62.36022, 0, -41.667767), (69.29096, 0, -28.701258), (73.5589, 0, -14.631774), (74.51963, 4.877258, 0), (73.08776, 4.877258, 14.538059), (68.84716, 4.877258, 28.51743), (61.960808, 4.877258, 41.40089), (52.693336, 4.877258, 52.693336), (41.40089, 4.877258, 61.960808), (28.51743, 4.877258, 68.84716), (14.538059, 4.877258, 73.08776), (4.5630114e-15, 4.877258, 74.51963), (-14.538059, 4.877258, 73.08776), (-28.51743, 4.877258, 68.84716), (-41.40089, 4.877258, 61.960808), (-52.693336, 4.877258, 52.693336), (-61.960808, 4.877258, 41.40089), (-68.84716, 4.877258, 28.51743), (-73.08776, 4.877258, 14.538059), (-74.51963, 4.877258, 9.126023e-15), (-73.08776, 4.877258, -14.538059), (-68.84716, 4.877258, -28.51743), (-61.960808, 4.877258, -41.40089), (-52.693336, 4.877258, -52.693336), (-41.40089, 4.877258, -61.960808), (-28.51743, 4.877258, -68.84716), (-14.538059, 4.877258, -73.08776), (-1.3689034e-14, 4.877258, -74.51963), (14.538059, 4.877258, -73.08776), (28.51743, 4.877258, -68.84716), (41.40089, 4.877258, -61.960808), (52.693336, 4.877258, -52.693336), (61.960808, 4.877258, -41.40089), (68.84716, 4.877258, -28.51743), (73.08776, 4.877258, -14.538059), (73.096985, 9.567086, 0), (71.69245, 9.567086, 14.260515), (67.532814, 9.567086, 27.973007), (60.777924, 9.567086, 40.61051), (51.687378, 9.567086, 51.687378), (40.61051, 9.567086, 60.777924), (27.973007, 9.567086, 67.532814), (14.260515, 9.567086, 71.69245), (4.4758995e-15, 9.567086, 73.096985), (-14.260515, 9.567086, 71.69245), (-27.973007, 9.567086, 67.532814), (-40.61051, 9.567086, 60.777924), (-51.687378, 9.567086, 51.687378), (-60.777924, 9.567086, 40.61051), (-67.532814, 9.567086, 27.973007), (-71.69245, 9.567086, 14.260515), (-73.096985, 9.567086, 8.951799e-15), (-71.69245, 9.567086, -14.260515), (-67.532814, 9.567086, -27.973007), (-60.777924, 9.567086, -40.61051), (-51.687378, 9.567086, -51.687378), (-40.61051, 9.567086, -60.777924), (-27.973007, 9.567086, -67.532814), (-14.260515, 9.567086, -71.69245), (-1.3427699e-14, 9.567086, -73.096985), (14.260515, 9.567086, -71.69245), (27.973007, 9.567086, -67.532814), (40.61051, 9.567086, -60.777924), (51.687378, 9.567086, -51.687378), (60.777924, 9.567086, -40.61051), (67.532814, 9.567086, -27.973007), (71.69245, 9.567086, -14.260515), (70.78674, 13.889256, 0), (69.42659, 13.889256, 13.809808), (65.39842, 13.889256, 27.088913), (58.857025, 13.889256, 39.327007), (50.053783, 13.889256, 50.053783), (39.327007, 13.889256, 58.857025), (27.088913, 13.889256, 65.39842), (13.809808, 13.889256, 69.42659), (4.334438e-15, 13.889256, 70.78674), (-13.809808, 13.889256, 69.42659), (-27.088913, 13.889256, 65.39842), (-39.327007, 13.889256, 58.857025), (-50.053783, 13.889256, 50.053783), (-58.857025, 13.889256, 39.327007), (-65.39842, 13.889256, 27.088913), (-69.42659, 13.889256, 13.809808), (-70.78674, 13.889256, 8.668876e-15), (-69.42659, 13.889256, -13.809808), (-65.39842, 13.889256, -27.088913), (-58.857025, 13.889256, -39.327007), (-50.053783, 13.889256, -50.053783), (-39.327007, 13.889256, -58.857025), (-27.088913, 13.889256, -65.39842), (-13.809808, 13.889256, -69.42659), (-1.30033135e-14, 13.889256, -70.78674), (13.809808, 13.889256, -69.42659), (27.088913, 13.889256, -65.39842), (39.327007, 13.889256, -58.857025), (50.053783, 13.889256, -50.053783), (58.857025, 13.889256, -39.327007), (65.39842, 13.889256, -27.088913), (69.42659, 13.889256, -13.809808), (67.67767, 17.67767, 0), (66.37726, 17.67767, 13.2032585), (62.526012, 17.67767, 25.899122), (56.271927, 17.67767, 37.599697), (47.85534, 17.67767, 47.85534), (37.599697, 17.67767, 56.271927), (25.899122, 17.67767, 62.526012), (13.2032585, 17.67767, 66.37726), (4.144062e-15, 17.67767, 67.67767), (-13.2032585, 17.67767, 66.37726), (-25.899122, 17.67767, 62.526012), (-37.599697, 17.67767, 56.271927), (-47.85534, 17.67767, 47.85534), (-56.271927, 17.67767, 37.599697), (-62.526012, 17.67767, 25.899122), (-66.37726, 17.67767, 13.2032585), (-67.67767, 17.67767, 8.288124e-15), (-66.37726, 17.67767, -13.2032585), (-62.526012, 17.67767, -25.899122), (-56.271927, 17.67767, -37.599697), (-47.85534, 17.67767, -47.85534), (-37.599697, 17.67767, -56.271927), (-25.899122, 17.67767, -62.526012), (-13.2032585, 17.67767, -66.37726), (-1.2432186e-14, 17.67767, -67.67767), (13.2032585, 17.67767, -66.37726), (25.899122, 17.67767, -62.526012), (37.599697, 17.67767, -56.271927), (47.85534, 17.67767, -47.85534), (56.271927, 17.67767, -37.599697), (62.526012, 17.67767, -25.899122), (66.37726, 17.67767, -13.2032585), (63.889256, 20.786741, 0), (62.66164, 20.786741, 12.464175), (59.025974, 20.786741, 24.44936), (53.121975, 20.786741, 35.49497), (45.176525, 20.786741, 45.176525), (35.49497, 20.786741, 53.121975), (24.44936, 20.786741, 59.025974), (12.464175, 20.786741, 62.66164), (3.9120886e-15, 20.786741, 63.889256), (-12.464175, 20.786741, 62.66164), (-24.44936, 20.786741, 59.025974), (-35.49497, 20.786741, 53.121975), (-45.176525, 20.786741, 45.176525), (-53.121975, 20.786741, 35.49497), (-59.025974, 20.786741, 24.44936), (-62.66164, 20.786741, 12.464175), (-63.889256, 20.786741, 7.824177e-15), (-62.66164, 20.786741, -12.464175), (-59.025974, 20.786741, -24.44936), (-53.121975, 20.786741, -35.49497), (-45.176525, 20.786741, -45.176525), (-35.49497, 20.786741, -53.121975), (-24.44936, 20.786741, -59.025974), (-12.464175, 20.786741, -62.66164), (-1.1736266e-14, 20.786741, -63.889256), (12.464175, 20.786741, -62.66164), (24.44936, 20.786741, -59.025974), (35.49497, 20.786741, -53.121975), (45.176525, 20.786741, -45.176525), (53.121975, 20.786741, -35.49497), (59.025974, 20.786741, -24.44936), (62.66164, 20.786741, -12.464175), (59.567085, 23.096989, 0), (58.42252, 23.096989, 11.620962), (55.03281, 23.096989, 22.795338), (49.52822, 23.096989, 33.0937), (42.12029, 23.096989, 42.12029), (33.0937, 23.096989, 49.52822), (22.795338, 23.096989, 55.03281), (11.620962, 23.096989, 58.42252), (3.647432e-15, 23.096989, 59.567085), (-11.620962, 23.096989, 58.42252), (-22.795338, 23.096989, 55.03281), (-33.0937, 23.096989, 49.52822), (-42.12029, 23.096989, 42.12029), (-49.52822, 23.096989, 33.0937), (-55.03281, 23.096989, 22.795338), (-58.42252, 23.096989, 11.620962), (-59.567085, 23.096989, 7.294864e-15), (-58.42252, 23.096989, -11.620962), (-55.03281, 23.096989, -22.795338), (-49.52822, 23.096989, -33.0937), (-42.12029, 23.096989, -42.12029), (-33.0937, 23.096989, -49.52822), (-22.795338, 23.096989, -55.03281), (-11.620962, 23.096989, -58.42252), (-1.0942296e-14, 23.096989, -59.567085), (11.620962, 23.096989, -58.42252), (22.795338, 23.096989, -55.03281), (33.0937, 23.096989, -49.52822), (42.12029, 23.096989, -42.12029), (49.52822, 23.096989, -33.0937), (55.03281, 23.096989, -22.795338), (58.42252, 23.096989, -11.620962), (54.87726, 24.519632, 0), (53.822807, 24.519632, 10.706022), (50.699974, 24.519632, 21.000618), (45.628773, 24.519632, 30.48817), (38.80408, 24.519632, 38.80408), (30.48817, 24.519632, 45.628773), (21.000618, 24.519632, 50.699974), (10.706022, 24.519632, 53.822807), (3.360263e-15, 24.519632, 54.87726), (-10.706022, 24.519632, 53.822807), (-21.000618, 24.519632, 50.699974), (-30.48817, 24.519632, 45.628773), (-38.80408, 24.519632, 38.80408), (-45.628773, 24.519632, 30.48817), (-50.699974, 24.519632, 21.000618), (-53.822807, 24.519632, 10.706022), (-54.87726, 24.519632, 6.720526e-15), (-53.822807, 24.519632, -10.706022), (-50.699974, 24.519632, -21.000618), (-45.628773, 24.519632, -30.48817), (-38.80408, 24.519632, -38.80408), (-30.48817, 24.519632, -45.628773), (-21.000618, 24.519632, -50.699974), (-10.706022, 24.519632, -53.822807), (-1.0080789e-14, 24.519632, -54.87726), (10.706022, 24.519632, -53.822807), (21.000618, 24.519632, -50.699974), (30.48817, 24.519632, -45.628773), (38.80408, 24.519632, -38.80408), (45.628773, 24.519632, -30.48817), (50.699974, 24.519632, -21.000618), (53.822807, 24.519632, -10.706022), (50, 25, 0), (49.039265, 25, 9.754516), (46.193977, 25, 19.134172), (41.573483, 25, 27.778511), (35.35534, 25, 35.35534), (27.778511, 25, 41.573483), (19.134172, 25, 46.193977), (9.754516, 25, 49.039265), (3.0616169e-15, 25, 50), (-9.754516, 25, 49.039265), (-19.134172, 25, 46.193977), (-27.778511, 25, 41.573483), (-35.35534, 25, 35.35534), (-41.573483, 25, 27.778511), (-46.193977, 25, 19.134172), (-49.039265, 25, 9.754516), (-50, 25, 6.1232338e-15), (-49.039265, 25, -9.754516), (-46.193977, 25, -19.134172), (-41.573483, 25, -27.778511), (-35.35534, 25, -35.35534), (-27.778511, 25, -41.573483), (-19.134172, 25, -46.193977), (-9.754516, 25, -49.039265), (-9.184851e-15, 25, -50), (9.754516, 25, -49.039265), (19.134172, 25, -46.193977), (27.778511, 25, -41.573483), (35.35534, 25, -35.35534), (41.573483, 25, -27.778511), (46.193977, 25, -19.134172), (49.039265, 25, -9.754516), (45.12274, 24.519632, 0), (44.255722, 24.519632, 8.80301), (41.687977, 24.519632, 17.267725), (37.51819, 24.519632, 25.068851), (31.906597, 24.519632, 31.906597), (25.068851, 24.519632, 37.51819), (17.267725, 24.519632, 41.687977), (8.80301, 24.519632, 44.255722), (2.762971e-15, 24.519632, 45.12274), (-8.80301, 24.519632, 44.255722), (-17.267725, 24.519632, 41.687977), (-25.068851, 24.519632, 37.51819), (-31.906597, 24.519632, 31.906597), (-37.51819, 24.519632, 25.068851), (-41.687977, 24.519632, 17.267725), (-44.255722, 24.519632, 8.80301), (-45.12274, 24.519632, 5.525942e-15), (-44.255722, 24.519632, -8.80301), (-41.687977, 24.519632, -17.267725), (-37.51819, 24.519632, -25.068851), (-31.906597, 24.519632, -31.906597), (-25.068851, 24.519632, -37.51819), (-17.267725, 24.519632, -41.687977), (-8.80301, 24.519632, -44.255722), (-8.288913e-15, 24.519632, -45.12274), (8.80301, 24.519632, -44.255722), (17.267725, 24.519632, -41.687977), (25.068851, 24.519632, -37.51819), (31.906597, 24.519632, -31.906597), (37.51819, 24.519632, -25.068851), (41.687977, 24.519632, -17.267725), (44.255722, 24.519632, -8.80301), (40.432915, 23.096989, 0), (39.656006, 23.096989, 7.88807), (37.35514, 23.096989, 15.473006), (33.61874, 23.096989, 22.463324), (28.590387, 23.096989, 28.590387), (22.463324, 23.096989, 33.61874), (15.473006, 23.096989, 37.35514), (7.88807, 23.096989, 39.656006), (2.475802e-15, 23.096989, 40.432915), (-7.88807, 23.096989, 39.656006), (-15.473006, 23.096989, 37.35514), (-22.463324, 23.096989, 33.61874), (-28.590387, 23.096989, 28.590387), (-33.61874, 23.096989, 22.463324), (-37.35514, 23.096989, 15.473006), (-39.656006, 23.096989, 7.88807), (-40.432915, 23.096989, 4.951604e-15), (-39.656006, 23.096989, -7.88807), (-37.35514, 23.096989, -15.473006), (-33.61874, 23.096989, -22.463324), (-28.590387, 23.096989, -28.590387), (-22.463324, 23.096989, -33.61874), (-15.473006, 23.096989, -37.35514), (-7.88807, 23.096989, -39.656006), (-7.427406e-15, 23.096989, -40.432915), (7.88807, 23.096989, -39.656006), (15.473006, 23.096989, -37.35514), (22.463324, 23.096989, -33.61874), (28.590387, 23.096989, -28.590387), (33.61874, 23.096989, -22.463324), (37.35514, 23.096989, -15.473006), (39.656006, 23.096989, -7.88807), (36.110744, 20.786741, 0), (35.416885, 20.786741, 7.0448565), (33.361977, 20.786741, 13.818983), (30.024986, 20.786741, 20.062054), (25.534153, 20.786741, 25.534153), (20.062054, 20.786741, 30.024986), (13.818983, 20.786741, 33.361977), (7.0448565, 20.786741, 35.416885), (2.2111454e-15, 20.786741, 36.110744), (-7.0448565, 20.786741, 35.416885), (-13.818983, 20.786741, 33.361977), (-20.062054, 20.786741, 30.024986), (-25.534153, 20.786741, 25.534153), (-30.024986, 20.786741, 20.062054), (-33.361977, 20.786741, 13.818983), (-35.416885, 20.786741, 7.0448565), (-36.110744, 20.786741, 4.422291e-15), (-35.416885, 20.786741, -7.0448565), (-33.361977, 20.786741, -13.818983), (-30.024986, 20.786741, -20.062054), (-25.534153, 20.786741, -25.534153), (-20.062054, 20.786741, -30.024986), (-13.818983, 20.786741, -33.361977), (-7.0448565, 20.786741, -35.416885), (-6.633436e-15, 20.786741, -36.110744), (7.0448565, 20.786741, -35.416885), (13.818983, 20.786741, -33.361977), (20.062054, 20.786741, -30.024986), (25.534153, 20.786741, -25.534153), (30.024986, 20.786741, -20.062054), (33.361977, 20.786741, -13.818983), (35.416885, 20.786741, -7.0448565), (32.32233, 17.67767, 0), (31.701265, 17.67767, 6.3057737), (29.86194, 17.67767, 12.369221), (26.875036, 17.67767, 17.957325), (22.85534, 17.67767, 22.85534), (17.957325, 17.67767, 26.875036), (12.369221, 17.67767, 29.86194), (6.3057737, 17.67767, 31.701265), (1.9791719e-15, 17.67767, 32.32233), (-6.3057737, 17.67767, 31.701265), (-12.369221, 17.67767, 29.86194), (-17.957325, 17.67767, 26.875036), (-22.85534, 17.67767, 22.85534), (-26.875036, 17.67767, 17.957325), (-29.86194, 17.67767, 12.369221), (-31.701265, 17.67767, 6.3057737), (-32.32233, 17.67767, 3.9583438e-15), (-31.701265, 17.67767, -6.3057737), (-29.86194, 17.67767, -12.369221), (-26.875036, 17.67767, -17.957325), (-22.85534, 17.67767, -22.85534), (-17.957325, 17.67767, -26.875036), (-12.369221, 17.67767, -29.86194), (-6.3057737, 17.67767, -31.701265), (-5.937516e-15, 17.67767, -32.32233), (6.3057737, 17.67767, -31.701265), (12.369221, 17.67767, -29.86194), (17.957325, 17.67767, -26.875036), (22.85534, 17.67767, -22.85534), (26.875036, 17.67767, -17.957325), (29.86194, 17.67767, -12.369221), (31.701265, 17.67767, -6.3057737), (29.213259, 13.889256, 0), (28.651936, 13.889256, 5.6992245), (26.989532, 13.889256, 11.179431), (24.289938, 13.889256, 16.230017), (20.656895, 13.889256, 20.656895), (16.230017, 13.889256, 24.289938), (11.179431, 13.889256, 26.989532), (5.6992245, 13.889256, 28.651936), (1.7887962e-15, 13.889256, 29.213259), (-5.6992245, 13.889256, 28.651936), (-11.179431, 13.889256, 26.989532), (-16.230017, 13.889256, 24.289938), (-20.656895, 13.889256, 20.656895), (-24.289938, 13.889256, 16.230017), (-26.989532, 13.889256, 11.179431), (-28.651936, 13.889256, 5.6992245), (-29.213259, 13.889256, 3.5775923e-15), (-28.651936, 13.889256, -5.6992245), (-26.989532, 13.889256, -11.179431), (-24.289938, 13.889256, -16.230017), (-20.656895, 13.889256, -20.656895), (-16.230017, 13.889256, -24.289938), (-11.179431, 13.889256, -26.989532), (-5.6992245, 13.889256, -28.651936), (-5.3663887e-15, 13.889256, -29.213259), (5.6992245, 13.889256, -28.651936), (11.179431, 13.889256, -26.989532), (16.230017, 13.889256, -24.289938), (20.656895, 13.889256, -20.656895), (24.289938, 13.889256, -16.230017), (26.989532, 13.889256, -11.179431), (28.651936, 13.889256, -5.6992245), (26.903011, 9.567086, 0), (26.386078, 9.567086, 5.248517), (24.855143, 9.567086, 10.295337), (22.369038, 9.567086, 14.946512), (19.023302, 9.567086, 19.023302), (14.946512, 9.567086, 22.369038), (10.295337, 9.567086, 24.855143), (5.248517, 9.567086, 26.386078), (1.6473343e-15, 9.567086, 26.903011), (-5.248517, 9.567086, 26.386078), (-10.295337, 9.567086, 24.855143), (-14.946512, 9.567086, 22.369038), (-19.023302, 9.567086, 19.023302), (-22.369038, 9.567086, 14.946512), (-24.855143, 9.567086, 10.295337), (-26.386078, 9.567086, 5.248517), (-26.903011, 9.567086, 3.2946687e-15), (-26.386078, 9.567086, -5.248517), (-24.855143, 9.567086, -10.295337), (-22.369038, 9.567086, -14.946512), (-19.023302, 9.567086, -19.023302), (-14.946512, 9.567086, -22.369038), (-10.295337, 9.567086, -24.855143), (-5.248517, 9.567086, -26.386078), (-4.942003e-15, 9.567086, -26.903011), (5.248517, 9.567086, -26.386078), (10.295337, 9.567086, -24.855143), (14.946512, 9.567086, -22.369038), (19.023302, 9.567086, -19.023302), (22.369038, 9.567086, -14.946512), (24.855143, 9.567086, -10.295337), (26.386078, 9.567086, -5.248517), (25.480368, 4.877258, 0), (24.99077, 4.877258, 4.970973), (23.54079, 4.877258, 9.750915), (21.186152, 4.877258, 14.156134), (18.017342, 4.877258, 18.017342), (14.156134, 4.877258, 21.186152), (9.750915, 4.877258, 23.54079), (4.970973, 4.877258, 24.99077), (1.5602225e-15, 4.877258, 25.480368), (-4.970973, 4.877258, 24.99077), (-9.750915, 4.877258, 23.54079), (-14.156134, 4.877258, 21.186152), (-18.017342, 4.877258, 18.017342), (-21.186152, 4.877258, 14.156134), (-23.54079, 4.877258, 9.750915), (-24.99077, 4.877258, 4.970973), (-25.480368, 4.877258, 3.120445e-15), (-24.99077, 4.877258, -4.970973), (-23.54079, 4.877258, -9.750915), (-21.186152, 4.877258, -14.156134), (-18.017342, 4.877258, -18.017342), (-14.156134, 4.877258, -21.186152), (-9.750915, 4.877258, -23.54079), (-4.970973, 4.877258, -24.99077), (-4.6806676e-15, 4.877258, -25.480368), (4.970973, 4.877258, -24.99077), (9.750915, 4.877258, -23.54079), (14.156134, 4.877258, -21.186152), (18.017342, 4.877258, -18.017342), (21.186152, 4.877258, -14.156134), (23.54079, 4.877258, -9.750915), (24.99077, 4.877258, -4.970973), (25, 3.0616169e-15, 0), (24.519632, 3.0616169e-15, 4.877258), (23.096989, 3.0616169e-15, 9.567086), (20.786741, 3.0616169e-15, 13.889256), (17.67767, 3.0616169e-15, 17.67767), (13.889256, 3.0616169e-15, 20.786741), (9.567086, 3.0616169e-15, 23.096989), (4.877258, 3.0616169e-15, 24.519632), (1.5308084e-15, 3.0616169e-15, 25), (-4.877258, 3.0616169e-15, 24.519632), (-9.567086, 3.0616169e-15, 23.096989), (-13.889256, 3.0616169e-15, 20.786741), (-17.67767, 3.0616169e-15, 17.67767), (-20.786741, 3.0616169e-15, 13.889256), (-23.096989, 3.0616169e-15, 9.567086), (-24.519632, 3.0616169e-15, 4.877258), (-25, 3.0616169e-15, 3.0616169e-15), (-24.519632, 3.0616169e-15, -4.877258), (-23.096989, 3.0616169e-15, -9.567086), (-20.786741, 3.0616169e-15, -13.889256), (-17.67767, 3.0616169e-15, -17.67767), (-13.889256, 3.0616169e-15, -20.786741), (-9.567086, 3.0616169e-15, -23.096989), (-4.877258, 3.0616169e-15, -24.519632), (-4.5924254e-15, 3.0616169e-15, -25), (4.877258, 3.0616169e-15, -24.519632), (9.567086, 3.0616169e-15, -23.096989), (13.889256, 3.0616169e-15, -20.786741), (17.67767, 3.0616169e-15, -17.67767), (20.786741, 3.0616169e-15, -13.889256), (23.096989, 3.0616169e-15, -9.567086), (24.519632, 3.0616169e-15, -4.877258), (25.480368, -4.877258, 0), (24.99077, -4.877258, 4.970973), (23.54079, -4.877258, 9.750915), (21.186152, -4.877258, 14.156134), (18.017342, -4.877258, 18.017342), (14.156134, -4.877258, 21.186152), (9.750915, -4.877258, 23.54079), (4.970973, -4.877258, 24.99077), (1.5602225e-15, -4.877258, 25.480368), (-4.970973, -4.877258, 24.99077), (-9.750915, -4.877258, 23.54079), (-14.156134, -4.877258, 21.186152), (-18.017342, -4.877258, 18.017342), (-21.186152, -4.877258, 14.156134), (-23.54079, -4.877258, 9.750915), (-24.99077, -4.877258, 4.970973), (-25.480368, -4.877258, 3.120445e-15), (-24.99077, -4.877258, -4.970973), (-23.54079, -4.877258, -9.750915), (-21.186152, -4.877258, -14.156134), (-18.017342, -4.877258, -18.017342), (-14.156134, -4.877258, -21.186152), (-9.750915, -4.877258, -23.54079), (-4.970973, -4.877258, -24.99077), (-4.6806676e-15, -4.877258, -25.480368), (4.970973, -4.877258, -24.99077), (9.750915, -4.877258, -23.54079), (14.156134, -4.877258, -21.186152), (18.017342, -4.877258, -18.017342), (21.186152, -4.877258, -14.156134), (23.54079, -4.877258, -9.750915), (24.99077, -4.877258, -4.970973), (26.903011, -9.567086, 0), (26.386078, -9.567086, 5.248517), (24.855143, -9.567086, 10.295337), (22.369038, -9.567086, 14.946512), (19.023302, -9.567086, 19.023302), (14.946512, -9.567086, 22.369038), (10.295337, -9.567086, 24.855143), (5.248517, -9.567086, 26.386078), (1.6473343e-15, -9.567086, 26.903011), (-5.248517, -9.567086, 26.386078), (-10.295337, -9.567086, 24.855143), (-14.946512, -9.567086, 22.369038), (-19.023302, -9.567086, 19.023302), (-22.369038, -9.567086, 14.946512), (-24.855143, -9.567086, 10.295337), (-26.386078, -9.567086, 5.248517), (-26.903011, -9.567086, 3.2946687e-15), (-26.386078, -9.567086, -5.248517), (-24.855143, -9.567086, -10.295337), (-22.369038, -9.567086, -14.946512), (-19.023302, -9.567086, -19.023302), (-14.946512, -9.567086, -22.369038), (-10.295337, -9.567086, -24.855143), (-5.248517, -9.567086, -26.386078), (-4.942003e-15, -9.567086, -26.903011), (5.248517, -9.567086, -26.386078), (10.295337, -9.567086, -24.855143), (14.946512, -9.567086, -22.369038), (19.023302, -9.567086, -19.023302), (22.369038, -9.567086, -14.946512), (24.855143, -9.567086, -10.295337), (26.386078, -9.567086, -5.248517), (29.213259, -13.889256, 0), (28.651936, -13.889256, 5.6992245), (26.989532, -13.889256, 11.179431), (24.289938, -13.889256, 16.230017), (20.656895, -13.889256, 20.656895), (16.230017, -13.889256, 24.289938), (11.179431, -13.889256, 26.989532), (5.6992245, -13.889256, 28.651936), (1.7887962e-15, -13.889256, 29.213259), (-5.6992245, -13.889256, 28.651936), (-11.179431, -13.889256, 26.989532), (-16.230017, -13.889256, 24.289938), (-20.656895, -13.889256, 20.656895), (-24.289938, -13.889256, 16.230017), (-26.989532, -13.889256, 11.179431), (-28.651936, -13.889256, 5.6992245), (-29.213259, -13.889256, 3.5775923e-15), (-28.651936, -13.889256, -5.6992245), (-26.989532, -13.889256, -11.179431), (-24.289938, -13.889256, -16.230017), (-20.656895, -13.889256, -20.656895), (-16.230017, -13.889256, -24.289938), (-11.179431, -13.889256, -26.989532), (-5.6992245, -13.889256, -28.651936), (-5.3663887e-15, -13.889256, -29.213259), (5.6992245, -13.889256, -28.651936), (11.179431, -13.889256, -26.989532), (16.230017, -13.889256, -24.289938), (20.656895, -13.889256, -20.656895), (24.289938, -13.889256, -16.230017), (26.989532, -13.889256, -11.179431), (28.651936, -13.889256, -5.6992245), (32.32233, -17.67767, 0), (31.701265, -17.67767, 6.3057737), (29.86194, -17.67767, 12.369221), (26.875036, -17.67767, 17.957325), (22.85534, -17.67767, 22.85534), (17.957325, -17.67767, 26.875036), (12.369221, -17.67767, 29.86194), (6.3057737, -17.67767, 31.701265), (1.9791719e-15, -17.67767, 32.32233), (-6.3057737, -17.67767, 31.701265), (-12.369221, -17.67767, 29.86194), (-17.957325, -17.67767, 26.875036), (-22.85534, -17.67767, 22.85534), (-26.875036, -17.67767, 17.957325), (-29.86194, -17.67767, 12.369221), (-31.701265, -17.67767, 6.3057737), (-32.32233, -17.67767, 3.9583438e-15), (-31.701265, -17.67767, -6.3057737), (-29.86194, -17.67767, -12.369221), (-26.875036, -17.67767, -17.957325), (-22.85534, -17.67767, -22.85534), (-17.957325, -17.67767, -26.875036), (-12.369221, -17.67767, -29.86194), (-6.3057737, -17.67767, -31.701265), (-5.937516e-15, -17.67767, -32.32233), (6.3057737, -17.67767, -31.701265), (12.369221, -17.67767, -29.86194), (17.957325, -17.67767, -26.875036), (22.85534, -17.67767, -22.85534), (26.875036, -17.67767, -17.957325), (29.86194, -17.67767, -12.369221), (31.701265, -17.67767, -6.3057737), (36.110744, -20.786741, 0), (35.416885, -20.786741, 7.0448565), (33.361977, -20.786741, 13.818983), (30.024986, -20.786741, 20.062054), (25.534153, -20.786741, 25.534153), (20.062054, -20.786741, 30.024986), (13.818983, -20.786741, 33.361977), (7.0448565, -20.786741, 35.416885), (2.2111454e-15, -20.786741, 36.110744), (-7.0448565, -20.786741, 35.416885), (-13.818983, -20.786741, 33.361977), (-20.062054, -20.786741, 30.024986), (-25.534153, -20.786741, 25.534153), (-30.024986, -20.786741, 20.062054), (-33.361977, -20.786741, 13.818983), (-35.416885, -20.786741, 7.0448565), (-36.110744, -20.786741, 4.422291e-15), (-35.416885, -20.786741, -7.0448565), (-33.361977, -20.786741, -13.818983), (-30.024986, -20.786741, -20.062054), (-25.534153, -20.786741, -25.534153), (-20.062054, -20.786741, -30.024986), (-13.818983, -20.786741, -33.361977), (-7.0448565, -20.786741, -35.416885), (-6.633436e-15, -20.786741, -36.110744), (7.0448565, -20.786741, -35.416885), (13.818983, -20.786741, -33.361977), (20.062054, -20.786741, -30.024986), (25.534153, -20.786741, -25.534153), (30.024986, -20.786741, -20.062054), (33.361977, -20.786741, -13.818983), (35.416885, -20.786741, -7.0448565), (40.432915, -23.096989, 0), (39.656006, -23.096989, 7.88807), (37.35514, -23.096989, 15.473006), (33.61874, -23.096989, 22.463324), (28.590387, -23.096989, 28.590387), (22.463324, -23.096989, 33.61874), (15.473006, -23.096989, 37.35514), (7.88807, -23.096989, 39.656006), (2.475802e-15, -23.096989, 40.432915), (-7.88807, -23.096989, 39.656006), (-15.473006, -23.096989, 37.35514), (-22.463324, -23.096989, 33.61874), (-28.590387, -23.096989, 28.590387), (-33.61874, -23.096989, 22.463324), (-37.35514, -23.096989, 15.473006), (-39.656006, -23.096989, 7.88807), (-40.432915, -23.096989, 4.951604e-15), (-39.656006, -23.096989, -7.88807), (-37.35514, -23.096989, -15.473006), (-33.61874, -23.096989, -22.463324), (-28.590387, -23.096989, -28.590387), (-22.463324, -23.096989, -33.61874), (-15.473006, -23.096989, -37.35514), (-7.88807, -23.096989, -39.656006), (-7.427406e-15, -23.096989, -40.432915), (7.88807, -23.096989, -39.656006), (15.473006, -23.096989, -37.35514), (22.463324, -23.096989, -33.61874), (28.590387, -23.096989, -28.590387), (33.61874, -23.096989, -22.463324), (37.35514, -23.096989, -15.473006), (39.656006, -23.096989, -7.88807), (45.12274, -24.519632, 0), (44.255722, -24.519632, 8.80301), (41.687977, -24.519632, 17.267725), (37.51819, -24.519632, 25.068851), (31.906597, -24.519632, 31.906597), (25.068851, -24.519632, 37.51819), (17.267725, -24.519632, 41.687977), (8.80301, -24.519632, 44.255722), (2.762971e-15, -24.519632, 45.12274), (-8.80301, -24.519632, 44.255722), (-17.267725, -24.519632, 41.687977), (-25.068851, -24.519632, 37.51819), (-31.906597, -24.519632, 31.906597), (-37.51819, -24.519632, 25.068851), (-41.687977, -24.519632, 17.267725), (-44.255722, -24.519632, 8.80301), (-45.12274, -24.519632, 5.525942e-15), (-44.255722, -24.519632, -8.80301), (-41.687977, -24.519632, -17.267725), (-37.51819, -24.519632, -25.068851), (-31.906597, -24.519632, -31.906597), (-25.068851, -24.519632, -37.51819), (-17.267725, -24.519632, -41.687977), (-8.80301, -24.519632, -44.255722), (-8.288913e-15, -24.519632, -45.12274), (8.80301, -24.519632, -44.255722), (17.267725, -24.519632, -41.687977), (25.068851, -24.519632, -37.51819), (31.906597, -24.519632, -31.906597), (37.51819, -24.519632, -25.068851), (41.687977, -24.519632, -17.267725), (44.255722, -24.519632, -8.80301), (50, -25, 0), (49.039265, -25, 9.754516), (46.193977, -25, 19.134172), (41.573483, -25, 27.778511), (35.35534, -25, 35.35534), (27.778511, -25, 41.573483), (19.134172, -25, 46.193977), (9.754516, -25, 49.039265), (3.0616169e-15, -25, 50), (-9.754516, -25, 49.039265), (-19.134172, -25, 46.193977), (-27.778511, -25, 41.573483), (-35.35534, -25, 35.35534), (-41.573483, -25, 27.778511), (-46.193977, -25, 19.134172), (-49.039265, -25, 9.754516), (-50, -25, 6.1232338e-15), (-49.039265, -25, -9.754516), (-46.193977, -25, -19.134172), (-41.573483, -25, -27.778511), (-35.35534, -25, -35.35534), (-27.778511, -25, -41.573483), (-19.134172, -25, -46.193977), (-9.754516, -25, -49.039265), (-9.184851e-15, -25, -50), (9.754516, -25, -49.039265), (19.134172, -25, -46.193977), (27.778511, -25, -41.573483), (35.35534, -25, -35.35534), (41.573483, -25, -27.778511), (46.193977, -25, -19.134172), (49.039265, -25, -9.754516), (54.87726, -24.519632, 0), (53.822807, -24.519632, 10.706022), (50.699974, -24.519632, 21.000618), (45.628773, -24.519632, 30.48817), (38.80408, -24.519632, 38.80408), (30.48817, -24.519632, 45.628773), (21.000618, -24.519632, 50.699974), (10.706022, -24.519632, 53.822807), (3.360263e-15, -24.519632, 54.87726), (-10.706022, -24.519632, 53.822807), (-21.000618, -24.519632, 50.699974), (-30.48817, -24.519632, 45.628773), (-38.80408, -24.519632, 38.80408), (-45.628773, -24.519632, 30.48817), (-50.699974, -24.519632, 21.000618), (-53.822807, -24.519632, 10.706022), (-54.87726, -24.519632, 6.720526e-15), (-53.822807, -24.519632, -10.706022), (-50.699974, -24.519632, -21.000618), (-45.628773, -24.519632, -30.48817), (-38.80408, -24.519632, -38.80408), (-30.48817, -24.519632, -45.628773), (-21.000618, -24.519632, -50.699974), (-10.706022, -24.519632, -53.822807), (-1.0080789e-14, -24.519632, -54.87726), (10.706022, -24.519632, -53.822807), (21.000618, -24.519632, -50.699974), (30.48817, -24.519632, -45.628773), (38.80408, -24.519632, -38.80408), (45.628773, -24.519632, -30.48817), (50.699974, -24.519632, -21.000618), (53.822807, -24.519632, -10.706022), (59.567085, -23.096989, 0), (58.42252, -23.096989, 11.620962), (55.03281, -23.096989, 22.795338), (49.52822, -23.096989, 33.0937), (42.12029, -23.096989, 42.12029), (33.0937, -23.096989, 49.52822), (22.795338, -23.096989, 55.03281), (11.620962, -23.096989, 58.42252), (3.647432e-15, -23.096989, 59.567085), (-11.620962, -23.096989, 58.42252), (-22.795338, -23.096989, 55.03281), (-33.0937, -23.096989, 49.52822), (-42.12029, -23.096989, 42.12029), (-49.52822, -23.096989, 33.0937), (-55.03281, -23.096989, 22.795338), (-58.42252, -23.096989, 11.620962), (-59.567085, -23.096989, 7.294864e-15), (-58.42252, -23.096989, -11.620962), (-55.03281, -23.096989, -22.795338), (-49.52822, -23.096989, -33.0937), (-42.12029, -23.096989, -42.12029), (-33.0937, -23.096989, -49.52822), (-22.795338, -23.096989, -55.03281), (-11.620962, -23.096989, -58.42252), (-1.0942296e-14, -23.096989, -59.567085), (11.620962, -23.096989, -58.42252), (22.795338, -23.096989, -55.03281), (33.0937, -23.096989, -49.52822), (42.12029, -23.096989, -42.12029), (49.52822, -23.096989, -33.0937), (55.03281, -23.096989, -22.795338), (58.42252, -23.096989, -11.620962), (63.889256, -20.786741, 0), (62.66164, -20.786741, 12.464175), (59.025974, -20.786741, 24.44936), (53.121975, -20.786741, 35.49497), (45.176525, -20.786741, 45.176525), (35.49497, -20.786741, 53.121975), (24.44936, -20.786741, 59.025974), (12.464175, -20.786741, 62.66164), (3.9120886e-15, -20.786741, 63.889256), (-12.464175, -20.786741, 62.66164), (-24.44936, -20.786741, 59.025974), (-35.49497, -20.786741, 53.121975), (-45.176525, -20.786741, 45.176525), (-53.121975, -20.786741, 35.49497), (-59.025974, -20.786741, 24.44936), (-62.66164, -20.786741, 12.464175), (-63.889256, -20.786741, 7.824177e-15), (-62.66164, -20.786741, -12.464175), (-59.025974, -20.786741, -24.44936), (-53.121975, -20.786741, -35.49497), (-45.176525, -20.786741, -45.176525), (-35.49497, -20.786741, -53.121975), (-24.44936, -20.786741, -59.025974), (-12.464175, -20.786741, -62.66164), (-1.1736266e-14, -20.786741, -63.889256), (12.464175, -20.786741, -62.66164), (24.44936, -20.786741, -59.025974), (35.49497, -20.786741, -53.121975), (45.176525, -20.786741, -45.176525), (53.121975, -20.786741, -35.49497), (59.025974, -20.786741, -24.44936), (62.66164, -20.786741, -12.464175), (67.67767, -17.67767, 0), (66.37726, -17.67767, 13.2032585), (62.526012, -17.67767, 25.899122), (56.271927, -17.67767, 37.599697), (47.85534, -17.67767, 47.85534), (37.599697, -17.67767, 56.271927), (25.899122, -17.67767, 62.526012), (13.2032585, -17.67767, 66.37726), (4.144062e-15, -17.67767, 67.67767), (-13.2032585, -17.67767, 66.37726), (-25.899122, -17.67767, 62.526012), (-37.599697, -17.67767, 56.271927), (-47.85534, -17.67767, 47.85534), (-56.271927, -17.67767, 37.599697), (-62.526012, -17.67767, 25.899122), (-66.37726, -17.67767, 13.2032585), (-67.67767, -17.67767, 8.288124e-15), (-66.37726, -17.67767, -13.2032585), (-62.526012, -17.67767, -25.899122), (-56.271927, -17.67767, -37.599697), (-47.85534, -17.67767, -47.85534), (-37.599697, -17.67767, -56.271927), (-25.899122, -17.67767, -62.526012), (-13.2032585, -17.67767, -66.37726), (-1.2432186e-14, -17.67767, -67.67767), (13.2032585, -17.67767, -66.37726), (25.899122, -17.67767, -62.526012), (37.599697, -17.67767, -56.271927), (47.85534, -17.67767, -47.85534), (56.271927, -17.67767, -37.599697), (62.526012, -17.67767, -25.899122), (66.37726, -17.67767, -13.2032585), (70.78674, -13.889256, 0), (69.42659, -13.889256, 13.809808), (65.39842, -13.889256, 27.088913), (58.857025, -13.889256, 39.327007), (50.053783, -13.889256, 50.053783), (39.327007, -13.889256, 58.857025), (27.088913, -13.889256, 65.39842), (13.809808, -13.889256, 69.42659), (4.334438e-15, -13.889256, 70.78674), (-13.809808, -13.889256, 69.42659), (-27.088913, -13.889256, 65.39842), (-39.327007, -13.889256, 58.857025), (-50.053783, -13.889256, 50.053783), (-58.857025, -13.889256, 39.327007), (-65.39842, -13.889256, 27.088913), (-69.42659, -13.889256, 13.809808), (-70.78674, -13.889256, 8.668876e-15), (-69.42659, -13.889256, -13.809808), (-65.39842, -13.889256, -27.088913), (-58.857025, -13.889256, -39.327007), (-50.053783, -13.889256, -50.053783), (-39.327007, -13.889256, -58.857025), (-27.088913, -13.889256, -65.39842), (-13.809808, -13.889256, -69.42659), (-1.30033135e-14, -13.889256, -70.78674), (13.809808, -13.889256, -69.42659), (27.088913, -13.889256, -65.39842), (39.327007, -13.889256, -58.857025), (50.053783, -13.889256, -50.053783), (58.857025, -13.889256, -39.327007), (65.39842, -13.889256, -27.088913), (69.42659, -13.889256, -13.809808), (73.096985, -9.567086, 0), (71.69245, -9.567086, 14.260515), (67.532814, -9.567086, 27.973007), (60.777924, -9.567086, 40.61051), (51.687378, -9.567086, 51.687378), (40.61051, -9.567086, 60.777924), (27.973007, -9.567086, 67.532814), (14.260515, -9.567086, 71.69245), (4.4758995e-15, -9.567086, 73.096985), (-14.260515, -9.567086, 71.69245), (-27.973007, -9.567086, 67.532814), (-40.61051, -9.567086, 60.777924), (-51.687378, -9.567086, 51.687378), (-60.777924, -9.567086, 40.61051), (-67.532814, -9.567086, 27.973007), (-71.69245, -9.567086, 14.260515), (-73.096985, -9.567086, 8.951799e-15), (-71.69245, -9.567086, -14.260515), (-67.532814, -9.567086, -27.973007), (-60.777924, -9.567086, -40.61051), (-51.687378, -9.567086, -51.687378), (-40.61051, -9.567086, -60.777924), (-27.973007, -9.567086, -67.532814), (-14.260515, -9.567086, -71.69245), (-1.3427699e-14, -9.567086, -73.096985), (14.260515, -9.567086, -71.69245), (27.973007, -9.567086, -67.532814), (40.61051, -9.567086, -60.777924), (51.687378, -9.567086, -51.687378), (60.777924, -9.567086, -40.61051), (67.532814, -9.567086, -27.973007), (71.69245, -9.567086, -14.260515), (74.51963, -4.877258, 0), (73.08776, -4.877258, 14.538059), (68.84716, -4.877258, 28.51743), (61.960808, -4.877258, 41.40089), (52.693336, -4.877258, 52.693336), (41.40089, -4.877258, 61.960808), (28.51743, -4.877258, 68.84716), (14.538059, -4.877258, 73.08776), (4.5630114e-15, -4.877258, 74.51963), (-14.538059, -4.877258, 73.08776), (-28.51743, -4.877258, 68.84716), (-41.40089, -4.877258, 61.960808), (-52.693336, -4.877258, 52.693336), (-61.960808, -4.877258, 41.40089), (-68.84716, -4.877258, 28.51743), (-73.08776, -4.877258, 14.538059), (-74.51963, -4.877258, 9.126023e-15), (-73.08776, -4.877258, -14.538059), (-68.84716, -4.877258, -28.51743), (-61.960808, -4.877258, -41.40089), (-52.693336, -4.877258, -52.693336), (-41.40089, -4.877258, -61.960808), (-28.51743, -4.877258, -68.84716), (-14.538059, -4.877258, -73.08776), (-1.3689034e-14, -4.877258, -74.51963), (14.538059, -4.877258, -73.08776), (28.51743, -4.877258, -68.84716), (41.40089, -4.877258, -61.960808), (52.693336, -4.877258, -52.693336), (61.960808, -4.877258, -41.40089), (68.84716, -4.877258, -28.51743), (73.08776, -4.877258, -14.538059)] + float2[] primvars:st = [(1, 0), (1, 0.03125), (0.96875, 0.03125), (0.96875, 0), (0.96875, 0), (0.96875, 0.03125), (0.9375, 0.03125), (0.9375, 0), (0.9375, 0), (0.9375, 0.03125), (0.90625, 0.03125), (0.90625, 0), (0.90625, 0), (0.90625, 0.03125), (0.875, 0.03125), (0.875, 0), (0.875, 0), (0.875, 0.03125), (0.84375, 0.03125), (0.84375, 0), (0.84375, 0), (0.84375, 0.03125), (0.8125, 0.03125), (0.8125, 0), (0.8125, 0), (0.8125, 0.03125), (0.78125, 0.03125), (0.78125, 0), (0.78125, 0), (0.78125, 0.03125), (0.75, 0.03125), (0.75, 0), (0.75, 0), (0.75, 0.03125), (0.71875, 0.03125), (0.71875, 0), (0.71875, 0), (0.71875, 0.03125), (0.6875, 0.03125), (0.6875, 0), (0.6875, 0), (0.6875, 0.03125), (0.65625, 0.03125), (0.65625, 0), (0.65625, 0), (0.65625, 0.03125), (0.625, 0.03125), (0.625, 0), (0.625, 0), (0.625, 0.03125), (0.59375, 0.03125), (0.59375, 0), (0.59375, 0), (0.59375, 0.03125), (0.5625, 0.03125), (0.5625, 0), (0.5625, 0), (0.5625, 0.03125), (0.53125, 0.03125), (0.53125, 0), (0.53125, 0), (0.53125, 0.03125), (0.5, 0.03125), (0.5, 0), (0.5, 0), (0.5, 0.03125), (0.46875, 0.03125), (0.46875, 0), (0.46875, 0), (0.46875, 0.03125), (0.4375, 0.03125), (0.4375, 0), (0.4375, 0), (0.4375, 0.03125), (0.40625, 0.03125), (0.40625, 0), (0.40625, 0), (0.40625, 0.03125), (0.375, 0.03125), (0.375, 0), (0.375, 0), (0.375, 0.03125), (0.34375, 0.03125), (0.34375, 0), (0.34375, 0), (0.34375, 0.03125), (0.3125, 0.03125), (0.3125, 0), (0.3125, 0), (0.3125, 0.03125), (0.28125, 0.03125), (0.28125, 0), (0.28125, 0), (0.28125, 0.03125), (0.25, 0.03125), (0.25, 0), (0.25, 0), (0.25, 0.03125), (0.21875, 0.03125), (0.21875, 0), (0.21875, 0), (0.21875, 0.03125), (0.1875, 0.03125), (0.1875, 0), (0.1875, 0), (0.1875, 0.03125), (0.15625, 0.03125), (0.15625, 0), (0.15625, 0), (0.15625, 0.03125), (0.125, 0.03125), (0.125, 0), (0.125, 0), (0.125, 0.03125), (0.09375, 0.03125), (0.09375, 0), (0.09375, 0), (0.09375, 0.03125), (0.0625, 0.03125), (0.0625, 0), (0.0625, 0), (0.0625, 0.03125), (0.03125, 0.03125), (0.03125, 0), (0.03125, 0), (0.03125, 0.03125), (1, 0.03125), (1, 0), (1, 0.03125), (1, 0.0625), (0.96875, 0.0625), (0.96875, 0.03125), (0.96875, 0.03125), (0.96875, 0.0625), (0.9375, 0.0625), (0.9375, 0.03125), (0.9375, 0.03125), (0.9375, 0.0625), (0.90625, 0.0625), (0.90625, 0.03125), (0.90625, 0.03125), (0.90625, 0.0625), (0.875, 0.0625), (0.875, 0.03125), (0.875, 0.03125), (0.875, 0.0625), (0.84375, 0.0625), (0.84375, 0.03125), (0.84375, 0.03125), (0.84375, 0.0625), (0.8125, 0.0625), (0.8125, 0.03125), (0.8125, 0.03125), (0.8125, 0.0625), (0.78125, 0.0625), (0.78125, 0.03125), (0.78125, 0.03125), (0.78125, 0.0625), (0.75, 0.0625), (0.75, 0.03125), (0.75, 0.03125), (0.75, 0.0625), (0.71875, 0.0625), (0.71875, 0.03125), (0.71875, 0.03125), (0.71875, 0.0625), (0.6875, 0.0625), (0.6875, 0.03125), (0.6875, 0.03125), (0.6875, 0.0625), (0.65625, 0.0625), (0.65625, 0.03125), (0.65625, 0.03125), (0.65625, 0.0625), (0.625, 0.0625), (0.625, 0.03125), (0.625, 0.03125), (0.625, 0.0625), (0.59375, 0.0625), (0.59375, 0.03125), (0.59375, 0.03125), (0.59375, 0.0625), (0.5625, 0.0625), (0.5625, 0.03125), (0.5625, 0.03125), (0.5625, 0.0625), (0.53125, 0.0625), (0.53125, 0.03125), (0.53125, 0.03125), (0.53125, 0.0625), (0.5, 0.0625), (0.5, 0.03125), (0.5, 0.03125), (0.5, 0.0625), (0.46875, 0.0625), (0.46875, 0.03125), (0.46875, 0.03125), (0.46875, 0.0625), (0.4375, 0.0625), (0.4375, 0.03125), (0.4375, 0.03125), (0.4375, 0.0625), (0.40625, 0.0625), (0.40625, 0.03125), (0.40625, 0.03125), (0.40625, 0.0625), (0.375, 0.0625), (0.375, 0.03125), (0.375, 0.03125), (0.375, 0.0625), (0.34375, 0.0625), (0.34375, 0.03125), (0.34375, 0.03125), (0.34375, 0.0625), (0.3125, 0.0625), (0.3125, 0.03125), (0.3125, 0.03125), (0.3125, 0.0625), (0.28125, 0.0625), (0.28125, 0.03125), (0.28125, 0.03125), (0.28125, 0.0625), (0.25, 0.0625), (0.25, 0.03125), (0.25, 0.03125), (0.25, 0.0625), (0.21875, 0.0625), (0.21875, 0.03125), (0.21875, 0.03125), (0.21875, 0.0625), (0.1875, 0.0625), (0.1875, 0.03125), (0.1875, 0.03125), (0.1875, 0.0625), (0.15625, 0.0625), (0.15625, 0.03125), (0.15625, 0.03125), (0.15625, 0.0625), (0.125, 0.0625), (0.125, 0.03125), (0.125, 0.03125), (0.125, 0.0625), (0.09375, 0.0625), (0.09375, 0.03125), (0.09375, 0.03125), (0.09375, 0.0625), (0.0625, 0.0625), (0.0625, 0.03125), (0.0625, 0.03125), (0.0625, 0.0625), (0.03125, 0.0625), (0.03125, 0.03125), (0.03125, 0.03125), (0.03125, 0.0625), (1, 0.0625), (1, 0.03125), (1, 0.0625), (1, 0.09375), (0.96875, 0.09375), (0.96875, 0.0625), (0.96875, 0.0625), (0.96875, 0.09375), (0.9375, 0.09375), (0.9375, 0.0625), (0.9375, 0.0625), (0.9375, 0.09375), (0.90625, 0.09375), (0.90625, 0.0625), (0.90625, 0.0625), (0.90625, 0.09375), (0.875, 0.09375), (0.875, 0.0625), (0.875, 0.0625), (0.875, 0.09375), (0.84375, 0.09375), (0.84375, 0.0625), (0.84375, 0.0625), (0.84375, 0.09375), (0.8125, 0.09375), (0.8125, 0.0625), (0.8125, 0.0625), (0.8125, 0.09375), (0.78125, 0.09375), (0.78125, 0.0625), (0.78125, 0.0625), (0.78125, 0.09375), (0.75, 0.09375), (0.75, 0.0625), (0.75, 0.0625), (0.75, 0.09375), (0.71875, 0.09375), (0.71875, 0.0625), (0.71875, 0.0625), (0.71875, 0.09375), (0.6875, 0.09375), (0.6875, 0.0625), (0.6875, 0.0625), (0.6875, 0.09375), (0.65625, 0.09375), (0.65625, 0.0625), (0.65625, 0.0625), (0.65625, 0.09375), (0.625, 0.09375), (0.625, 0.0625), (0.625, 0.0625), (0.625, 0.09375), (0.59375, 0.09375), (0.59375, 0.0625), (0.59375, 0.0625), (0.59375, 0.09375), (0.5625, 0.09375), (0.5625, 0.0625), (0.5625, 0.0625), (0.5625, 0.09375), (0.53125, 0.09375), (0.53125, 0.0625), (0.53125, 0.0625), (0.53125, 0.09375), (0.5, 0.09375), (0.5, 0.0625), (0.5, 0.0625), (0.5, 0.09375), (0.46875, 0.09375), (0.46875, 0.0625), (0.46875, 0.0625), (0.46875, 0.09375), (0.4375, 0.09375), (0.4375, 0.0625), (0.4375, 0.0625), (0.4375, 0.09375), (0.40625, 0.09375), (0.40625, 0.0625), (0.40625, 0.0625), (0.40625, 0.09375), (0.375, 0.09375), (0.375, 0.0625), (0.375, 0.0625), (0.375, 0.09375), (0.34375, 0.09375), (0.34375, 0.0625), (0.34375, 0.0625), (0.34375, 0.09375), (0.3125, 0.09375), (0.3125, 0.0625), (0.3125, 0.0625), (0.3125, 0.09375), (0.28125, 0.09375), (0.28125, 0.0625), (0.28125, 0.0625), (0.28125, 0.09375), (0.25, 0.09375), (0.25, 0.0625), (0.25, 0.0625), (0.25, 0.09375), (0.21875, 0.09375), (0.21875, 0.0625), (0.21875, 0.0625), (0.21875, 0.09375), (0.1875, 0.09375), (0.1875, 0.0625), (0.1875, 0.0625), (0.1875, 0.09375), (0.15625, 0.09375), (0.15625, 0.0625), (0.15625, 0.0625), (0.15625, 0.09375), (0.125, 0.09375), (0.125, 0.0625), (0.125, 0.0625), (0.125, 0.09375), (0.09375, 0.09375), (0.09375, 0.0625), (0.09375, 0.0625), (0.09375, 0.09375), (0.0625, 0.09375), (0.0625, 0.0625), (0.0625, 0.0625), (0.0625, 0.09375), (0.03125, 0.09375), (0.03125, 0.0625), (0.03125, 0.0625), (0.03125, 0.09375), (1, 0.09375), (1, 0.0625), (1, 0.09375), (1, 0.125), (0.96875, 0.125), (0.96875, 0.09375), (0.96875, 0.09375), (0.96875, 0.125), (0.9375, 0.125), (0.9375, 0.09375), (0.9375, 0.09375), (0.9375, 0.125), (0.90625, 0.125), (0.90625, 0.09375), (0.90625, 0.09375), (0.90625, 0.125), (0.875, 0.125), (0.875, 0.09375), (0.875, 0.09375), (0.875, 0.125), (0.84375, 0.125), (0.84375, 0.09375), (0.84375, 0.09375), (0.84375, 0.125), (0.8125, 0.125), (0.8125, 0.09375), (0.8125, 0.09375), (0.8125, 0.125), (0.78125, 0.125), (0.78125, 0.09375), (0.78125, 0.09375), (0.78125, 0.125), (0.75, 0.125), (0.75, 0.09375), (0.75, 0.09375), (0.75, 0.125), (0.71875, 0.125), (0.71875, 0.09375), (0.71875, 0.09375), (0.71875, 0.125), (0.6875, 0.125), (0.6875, 0.09375), (0.6875, 0.09375), (0.6875, 0.125), (0.65625, 0.125), (0.65625, 0.09375), (0.65625, 0.09375), (0.65625, 0.125), (0.625, 0.125), (0.625, 0.09375), (0.625, 0.09375), (0.625, 0.125), (0.59375, 0.125), (0.59375, 0.09375), (0.59375, 0.09375), (0.59375, 0.125), (0.5625, 0.125), (0.5625, 0.09375), (0.5625, 0.09375), (0.5625, 0.125), (0.53125, 0.125), (0.53125, 0.09375), (0.53125, 0.09375), (0.53125, 0.125), (0.5, 0.125), (0.5, 0.09375), (0.5, 0.09375), (0.5, 0.125), (0.46875, 0.125), (0.46875, 0.09375), (0.46875, 0.09375), (0.46875, 0.125), (0.4375, 0.125), (0.4375, 0.09375), (0.4375, 0.09375), (0.4375, 0.125), (0.40625, 0.125), (0.40625, 0.09375), (0.40625, 0.09375), (0.40625, 0.125), (0.375, 0.125), (0.375, 0.09375), (0.375, 0.09375), (0.375, 0.125), (0.34375, 0.125), (0.34375, 0.09375), (0.34375, 0.09375), (0.34375, 0.125), (0.3125, 0.125), (0.3125, 0.09375), (0.3125, 0.09375), (0.3125, 0.125), (0.28125, 0.125), (0.28125, 0.09375), (0.28125, 0.09375), (0.28125, 0.125), (0.25, 0.125), (0.25, 0.09375), (0.25, 0.09375), (0.25, 0.125), (0.21875, 0.125), (0.21875, 0.09375), (0.21875, 0.09375), (0.21875, 0.125), (0.1875, 0.125), (0.1875, 0.09375), (0.1875, 0.09375), (0.1875, 0.125), (0.15625, 0.125), (0.15625, 0.09375), (0.15625, 0.09375), (0.15625, 0.125), (0.125, 0.125), (0.125, 0.09375), (0.125, 0.09375), (0.125, 0.125), (0.09375, 0.125), (0.09375, 0.09375), (0.09375, 0.09375), (0.09375, 0.125), (0.0625, 0.125), (0.0625, 0.09375), (0.0625, 0.09375), (0.0625, 0.125), (0.03125, 0.125), (0.03125, 0.09375), (0.03125, 0.09375), (0.03125, 0.125), (1, 0.125), (1, 0.09375), (1, 0.125), (1, 0.15625), (0.96875, 0.15625), (0.96875, 0.125), (0.96875, 0.125), (0.96875, 0.15625), (0.9375, 0.15625), (0.9375, 0.125), (0.9375, 0.125), (0.9375, 0.15625), (0.90625, 0.15625), (0.90625, 0.125), (0.90625, 0.125), (0.90625, 0.15625), (0.875, 0.15625), (0.875, 0.125), (0.875, 0.125), (0.875, 0.15625), (0.84375, 0.15625), (0.84375, 0.125), (0.84375, 0.125), (0.84375, 0.15625), (0.8125, 0.15625), (0.8125, 0.125), (0.8125, 0.125), (0.8125, 0.15625), (0.78125, 0.15625), (0.78125, 0.125), (0.78125, 0.125), (0.78125, 0.15625), (0.75, 0.15625), (0.75, 0.125), (0.75, 0.125), (0.75, 0.15625), (0.71875, 0.15625), (0.71875, 0.125), (0.71875, 0.125), (0.71875, 0.15625), (0.6875, 0.15625), (0.6875, 0.125), (0.6875, 0.125), (0.6875, 0.15625), (0.65625, 0.15625), (0.65625, 0.125), (0.65625, 0.125), (0.65625, 0.15625), (0.625, 0.15625), (0.625, 0.125), (0.625, 0.125), (0.625, 0.15625), (0.59375, 0.15625), (0.59375, 0.125), (0.59375, 0.125), (0.59375, 0.15625), (0.5625, 0.15625), (0.5625, 0.125), (0.5625, 0.125), (0.5625, 0.15625), (0.53125, 0.15625), (0.53125, 0.125), (0.53125, 0.125), (0.53125, 0.15625), (0.5, 0.15625), (0.5, 0.125), (0.5, 0.125), (0.5, 0.15625), (0.46875, 0.15625), (0.46875, 0.125), (0.46875, 0.125), (0.46875, 0.15625), (0.4375, 0.15625), (0.4375, 0.125), (0.4375, 0.125), (0.4375, 0.15625), (0.40625, 0.15625), (0.40625, 0.125), (0.40625, 0.125), (0.40625, 0.15625), (0.375, 0.15625), (0.375, 0.125), (0.375, 0.125), (0.375, 0.15625), (0.34375, 0.15625), (0.34375, 0.125), (0.34375, 0.125), (0.34375, 0.15625), (0.3125, 0.15625), (0.3125, 0.125), (0.3125, 0.125), (0.3125, 0.15625), (0.28125, 0.15625), (0.28125, 0.125), (0.28125, 0.125), (0.28125, 0.15625), (0.25, 0.15625), (0.25, 0.125), (0.25, 0.125), (0.25, 0.15625), (0.21875, 0.15625), (0.21875, 0.125), (0.21875, 0.125), (0.21875, 0.15625), (0.1875, 0.15625), (0.1875, 0.125), (0.1875, 0.125), (0.1875, 0.15625), (0.15625, 0.15625), (0.15625, 0.125), (0.15625, 0.125), (0.15625, 0.15625), (0.125, 0.15625), (0.125, 0.125), (0.125, 0.125), (0.125, 0.15625), (0.09375, 0.15625), (0.09375, 0.125), (0.09375, 0.125), (0.09375, 0.15625), (0.0625, 0.15625), (0.0625, 0.125), (0.0625, 0.125), (0.0625, 0.15625), (0.03125, 0.15625), (0.03125, 0.125), (0.03125, 0.125), (0.03125, 0.15625), (1, 0.15625), (1, 0.125), (1, 0.15625), (1, 0.1875), (0.96875, 0.1875), (0.96875, 0.15625), (0.96875, 0.15625), (0.96875, 0.1875), (0.9375, 0.1875), (0.9375, 0.15625), (0.9375, 0.15625), (0.9375, 0.1875), (0.90625, 0.1875), (0.90625, 0.15625), (0.90625, 0.15625), (0.90625, 0.1875), (0.875, 0.1875), (0.875, 0.15625), (0.875, 0.15625), (0.875, 0.1875), (0.84375, 0.1875), (0.84375, 0.15625), (0.84375, 0.15625), (0.84375, 0.1875), (0.8125, 0.1875), (0.8125, 0.15625), (0.8125, 0.15625), (0.8125, 0.1875), (0.78125, 0.1875), (0.78125, 0.15625), (0.78125, 0.15625), (0.78125, 0.1875), (0.75, 0.1875), (0.75, 0.15625), (0.75, 0.15625), (0.75, 0.1875), (0.71875, 0.1875), (0.71875, 0.15625), (0.71875, 0.15625), (0.71875, 0.1875), (0.6875, 0.1875), (0.6875, 0.15625), (0.6875, 0.15625), (0.6875, 0.1875), (0.65625, 0.1875), (0.65625, 0.15625), (0.65625, 0.15625), (0.65625, 0.1875), (0.625, 0.1875), (0.625, 0.15625), (0.625, 0.15625), (0.625, 0.1875), (0.59375, 0.1875), (0.59375, 0.15625), (0.59375, 0.15625), (0.59375, 0.1875), (0.5625, 0.1875), (0.5625, 0.15625), (0.5625, 0.15625), (0.5625, 0.1875), (0.53125, 0.1875), (0.53125, 0.15625), (0.53125, 0.15625), (0.53125, 0.1875), (0.5, 0.1875), (0.5, 0.15625), (0.5, 0.15625), (0.5, 0.1875), (0.46875, 0.1875), (0.46875, 0.15625), (0.46875, 0.15625), (0.46875, 0.1875), (0.4375, 0.1875), (0.4375, 0.15625), (0.4375, 0.15625), (0.4375, 0.1875), (0.40625, 0.1875), (0.40625, 0.15625), (0.40625, 0.15625), (0.40625, 0.1875), (0.375, 0.1875), (0.375, 0.15625), (0.375, 0.15625), (0.375, 0.1875), (0.34375, 0.1875), (0.34375, 0.15625), (0.34375, 0.15625), (0.34375, 0.1875), (0.3125, 0.1875), (0.3125, 0.15625), (0.3125, 0.15625), (0.3125, 0.1875), (0.28125, 0.1875), (0.28125, 0.15625), (0.28125, 0.15625), (0.28125, 0.1875), (0.25, 0.1875), (0.25, 0.15625), (0.25, 0.15625), (0.25, 0.1875), (0.21875, 0.1875), (0.21875, 0.15625), (0.21875, 0.15625), (0.21875, 0.1875), (0.1875, 0.1875), (0.1875, 0.15625), (0.1875, 0.15625), (0.1875, 0.1875), (0.15625, 0.1875), (0.15625, 0.15625), (0.15625, 0.15625), (0.15625, 0.1875), (0.125, 0.1875), (0.125, 0.15625), (0.125, 0.15625), (0.125, 0.1875), (0.09375, 0.1875), (0.09375, 0.15625), (0.09375, 0.15625), (0.09375, 0.1875), (0.0625, 0.1875), (0.0625, 0.15625), (0.0625, 0.15625), (0.0625, 0.1875), (0.03125, 0.1875), (0.03125, 0.15625), (0.03125, 0.15625), (0.03125, 0.1875), (1, 0.1875), (1, 0.15625), (1, 0.1875), (1, 0.21875), (0.96875, 0.21875), (0.96875, 0.1875), (0.96875, 0.1875), (0.96875, 0.21875), (0.9375, 0.21875), (0.9375, 0.1875), (0.9375, 0.1875), (0.9375, 0.21875), (0.90625, 0.21875), (0.90625, 0.1875), (0.90625, 0.1875), (0.90625, 0.21875), (0.875, 0.21875), (0.875, 0.1875), (0.875, 0.1875), (0.875, 0.21875), (0.84375, 0.21875), (0.84375, 0.1875), (0.84375, 0.1875), (0.84375, 0.21875), (0.8125, 0.21875), (0.8125, 0.1875), (0.8125, 0.1875), (0.8125, 0.21875), (0.78125, 0.21875), (0.78125, 0.1875), (0.78125, 0.1875), (0.78125, 0.21875), (0.75, 0.21875), (0.75, 0.1875), (0.75, 0.1875), (0.75, 0.21875), (0.71875, 0.21875), (0.71875, 0.1875), (0.71875, 0.1875), (0.71875, 0.21875), (0.6875, 0.21875), (0.6875, 0.1875), (0.6875, 0.1875), (0.6875, 0.21875), (0.65625, 0.21875), (0.65625, 0.1875), (0.65625, 0.1875), (0.65625, 0.21875), (0.625, 0.21875), (0.625, 0.1875), (0.625, 0.1875), (0.625, 0.21875), (0.59375, 0.21875), (0.59375, 0.1875), (0.59375, 0.1875), (0.59375, 0.21875), (0.5625, 0.21875), (0.5625, 0.1875), (0.5625, 0.1875), (0.5625, 0.21875), (0.53125, 0.21875), (0.53125, 0.1875), (0.53125, 0.1875), (0.53125, 0.21875), (0.5, 0.21875), (0.5, 0.1875), (0.5, 0.1875), (0.5, 0.21875), (0.46875, 0.21875), (0.46875, 0.1875), (0.46875, 0.1875), (0.46875, 0.21875), (0.4375, 0.21875), (0.4375, 0.1875), (0.4375, 0.1875), (0.4375, 0.21875), (0.40625, 0.21875), (0.40625, 0.1875), (0.40625, 0.1875), (0.40625, 0.21875), (0.375, 0.21875), (0.375, 0.1875), (0.375, 0.1875), (0.375, 0.21875), (0.34375, 0.21875), (0.34375, 0.1875), (0.34375, 0.1875), (0.34375, 0.21875), (0.3125, 0.21875), (0.3125, 0.1875), (0.3125, 0.1875), (0.3125, 0.21875), (0.28125, 0.21875), (0.28125, 0.1875), (0.28125, 0.1875), (0.28125, 0.21875), (0.25, 0.21875), (0.25, 0.1875), (0.25, 0.1875), (0.25, 0.21875), (0.21875, 0.21875), (0.21875, 0.1875), (0.21875, 0.1875), (0.21875, 0.21875), (0.1875, 0.21875), (0.1875, 0.1875), (0.1875, 0.1875), (0.1875, 0.21875), (0.15625, 0.21875), (0.15625, 0.1875), (0.15625, 0.1875), (0.15625, 0.21875), (0.125, 0.21875), (0.125, 0.1875), (0.125, 0.1875), (0.125, 0.21875), (0.09375, 0.21875), (0.09375, 0.1875), (0.09375, 0.1875), (0.09375, 0.21875), (0.0625, 0.21875), (0.0625, 0.1875), (0.0625, 0.1875), (0.0625, 0.21875), (0.03125, 0.21875), (0.03125, 0.1875), (0.03125, 0.1875), (0.03125, 0.21875), (1, 0.21875), (1, 0.1875), (1, 0.21875), (1, 0.25), (0.96875, 0.25), (0.96875, 0.21875), (0.96875, 0.21875), (0.96875, 0.25), (0.9375, 0.25), (0.9375, 0.21875), (0.9375, 0.21875), (0.9375, 0.25), (0.90625, 0.25), (0.90625, 0.21875), (0.90625, 0.21875), (0.90625, 0.25), (0.875, 0.25), (0.875, 0.21875), (0.875, 0.21875), (0.875, 0.25), (0.84375, 0.25), (0.84375, 0.21875), (0.84375, 0.21875), (0.84375, 0.25), (0.8125, 0.25), (0.8125, 0.21875), (0.8125, 0.21875), (0.8125, 0.25), (0.78125, 0.25), (0.78125, 0.21875), (0.78125, 0.21875), (0.78125, 0.25), (0.75, 0.25), (0.75, 0.21875), (0.75, 0.21875), (0.75, 0.25), (0.71875, 0.25), (0.71875, 0.21875), (0.71875, 0.21875), (0.71875, 0.25), (0.6875, 0.25), (0.6875, 0.21875), (0.6875, 0.21875), (0.6875, 0.25), (0.65625, 0.25), (0.65625, 0.21875), (0.65625, 0.21875), (0.65625, 0.25), (0.625, 0.25), (0.625, 0.21875), (0.625, 0.21875), (0.625, 0.25), (0.59375, 0.25), (0.59375, 0.21875), (0.59375, 0.21875), (0.59375, 0.25), (0.5625, 0.25), (0.5625, 0.21875), (0.5625, 0.21875), (0.5625, 0.25), (0.53125, 0.25), (0.53125, 0.21875), (0.53125, 0.21875), (0.53125, 0.25), (0.5, 0.25), (0.5, 0.21875), (0.5, 0.21875), (0.5, 0.25), (0.46875, 0.25), (0.46875, 0.21875), (0.46875, 0.21875), (0.46875, 0.25), (0.4375, 0.25), (0.4375, 0.21875), (0.4375, 0.21875), (0.4375, 0.25), (0.40625, 0.25), (0.40625, 0.21875), (0.40625, 0.21875), (0.40625, 0.25), (0.375, 0.25), (0.375, 0.21875), (0.375, 0.21875), (0.375, 0.25), (0.34375, 0.25), (0.34375, 0.21875), (0.34375, 0.21875), (0.34375, 0.25), (0.3125, 0.25), (0.3125, 0.21875), (0.3125, 0.21875), (0.3125, 0.25), (0.28125, 0.25), (0.28125, 0.21875), (0.28125, 0.21875), (0.28125, 0.25), (0.25, 0.25), (0.25, 0.21875), (0.25, 0.21875), (0.25, 0.25), (0.21875, 0.25), (0.21875, 0.21875), (0.21875, 0.21875), (0.21875, 0.25), (0.1875, 0.25), (0.1875, 0.21875), (0.1875, 0.21875), (0.1875, 0.25), (0.15625, 0.25), (0.15625, 0.21875), (0.15625, 0.21875), (0.15625, 0.25), (0.125, 0.25), (0.125, 0.21875), (0.125, 0.21875), (0.125, 0.25), (0.09375, 0.25), (0.09375, 0.21875), (0.09375, 0.21875), (0.09375, 0.25), (0.0625, 0.25), (0.0625, 0.21875), (0.0625, 0.21875), (0.0625, 0.25), (0.03125, 0.25), (0.03125, 0.21875), (0.03125, 0.21875), (0.03125, 0.25), (1, 0.25), (1, 0.21875), (1, 0.25), (1, 0.28125), (0.96875, 0.28125), (0.96875, 0.25), (0.96875, 0.25), (0.96875, 0.28125), (0.9375, 0.28125), (0.9375, 0.25), (0.9375, 0.25), (0.9375, 0.28125), (0.90625, 0.28125), (0.90625, 0.25), (0.90625, 0.25), (0.90625, 0.28125), (0.875, 0.28125), (0.875, 0.25), (0.875, 0.25), (0.875, 0.28125), (0.84375, 0.28125), (0.84375, 0.25), (0.84375, 0.25), (0.84375, 0.28125), (0.8125, 0.28125), (0.8125, 0.25), (0.8125, 0.25), (0.8125, 0.28125), (0.78125, 0.28125), (0.78125, 0.25), (0.78125, 0.25), (0.78125, 0.28125), (0.75, 0.28125), (0.75, 0.25), (0.75, 0.25), (0.75, 0.28125), (0.71875, 0.28125), (0.71875, 0.25), (0.71875, 0.25), (0.71875, 0.28125), (0.6875, 0.28125), (0.6875, 0.25), (0.6875, 0.25), (0.6875, 0.28125), (0.65625, 0.28125), (0.65625, 0.25), (0.65625, 0.25), (0.65625, 0.28125), (0.625, 0.28125), (0.625, 0.25), (0.625, 0.25), (0.625, 0.28125), (0.59375, 0.28125), (0.59375, 0.25), (0.59375, 0.25), (0.59375, 0.28125), (0.5625, 0.28125), (0.5625, 0.25), (0.5625, 0.25), (0.5625, 0.28125), (0.53125, 0.28125), (0.53125, 0.25), (0.53125, 0.25), (0.53125, 0.28125), (0.5, 0.28125), (0.5, 0.25), (0.5, 0.25), (0.5, 0.28125), (0.46875, 0.28125), (0.46875, 0.25), (0.46875, 0.25), (0.46875, 0.28125), (0.4375, 0.28125), (0.4375, 0.25), (0.4375, 0.25), (0.4375, 0.28125), (0.40625, 0.28125), (0.40625, 0.25), (0.40625, 0.25), (0.40625, 0.28125), (0.375, 0.28125), (0.375, 0.25), (0.375, 0.25), (0.375, 0.28125), (0.34375, 0.28125), (0.34375, 0.25), (0.34375, 0.25), (0.34375, 0.28125), (0.3125, 0.28125), (0.3125, 0.25), (0.3125, 0.25), (0.3125, 0.28125), (0.28125, 0.28125), (0.28125, 0.25), (0.28125, 0.25), (0.28125, 0.28125), (0.25, 0.28125), (0.25, 0.25), (0.25, 0.25), (0.25, 0.28125), (0.21875, 0.28125), (0.21875, 0.25), (0.21875, 0.25), (0.21875, 0.28125), (0.1875, 0.28125), (0.1875, 0.25), (0.1875, 0.25), (0.1875, 0.28125), (0.15625, 0.28125), (0.15625, 0.25), (0.15625, 0.25), (0.15625, 0.28125), (0.125, 0.28125), (0.125, 0.25), (0.125, 0.25), (0.125, 0.28125), (0.09375, 0.28125), (0.09375, 0.25), (0.09375, 0.25), (0.09375, 0.28125), (0.0625, 0.28125), (0.0625, 0.25), (0.0625, 0.25), (0.0625, 0.28125), (0.03125, 0.28125), (0.03125, 0.25), (0.03125, 0.25), (0.03125, 0.28125), (1, 0.28125), (1, 0.25), (1, 0.28125), (1, 0.3125), (0.96875, 0.3125), (0.96875, 0.28125), (0.96875, 0.28125), (0.96875, 0.3125), (0.9375, 0.3125), (0.9375, 0.28125), (0.9375, 0.28125), (0.9375, 0.3125), (0.90625, 0.3125), (0.90625, 0.28125), (0.90625, 0.28125), (0.90625, 0.3125), (0.875, 0.3125), (0.875, 0.28125), (0.875, 0.28125), (0.875, 0.3125), (0.84375, 0.3125), (0.84375, 0.28125), (0.84375, 0.28125), (0.84375, 0.3125), (0.8125, 0.3125), (0.8125, 0.28125), (0.8125, 0.28125), (0.8125, 0.3125), (0.78125, 0.3125), (0.78125, 0.28125), (0.78125, 0.28125), (0.78125, 0.3125), (0.75, 0.3125), (0.75, 0.28125), (0.75, 0.28125), (0.75, 0.3125), (0.71875, 0.3125), (0.71875, 0.28125), (0.71875, 0.28125), (0.71875, 0.3125), (0.6875, 0.3125), (0.6875, 0.28125), (0.6875, 0.28125), (0.6875, 0.3125), (0.65625, 0.3125), (0.65625, 0.28125), (0.65625, 0.28125), (0.65625, 0.3125), (0.625, 0.3125), (0.625, 0.28125), (0.625, 0.28125), (0.625, 0.3125), (0.59375, 0.3125), (0.59375, 0.28125), (0.59375, 0.28125), (0.59375, 0.3125), (0.5625, 0.3125), (0.5625, 0.28125), (0.5625, 0.28125), (0.5625, 0.3125), (0.53125, 0.3125), (0.53125, 0.28125), (0.53125, 0.28125), (0.53125, 0.3125), (0.5, 0.3125), (0.5, 0.28125), (0.5, 0.28125), (0.5, 0.3125), (0.46875, 0.3125), (0.46875, 0.28125), (0.46875, 0.28125), (0.46875, 0.3125), (0.4375, 0.3125), (0.4375, 0.28125), (0.4375, 0.28125), (0.4375, 0.3125), (0.40625, 0.3125), (0.40625, 0.28125), (0.40625, 0.28125), (0.40625, 0.3125), (0.375, 0.3125), (0.375, 0.28125), (0.375, 0.28125), (0.375, 0.3125), (0.34375, 0.3125), (0.34375, 0.28125), (0.34375, 0.28125), (0.34375, 0.3125), (0.3125, 0.3125), (0.3125, 0.28125), (0.3125, 0.28125), (0.3125, 0.3125), (0.28125, 0.3125), (0.28125, 0.28125), (0.28125, 0.28125), (0.28125, 0.3125), (0.25, 0.3125), (0.25, 0.28125), (0.25, 0.28125), (0.25, 0.3125), (0.21875, 0.3125), (0.21875, 0.28125), (0.21875, 0.28125), (0.21875, 0.3125), (0.1875, 0.3125), (0.1875, 0.28125), (0.1875, 0.28125), (0.1875, 0.3125), (0.15625, 0.3125), (0.15625, 0.28125), (0.15625, 0.28125), (0.15625, 0.3125), (0.125, 0.3125), (0.125, 0.28125), (0.125, 0.28125), (0.125, 0.3125), (0.09375, 0.3125), (0.09375, 0.28125), (0.09375, 0.28125), (0.09375, 0.3125), (0.0625, 0.3125), (0.0625, 0.28125), (0.0625, 0.28125), (0.0625, 0.3125), (0.03125, 0.3125), (0.03125, 0.28125), (0.03125, 0.28125), (0.03125, 0.3125), (1, 0.3125), (1, 0.28125), (1, 0.3125), (1, 0.34375), (0.96875, 0.34375), (0.96875, 0.3125), (0.96875, 0.3125), (0.96875, 0.34375), (0.9375, 0.34375), (0.9375, 0.3125), (0.9375, 0.3125), (0.9375, 0.34375), (0.90625, 0.34375), (0.90625, 0.3125), (0.90625, 0.3125), (0.90625, 0.34375), (0.875, 0.34375), (0.875, 0.3125), (0.875, 0.3125), (0.875, 0.34375), (0.84375, 0.34375), (0.84375, 0.3125), (0.84375, 0.3125), (0.84375, 0.34375), (0.8125, 0.34375), (0.8125, 0.3125), (0.8125, 0.3125), (0.8125, 0.34375), (0.78125, 0.34375), (0.78125, 0.3125), (0.78125, 0.3125), (0.78125, 0.34375), (0.75, 0.34375), (0.75, 0.3125), (0.75, 0.3125), (0.75, 0.34375), (0.71875, 0.34375), (0.71875, 0.3125), (0.71875, 0.3125), (0.71875, 0.34375), (0.6875, 0.34375), (0.6875, 0.3125), (0.6875, 0.3125), (0.6875, 0.34375), (0.65625, 0.34375), (0.65625, 0.3125), (0.65625, 0.3125), (0.65625, 0.34375), (0.625, 0.34375), (0.625, 0.3125), (0.625, 0.3125), (0.625, 0.34375), (0.59375, 0.34375), (0.59375, 0.3125), (0.59375, 0.3125), (0.59375, 0.34375), (0.5625, 0.34375), (0.5625, 0.3125), (0.5625, 0.3125), (0.5625, 0.34375), (0.53125, 0.34375), (0.53125, 0.3125), (0.53125, 0.3125), (0.53125, 0.34375), (0.5, 0.34375), (0.5, 0.3125), (0.5, 0.3125), (0.5, 0.34375), (0.46875, 0.34375), (0.46875, 0.3125), (0.46875, 0.3125), (0.46875, 0.34375), (0.4375, 0.34375), (0.4375, 0.3125), (0.4375, 0.3125), (0.4375, 0.34375), (0.40625, 0.34375), (0.40625, 0.3125), (0.40625, 0.3125), (0.40625, 0.34375), (0.375, 0.34375), (0.375, 0.3125), (0.375, 0.3125), (0.375, 0.34375), (0.34375, 0.34375), (0.34375, 0.3125), (0.34375, 0.3125), (0.34375, 0.34375), (0.3125, 0.34375), (0.3125, 0.3125), (0.3125, 0.3125), (0.3125, 0.34375), (0.28125, 0.34375), (0.28125, 0.3125), (0.28125, 0.3125), (0.28125, 0.34375), (0.25, 0.34375), (0.25, 0.3125), (0.25, 0.3125), (0.25, 0.34375), (0.21875, 0.34375), (0.21875, 0.3125), (0.21875, 0.3125), (0.21875, 0.34375), (0.1875, 0.34375), (0.1875, 0.3125), (0.1875, 0.3125), (0.1875, 0.34375), (0.15625, 0.34375), (0.15625, 0.3125), (0.15625, 0.3125), (0.15625, 0.34375), (0.125, 0.34375), (0.125, 0.3125), (0.125, 0.3125), (0.125, 0.34375), (0.09375, 0.34375), (0.09375, 0.3125), (0.09375, 0.3125), (0.09375, 0.34375), (0.0625, 0.34375), (0.0625, 0.3125), (0.0625, 0.3125), (0.0625, 0.34375), (0.03125, 0.34375), (0.03125, 0.3125), (0.03125, 0.3125), (0.03125, 0.34375), (1, 0.34375), (1, 0.3125), (1, 0.34375), (1, 0.375), (0.96875, 0.375), (0.96875, 0.34375), (0.96875, 0.34375), (0.96875, 0.375), (0.9375, 0.375), (0.9375, 0.34375), (0.9375, 0.34375), (0.9375, 0.375), (0.90625, 0.375), (0.90625, 0.34375), (0.90625, 0.34375), (0.90625, 0.375), (0.875, 0.375), (0.875, 0.34375), (0.875, 0.34375), (0.875, 0.375), (0.84375, 0.375), (0.84375, 0.34375), (0.84375, 0.34375), (0.84375, 0.375), (0.8125, 0.375), (0.8125, 0.34375), (0.8125, 0.34375), (0.8125, 0.375), (0.78125, 0.375), (0.78125, 0.34375), (0.78125, 0.34375), (0.78125, 0.375), (0.75, 0.375), (0.75, 0.34375), (0.75, 0.34375), (0.75, 0.375), (0.71875, 0.375), (0.71875, 0.34375), (0.71875, 0.34375), (0.71875, 0.375), (0.6875, 0.375), (0.6875, 0.34375), (0.6875, 0.34375), (0.6875, 0.375), (0.65625, 0.375), (0.65625, 0.34375), (0.65625, 0.34375), (0.65625, 0.375), (0.625, 0.375), (0.625, 0.34375), (0.625, 0.34375), (0.625, 0.375), (0.59375, 0.375), (0.59375, 0.34375), (0.59375, 0.34375), (0.59375, 0.375), (0.5625, 0.375), (0.5625, 0.34375), (0.5625, 0.34375), (0.5625, 0.375), (0.53125, 0.375), (0.53125, 0.34375), (0.53125, 0.34375), (0.53125, 0.375), (0.5, 0.375), (0.5, 0.34375), (0.5, 0.34375), (0.5, 0.375), (0.46875, 0.375), (0.46875, 0.34375), (0.46875, 0.34375), (0.46875, 0.375), (0.4375, 0.375), (0.4375, 0.34375), (0.4375, 0.34375), (0.4375, 0.375), (0.40625, 0.375), (0.40625, 0.34375), (0.40625, 0.34375), (0.40625, 0.375), (0.375, 0.375), (0.375, 0.34375), (0.375, 0.34375), (0.375, 0.375), (0.34375, 0.375), (0.34375, 0.34375), (0.34375, 0.34375), (0.34375, 0.375), (0.3125, 0.375), (0.3125, 0.34375), (0.3125, 0.34375), (0.3125, 0.375), (0.28125, 0.375), (0.28125, 0.34375), (0.28125, 0.34375), (0.28125, 0.375), (0.25, 0.375), (0.25, 0.34375), (0.25, 0.34375), (0.25, 0.375), (0.21875, 0.375), (0.21875, 0.34375), (0.21875, 0.34375), (0.21875, 0.375), (0.1875, 0.375), (0.1875, 0.34375), (0.1875, 0.34375), (0.1875, 0.375), (0.15625, 0.375), (0.15625, 0.34375), (0.15625, 0.34375), (0.15625, 0.375), (0.125, 0.375), (0.125, 0.34375), (0.125, 0.34375), (0.125, 0.375), (0.09375, 0.375), (0.09375, 0.34375), (0.09375, 0.34375), (0.09375, 0.375), (0.0625, 0.375), (0.0625, 0.34375), (0.0625, 0.34375), (0.0625, 0.375), (0.03125, 0.375), (0.03125, 0.34375), (0.03125, 0.34375), (0.03125, 0.375), (1, 0.375), (1, 0.34375), (1, 0.375), (1, 0.40625), (0.96875, 0.40625), (0.96875, 0.375), (0.96875, 0.375), (0.96875, 0.40625), (0.9375, 0.40625), (0.9375, 0.375), (0.9375, 0.375), (0.9375, 0.40625), (0.90625, 0.40625), (0.90625, 0.375), (0.90625, 0.375), (0.90625, 0.40625), (0.875, 0.40625), (0.875, 0.375), (0.875, 0.375), (0.875, 0.40625), (0.84375, 0.40625), (0.84375, 0.375), (0.84375, 0.375), (0.84375, 0.40625), (0.8125, 0.40625), (0.8125, 0.375), (0.8125, 0.375), (0.8125, 0.40625), (0.78125, 0.40625), (0.78125, 0.375), (0.78125, 0.375), (0.78125, 0.40625), (0.75, 0.40625), (0.75, 0.375), (0.75, 0.375), (0.75, 0.40625), (0.71875, 0.40625), (0.71875, 0.375), (0.71875, 0.375), (0.71875, 0.40625), (0.6875, 0.40625), (0.6875, 0.375), (0.6875, 0.375), (0.6875, 0.40625), (0.65625, 0.40625), (0.65625, 0.375), (0.65625, 0.375), (0.65625, 0.40625), (0.625, 0.40625), (0.625, 0.375), (0.625, 0.375), (0.625, 0.40625), (0.59375, 0.40625), (0.59375, 0.375), (0.59375, 0.375), (0.59375, 0.40625), (0.5625, 0.40625), (0.5625, 0.375), (0.5625, 0.375), (0.5625, 0.40625), (0.53125, 0.40625), (0.53125, 0.375), (0.53125, 0.375), (0.53125, 0.40625), (0.5, 0.40625), (0.5, 0.375), (0.5, 0.375), (0.5, 0.40625), (0.46875, 0.40625), (0.46875, 0.375), (0.46875, 0.375), (0.46875, 0.40625), (0.4375, 0.40625), (0.4375, 0.375), (0.4375, 0.375), (0.4375, 0.40625), (0.40625, 0.40625), (0.40625, 0.375), (0.40625, 0.375), (0.40625, 0.40625), (0.375, 0.40625), (0.375, 0.375), (0.375, 0.375), (0.375, 0.40625), (0.34375, 0.40625), (0.34375, 0.375), (0.34375, 0.375), (0.34375, 0.40625), (0.3125, 0.40625), (0.3125, 0.375), (0.3125, 0.375), (0.3125, 0.40625), (0.28125, 0.40625), (0.28125, 0.375), (0.28125, 0.375), (0.28125, 0.40625), (0.25, 0.40625), (0.25, 0.375), (0.25, 0.375), (0.25, 0.40625), (0.21875, 0.40625), (0.21875, 0.375), (0.21875, 0.375), (0.21875, 0.40625), (0.1875, 0.40625), (0.1875, 0.375), (0.1875, 0.375), (0.1875, 0.40625), (0.15625, 0.40625), (0.15625, 0.375), (0.15625, 0.375), (0.15625, 0.40625), (0.125, 0.40625), (0.125, 0.375), (0.125, 0.375), (0.125, 0.40625), (0.09375, 0.40625), (0.09375, 0.375), (0.09375, 0.375), (0.09375, 0.40625), (0.0625, 0.40625), (0.0625, 0.375), (0.0625, 0.375), (0.0625, 0.40625), (0.03125, 0.40625), (0.03125, 0.375), (0.03125, 0.375), (0.03125, 0.40625), (1, 0.40625), (1, 0.375), (1, 0.40625), (1, 0.4375), (0.96875, 0.4375), (0.96875, 0.40625), (0.96875, 0.40625), (0.96875, 0.4375), (0.9375, 0.4375), (0.9375, 0.40625), (0.9375, 0.40625), (0.9375, 0.4375), (0.90625, 0.4375), (0.90625, 0.40625), (0.90625, 0.40625), (0.90625, 0.4375), (0.875, 0.4375), (0.875, 0.40625), (0.875, 0.40625), (0.875, 0.4375), (0.84375, 0.4375), (0.84375, 0.40625), (0.84375, 0.40625), (0.84375, 0.4375), (0.8125, 0.4375), (0.8125, 0.40625), (0.8125, 0.40625), (0.8125, 0.4375), (0.78125, 0.4375), (0.78125, 0.40625), (0.78125, 0.40625), (0.78125, 0.4375), (0.75, 0.4375), (0.75, 0.40625), (0.75, 0.40625), (0.75, 0.4375), (0.71875, 0.4375), (0.71875, 0.40625), (0.71875, 0.40625), (0.71875, 0.4375), (0.6875, 0.4375), (0.6875, 0.40625), (0.6875, 0.40625), (0.6875, 0.4375), (0.65625, 0.4375), (0.65625, 0.40625), (0.65625, 0.40625), (0.65625, 0.4375), (0.625, 0.4375), (0.625, 0.40625), (0.625, 0.40625), (0.625, 0.4375), (0.59375, 0.4375), (0.59375, 0.40625), (0.59375, 0.40625), (0.59375, 0.4375), (0.5625, 0.4375), (0.5625, 0.40625), (0.5625, 0.40625), (0.5625, 0.4375), (0.53125, 0.4375), (0.53125, 0.40625), (0.53125, 0.40625), (0.53125, 0.4375), (0.5, 0.4375), (0.5, 0.40625), (0.5, 0.40625), (0.5, 0.4375), (0.46875, 0.4375), (0.46875, 0.40625), (0.46875, 0.40625), (0.46875, 0.4375), (0.4375, 0.4375), (0.4375, 0.40625), (0.4375, 0.40625), (0.4375, 0.4375), (0.40625, 0.4375), (0.40625, 0.40625), (0.40625, 0.40625), (0.40625, 0.4375), (0.375, 0.4375), (0.375, 0.40625), (0.375, 0.40625), (0.375, 0.4375), (0.34375, 0.4375), (0.34375, 0.40625), (0.34375, 0.40625), (0.34375, 0.4375), (0.3125, 0.4375), (0.3125, 0.40625), (0.3125, 0.40625), (0.3125, 0.4375), (0.28125, 0.4375), (0.28125, 0.40625), (0.28125, 0.40625), (0.28125, 0.4375), (0.25, 0.4375), (0.25, 0.40625), (0.25, 0.40625), (0.25, 0.4375), (0.21875, 0.4375), (0.21875, 0.40625), (0.21875, 0.40625), (0.21875, 0.4375), (0.1875, 0.4375), (0.1875, 0.40625), (0.1875, 0.40625), (0.1875, 0.4375), (0.15625, 0.4375), (0.15625, 0.40625), (0.15625, 0.40625), (0.15625, 0.4375), (0.125, 0.4375), (0.125, 0.40625), (0.125, 0.40625), (0.125, 0.4375), (0.09375, 0.4375), (0.09375, 0.40625), (0.09375, 0.40625), (0.09375, 0.4375), (0.0625, 0.4375), (0.0625, 0.40625), (0.0625, 0.40625), (0.0625, 0.4375), (0.03125, 0.4375), (0.03125, 0.40625), (0.03125, 0.40625), (0.03125, 0.4375), (1, 0.4375), (1, 0.40625), (1, 0.4375), (1, 0.46875), (0.96875, 0.46875), (0.96875, 0.4375), (0.96875, 0.4375), (0.96875, 0.46875), (0.9375, 0.46875), (0.9375, 0.4375), (0.9375, 0.4375), (0.9375, 0.46875), (0.90625, 0.46875), (0.90625, 0.4375), (0.90625, 0.4375), (0.90625, 0.46875), (0.875, 0.46875), (0.875, 0.4375), (0.875, 0.4375), (0.875, 0.46875), (0.84375, 0.46875), (0.84375, 0.4375), (0.84375, 0.4375), (0.84375, 0.46875), (0.8125, 0.46875), (0.8125, 0.4375), (0.8125, 0.4375), (0.8125, 0.46875), (0.78125, 0.46875), (0.78125, 0.4375), (0.78125, 0.4375), (0.78125, 0.46875), (0.75, 0.46875), (0.75, 0.4375), (0.75, 0.4375), (0.75, 0.46875), (0.71875, 0.46875), (0.71875, 0.4375), (0.71875, 0.4375), (0.71875, 0.46875), (0.6875, 0.46875), (0.6875, 0.4375), (0.6875, 0.4375), (0.6875, 0.46875), (0.65625, 0.46875), (0.65625, 0.4375), (0.65625, 0.4375), (0.65625, 0.46875), (0.625, 0.46875), (0.625, 0.4375), (0.625, 0.4375), (0.625, 0.46875), (0.59375, 0.46875), (0.59375, 0.4375), (0.59375, 0.4375), (0.59375, 0.46875), (0.5625, 0.46875), (0.5625, 0.4375), (0.5625, 0.4375), (0.5625, 0.46875), (0.53125, 0.46875), (0.53125, 0.4375), (0.53125, 0.4375), (0.53125, 0.46875), (0.5, 0.46875), (0.5, 0.4375), (0.5, 0.4375), (0.5, 0.46875), (0.46875, 0.46875), (0.46875, 0.4375), (0.46875, 0.4375), (0.46875, 0.46875), (0.4375, 0.46875), (0.4375, 0.4375), (0.4375, 0.4375), (0.4375, 0.46875), (0.40625, 0.46875), (0.40625, 0.4375), (0.40625, 0.4375), (0.40625, 0.46875), (0.375, 0.46875), (0.375, 0.4375), (0.375, 0.4375), (0.375, 0.46875), (0.34375, 0.46875), (0.34375, 0.4375), (0.34375, 0.4375), (0.34375, 0.46875), (0.3125, 0.46875), (0.3125, 0.4375), (0.3125, 0.4375), (0.3125, 0.46875), (0.28125, 0.46875), (0.28125, 0.4375), (0.28125, 0.4375), (0.28125, 0.46875), (0.25, 0.46875), (0.25, 0.4375), (0.25, 0.4375), (0.25, 0.46875), (0.21875, 0.46875), (0.21875, 0.4375), (0.21875, 0.4375), (0.21875, 0.46875), (0.1875, 0.46875), (0.1875, 0.4375), (0.1875, 0.4375), (0.1875, 0.46875), (0.15625, 0.46875), (0.15625, 0.4375), (0.15625, 0.4375), (0.15625, 0.46875), (0.125, 0.46875), (0.125, 0.4375), (0.125, 0.4375), (0.125, 0.46875), (0.09375, 0.46875), (0.09375, 0.4375), (0.09375, 0.4375), (0.09375, 0.46875), (0.0625, 0.46875), (0.0625, 0.4375), (0.0625, 0.4375), (0.0625, 0.46875), (0.03125, 0.46875), (0.03125, 0.4375), (0.03125, 0.4375), (0.03125, 0.46875), (1, 0.46875), (1, 0.4375), (1, 0.46875), (1, 0.5), (0.96875, 0.5), (0.96875, 0.46875), (0.96875, 0.46875), (0.96875, 0.5), (0.9375, 0.5), (0.9375, 0.46875), (0.9375, 0.46875), (0.9375, 0.5), (0.90625, 0.5), (0.90625, 0.46875), (0.90625, 0.46875), (0.90625, 0.5), (0.875, 0.5), (0.875, 0.46875), (0.875, 0.46875), (0.875, 0.5), (0.84375, 0.5), (0.84375, 0.46875), (0.84375, 0.46875), (0.84375, 0.5), (0.8125, 0.5), (0.8125, 0.46875), (0.8125, 0.46875), (0.8125, 0.5), (0.78125, 0.5), (0.78125, 0.46875), (0.78125, 0.46875), (0.78125, 0.5), (0.75, 0.5), (0.75, 0.46875), (0.75, 0.46875), (0.75, 0.5), (0.71875, 0.5), (0.71875, 0.46875), (0.71875, 0.46875), (0.71875, 0.5), (0.6875, 0.5), (0.6875, 0.46875), (0.6875, 0.46875), (0.6875, 0.5), (0.65625, 0.5), (0.65625, 0.46875), (0.65625, 0.46875), (0.65625, 0.5), (0.625, 0.5), (0.625, 0.46875), (0.625, 0.46875), (0.625, 0.5), (0.59375, 0.5), (0.59375, 0.46875), (0.59375, 0.46875), (0.59375, 0.5), (0.5625, 0.5), (0.5625, 0.46875), (0.5625, 0.46875), (0.5625, 0.5), (0.53125, 0.5), (0.53125, 0.46875), (0.53125, 0.46875), (0.53125, 0.5), (0.5, 0.5), (0.5, 0.46875), (0.5, 0.46875), (0.5, 0.5), (0.46875, 0.5), (0.46875, 0.46875), (0.46875, 0.46875), (0.46875, 0.5), (0.4375, 0.5), (0.4375, 0.46875), (0.4375, 0.46875), (0.4375, 0.5), (0.40625, 0.5), (0.40625, 0.46875), (0.40625, 0.46875), (0.40625, 0.5), (0.375, 0.5), (0.375, 0.46875), (0.375, 0.46875), (0.375, 0.5), (0.34375, 0.5), (0.34375, 0.46875), (0.34375, 0.46875), (0.34375, 0.5), (0.3125, 0.5), (0.3125, 0.46875), (0.3125, 0.46875), (0.3125, 0.5), (0.28125, 0.5), (0.28125, 0.46875), (0.28125, 0.46875), (0.28125, 0.5), (0.25, 0.5), (0.25, 0.46875), (0.25, 0.46875), (0.25, 0.5), (0.21875, 0.5), (0.21875, 0.46875), (0.21875, 0.46875), (0.21875, 0.5), (0.1875, 0.5), (0.1875, 0.46875), (0.1875, 0.46875), (0.1875, 0.5), (0.15625, 0.5), (0.15625, 0.46875), (0.15625, 0.46875), (0.15625, 0.5), (0.125, 0.5), (0.125, 0.46875), (0.125, 0.46875), (0.125, 0.5), (0.09375, 0.5), (0.09375, 0.46875), (0.09375, 0.46875), (0.09375, 0.5), (0.0625, 0.5), (0.0625, 0.46875), (0.0625, 0.46875), (0.0625, 0.5), (0.03125, 0.5), (0.03125, 0.46875), (0.03125, 0.46875), (0.03125, 0.5), (1, 0.5), (1, 0.46875), (1, 0.5), (1, 0.53125), (0.96875, 0.53125), (0.96875, 0.5), (0.96875, 0.5), (0.96875, 0.53125), (0.9375, 0.53125), (0.9375, 0.5), (0.9375, 0.5), (0.9375, 0.53125), (0.90625, 0.53125), (0.90625, 0.5), (0.90625, 0.5), (0.90625, 0.53125), (0.875, 0.53125), (0.875, 0.5), (0.875, 0.5), (0.875, 0.53125), (0.84375, 0.53125), (0.84375, 0.5), (0.84375, 0.5), (0.84375, 0.53125), (0.8125, 0.53125), (0.8125, 0.5), (0.8125, 0.5), (0.8125, 0.53125), (0.78125, 0.53125), (0.78125, 0.5), (0.78125, 0.5), (0.78125, 0.53125), (0.75, 0.53125), (0.75, 0.5), (0.75, 0.5), (0.75, 0.53125), (0.71875, 0.53125), (0.71875, 0.5), (0.71875, 0.5), (0.71875, 0.53125), (0.6875, 0.53125), (0.6875, 0.5), (0.6875, 0.5), (0.6875, 0.53125), (0.65625, 0.53125), (0.65625, 0.5), (0.65625, 0.5), (0.65625, 0.53125), (0.625, 0.53125), (0.625, 0.5), (0.625, 0.5), (0.625, 0.53125), (0.59375, 0.53125), (0.59375, 0.5), (0.59375, 0.5), (0.59375, 0.53125), (0.5625, 0.53125), (0.5625, 0.5), (0.5625, 0.5), (0.5625, 0.53125), (0.53125, 0.53125), (0.53125, 0.5), (0.53125, 0.5), (0.53125, 0.53125), (0.5, 0.53125), (0.5, 0.5), (0.5, 0.5), (0.5, 0.53125), (0.46875, 0.53125), (0.46875, 0.5), (0.46875, 0.5), (0.46875, 0.53125), (0.4375, 0.53125), (0.4375, 0.5), (0.4375, 0.5), (0.4375, 0.53125), (0.40625, 0.53125), (0.40625, 0.5), (0.40625, 0.5), (0.40625, 0.53125), (0.375, 0.53125), (0.375, 0.5), (0.375, 0.5), (0.375, 0.53125), (0.34375, 0.53125), (0.34375, 0.5), (0.34375, 0.5), (0.34375, 0.53125), (0.3125, 0.53125), (0.3125, 0.5), (0.3125, 0.5), (0.3125, 0.53125), (0.28125, 0.53125), (0.28125, 0.5), (0.28125, 0.5), (0.28125, 0.53125), (0.25, 0.53125), (0.25, 0.5), (0.25, 0.5), (0.25, 0.53125), (0.21875, 0.53125), (0.21875, 0.5), (0.21875, 0.5), (0.21875, 0.53125), (0.1875, 0.53125), (0.1875, 0.5), (0.1875, 0.5), (0.1875, 0.53125), (0.15625, 0.53125), (0.15625, 0.5), (0.15625, 0.5), (0.15625, 0.53125), (0.125, 0.53125), (0.125, 0.5), (0.125, 0.5), (0.125, 0.53125), (0.09375, 0.53125), (0.09375, 0.5), (0.09375, 0.5), (0.09375, 0.53125), (0.0625, 0.53125), (0.0625, 0.5), (0.0625, 0.5), (0.0625, 0.53125), (0.03125, 0.53125), (0.03125, 0.5), (0.03125, 0.5), (0.03125, 0.53125), (1, 0.53125), (1, 0.5), (1, 0.53125), (1, 0.5625), (0.96875, 0.5625), (0.96875, 0.53125), (0.96875, 0.53125), (0.96875, 0.5625), (0.9375, 0.5625), (0.9375, 0.53125), (0.9375, 0.53125), (0.9375, 0.5625), (0.90625, 0.5625), (0.90625, 0.53125), (0.90625, 0.53125), (0.90625, 0.5625), (0.875, 0.5625), (0.875, 0.53125), (0.875, 0.53125), (0.875, 0.5625), (0.84375, 0.5625), (0.84375, 0.53125), (0.84375, 0.53125), (0.84375, 0.5625), (0.8125, 0.5625), (0.8125, 0.53125), (0.8125, 0.53125), (0.8125, 0.5625), (0.78125, 0.5625), (0.78125, 0.53125), (0.78125, 0.53125), (0.78125, 0.5625), (0.75, 0.5625), (0.75, 0.53125), (0.75, 0.53125), (0.75, 0.5625), (0.71875, 0.5625), (0.71875, 0.53125), (0.71875, 0.53125), (0.71875, 0.5625), (0.6875, 0.5625), (0.6875, 0.53125), (0.6875, 0.53125), (0.6875, 0.5625), (0.65625, 0.5625), (0.65625, 0.53125), (0.65625, 0.53125), (0.65625, 0.5625), (0.625, 0.5625), (0.625, 0.53125), (0.625, 0.53125), (0.625, 0.5625), (0.59375, 0.5625), (0.59375, 0.53125), (0.59375, 0.53125), (0.59375, 0.5625), (0.5625, 0.5625), (0.5625, 0.53125), (0.5625, 0.53125), (0.5625, 0.5625), (0.53125, 0.5625), (0.53125, 0.53125), (0.53125, 0.53125), (0.53125, 0.5625), (0.5, 0.5625), (0.5, 0.53125), (0.5, 0.53125), (0.5, 0.5625), (0.46875, 0.5625), (0.46875, 0.53125), (0.46875, 0.53125), (0.46875, 0.5625), (0.4375, 0.5625), (0.4375, 0.53125), (0.4375, 0.53125), (0.4375, 0.5625), (0.40625, 0.5625), (0.40625, 0.53125), (0.40625, 0.53125), (0.40625, 0.5625), (0.375, 0.5625), (0.375, 0.53125), (0.375, 0.53125), (0.375, 0.5625), (0.34375, 0.5625), (0.34375, 0.53125), (0.34375, 0.53125), (0.34375, 0.5625), (0.3125, 0.5625), (0.3125, 0.53125), (0.3125, 0.53125), (0.3125, 0.5625), (0.28125, 0.5625), (0.28125, 0.53125), (0.28125, 0.53125), (0.28125, 0.5625), (0.25, 0.5625), (0.25, 0.53125), (0.25, 0.53125), (0.25, 0.5625), (0.21875, 0.5625), (0.21875, 0.53125), (0.21875, 0.53125), (0.21875, 0.5625), (0.1875, 0.5625), (0.1875, 0.53125), (0.1875, 0.53125), (0.1875, 0.5625), (0.15625, 0.5625), (0.15625, 0.53125), (0.15625, 0.53125), (0.15625, 0.5625), (0.125, 0.5625), (0.125, 0.53125), (0.125, 0.53125), (0.125, 0.5625), (0.09375, 0.5625), (0.09375, 0.53125), (0.09375, 0.53125), (0.09375, 0.5625), (0.0625, 0.5625), (0.0625, 0.53125), (0.0625, 0.53125), (0.0625, 0.5625), (0.03125, 0.5625), (0.03125, 0.53125), (0.03125, 0.53125), (0.03125, 0.5625), (1, 0.5625), (1, 0.53125), (1, 0.5625), (1, 0.59375), (0.96875, 0.59375), (0.96875, 0.5625), (0.96875, 0.5625), (0.96875, 0.59375), (0.9375, 0.59375), (0.9375, 0.5625), (0.9375, 0.5625), (0.9375, 0.59375), (0.90625, 0.59375), (0.90625, 0.5625), (0.90625, 0.5625), (0.90625, 0.59375), (0.875, 0.59375), (0.875, 0.5625), (0.875, 0.5625), (0.875, 0.59375), (0.84375, 0.59375), (0.84375, 0.5625), (0.84375, 0.5625), (0.84375, 0.59375), (0.8125, 0.59375), (0.8125, 0.5625), (0.8125, 0.5625), (0.8125, 0.59375), (0.78125, 0.59375), (0.78125, 0.5625), (0.78125, 0.5625), (0.78125, 0.59375), (0.75, 0.59375), (0.75, 0.5625), (0.75, 0.5625), (0.75, 0.59375), (0.71875, 0.59375), (0.71875, 0.5625), (0.71875, 0.5625), (0.71875, 0.59375), (0.6875, 0.59375), (0.6875, 0.5625), (0.6875, 0.5625), (0.6875, 0.59375), (0.65625, 0.59375), (0.65625, 0.5625), (0.65625, 0.5625), (0.65625, 0.59375), (0.625, 0.59375), (0.625, 0.5625), (0.625, 0.5625), (0.625, 0.59375), (0.59375, 0.59375), (0.59375, 0.5625), (0.59375, 0.5625), (0.59375, 0.59375), (0.5625, 0.59375), (0.5625, 0.5625), (0.5625, 0.5625), (0.5625, 0.59375), (0.53125, 0.59375), (0.53125, 0.5625), (0.53125, 0.5625), (0.53125, 0.59375), (0.5, 0.59375), (0.5, 0.5625), (0.5, 0.5625), (0.5, 0.59375), (0.46875, 0.59375), (0.46875, 0.5625), (0.46875, 0.5625), (0.46875, 0.59375), (0.4375, 0.59375), (0.4375, 0.5625), (0.4375, 0.5625), (0.4375, 0.59375), (0.40625, 0.59375), (0.40625, 0.5625), (0.40625, 0.5625), (0.40625, 0.59375), (0.375, 0.59375), (0.375, 0.5625), (0.375, 0.5625), (0.375, 0.59375), (0.34375, 0.59375), (0.34375, 0.5625), (0.34375, 0.5625), (0.34375, 0.59375), (0.3125, 0.59375), (0.3125, 0.5625), (0.3125, 0.5625), (0.3125, 0.59375), (0.28125, 0.59375), (0.28125, 0.5625), (0.28125, 0.5625), (0.28125, 0.59375), (0.25, 0.59375), (0.25, 0.5625), (0.25, 0.5625), (0.25, 0.59375), (0.21875, 0.59375), (0.21875, 0.5625), (0.21875, 0.5625), (0.21875, 0.59375), (0.1875, 0.59375), (0.1875, 0.5625), (0.1875, 0.5625), (0.1875, 0.59375), (0.15625, 0.59375), (0.15625, 0.5625), (0.15625, 0.5625), (0.15625, 0.59375), (0.125, 0.59375), (0.125, 0.5625), (0.125, 0.5625), (0.125, 0.59375), (0.09375, 0.59375), (0.09375, 0.5625), (0.09375, 0.5625), (0.09375, 0.59375), (0.0625, 0.59375), (0.0625, 0.5625), (0.0625, 0.5625), (0.0625, 0.59375), (0.03125, 0.59375), (0.03125, 0.5625), (0.03125, 0.5625), (0.03125, 0.59375), (1, 0.59375), (1, 0.5625), (1, 0.59375), (1, 0.625), (0.96875, 0.625), (0.96875, 0.59375), (0.96875, 0.59375), (0.96875, 0.625), (0.9375, 0.625), (0.9375, 0.59375), (0.9375, 0.59375), (0.9375, 0.625), (0.90625, 0.625), (0.90625, 0.59375), (0.90625, 0.59375), (0.90625, 0.625), (0.875, 0.625), (0.875, 0.59375), (0.875, 0.59375), (0.875, 0.625), (0.84375, 0.625), (0.84375, 0.59375), (0.84375, 0.59375), (0.84375, 0.625), (0.8125, 0.625), (0.8125, 0.59375), (0.8125, 0.59375), (0.8125, 0.625), (0.78125, 0.625), (0.78125, 0.59375), (0.78125, 0.59375), (0.78125, 0.625), (0.75, 0.625), (0.75, 0.59375), (0.75, 0.59375), (0.75, 0.625), (0.71875, 0.625), (0.71875, 0.59375), (0.71875, 0.59375), (0.71875, 0.625), (0.6875, 0.625), (0.6875, 0.59375), (0.6875, 0.59375), (0.6875, 0.625), (0.65625, 0.625), (0.65625, 0.59375), (0.65625, 0.59375), (0.65625, 0.625), (0.625, 0.625), (0.625, 0.59375), (0.625, 0.59375), (0.625, 0.625), (0.59375, 0.625), (0.59375, 0.59375), (0.59375, 0.59375), (0.59375, 0.625), (0.5625, 0.625), (0.5625, 0.59375), (0.5625, 0.59375), (0.5625, 0.625), (0.53125, 0.625), (0.53125, 0.59375), (0.53125, 0.59375), (0.53125, 0.625), (0.5, 0.625), (0.5, 0.59375), (0.5, 0.59375), (0.5, 0.625), (0.46875, 0.625), (0.46875, 0.59375), (0.46875, 0.59375), (0.46875, 0.625), (0.4375, 0.625), (0.4375, 0.59375), (0.4375, 0.59375), (0.4375, 0.625), (0.40625, 0.625), (0.40625, 0.59375), (0.40625, 0.59375), (0.40625, 0.625), (0.375, 0.625), (0.375, 0.59375), (0.375, 0.59375), (0.375, 0.625), (0.34375, 0.625), (0.34375, 0.59375), (0.34375, 0.59375), (0.34375, 0.625), (0.3125, 0.625), (0.3125, 0.59375), (0.3125, 0.59375), (0.3125, 0.625), (0.28125, 0.625), (0.28125, 0.59375), (0.28125, 0.59375), (0.28125, 0.625), (0.25, 0.625), (0.25, 0.59375), (0.25, 0.59375), (0.25, 0.625), (0.21875, 0.625), (0.21875, 0.59375), (0.21875, 0.59375), (0.21875, 0.625), (0.1875, 0.625), (0.1875, 0.59375), (0.1875, 0.59375), (0.1875, 0.625), (0.15625, 0.625), (0.15625, 0.59375), (0.15625, 0.59375), (0.15625, 0.625), (0.125, 0.625), (0.125, 0.59375), (0.125, 0.59375), (0.125, 0.625), (0.09375, 0.625), (0.09375, 0.59375), (0.09375, 0.59375), (0.09375, 0.625), (0.0625, 0.625), (0.0625, 0.59375), (0.0625, 0.59375), (0.0625, 0.625), (0.03125, 0.625), (0.03125, 0.59375), (0.03125, 0.59375), (0.03125, 0.625), (1, 0.625), (1, 0.59375), (1, 0.625), (1, 0.65625), (0.96875, 0.65625), (0.96875, 0.625), (0.96875, 0.625), (0.96875, 0.65625), (0.9375, 0.65625), (0.9375, 0.625), (0.9375, 0.625), (0.9375, 0.65625), (0.90625, 0.65625), (0.90625, 0.625), (0.90625, 0.625), (0.90625, 0.65625), (0.875, 0.65625), (0.875, 0.625), (0.875, 0.625), (0.875, 0.65625), (0.84375, 0.65625), (0.84375, 0.625), (0.84375, 0.625), (0.84375, 0.65625), (0.8125, 0.65625), (0.8125, 0.625), (0.8125, 0.625), (0.8125, 0.65625), (0.78125, 0.65625), (0.78125, 0.625), (0.78125, 0.625), (0.78125, 0.65625), (0.75, 0.65625), (0.75, 0.625), (0.75, 0.625), (0.75, 0.65625), (0.71875, 0.65625), (0.71875, 0.625), (0.71875, 0.625), (0.71875, 0.65625), (0.6875, 0.65625), (0.6875, 0.625), (0.6875, 0.625), (0.6875, 0.65625), (0.65625, 0.65625), (0.65625, 0.625), (0.65625, 0.625), (0.65625, 0.65625), (0.625, 0.65625), (0.625, 0.625), (0.625, 0.625), (0.625, 0.65625), (0.59375, 0.65625), (0.59375, 0.625), (0.59375, 0.625), (0.59375, 0.65625), (0.5625, 0.65625), (0.5625, 0.625), (0.5625, 0.625), (0.5625, 0.65625), (0.53125, 0.65625), (0.53125, 0.625), (0.53125, 0.625), (0.53125, 0.65625), (0.5, 0.65625), (0.5, 0.625), (0.5, 0.625), (0.5, 0.65625), (0.46875, 0.65625), (0.46875, 0.625), (0.46875, 0.625), (0.46875, 0.65625), (0.4375, 0.65625), (0.4375, 0.625), (0.4375, 0.625), (0.4375, 0.65625), (0.40625, 0.65625), (0.40625, 0.625), (0.40625, 0.625), (0.40625, 0.65625), (0.375, 0.65625), (0.375, 0.625), (0.375, 0.625), (0.375, 0.65625), (0.34375, 0.65625), (0.34375, 0.625), (0.34375, 0.625), (0.34375, 0.65625), (0.3125, 0.65625), (0.3125, 0.625), (0.3125, 0.625), (0.3125, 0.65625), (0.28125, 0.65625), (0.28125, 0.625), (0.28125, 0.625), (0.28125, 0.65625), (0.25, 0.65625), (0.25, 0.625), (0.25, 0.625), (0.25, 0.65625), (0.21875, 0.65625), (0.21875, 0.625), (0.21875, 0.625), (0.21875, 0.65625), (0.1875, 0.65625), (0.1875, 0.625), (0.1875, 0.625), (0.1875, 0.65625), (0.15625, 0.65625), (0.15625, 0.625), (0.15625, 0.625), (0.15625, 0.65625), (0.125, 0.65625), (0.125, 0.625), (0.125, 0.625), (0.125, 0.65625), (0.09375, 0.65625), (0.09375, 0.625), (0.09375, 0.625), (0.09375, 0.65625), (0.0625, 0.65625), (0.0625, 0.625), (0.0625, 0.625), (0.0625, 0.65625), (0.03125, 0.65625), (0.03125, 0.625), (0.03125, 0.625), (0.03125, 0.65625), (1, 0.65625), (1, 0.625), (1, 0.65625), (1, 0.6875), (0.96875, 0.6875), (0.96875, 0.65625), (0.96875, 0.65625), (0.96875, 0.6875), (0.9375, 0.6875), (0.9375, 0.65625), (0.9375, 0.65625), (0.9375, 0.6875), (0.90625, 0.6875), (0.90625, 0.65625), (0.90625, 0.65625), (0.90625, 0.6875), (0.875, 0.6875), (0.875, 0.65625), (0.875, 0.65625), (0.875, 0.6875), (0.84375, 0.6875), (0.84375, 0.65625), (0.84375, 0.65625), (0.84375, 0.6875), (0.8125, 0.6875), (0.8125, 0.65625), (0.8125, 0.65625), (0.8125, 0.6875), (0.78125, 0.6875), (0.78125, 0.65625), (0.78125, 0.65625), (0.78125, 0.6875), (0.75, 0.6875), (0.75, 0.65625), (0.75, 0.65625), (0.75, 0.6875), (0.71875, 0.6875), (0.71875, 0.65625), (0.71875, 0.65625), (0.71875, 0.6875), (0.6875, 0.6875), (0.6875, 0.65625), (0.6875, 0.65625), (0.6875, 0.6875), (0.65625, 0.6875), (0.65625, 0.65625), (0.65625, 0.65625), (0.65625, 0.6875), (0.625, 0.6875), (0.625, 0.65625), (0.625, 0.65625), (0.625, 0.6875), (0.59375, 0.6875), (0.59375, 0.65625), (0.59375, 0.65625), (0.59375, 0.6875), (0.5625, 0.6875), (0.5625, 0.65625), (0.5625, 0.65625), (0.5625, 0.6875), (0.53125, 0.6875), (0.53125, 0.65625), (0.53125, 0.65625), (0.53125, 0.6875), (0.5, 0.6875), (0.5, 0.65625), (0.5, 0.65625), (0.5, 0.6875), (0.46875, 0.6875), (0.46875, 0.65625), (0.46875, 0.65625), (0.46875, 0.6875), (0.4375, 0.6875), (0.4375, 0.65625), (0.4375, 0.65625), (0.4375, 0.6875), (0.40625, 0.6875), (0.40625, 0.65625), (0.40625, 0.65625), (0.40625, 0.6875), (0.375, 0.6875), (0.375, 0.65625), (0.375, 0.65625), (0.375, 0.6875), (0.34375, 0.6875), (0.34375, 0.65625), (0.34375, 0.65625), (0.34375, 0.6875), (0.3125, 0.6875), (0.3125, 0.65625), (0.3125, 0.65625), (0.3125, 0.6875), (0.28125, 0.6875), (0.28125, 0.65625), (0.28125, 0.65625), (0.28125, 0.6875), (0.25, 0.6875), (0.25, 0.65625), (0.25, 0.65625), (0.25, 0.6875), (0.21875, 0.6875), (0.21875, 0.65625), (0.21875, 0.65625), (0.21875, 0.6875), (0.1875, 0.6875), (0.1875, 0.65625), (0.1875, 0.65625), (0.1875, 0.6875), (0.15625, 0.6875), (0.15625, 0.65625), (0.15625, 0.65625), (0.15625, 0.6875), (0.125, 0.6875), (0.125, 0.65625), (0.125, 0.65625), (0.125, 0.6875), (0.09375, 0.6875), (0.09375, 0.65625), (0.09375, 0.65625), (0.09375, 0.6875), (0.0625, 0.6875), (0.0625, 0.65625), (0.0625, 0.65625), (0.0625, 0.6875), (0.03125, 0.6875), (0.03125, 0.65625), (0.03125, 0.65625), (0.03125, 0.6875), (1, 0.6875), (1, 0.65625), (1, 0.6875), (1, 0.71875), (0.96875, 0.71875), (0.96875, 0.6875), (0.96875, 0.6875), (0.96875, 0.71875), (0.9375, 0.71875), (0.9375, 0.6875), (0.9375, 0.6875), (0.9375, 0.71875), (0.90625, 0.71875), (0.90625, 0.6875), (0.90625, 0.6875), (0.90625, 0.71875), (0.875, 0.71875), (0.875, 0.6875), (0.875, 0.6875), (0.875, 0.71875), (0.84375, 0.71875), (0.84375, 0.6875), (0.84375, 0.6875), (0.84375, 0.71875), (0.8125, 0.71875), (0.8125, 0.6875), (0.8125, 0.6875), (0.8125, 0.71875), (0.78125, 0.71875), (0.78125, 0.6875), (0.78125, 0.6875), (0.78125, 0.71875), (0.75, 0.71875), (0.75, 0.6875), (0.75, 0.6875), (0.75, 0.71875), (0.71875, 0.71875), (0.71875, 0.6875), (0.71875, 0.6875), (0.71875, 0.71875), (0.6875, 0.71875), (0.6875, 0.6875), (0.6875, 0.6875), (0.6875, 0.71875), (0.65625, 0.71875), (0.65625, 0.6875), (0.65625, 0.6875), (0.65625, 0.71875), (0.625, 0.71875), (0.625, 0.6875), (0.625, 0.6875), (0.625, 0.71875), (0.59375, 0.71875), (0.59375, 0.6875), (0.59375, 0.6875), (0.59375, 0.71875), (0.5625, 0.71875), (0.5625, 0.6875), (0.5625, 0.6875), (0.5625, 0.71875), (0.53125, 0.71875), (0.53125, 0.6875), (0.53125, 0.6875), (0.53125, 0.71875), (0.5, 0.71875), (0.5, 0.6875), (0.5, 0.6875), (0.5, 0.71875), (0.46875, 0.71875), (0.46875, 0.6875), (0.46875, 0.6875), (0.46875, 0.71875), (0.4375, 0.71875), (0.4375, 0.6875), (0.4375, 0.6875), (0.4375, 0.71875), (0.40625, 0.71875), (0.40625, 0.6875), (0.40625, 0.6875), (0.40625, 0.71875), (0.375, 0.71875), (0.375, 0.6875), (0.375, 0.6875), (0.375, 0.71875), (0.34375, 0.71875), (0.34375, 0.6875), (0.34375, 0.6875), (0.34375, 0.71875), (0.3125, 0.71875), (0.3125, 0.6875), (0.3125, 0.6875), (0.3125, 0.71875), (0.28125, 0.71875), (0.28125, 0.6875), (0.28125, 0.6875), (0.28125, 0.71875), (0.25, 0.71875), (0.25, 0.6875), (0.25, 0.6875), (0.25, 0.71875), (0.21875, 0.71875), (0.21875, 0.6875), (0.21875, 0.6875), (0.21875, 0.71875), (0.1875, 0.71875), (0.1875, 0.6875), (0.1875, 0.6875), (0.1875, 0.71875), (0.15625, 0.71875), (0.15625, 0.6875), (0.15625, 0.6875), (0.15625, 0.71875), (0.125, 0.71875), (0.125, 0.6875), (0.125, 0.6875), (0.125, 0.71875), (0.09375, 0.71875), (0.09375, 0.6875), (0.09375, 0.6875), (0.09375, 0.71875), (0.0625, 0.71875), (0.0625, 0.6875), (0.0625, 0.6875), (0.0625, 0.71875), (0.03125, 0.71875), (0.03125, 0.6875), (0.03125, 0.6875), (0.03125, 0.71875), (1, 0.71875), (1, 0.6875), (1, 0.71875), (1, 0.75), (0.96875, 0.75), (0.96875, 0.71875), (0.96875, 0.71875), (0.96875, 0.75), (0.9375, 0.75), (0.9375, 0.71875), (0.9375, 0.71875), (0.9375, 0.75), (0.90625, 0.75), (0.90625, 0.71875), (0.90625, 0.71875), (0.90625, 0.75), (0.875, 0.75), (0.875, 0.71875), (0.875, 0.71875), (0.875, 0.75), (0.84375, 0.75), (0.84375, 0.71875), (0.84375, 0.71875), (0.84375, 0.75), (0.8125, 0.75), (0.8125, 0.71875), (0.8125, 0.71875), (0.8125, 0.75), (0.78125, 0.75), (0.78125, 0.71875), (0.78125, 0.71875), (0.78125, 0.75), (0.75, 0.75), (0.75, 0.71875), (0.75, 0.71875), (0.75, 0.75), (0.71875, 0.75), (0.71875, 0.71875), (0.71875, 0.71875), (0.71875, 0.75), (0.6875, 0.75), (0.6875, 0.71875), (0.6875, 0.71875), (0.6875, 0.75), (0.65625, 0.75), (0.65625, 0.71875), (0.65625, 0.71875), (0.65625, 0.75), (0.625, 0.75), (0.625, 0.71875), (0.625, 0.71875), (0.625, 0.75), (0.59375, 0.75), (0.59375, 0.71875), (0.59375, 0.71875), (0.59375, 0.75), (0.5625, 0.75), (0.5625, 0.71875), (0.5625, 0.71875), (0.5625, 0.75), (0.53125, 0.75), (0.53125, 0.71875), (0.53125, 0.71875), (0.53125, 0.75), (0.5, 0.75), (0.5, 0.71875), (0.5, 0.71875), (0.5, 0.75), (0.46875, 0.75), (0.46875, 0.71875), (0.46875, 0.71875), (0.46875, 0.75), (0.4375, 0.75), (0.4375, 0.71875), (0.4375, 0.71875), (0.4375, 0.75), (0.40625, 0.75), (0.40625, 0.71875), (0.40625, 0.71875), (0.40625, 0.75), (0.375, 0.75), (0.375, 0.71875), (0.375, 0.71875), (0.375, 0.75), (0.34375, 0.75), (0.34375, 0.71875), (0.34375, 0.71875), (0.34375, 0.75), (0.3125, 0.75), (0.3125, 0.71875), (0.3125, 0.71875), (0.3125, 0.75), (0.28125, 0.75), (0.28125, 0.71875), (0.28125, 0.71875), (0.28125, 0.75), (0.25, 0.75), (0.25, 0.71875), (0.25, 0.71875), (0.25, 0.75), (0.21875, 0.75), (0.21875, 0.71875), (0.21875, 0.71875), (0.21875, 0.75), (0.1875, 0.75), (0.1875, 0.71875), (0.1875, 0.71875), (0.1875, 0.75), (0.15625, 0.75), (0.15625, 0.71875), (0.15625, 0.71875), (0.15625, 0.75), (0.125, 0.75), (0.125, 0.71875), (0.125, 0.71875), (0.125, 0.75), (0.09375, 0.75), (0.09375, 0.71875), (0.09375, 0.71875), (0.09375, 0.75), (0.0625, 0.75), (0.0625, 0.71875), (0.0625, 0.71875), (0.0625, 0.75), (0.03125, 0.75), (0.03125, 0.71875), (0.03125, 0.71875), (0.03125, 0.75), (1, 0.75), (1, 0.71875), (1, 0.75), (1, 0.78125), (0.96875, 0.78125), (0.96875, 0.75), (0.96875, 0.75), (0.96875, 0.78125), (0.9375, 0.78125), (0.9375, 0.75), (0.9375, 0.75), (0.9375, 0.78125), (0.90625, 0.78125), (0.90625, 0.75), (0.90625, 0.75), (0.90625, 0.78125), (0.875, 0.78125), (0.875, 0.75), (0.875, 0.75), (0.875, 0.78125), (0.84375, 0.78125), (0.84375, 0.75), (0.84375, 0.75), (0.84375, 0.78125), (0.8125, 0.78125), (0.8125, 0.75), (0.8125, 0.75), (0.8125, 0.78125), (0.78125, 0.78125), (0.78125, 0.75), (0.78125, 0.75), (0.78125, 0.78125), (0.75, 0.78125), (0.75, 0.75), (0.75, 0.75), (0.75, 0.78125), (0.71875, 0.78125), (0.71875, 0.75), (0.71875, 0.75), (0.71875, 0.78125), (0.6875, 0.78125), (0.6875, 0.75), (0.6875, 0.75), (0.6875, 0.78125), (0.65625, 0.78125), (0.65625, 0.75), (0.65625, 0.75), (0.65625, 0.78125), (0.625, 0.78125), (0.625, 0.75), (0.625, 0.75), (0.625, 0.78125), (0.59375, 0.78125), (0.59375, 0.75), (0.59375, 0.75), (0.59375, 0.78125), (0.5625, 0.78125), (0.5625, 0.75), (0.5625, 0.75), (0.5625, 0.78125), (0.53125, 0.78125), (0.53125, 0.75), (0.53125, 0.75), (0.53125, 0.78125), (0.5, 0.78125), (0.5, 0.75), (0.5, 0.75), (0.5, 0.78125), (0.46875, 0.78125), (0.46875, 0.75), (0.46875, 0.75), (0.46875, 0.78125), (0.4375, 0.78125), (0.4375, 0.75), (0.4375, 0.75), (0.4375, 0.78125), (0.40625, 0.78125), (0.40625, 0.75), (0.40625, 0.75), (0.40625, 0.78125), (0.375, 0.78125), (0.375, 0.75), (0.375, 0.75), (0.375, 0.78125), (0.34375, 0.78125), (0.34375, 0.75), (0.34375, 0.75), (0.34375, 0.78125), (0.3125, 0.78125), (0.3125, 0.75), (0.3125, 0.75), (0.3125, 0.78125), (0.28125, 0.78125), (0.28125, 0.75), (0.28125, 0.75), (0.28125, 0.78125), (0.25, 0.78125), (0.25, 0.75), (0.25, 0.75), (0.25, 0.78125), (0.21875, 0.78125), (0.21875, 0.75), (0.21875, 0.75), (0.21875, 0.78125), (0.1875, 0.78125), (0.1875, 0.75), (0.1875, 0.75), (0.1875, 0.78125), (0.15625, 0.78125), (0.15625, 0.75), (0.15625, 0.75), (0.15625, 0.78125), (0.125, 0.78125), (0.125, 0.75), (0.125, 0.75), (0.125, 0.78125), (0.09375, 0.78125), (0.09375, 0.75), (0.09375, 0.75), (0.09375, 0.78125), (0.0625, 0.78125), (0.0625, 0.75), (0.0625, 0.75), (0.0625, 0.78125), (0.03125, 0.78125), (0.03125, 0.75), (0.03125, 0.75), (0.03125, 0.78125), (1, 0.78125), (1, 0.75), (1, 0.78125), (1, 0.8125), (0.96875, 0.8125), (0.96875, 0.78125), (0.96875, 0.78125), (0.96875, 0.8125), (0.9375, 0.8125), (0.9375, 0.78125), (0.9375, 0.78125), (0.9375, 0.8125), (0.90625, 0.8125), (0.90625, 0.78125), (0.90625, 0.78125), (0.90625, 0.8125), (0.875, 0.8125), (0.875, 0.78125), (0.875, 0.78125), (0.875, 0.8125), (0.84375, 0.8125), (0.84375, 0.78125), (0.84375, 0.78125), (0.84375, 0.8125), (0.8125, 0.8125), (0.8125, 0.78125), (0.8125, 0.78125), (0.8125, 0.8125), (0.78125, 0.8125), (0.78125, 0.78125), (0.78125, 0.78125), (0.78125, 0.8125), (0.75, 0.8125), (0.75, 0.78125), (0.75, 0.78125), (0.75, 0.8125), (0.71875, 0.8125), (0.71875, 0.78125), (0.71875, 0.78125), (0.71875, 0.8125), (0.6875, 0.8125), (0.6875, 0.78125), (0.6875, 0.78125), (0.6875, 0.8125), (0.65625, 0.8125), (0.65625, 0.78125), (0.65625, 0.78125), (0.65625, 0.8125), (0.625, 0.8125), (0.625, 0.78125), (0.625, 0.78125), (0.625, 0.8125), (0.59375, 0.8125), (0.59375, 0.78125), (0.59375, 0.78125), (0.59375, 0.8125), (0.5625, 0.8125), (0.5625, 0.78125), (0.5625, 0.78125), (0.5625, 0.8125), (0.53125, 0.8125), (0.53125, 0.78125), (0.53125, 0.78125), (0.53125, 0.8125), (0.5, 0.8125), (0.5, 0.78125), (0.5, 0.78125), (0.5, 0.8125), (0.46875, 0.8125), (0.46875, 0.78125), (0.46875, 0.78125), (0.46875, 0.8125), (0.4375, 0.8125), (0.4375, 0.78125), (0.4375, 0.78125), (0.4375, 0.8125), (0.40625, 0.8125), (0.40625, 0.78125), (0.40625, 0.78125), (0.40625, 0.8125), (0.375, 0.8125), (0.375, 0.78125), (0.375, 0.78125), (0.375, 0.8125), (0.34375, 0.8125), (0.34375, 0.78125), (0.34375, 0.78125), (0.34375, 0.8125), (0.3125, 0.8125), (0.3125, 0.78125), (0.3125, 0.78125), (0.3125, 0.8125), (0.28125, 0.8125), (0.28125, 0.78125), (0.28125, 0.78125), (0.28125, 0.8125), (0.25, 0.8125), (0.25, 0.78125), (0.25, 0.78125), (0.25, 0.8125), (0.21875, 0.8125), (0.21875, 0.78125), (0.21875, 0.78125), (0.21875, 0.8125), (0.1875, 0.8125), (0.1875, 0.78125), (0.1875, 0.78125), (0.1875, 0.8125), (0.15625, 0.8125), (0.15625, 0.78125), (0.15625, 0.78125), (0.15625, 0.8125), (0.125, 0.8125), (0.125, 0.78125), (0.125, 0.78125), (0.125, 0.8125), (0.09375, 0.8125), (0.09375, 0.78125), (0.09375, 0.78125), (0.09375, 0.8125), (0.0625, 0.8125), (0.0625, 0.78125), (0.0625, 0.78125), (0.0625, 0.8125), (0.03125, 0.8125), (0.03125, 0.78125), (0.03125, 0.78125), (0.03125, 0.8125), (1, 0.8125), (1, 0.78125), (1, 0.8125), (1, 0.84375), (0.96875, 0.84375), (0.96875, 0.8125), (0.96875, 0.8125), (0.96875, 0.84375), (0.9375, 0.84375), (0.9375, 0.8125), (0.9375, 0.8125), (0.9375, 0.84375), (0.90625, 0.84375), (0.90625, 0.8125), (0.90625, 0.8125), (0.90625, 0.84375), (0.875, 0.84375), (0.875, 0.8125), (0.875, 0.8125), (0.875, 0.84375), (0.84375, 0.84375), (0.84375, 0.8125), (0.84375, 0.8125), (0.84375, 0.84375), (0.8125, 0.84375), (0.8125, 0.8125), (0.8125, 0.8125), (0.8125, 0.84375), (0.78125, 0.84375), (0.78125, 0.8125), (0.78125, 0.8125), (0.78125, 0.84375), (0.75, 0.84375), (0.75, 0.8125), (0.75, 0.8125), (0.75, 0.84375), (0.71875, 0.84375), (0.71875, 0.8125), (0.71875, 0.8125), (0.71875, 0.84375), (0.6875, 0.84375), (0.6875, 0.8125), (0.6875, 0.8125), (0.6875, 0.84375), (0.65625, 0.84375), (0.65625, 0.8125), (0.65625, 0.8125), (0.65625, 0.84375), (0.625, 0.84375), (0.625, 0.8125), (0.625, 0.8125), (0.625, 0.84375), (0.59375, 0.84375), (0.59375, 0.8125), (0.59375, 0.8125), (0.59375, 0.84375), (0.5625, 0.84375), (0.5625, 0.8125), (0.5625, 0.8125), (0.5625, 0.84375), (0.53125, 0.84375), (0.53125, 0.8125), (0.53125, 0.8125), (0.53125, 0.84375), (0.5, 0.84375), (0.5, 0.8125), (0.5, 0.8125), (0.5, 0.84375), (0.46875, 0.84375), (0.46875, 0.8125), (0.46875, 0.8125), (0.46875, 0.84375), (0.4375, 0.84375), (0.4375, 0.8125), (0.4375, 0.8125), (0.4375, 0.84375), (0.40625, 0.84375), (0.40625, 0.8125), (0.40625, 0.8125), (0.40625, 0.84375), (0.375, 0.84375), (0.375, 0.8125), (0.375, 0.8125), (0.375, 0.84375), (0.34375, 0.84375), (0.34375, 0.8125), (0.34375, 0.8125), (0.34375, 0.84375), (0.3125, 0.84375), (0.3125, 0.8125), (0.3125, 0.8125), (0.3125, 0.84375), (0.28125, 0.84375), (0.28125, 0.8125), (0.28125, 0.8125), (0.28125, 0.84375), (0.25, 0.84375), (0.25, 0.8125), (0.25, 0.8125), (0.25, 0.84375), (0.21875, 0.84375), (0.21875, 0.8125), (0.21875, 0.8125), (0.21875, 0.84375), (0.1875, 0.84375), (0.1875, 0.8125), (0.1875, 0.8125), (0.1875, 0.84375), (0.15625, 0.84375), (0.15625, 0.8125), (0.15625, 0.8125), (0.15625, 0.84375), (0.125, 0.84375), (0.125, 0.8125), (0.125, 0.8125), (0.125, 0.84375), (0.09375, 0.84375), (0.09375, 0.8125), (0.09375, 0.8125), (0.09375, 0.84375), (0.0625, 0.84375), (0.0625, 0.8125), (0.0625, 0.8125), (0.0625, 0.84375), (0.03125, 0.84375), (0.03125, 0.8125), (0.03125, 0.8125), (0.03125, 0.84375), (1, 0.84375), (1, 0.8125), (1, 0.84375), (1, 0.875), (0.96875, 0.875), (0.96875, 0.84375), (0.96875, 0.84375), (0.96875, 0.875), (0.9375, 0.875), (0.9375, 0.84375), (0.9375, 0.84375), (0.9375, 0.875), (0.90625, 0.875), (0.90625, 0.84375), (0.90625, 0.84375), (0.90625, 0.875), (0.875, 0.875), (0.875, 0.84375), (0.875, 0.84375), (0.875, 0.875), (0.84375, 0.875), (0.84375, 0.84375), (0.84375, 0.84375), (0.84375, 0.875), (0.8125, 0.875), (0.8125, 0.84375), (0.8125, 0.84375), (0.8125, 0.875), (0.78125, 0.875), (0.78125, 0.84375), (0.78125, 0.84375), (0.78125, 0.875), (0.75, 0.875), (0.75, 0.84375), (0.75, 0.84375), (0.75, 0.875), (0.71875, 0.875), (0.71875, 0.84375), (0.71875, 0.84375), (0.71875, 0.875), (0.6875, 0.875), (0.6875, 0.84375), (0.6875, 0.84375), (0.6875, 0.875), (0.65625, 0.875), (0.65625, 0.84375), (0.65625, 0.84375), (0.65625, 0.875), (0.625, 0.875), (0.625, 0.84375), (0.625, 0.84375), (0.625, 0.875), (0.59375, 0.875), (0.59375, 0.84375), (0.59375, 0.84375), (0.59375, 0.875), (0.5625, 0.875), (0.5625, 0.84375), (0.5625, 0.84375), (0.5625, 0.875), (0.53125, 0.875), (0.53125, 0.84375), (0.53125, 0.84375), (0.53125, 0.875), (0.5, 0.875), (0.5, 0.84375), (0.5, 0.84375), (0.5, 0.875), (0.46875, 0.875), (0.46875, 0.84375), (0.46875, 0.84375), (0.46875, 0.875), (0.4375, 0.875), (0.4375, 0.84375), (0.4375, 0.84375), (0.4375, 0.875), (0.40625, 0.875), (0.40625, 0.84375), (0.40625, 0.84375), (0.40625, 0.875), (0.375, 0.875), (0.375, 0.84375), (0.375, 0.84375), (0.375, 0.875), (0.34375, 0.875), (0.34375, 0.84375), (0.34375, 0.84375), (0.34375, 0.875), (0.3125, 0.875), (0.3125, 0.84375), (0.3125, 0.84375), (0.3125, 0.875), (0.28125, 0.875), (0.28125, 0.84375), (0.28125, 0.84375), (0.28125, 0.875), (0.25, 0.875), (0.25, 0.84375), (0.25, 0.84375), (0.25, 0.875), (0.21875, 0.875), (0.21875, 0.84375), (0.21875, 0.84375), (0.21875, 0.875), (0.1875, 0.875), (0.1875, 0.84375), (0.1875, 0.84375), (0.1875, 0.875), (0.15625, 0.875), (0.15625, 0.84375), (0.15625, 0.84375), (0.15625, 0.875), (0.125, 0.875), (0.125, 0.84375), (0.125, 0.84375), (0.125, 0.875), (0.09375, 0.875), (0.09375, 0.84375), (0.09375, 0.84375), (0.09375, 0.875), (0.0625, 0.875), (0.0625, 0.84375), (0.0625, 0.84375), (0.0625, 0.875), (0.03125, 0.875), (0.03125, 0.84375), (0.03125, 0.84375), (0.03125, 0.875), (1, 0.875), (1, 0.84375), (1, 0.875), (1, 0.90625), (0.96875, 0.90625), (0.96875, 0.875), (0.96875, 0.875), (0.96875, 0.90625), (0.9375, 0.90625), (0.9375, 0.875), (0.9375, 0.875), (0.9375, 0.90625), (0.90625, 0.90625), (0.90625, 0.875), (0.90625, 0.875), (0.90625, 0.90625), (0.875, 0.90625), (0.875, 0.875), (0.875, 0.875), (0.875, 0.90625), (0.84375, 0.90625), (0.84375, 0.875), (0.84375, 0.875), (0.84375, 0.90625), (0.8125, 0.90625), (0.8125, 0.875), (0.8125, 0.875), (0.8125, 0.90625), (0.78125, 0.90625), (0.78125, 0.875), (0.78125, 0.875), (0.78125, 0.90625), (0.75, 0.90625), (0.75, 0.875), (0.75, 0.875), (0.75, 0.90625), (0.71875, 0.90625), (0.71875, 0.875), (0.71875, 0.875), (0.71875, 0.90625), (0.6875, 0.90625), (0.6875, 0.875), (0.6875, 0.875), (0.6875, 0.90625), (0.65625, 0.90625), (0.65625, 0.875), (0.65625, 0.875), (0.65625, 0.90625), (0.625, 0.90625), (0.625, 0.875), (0.625, 0.875), (0.625, 0.90625), (0.59375, 0.90625), (0.59375, 0.875), (0.59375, 0.875), (0.59375, 0.90625), (0.5625, 0.90625), (0.5625, 0.875), (0.5625, 0.875), (0.5625, 0.90625), (0.53125, 0.90625), (0.53125, 0.875), (0.53125, 0.875), (0.53125, 0.90625), (0.5, 0.90625), (0.5, 0.875), (0.5, 0.875), (0.5, 0.90625), (0.46875, 0.90625), (0.46875, 0.875), (0.46875, 0.875), (0.46875, 0.90625), (0.4375, 0.90625), (0.4375, 0.875), (0.4375, 0.875), (0.4375, 0.90625), (0.40625, 0.90625), (0.40625, 0.875), (0.40625, 0.875), (0.40625, 0.90625), (0.375, 0.90625), (0.375, 0.875), (0.375, 0.875), (0.375, 0.90625), (0.34375, 0.90625), (0.34375, 0.875), (0.34375, 0.875), (0.34375, 0.90625), (0.3125, 0.90625), (0.3125, 0.875), (0.3125, 0.875), (0.3125, 0.90625), (0.28125, 0.90625), (0.28125, 0.875), (0.28125, 0.875), (0.28125, 0.90625), (0.25, 0.90625), (0.25, 0.875), (0.25, 0.875), (0.25, 0.90625), (0.21875, 0.90625), (0.21875, 0.875), (0.21875, 0.875), (0.21875, 0.90625), (0.1875, 0.90625), (0.1875, 0.875), (0.1875, 0.875), (0.1875, 0.90625), (0.15625, 0.90625), (0.15625, 0.875), (0.15625, 0.875), (0.15625, 0.90625), (0.125, 0.90625), (0.125, 0.875), (0.125, 0.875), (0.125, 0.90625), (0.09375, 0.90625), (0.09375, 0.875), (0.09375, 0.875), (0.09375, 0.90625), (0.0625, 0.90625), (0.0625, 0.875), (0.0625, 0.875), (0.0625, 0.90625), (0.03125, 0.90625), (0.03125, 0.875), (0.03125, 0.875), (0.03125, 0.90625), (1, 0.90625), (1, 0.875), (1, 0.90625), (1, 0.9375), (0.96875, 0.9375), (0.96875, 0.90625), (0.96875, 0.90625), (0.96875, 0.9375), (0.9375, 0.9375), (0.9375, 0.90625), (0.9375, 0.90625), (0.9375, 0.9375), (0.90625, 0.9375), (0.90625, 0.90625), (0.90625, 0.90625), (0.90625, 0.9375), (0.875, 0.9375), (0.875, 0.90625), (0.875, 0.90625), (0.875, 0.9375), (0.84375, 0.9375), (0.84375, 0.90625), (0.84375, 0.90625), (0.84375, 0.9375), (0.8125, 0.9375), (0.8125, 0.90625), (0.8125, 0.90625), (0.8125, 0.9375), (0.78125, 0.9375), (0.78125, 0.90625), (0.78125, 0.90625), (0.78125, 0.9375), (0.75, 0.9375), (0.75, 0.90625), (0.75, 0.90625), (0.75, 0.9375), (0.71875, 0.9375), (0.71875, 0.90625), (0.71875, 0.90625), (0.71875, 0.9375), (0.6875, 0.9375), (0.6875, 0.90625), (0.6875, 0.90625), (0.6875, 0.9375), (0.65625, 0.9375), (0.65625, 0.90625), (0.65625, 0.90625), (0.65625, 0.9375), (0.625, 0.9375), (0.625, 0.90625), (0.625, 0.90625), (0.625, 0.9375), (0.59375, 0.9375), (0.59375, 0.90625), (0.59375, 0.90625), (0.59375, 0.9375), (0.5625, 0.9375), (0.5625, 0.90625), (0.5625, 0.90625), (0.5625, 0.9375), (0.53125, 0.9375), (0.53125, 0.90625), (0.53125, 0.90625), (0.53125, 0.9375), (0.5, 0.9375), (0.5, 0.90625), (0.5, 0.90625), (0.5, 0.9375), (0.46875, 0.9375), (0.46875, 0.90625), (0.46875, 0.90625), (0.46875, 0.9375), (0.4375, 0.9375), (0.4375, 0.90625), (0.4375, 0.90625), (0.4375, 0.9375), (0.40625, 0.9375), (0.40625, 0.90625), (0.40625, 0.90625), (0.40625, 0.9375), (0.375, 0.9375), (0.375, 0.90625), (0.375, 0.90625), (0.375, 0.9375), (0.34375, 0.9375), (0.34375, 0.90625), (0.34375, 0.90625), (0.34375, 0.9375), (0.3125, 0.9375), (0.3125, 0.90625), (0.3125, 0.90625), (0.3125, 0.9375), (0.28125, 0.9375), (0.28125, 0.90625), (0.28125, 0.90625), (0.28125, 0.9375), (0.25, 0.9375), (0.25, 0.90625), (0.25, 0.90625), (0.25, 0.9375), (0.21875, 0.9375), (0.21875, 0.90625), (0.21875, 0.90625), (0.21875, 0.9375), (0.1875, 0.9375), (0.1875, 0.90625), (0.1875, 0.90625), (0.1875, 0.9375), (0.15625, 0.9375), (0.15625, 0.90625), (0.15625, 0.90625), (0.15625, 0.9375), (0.125, 0.9375), (0.125, 0.90625), (0.125, 0.90625), (0.125, 0.9375), (0.09375, 0.9375), (0.09375, 0.90625), (0.09375, 0.90625), (0.09375, 0.9375), (0.0625, 0.9375), (0.0625, 0.90625), (0.0625, 0.90625), (0.0625, 0.9375), (0.03125, 0.9375), (0.03125, 0.90625), (0.03125, 0.90625), (0.03125, 0.9375), (1, 0.9375), (1, 0.90625), (1, 0.9375), (1, 0.96875), (0.96875, 0.96875), (0.96875, 0.9375), (0.96875, 0.9375), (0.96875, 0.96875), (0.9375, 0.96875), (0.9375, 0.9375), (0.9375, 0.9375), (0.9375, 0.96875), (0.90625, 0.96875), (0.90625, 0.9375), (0.90625, 0.9375), (0.90625, 0.96875), (0.875, 0.96875), (0.875, 0.9375), (0.875, 0.9375), (0.875, 0.96875), (0.84375, 0.96875), (0.84375, 0.9375), (0.84375, 0.9375), (0.84375, 0.96875), (0.8125, 0.96875), (0.8125, 0.9375), (0.8125, 0.9375), (0.8125, 0.96875), (0.78125, 0.96875), (0.78125, 0.9375), (0.78125, 0.9375), (0.78125, 0.96875), (0.75, 0.96875), (0.75, 0.9375), (0.75, 0.9375), (0.75, 0.96875), (0.71875, 0.96875), (0.71875, 0.9375), (0.71875, 0.9375), (0.71875, 0.96875), (0.6875, 0.96875), (0.6875, 0.9375), (0.6875, 0.9375), (0.6875, 0.96875), (0.65625, 0.96875), (0.65625, 0.9375), (0.65625, 0.9375), (0.65625, 0.96875), (0.625, 0.96875), (0.625, 0.9375), (0.625, 0.9375), (0.625, 0.96875), (0.59375, 0.96875), (0.59375, 0.9375), (0.59375, 0.9375), (0.59375, 0.96875), (0.5625, 0.96875), (0.5625, 0.9375), (0.5625, 0.9375), (0.5625, 0.96875), (0.53125, 0.96875), (0.53125, 0.9375), (0.53125, 0.9375), (0.53125, 0.96875), (0.5, 0.96875), (0.5, 0.9375), (0.5, 0.9375), (0.5, 0.96875), (0.46875, 0.96875), (0.46875, 0.9375), (0.46875, 0.9375), (0.46875, 0.96875), (0.4375, 0.96875), (0.4375, 0.9375), (0.4375, 0.9375), (0.4375, 0.96875), (0.40625, 0.96875), (0.40625, 0.9375), (0.40625, 0.9375), (0.40625, 0.96875), (0.375, 0.96875), (0.375, 0.9375), (0.375, 0.9375), (0.375, 0.96875), (0.34375, 0.96875), (0.34375, 0.9375), (0.34375, 0.9375), (0.34375, 0.96875), (0.3125, 0.96875), (0.3125, 0.9375), (0.3125, 0.9375), (0.3125, 0.96875), (0.28125, 0.96875), (0.28125, 0.9375), (0.28125, 0.9375), (0.28125, 0.96875), (0.25, 0.96875), (0.25, 0.9375), (0.25, 0.9375), (0.25, 0.96875), (0.21875, 0.96875), (0.21875, 0.9375), (0.21875, 0.9375), (0.21875, 0.96875), (0.1875, 0.96875), (0.1875, 0.9375), (0.1875, 0.9375), (0.1875, 0.96875), (0.15625, 0.96875), (0.15625, 0.9375), (0.15625, 0.9375), (0.15625, 0.96875), (0.125, 0.96875), (0.125, 0.9375), (0.125, 0.9375), (0.125, 0.96875), (0.09375, 0.96875), (0.09375, 0.9375), (0.09375, 0.9375), (0.09375, 0.96875), (0.0625, 0.96875), (0.0625, 0.9375), (0.0625, 0.9375), (0.0625, 0.96875), (0.03125, 0.96875), (0.03125, 0.9375), (0.03125, 0.9375), (0.03125, 0.96875), (1, 0.96875), (1, 0.9375), (1, 0.96875), (1, 1), (0.96875, 1), (0.96875, 0.96875), (0.96875, 0.96875), (0.96875, 1), (0.9375, 1), (0.9375, 0.96875), (0.9375, 0.96875), (0.9375, 1), (0.90625, 1), (0.90625, 0.96875), (0.90625, 0.96875), (0.90625, 1), (0.875, 1), (0.875, 0.96875), (0.875, 0.96875), (0.875, 1), (0.84375, 1), (0.84375, 0.96875), (0.84375, 0.96875), (0.84375, 1), (0.8125, 1), (0.8125, 0.96875), (0.8125, 0.96875), (0.8125, 1), (0.78125, 1), (0.78125, 0.96875), (0.78125, 0.96875), (0.78125, 1), (0.75, 1), (0.75, 0.96875), (0.75, 0.96875), (0.75, 1), (0.71875, 1), (0.71875, 0.96875), (0.71875, 0.96875), (0.71875, 1), (0.6875, 1), (0.6875, 0.96875), (0.6875, 0.96875), (0.6875, 1), (0.65625, 1), (0.65625, 0.96875), (0.65625, 0.96875), (0.65625, 1), (0.625, 1), (0.625, 0.96875), (0.625, 0.96875), (0.625, 1), (0.59375, 1), (0.59375, 0.96875), (0.59375, 0.96875), (0.59375, 1), (0.5625, 1), (0.5625, 0.96875), (0.5625, 0.96875), (0.5625, 1), (0.53125, 1), (0.53125, 0.96875), (0.53125, 0.96875), (0.53125, 1), (0.5, 1), (0.5, 0.96875), (0.5, 0.96875), (0.5, 1), (0.46875, 1), (0.46875, 0.96875), (0.46875, 0.96875), (0.46875, 1), (0.4375, 1), (0.4375, 0.96875), (0.4375, 0.96875), (0.4375, 1), (0.40625, 1), (0.40625, 0.96875), (0.40625, 0.96875), (0.40625, 1), (0.375, 1), (0.375, 0.96875), (0.375, 0.96875), (0.375, 1), (0.34375, 1), (0.34375, 0.96875), (0.34375, 0.96875), (0.34375, 1), (0.3125, 1), (0.3125, 0.96875), (0.3125, 0.96875), (0.3125, 1), (0.28125, 1), (0.28125, 0.96875), (0.28125, 0.96875), (0.28125, 1), (0.25, 1), (0.25, 0.96875), (0.25, 0.96875), (0.25, 1), (0.21875, 1), (0.21875, 0.96875), (0.21875, 0.96875), (0.21875, 1), (0.1875, 1), (0.1875, 0.96875), (0.1875, 0.96875), (0.1875, 1), (0.15625, 1), (0.15625, 0.96875), (0.15625, 0.96875), (0.15625, 1), (0.125, 1), (0.125, 0.96875), (0.125, 0.96875), (0.125, 1), (0.09375, 1), (0.09375, 0.96875), (0.09375, 0.96875), (0.09375, 1), (0.0625, 1), (0.0625, 0.96875), (0.0625, 0.96875), (0.0625, 1), (0.03125, 1), (0.03125, 0.96875), (0.03125, 0.96875), (0.03125, 1), (1, 1), (1, 0.96875)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + float3 xformOp:rotateZYX = (-0, 0, -0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (191.829495, 0, 193.258567) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Cube_02" ( + kind = "model" + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 4, 5, 1, 4, 0, 2, 6, 5, 4, 6, 7, 1, 5, 7, 3, 0, 1, 3, 2, 3, 7, 6, 2] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (-50, -50, 50), (-50, 50, -50), (-50, 50, 50), (50, -50, -50), (50, -50, 50), (50, 50, -50), (50, 50, 50)] + float2[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateZYX = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-212.165768, 0, 190.799459) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateZYX", "xformOp:scale"] + } + + def Mesh "Cube_03" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (196.331, 0, -195.614) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniSurface_Cube" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-283.52087292432554, -1.6370904631912708e-11, -221.57136403754635) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniSurface_Cube_01" + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-192.6883712993065, -1.6370904631912708e-11, -221.57136403754635) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def BasisCurves "OmniHair_BasisCurves" ( + prepend apiSchemas = ["MaterialBindingAPI"] + doc = "basisCurves from maya XGen-groom" + ) + { + uniform token basis = "bspline" + int[] curveVertexCounts = [6, 6, 6, 6] + float3[] extent = [(-46.947018, 3.6487765, 0.8009007), (40.807438, 51.74496, 20.45557)] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + point3f[] points = [(32.945724, 5.988041, 1.6308595), (34.137173, 10.148499, 1.3009007), (36.233295, 14.192265, 1.9558597), (36.296688, 17.675957, 2.4883246), (38.503635, 21.709782, 1.667905), (40.307438, 25.821293, 2.5520527), (-38.29307, 4.1487765, 3.3738482), (-39.96345, 9.926143, 3.413236), (-41.56703, 15.577562, 3.3603835), (-43.884335, 20.371292, 3.6131015), (-44.77227, 26.43213, 4.1838765), (-46.447018, 31.399565, 4.4703255), (8.541511, 21.105211, 2.5770526), (12.117597, 23.706623, 3.7534091), (16.399153, 33.008896, 5.090405), (20.606, 36.174828, 5.8582), (23.601883, 45.069645, 5.251637), (22.881294, 51.24496, 8.579195), (-12.140077, 16.870716, 7.574891), (-15.955103, 23.039955, 10.669359), (-19.113739, 25.761543, 16.080956), (-24.594814, 36.63467, 18.58584), (-30.864456, 42.528637, 19.731884), (-31.6773, 43.52253, 19.95557)] + color3f[] primvars:displayColor = [(1, 1, 1)] ( + interpolation = "constant" + ) + int primvars:endcaps = 0 + texCoord2f[] primvars:st1 = [(0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.82945716, 0.48369142), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.117069304, 0.4662615), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.5854152, 0.47422945), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108), (0.37859923, 0.42425108)] ( + interpolation = "vertex" + ) + texCoord2f[] primvars:st2 = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)] ( + interpolation = "vertex" + ) + uniform token type = "cubic" + token ui:displayGroup = "Material Graphs" + token ui:displayName = "hair_basisCurves" + int ui:order = 1024 + float[] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ( + interpolation = "vertex" + ) + uniform token wrap = "pinned" + float3 xformOp:rotateXYZ = (0, -0, 0) + float3 xformOp:scale = (1, 1, 1) + double3 xformOp:translate = (-120, 0, -100) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "OmniHair_Cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + float3[] extent = [(-50, -50, -50), (50, 50, 50)] + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 4, 6, 7, 5, 6, 2, 3, 7, 4, 5, 1, 0, 4, 0, 2, 6, 5, 7, 3, 1] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, 50), (50, -50, 50), (-50, 50, 50), (50, 50, 50), (-50, -50, -50), (50, -50, -50), (-50, 50, -50), (50, 50, -50)] + texCoord2f[] primvars:st = [(0, 0), (1, 0), (1, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 0), (0, 1), (0, 0), (1, 0), (1, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-90, 0, -221) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "PreviewSurface_mono_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-283.52087292432554, -1.6370904631912708e-11, 315.4231402711175) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "PreviewSurface_mono_lite_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-175.5202052948077, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "DebugWhite_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (-67.89003031098687, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "Default_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (184.19079372412423, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } + + def Mesh "DebugWhiteEmissive_cube" ( + prepend apiSchemas = ["MaterialBindingAPI"] + ) + { + int[] faceVertexCounts = [4, 4, 4, 4, 4, 4] + int[] faceVertexIndices = [0, 1, 3, 2, 0, 4, 5, 1, 1, 5, 6, 3, 2, 3, 6, 7, 0, 2, 7, 4, 4, 7, 6, 5] + rel material:binding = ( + bindMaterialAs = "weakerThanDescendants" + ) + normal3f[] normals = [(0, -1, 0), (0, -1, 0), (0, -1, 0), (0, -1, 0), (0, 0, -1), (0, 0, -1), (0, 0, -1), (0, 0, -1), (1, 0, 0), (1, 0, 0), (1, 0, 0), (1, 0, 0), (0, 0, 1), (0, 0, 1), (0, 0, 1), (0, 0, 1), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0), (0, 1, 0)] ( + interpolation = "faceVarying" + ) + point3f[] points = [(-50, -50, -50), (50, -50, -50), (-50, -50, 50), (50, -50, 50), (-50, 50, -50), (50, 50, -50), (50, 50, 50), (-50, 50, 50)] + float2[] primvars:st = [(1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (0, 0), (0, 1), (1, 1), (1, 0), (1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 1), (0, 0)] ( + interpolation = "faceVarying" + ) + uniform token subdivisionScheme = "none" + double3 xformOp:rotateXYZ = (0, 0, 0) + double3 xformOp:scale = (0.5, 0.5, 0.5) + double3 xformOp:translate = (44.18136069402303, -1.6370904631912708e-11, 315.97557096907144) + uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"] + } +} + diff --git a/templates/extensions/usd_explorer.setup/template/data/icon.png b/templates/extensions/usd_explorer.setup/template/data/icon.png new file mode 100644 index 0000000..70e17a5 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/icon.png differ diff --git a/templates/extensions/usd_explorer.setup/template/data/icons/caret_s2_left_dark.svg b/templates/extensions/usd_explorer.setup/template/data/icons/caret_s2_left_dark.svg new file mode 100644 index 0000000..c2529a3 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/data/icons/caret_s2_left_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/templates/extensions/usd_explorer.setup/template/data/icons/caret_s2_right_dark.svg b/templates/extensions/usd_explorer.setup/template/data/icons/caret_s2_right_dark.svg new file mode 100644 index 0000000..9a0b309 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/data/icons/caret_s2_right_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/templates/extensions/usd_explorer.setup/template/data/icons/navOpen_dark.svg b/templates/extensions/usd_explorer.setup/template/data/icons/navOpen_dark.svg new file mode 100644 index 0000000..10be3db --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/data/icons/navOpen_dark.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/Blue_Sky.usd b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Blue_Sky.usd new file mode 100644 index 0000000..04c4089 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Blue_Sky.usd differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/Grey_Sky.usd b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Grey_Sky.usd new file mode 100644 index 0000000..e0044d1 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Grey_Sky.usd differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/CarLight_512x256.hdr b/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/CarLight_512x256.hdr new file mode 100644 index 0000000..c036907 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/CarLight_512x256.hdr differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/Env_Gradient_001.png b/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/Env_Gradient_001.png new file mode 100644 index 0000000..856a5a5 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/Env_Gradient_001.png differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/partly_cloudy.hdr b/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/partly_cloudy.hdr new file mode 100644 index 0000000..943e466 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/HDR/partly_cloudy.hdr differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/High_Contrast.usd b/templates/extensions/usd_explorer.setup/template/data/light_rigs/High_Contrast.usd new file mode 100644 index 0000000..bf69aa8 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/High_Contrast.usd differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/Neutral_Lighting.usd b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Neutral_Lighting.usd new file mode 100644 index 0000000..8002791 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Neutral_Lighting.usd differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/Sunny_Sky.usd b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Sunny_Sky.usd new file mode 100644 index 0000000..a70499a Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/Sunny_Sky.usd differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/CarLight_512x256.hdr b/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/CarLight_512x256.hdr new file mode 100644 index 0000000..c036907 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/CarLight_512x256.hdr differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/Gradient_Backdrop.exr b/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/Gradient_Backdrop.exr new file mode 100644 index 0000000..5f8b89d Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/Gradient_Backdrop.exr differ diff --git a/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/partly_cloudy.hdr b/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/partly_cloudy.hdr new file mode 100644 index 0000000..943e466 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/light_rigs/subusds/partly_cloudy.hdr differ diff --git a/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer.ico b/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer.ico new file mode 100644 index 0000000..3f1140f Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer.ico differ diff --git a/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer.png b/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer.png new file mode 100644 index 0000000..537b92d Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer.png differ diff --git a/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer_about.png b/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer_about.png new file mode 100644 index 0000000..42e0f37 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/nvidia-omniverse-usd_explorer_about.png differ diff --git a/templates/extensions/usd_explorer.setup/template/data/preview.png b/templates/extensions/usd_explorer.setup/template/data/preview.png new file mode 100644 index 0000000..9653535 Binary files /dev/null and b/templates/extensions/usd_explorer.setup/template/data/preview.png differ diff --git a/templates/extensions/usd_explorer.setup/template/docs/CHANGELOG.md b/templates/extensions/usd_explorer.setup/template/docs/CHANGELOG.md new file mode 100644 index 0000000..f6a49d2 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/docs/CHANGELOG.md @@ -0,0 +1,134 @@ +# Changelog + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [1.0.32] - 2023-11-02 +### Changed +- OMFP-3224: Added regression test +- Added unit tests for state manager + +## [1.0.31] - 2023-10-25 +### Changed +- OMFP-3094: Restored Window/Viewport menu + +## [1.0.30] - 2023-10-26 +### Changed +- OMFP-2904: Show "Examples" by default in Layout mode + +## [1.0.29] - 2023-10-25 +### Changed +- OMFP-3224: Fix stage template light directions. + +## [1.0.28] - 2023-10-23 +### Changed +- OMFP-2654: Upgraded carb.imgui with omni.kit.imgui + +## [1.0.27] - 2023-10-20 +### Changed +- OMFP-2649: Missed the Layout item, it is now hidden as requested. + +## [1.0.26] - 2023-10-20 +### Changed +- Update embedded light rigs and textures + +## [1.0.25] - 2023-10-19 +### Changed +- Added regression test for OMFP-2304 + +## [1.0.24] - 2023-10-19 +### Changed +- OMFP-1981: always load the default layout when startup the app + +## [1.0.23] - 2023-10-18 +### Changed +- OMFP-2649: Hiding menu entries. + +## [1.0.22] - 2023-10-18 +### Changed +- Updated About dialog PNG to match the new application icon. + +## [1.0.21] - 2023-10-18 +### Changed +- OMFP-2737: Do no rebuild menu (change menu layout) if layout is same + +## [1.0.20] - 2023-10-18 +### Changed +- make windows invisible which are not desired to be in Review mode, OMFP-2252 activity progress window and OMFP-1981 scene optimizer window. +- OMFP-1981: when user switch between modes, make sure the user defined layout in Layout mode is kept. + +## [1.0.19] - 2023-10-17 +### Changed +- OMFP-2547 - remove markup from modal list, markup window visibility is now handled in omni.kit.markup.core + +## [1.0.18] - 2023-10-17 +### Changed +- Fixed test + +## [1.0.17] - 2023-10-16 +### Changed +- Navigation bar visibility fixes + +## [1.0.16] - 2023-10-13 +### Changed +- Waypoint and markup visibilities are bound to their list windows + +## [1.0.15] - 2023-10-12 +### Changed +- OMFP-2417 - Rename 'comment' -> 'review' and 'modify' -> 'layout' + +## [1.0.14] - 2023-10-12 +### Changed +- Added more unit tests. + +## [1.0.13] - 2023-10-11 +### Changed +- OMFP-2328: Fix "Sunnysky" oriented incorrectly + +## [1.0.12] - 2023-10-10 +### Changed +- OMFP-2226 - Remove second Viewport menu item from layouts. + +## [1.0.11] - 2023-10-11 +### Changed +- Added UI state manager. + +## [1.0.10] - 2023-10-10 +### Changed +- Deactivate tools when app mode is changed. + +## [1.0.9] - 2023-10-09 +### Changed +- OMFP-2200 - Disabling the viewport expansion, this should keep us locked to a 16:9 aspect ratio. + +## [1.0.8] - 2023-10-06 +### Changed +- Added a new stage template and made it default + +## [1.0.7] - 2023-10-06 +### Changed +- Enable UI aware "expand_viewport" mode rather than lower-level fill_viewport mode + +## [1.0.6] - 2023-10-05 +### Changed +- Used allowlists for building main menu entries to guard against unexpected menus. + +## [1.0.5] - 2023-10-05 +### Fixed +- Regression in hiding viewport toolbar. + +## [1.0.4] - 2023-10-04 +### Changed +- Modify mode now shows selected menus on main menubar. + +## [1.0.3] - 2023-10-04 +- Hide Viewport top toolbar in Comment Mode + +## [1.0.2] - 2023-10-03 +- Navigation Toolbar hidden by default in Modify Mode + +## [1.0.1] - 2023-09-27 +- Renamed to omni.usd_explorer.setup + + +## [1.0.0] - 2021-04-26 +- Initial version of extension UI template with a window diff --git a/templates/extensions/usd_explorer.setup/template/docs/README.md b/templates/extensions/usd_explorer.setup/template/docs/README.md new file mode 100644 index 0000000..4d9eef6 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/docs/README.md @@ -0,0 +1 @@ +# {{ extension_display_name }} [{{ extension_name }}] \ No newline at end of file diff --git a/templates/extensions/usd_explorer.setup/template/layouts/comment_layout.json b/templates/extensions/usd_explorer.setup/template/layouts/comment_layout.json new file mode 100644 index 0000000..9736d66 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/layouts/comment_layout.json @@ -0,0 +1,315 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0, + "doc_id": 5 + } + ], + "dock_id": 3, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1187.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 536.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": false, + "width": 44.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Markup Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 32.0, + "position_x": 834.0, + "position_y": 384.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": false, + "width": 32.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Node Description Editor", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Toolkit", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 2389297972960", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Materials", + "visible": false, + "width": 0.0 + } +] diff --git a/templates/extensions/usd_explorer.setup/template/layouts/default.json b/templates/extensions/usd_explorer.setup/template/layouts/default.json new file mode 100644 index 0000000..e202891 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/layouts/default.json @@ -0,0 +1,344 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_id": 5, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 690.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1408.0 + } + ], + "dock_id": 5, + "position": "LEFT" + }, + { + "children": [ + { + "dock_id": 6, + "height": 690.0, + "position_x": 1410.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": true, + "width": 44.0 + } + ], + "dock_id": 6, + "position": "RIGHT" + } + ], + "dock_id": 3, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 4, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 267.0, + "position_x": 0.0, + "position_y": 718.0, + "selected_in_dock": true, + "title": "Content", + "visible": true, + "width": 1454.0 + }, + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": true, + "width": 1454.0 + }, + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Materials", + "visible": true, + "width": 1454.0 + } + , + { + "dock_id": 4, + "height": 267.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Examples", + "visible": true, + "width": 1454.0 + } + ], + "dock_id": 4, + "position": "BOTTOM" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "children": [ + { + "children": [ + { + "dock_id": 7, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 477.0, + "position_x": 1456.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Stage", + "visible": true, + "width": 464.0 + } + ], + "dock_id": 7, + "position": "TOP" + }, + { + "children": [ + { + "dock_id": 8, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 480.0, + "position_x": 1456.0, + "position_y": 505.0, + "selected_in_dock": true, + "title": "Property", + "visible": true, + "width": 464.0 + } + ], + "dock_id": 8, + "position": "BOTTOM" + } + ], + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 267.0, + "position_x": 0.0, + "position_y": 718.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1454.0 + }, + { + "dock_id": 0, + "height": 116.0, + "position_x": 60.0, + "position_y": 60.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 332.0 + }, + { + "dock_id": 0, + "height": 480.0, + "position_x": 1344.0, + "position_y": 22.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 576.0 + }, + { + "dock_id": 0, + "height": 320.0, + "position_x": 610.0, + "position_y": 348.0, + "selected_in_dock": false, + "title": "Welcome", + "visible": false, + "width": 700.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 650.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 465.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Measure Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 190.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Design Render Settings", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Timeline Session", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 540.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "About", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markups", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Waypoints", + "visible": false, + "width": 180.0 + }, + { + "dock_id": 0, + "height": 212.0, + "position_x": 120.0, + "position_y": 744.0, + "selected_in_dock": false, + "title": "0", + "visible": false, + "width": 860.0 + }, + { + "dock_id": 0, + "height": 148.0, + "position_x": 1004.0, + "position_y": 768.0, + "selected_in_dock": false, + "title": "Add bookmark", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 400.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Targets", + "visible": false, + "width": 400.0 + } +] \ No newline at end of file diff --git a/templates/extensions/usd_explorer.setup/template/layouts/markup_editor.json b/templates/extensions/usd_explorer.setup/template/layouts/markup_editor.json new file mode 100644 index 0000000..032d24b --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/layouts/markup_editor.json @@ -0,0 +1,275 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_id": 3, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "USD Explorer Toolbar", + "visible": true, + "width": 44.0 + } + ], + "dock_id": 3, + "position": "RIGHT" + }, + { + "children": [ + { + "dock_id": 4, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0 + } + ], + "dock_id": 4, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "children": [ + { + "dock_id": 2, + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": true, + "height": 742.0, + "position_x": 1183.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Markup Manager", + "visible": false, + "width": 517.0 + } + ], + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1184.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 516.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1185.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1185.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1183.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 515.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1183.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 1560346058432", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + } +] diff --git a/templates/extensions/usd_explorer.setup/template/layouts/viewport_only.json b/templates/extensions/usd_explorer.setup/template/layouts/viewport_only.json new file mode 100644 index 0000000..9736d66 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/layouts/viewport_only.json @@ -0,0 +1,315 @@ +[ + { + "children": [ + { + "children": [ + { + "children": [ + { + "dock_tab_bar_enabled": true, + "dock_tab_bar_visible": false, + "height": 742.0, + "position_x": 46.0, + "position_y": 26.0, + "selected_in_dock": true, + "title": "Viewport", + "visible": true, + "width": 1135.0, + "doc_id": 5 + } + ], + "dock_id": 3, + "position": "LEFT" + } + ], + "dock_id": 1, + "position": "LEFT" + }, + { + "dock_id": 2, + "position": "RIGHT" + } + ], + "dock_id": 3358485147 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Console", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 204.0, + "position_x": 0.0, + "position_y": 564.0, + "selected_in_dock": false, + "title": "Content", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 371.0, + "position_x": 1187.0, + "position_y": 397.0, + "selected_in_dock": false, + "title": "Property", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 536.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Main ToolBar", + "visible": false, + "width": 44.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Markup Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Render Settings", + "visible": false, + "width": 1700.0 + }, + { + "dock_id": 0, + "height": 742.0, + "position_x": 1187.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Waypoint Manager", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Stage", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 369.0, + "position_x": 0.0, + "position_y": 26.0, + "selected_in_dock": false, + "title": "Layer", + "visible": false, + "width": 513.0 + }, + { + "dock_id": 0, + "height": 32.0, + "position_x": 834.0, + "position_y": 384.0, + "selected_in_dock": false, + "title": "NVIDIA Assets", + "visible": false, + "width": 32.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Add Attribute...", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Preferences", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Screenshot Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 60.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Changing directory ...", + "visible": false, + "width": 300.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Options", + "visible": false, + "width": 220.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Template", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Filename (Local Files Only)", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 800.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Node Description Editor", + "visible": false, + "width": 600.0 + }, + { + "dock_id": 0, + "height": 500.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "OmniGraph Toolkit", + "visible": false, + "width": 800.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Select Markup Export Directory", + "visible": false, + "width": 1000.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Markup Export", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Measure", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 600.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Statistics", + "visible": false, + "width": 400.0 + }, + { + "dock_id": 0, + "height": 114.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "omni.ui.scene 2389297972960", + "visible": false, + "width": 210.8000030517578 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename waypoint", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Rename markup", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Playlist", + "visible": false, + "width": 0.0 + }, + { + "dock_id": 0, + "height": 0.0, + "position_x": 3.4028234663852886e+38, + "position_y": 3.4028234663852886e+38, + "selected_in_dock": false, + "title": "Materials", + "visible": false, + "width": 0.0 + } +] diff --git a/templates/extensions/usd_explorer.setup/template/premake5.lua b/templates/extensions/usd_explorer.setup/template/premake5.lua new file mode 100644 index 0000000..d12b94e --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/premake5.lua @@ -0,0 +1,12 @@ +-- Use folder name to build extension name and tag. Version is specified explicitly. +local ext = get_current_extension_info() + +project_ext (ext) + +-- Link only those files and folders into the extension target directory +repo_build.prebuild_link { + { "data", ext.target_dir.."/data" }, + { "docs", ext.target_dir.."/docs" }, + { "layouts", ext.target_dir.."/layouts" }, + { "{{ python_module_toplevel }}", ext.target_dir.."/{{ python_module_toplevel }}" }, +} diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/__init__.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/__init__.py new file mode 100644 index 0000000..3a4e67d --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/__init__.py @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +from .setup import * diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/menu_helper.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/menu_helper.py new file mode 100644 index 0000000..83c7863 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/menu_helper.py @@ -0,0 +1,123 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import asyncio + +import carb.settings +import omni.kit.app +import omni.kit.commands +import omni.kit.menu.utils +import omni.renderer_capture +from omni.kit.menu.utils import MenuLayout + +SETTINGS_APPLICATION_MODE_PATH = "/app/application_mode" + + +class MenuHelper: + def __init__(self) -> None: + self._settings = carb.settings.get_settings() + self._current_layout = None + self._pending_layout = None + self._changing_layout_task: asyncio.Task = None + + self._menu_layout_empty = [] + self._menu_layout_modify = [] + + omni.kit.menu.utils.add_hook(self._menu_hook) + + self._app_mode_sub = self._settings.subscribe_to_node_change_events( + SETTINGS_APPLICATION_MODE_PATH, self._on_application_mode_changed + ) + self._menu_hook() + + def destroy(self) -> None: + omni.kit.menu.utils.remove_hook(self._menu_hook) + + if self._changing_layout_task and not self._changing_layout_task.done(): + self._changing_layout_task.cancel() + self._changing_layout_task = None + + if self._app_mode_sub: + self._settings.unsubscribe_to_change_events(self._app_mode_sub) + self._app_mode_sub = None + + self._app_ready_sub = None + + if self._current_layout: + omni.kit.menu.utils.remove_layout(self._current_layout) + self._current_layout = None + + def _menu_hook(self, *args, **kwargs) -> None: + if self._settings.get_as_bool("/app/view/debug/menus"): + return + + LAYOUT_EMPTY_ALLOWED_MENUS = set(["Developer",]) + LAYOUT_MODIFY_ALLOWED_MENUS = {"File", "Edit", "Window", "Tools", "Help", "Developer",} + + # make NEW list object instead of clear original + # the original list may be held by self._current_layout and omni.kit.menu.utils + self._menu_layout_empty = [] + self._menu_layout_modify = [] + + menu_instance = omni.kit.menu.utils.get_instance() + if not menu_instance: # pragma: no cover + return + + # Build new layouts using allowlists + for key in menu_instance._menu_defs: + if key.lower().endswith("widget"): + continue + + if key not in LAYOUT_EMPTY_ALLOWED_MENUS: + self._menu_layout_empty.append(MenuLayout.Menu(key, remove=True)) + + if key not in LAYOUT_MODIFY_ALLOWED_MENUS: + self._menu_layout_modify.append(MenuLayout.Menu(key, remove=True)) + + # Remove 'Viewport 2' entry + if key == "Window": + for menu_item_1 in menu_instance._menu_defs[key]: + for menu_item_2 in menu_item_1: + if menu_item_2.name == "Viewport": + menu_item_2.sub_menu = [mi for mi in menu_item_2.sub_menu if mi.name != "Viewport 2"] + + if self._changing_layout_task is None or self._changing_layout_task.done(): + self._changing_layout_task = asyncio.ensure_future(self._delayed_change_layout()) + + def _on_application_mode_changed(self, *args) -> None: + if self._changing_layout_task is None or self._changing_layout_task.done(): + self._changing_layout_task = asyncio.ensure_future(self._delayed_change_layout()) + + async def _delayed_change_layout(self): + mode = self._settings.get_as_string(SETTINGS_APPLICATION_MODE_PATH) + if mode in ["present", "review"]: + pending_layout = self._menu_layout_empty + else: + pending_layout = self._menu_layout_modify + + # Don't change layout inside of menu callback _on_application_mode_changed + # omni.ui throws error + if self._current_layout: + # Here only check number of layout menu items and name of every of layout menu item + same_layout = len(self._current_layout) == len(pending_layout) + if same_layout: + for index, item in enumerate(self._current_layout): + if item.name != pending_layout[index].name: + same_layout = False + if same_layout: + return + + omni.kit.menu.utils.remove_layout(self._current_layout) + self._current_layout = None + + omni.kit.menu.utils.add_layout(pending_layout) # type: ignore + self._current_layout = pending_layout.copy() + + self._changing_layout_task = None diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/menubar_helper.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/menubar_helper.py new file mode 100644 index 0000000..67cbd08 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/menubar_helper.py @@ -0,0 +1,88 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +from pathlib import Path + +import carb +import carb.settings +import carb.tokens +import omni.ui as ui +from omni.ui import color as cl + +ICON_PATH = carb.tokens.get_tokens_interface().resolve("${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/data/icons") + +VIEW_MENUBAR_STYLE = { + "MenuBar.Window": {"background_color": 0xA0000000}, + "MenuBar.Item.Background": { "background_color": 0, }, + "Menu.Item.Background": { "background_color": 0, } +} +VIEWPORT_CAMERA_STYLE = { + "Menu.Item.Icon::Expand": {"image_url": f"{ICON_PATH}/caret_s2_right_dark.svg", "color": cl.viewport_menubar_light}, + "Menu.Item.Icon::Expand:checked": {"image_url": f"{ICON_PATH}/caret_s2_left_dark.svg"}, +} + +class MenubarHelper: + def __init__(self) -> None: + self._settings = carb.settings.get_settings() + + # Set menubar background and style + try: + from omni.kit.viewport.menubar.core import DEFAULT_MENUBAR_NAME + from omni.kit.viewport.menubar.core import get_instance as get_menubar_instance + instance = get_menubar_instance() + if not instance: # pragma: no cover + return + + default_menubar = instance.get_menubar(DEFAULT_MENUBAR_NAME) + default_menubar.background_visible = True + default_menubar.style.update(VIEW_MENUBAR_STYLE) + default_menubar.show_separator = True + except ImportError: # pragma: no cover + carb.log_warn("Viewport menubar not found!") + + try: + import omni.kit.viewport.menubar.camera + self._camera_menubar_instance = omni.kit.viewport.menubar.camera.get_instance() + if not self._camera_menubar_instance: # pragma: no cover + return + + # Change expand button icon + self._camera_menubar_instance._camera_menu._style.update(VIEWPORT_CAMERA_STYLE) + # New menu item for camera speed + self._camera_menubar_instance.register_menu_item(self._create_camera_speed, order=100) + self._camera_menubar_instance.deregister_menu_item(self._camera_menubar_instance._camera_menu._build_create_camera) + except ImportError: + carb.log_warn("Viewport menubar not found!") + self._camera_menubar_instance = None + except AttributeError: # pragma: no cover + self._camera_menubar_instance = None + + # Hide default render and settings menubar + self._settings.set("/persistent/exts/omni.kit.viewport.menubar.render/visible", False) + self._settings.set("/persistent/exts/omni.kit.viewport.menubar.settings/visible", False) + + def destroy(self) -> None: + if self._camera_menubar_instance: + self._camera_menubar_instance.deregister_menu_item(self._create_camera_speed) + + def _create_camera_speed(self, _vc, _r: ui.Menu) -> None: + from omni.kit.viewport.menubar.core import SettingModel, SliderMenuDelegate + ui.MenuItem( + "Speed", + hide_on_click=False, + delegate=SliderMenuDelegate( + model=SettingModel("/persistent/app/viewport/camMoveVelocity", draggable=True), + min=self._settings.get_as_float("/persistent/app/viewport/camVelocityMin") or 0.01, + max=self._settings.get_as_float("/persistent/app/viewport/camVelocityMax"), + tooltip="Set the Fly Mode navigation speed", + width=0, + reserve_status=True, + ), + ) diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/navigation.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/navigation.py new file mode 100644 index 0000000..7f1b8c5 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/navigation.py @@ -0,0 +1,150 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import asyncio + +import carb +import carb.settings +import carb.tokens +import carb.dictionary +import omni.kit.app +import omni.ext +import omni.ui as ui +import omni.kit.actions.core +from omni.kit.viewport.navigation.core import ( + NAVIGATION_TOOL_OPERATION_ACTIVE, + ViewportNavigationTooltip, + get_navigation_bar, +) + +__all__ = ["Navigation"] + + +CURRENT_TOOL_PATH = "/app/viewport/currentTool" +SETTING_NAVIGATION_ROOT = "/exts/omni.kit.tool.navigation/" +NAVIGATION_BAR_VISIBLE_PATH = "/exts/omni.kit.viewport.navigation.core/isVisible" +APPLICATION_MODE_PATH = "/app/application_mode" +WALK_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.walk/visible" +CAPTURE_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.capture/visible" +MARKUP_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.markup/visible" +MEASURE_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.measure/visible" +SECTION_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.section/visible" +TELEPORT_SEPARATOR_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.teleport/spvisible" +WAYPOINT_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.waypoint/visible" +VIEWPORT_CONTEXT_MENU_PATH = "/exts/omni.kit.window.viewport/showContextMenu" +MENUBAR_APP_MODES_PATH = "/exts/omni.kit.usd_explorer.main.menubar/include_modify_mode" +WELCOME_WINDOW_VISIBLE_PATH = "/exts/omni.kit.usd_explorer.window.welcome/visible" +ACTIVE_OPERATION_PATH = "/exts/omni.kit.viewport.navigation.core/activeOperation" + +class Navigation: + NAVIGATION_BAR_NAME = None + + # ext_id is current extension id. It can be used with extension manager to query additional information, like where + # this extension is located on filesystem. + def on_startup(self, ext_id: str) -> None: + sections = ext_id.split("-") + self._ext_name = sections[0] + + self._settings = carb.settings.get_settings() + self._navigation_bar = get_navigation_bar() + + self._tool_bar_button = None + + self._dict = carb.dictionary.get_dictionary() + self._panel_visible = True + self._navigation_bar.show() + self._settings.set(CURRENT_TOOL_PATH, "navigation") + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "teleport") + + self._viewport_welcome_window_visibility_changed_sub = self._settings.subscribe_to_node_change_events( + WELCOME_WINDOW_VISIBLE_PATH, self._on_welcome_window_visibility_change + ) + + self._settings.set(WALK_VISIBLE_PATH, False) + self._settings.set(MARKUP_VISIBLE_PATH, True) + self._settings.set(WAYPOINT_VISIBLE_PATH, True) + self._settings.set(TELEPORT_SEPARATOR_VISIBLE_PATH, True) + self._settings.set(CAPTURE_VISIBLE_PATH, True) + self._settings.set(MEASURE_VISIBLE_PATH, True) + self._settings.set(SECTION_VISIBLE_PATH, True) + + self._application_mode_changed_sub = self._settings.subscribe_to_node_change_events( + APPLICATION_MODE_PATH, self._on_application_mode_changed + ) + + self._show_tooltips = False + self._nav_bar_visibility_sub = self._settings.subscribe_to_node_change_events( + NAVIGATION_BAR_VISIBLE_PATH, self._delay_reset_tooltip) + + _prev_navbar_vis = None + _prev_tool = None + _prev_operation = None + def _on_welcome_window_visibility_change(self, item: carb.dictionary.Item, *_) -> None: + if not isinstance(self._dict, (carb.dictionary.IDictionary, dict)): + return + + welcome_window_vis = self._dict.get(item) + + # preserve the state of the navbar upon closing the Welcome window if the app is in Layout mode + if self._settings.get_as_string(APPLICATION_MODE_PATH).lower() == "layout": + # preserve the state of the navbar visibility + if welcome_window_vis: + self._prev_navbar_vis = self._settings.get_as_bool(NAVIGATION_BAR_VISIBLE_PATH) + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, not(welcome_window_vis)) + self._prev_tool = self._settings.get(CURRENT_TOOL_PATH) + self._prev_operation = self._settings.get(ACTIVE_OPERATION_PATH) + else: # restore the state of the navbar visibility + if self._prev_navbar_vis is not None: + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, self._prev_navbar_vis) + self._prev_navbar_vis = None + if self._prev_tool is not None: + self._settings.set(CURRENT_TOOL_PATH, self._prev_tool) + if self._prev_operation is not None: + self._settings.set(ACTIVE_OPERATION_PATH, self._prev_operation) + return + else: + if welcome_window_vis: + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "none") + else: + self._settings.set(NAVIGATION_TOOL_OPERATION_ACTIVE, "teleport") + + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, not(welcome_window_vis)) + + def _on_application_mode_changed(self, item: carb.dictionary.Item, *_) -> None: + if not isinstance(self._dict, (carb.dictionary.IDictionary, dict)): + return + + current_mode = self._dict.get(item) + self._test = asyncio.ensure_future(self._switch_by_mode(current_mode)) + + async def _switch_by_mode(self, current_mode: str) -> None: + await omni.kit.app.get_app().next_update_async() + state = True if current_mode == "review" else False + self._settings.set(NAVIGATION_BAR_VISIBLE_PATH, state) + self._settings.set(VIEWPORT_CONTEXT_MENU_PATH, not(state)) # toggle RMB viewport context menu + self._delay_reset_tooltip(None) + + def _delay_reset_tooltip(self, *_) -> None: + async def delay_set_tooltip() -> None: + for _i in range(4): + await omni.kit.app.get_app().next_update_async() # type: ignore + ViewportNavigationTooltip.set_visible(self._show_tooltips) + asyncio.ensure_future(delay_set_tooltip()) + + def _on_showtips_click(self, *_) -> None: + self._show_tooltips = not self._show_tooltips + ViewportNavigationTooltip.set_visible(self._show_tooltips) + + def on_shutdown(self) -> None: + self._navigation_bar = None + self._viewport_welcome_window_visibility_changed_sub = None + self._settings.unsubscribe_to_change_events(self._application_mode_changed_sub) # type:ignore + self._application_mode_changed_sub = None + self._dict = None diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/setup.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/setup.py new file mode 100644 index 0000000..71b8ad6 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/setup.py @@ -0,0 +1,515 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import asyncio +import weakref +from functools import partial +import os +from pathlib import Path +from typing import cast, Optional + +import omni.client +import omni.ext +import omni.kit.menu.utils +import omni.kit.app +import omni.kit.context_menu +import omni.kit.ui +import omni.usd + +from omni.kit.quicklayout import QuickLayout +from omni.kit.menu.utils import MenuLayout +from omni.kit.window.title import get_main_window_title +from omni.kit.usd.layers import LayerUtils + +from omni.kit.viewport.menubar.core import get_instance as get_mb_inst, DEFAULT_MENUBAR_NAME +from omni.kit.viewport.menubar.core.viewport_menu_model import ViewportMenuModel +from omni.kit.viewport.utility import get_active_viewport, get_active_viewport_window, disable_selection + +import carb +import carb.settings +import carb.dictionary +import carb.events +import carb.tokens +import carb.input + +import omni.kit.imgui as _imgui +from pxr import Sdf, Usd + +from .navigation import Navigation +from .menu_helper import MenuHelper +from .menubar_helper import MenubarHelper +from .stage_template import SunnySkyStage +from .ui_state_manager import UIStateManager + +SETTINGS_PATH_FOCUSED = "/app/workspace/currentFocused" +APPLICATION_MODE_PATH = "/app/application_mode" +MODAL_TOOL_ACTIVE_PATH = "/app/tools/modal_tool_active" +CURRENT_TOOL_PATH = "/app/viewport/currentTool" +ROOT_WINDOW_NAME = "DockSpace" +ICON_PATH = carb.tokens.get_tokens_interface().resolve("${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/data/icons") +SETTINGS_STARTUP_EXPAND_VIEWPORT = "/app/startup/expandViewport" +VIEWPORT_CONTEXT_MENU_PATH = "/exts/omni.kit.window.viewport/showContextMenu" +TELEPORT_VISIBLE_PATH = "/persistent/exts/omni.kit.viewport.navigation.teleport/visible" + + +async def _load_layout_startup(layout_file: str, keep_windows_open: bool=False) -> None: + try: + # few frames delay to avoid the conflict with the layout of omni.kit.mainwindow + for i in range(3): + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + + # WOR: some layout don't happy collectly the first time + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + except Exception as exc: # pragma: no cover (Can't be tested because a non-existing layout file prints an log_error in QuickLayout and does not throw an exception) + carb.log_warn(f"Failed to load layout {layout_file}: {exc}") + + +async def _load_layout(layout_file: str, keep_windows_open:bool=False) -> None: + try: + # few frames delay to avoid the conflict with the layout of omni.kit.mainwindow + for i in range(3): + await omni.kit.app.get_app().next_update_async() # type: ignore + QuickLayout.load_file(layout_file, keep_windows_open) + + except Exception as exc: # pragma: no cover (Can't be tested because a non-existing layout file prints an log_error in QuickLayout and does not throw an exception) + carb.log_warn(f"Failed to load layout {layout_file}: {exc}") + +async def _clear_startup_scene_edits() -> None: + try: + for i in range(50): # This could possibly be a smaller value. I want to ensure this happens after RTX startup + await omni.kit.app.get_app().next_update_async() # type: ignore + omni.usd.get_context().set_pending_edit(False) + except Exception as exc: # pragma: no cover + carb.log_warn(f"Failed to clear stage edits on startup: {exc}") + + +# This extension is mostly loading the Layout updating menu +class SetupExtension(omni.ext.IExt): + # ext_id is current extension id. It can be used with extension manager to query additional information, like where + # this extension is located on filesystem. + + @property + def _app(self): + return omni.kit.app.get_app() + + @property + def _settings(self): + return carb.settings.get_settings() + + def on_startup(self, ext_id: str) -> None: + self._ext_id = ext_id + self._menubar_helper = MenubarHelper() + self._menu_helper = MenuHelper() + + # using imgui directly to adjust some color and Variable + imgui = _imgui.acquire_imgui() + + # match Create overides + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrab, carb.Float4(0.4, 0.4, 0.4, 1)) + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrabHovered, carb.Float4(0.6, 0.6, 0.6, 1)) + imgui.push_style_color(_imgui.StyleColor.ScrollbarGrabActive, carb.Float4(0.8, 0.8, 0.8, 1)) + + # DockSplitterSize is the variable that drive the size of the Dock Split connection + imgui.push_style_var_float(_imgui.StyleVar.DockSplitterSize, 2) + + # setup the Layout for your app + self._layouts_path = carb.tokens.get_tokens_interface().resolve("${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/layouts") + layout_file = Path(self._layouts_path).joinpath(f"{self._settings.get('/app/layout/name')}.json") + self.__setup_window_task = asyncio.ensure_future(_load_layout_startup(f"{layout_file}", True)) + + self.review_layout_path = str(Path(self._layouts_path) / "comment_layout.json") + self.default_layout_path = str(Path(self._layouts_path) / "default.json") + self.layout_user_path = str(Path(self._layouts_path) / "layout_user.json") + + # remove the user defined layout so that we always load the default layout when startup + if os.path.exists(self.layout_user_path): + os.remove(self.layout_user_path) + + # setup the menu and their layout + self._current_layout_priority = 0 + self._layout_menu_items = [] + self._layout_file_menu() + self._menu_layout = [] + if self._settings.get_as_bool('/app/view/debug/menus'): + self._layout_menu() + + + # setup the Application Title + window_title = get_main_window_title() + if window_title: + window_title.set_app_version("{{ version }}") + + # self._context_menu() + self._register_my_menu() + self._navigation = Navigation() + self._navigation.on_startup(ext_id) + + self._application_mode_changed_sub = self._settings.subscribe_to_node_change_events( + APPLICATION_MODE_PATH, weakref.proxy(self)._on_application_mode_changed + ) + + self._set_viewport_menubar_visibility(False) + self._test = asyncio.ensure_future(_clear_startup_scene_edits()) + + self._usd_context = omni.usd.get_context() + self._stage_event_sub = self._usd_context.get_stage_event_stream().create_subscription_to_pop( + self._on_stage_open_event, name="TeleportDefaultOn" + ) + if self._settings.get_as_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT): + self._set_viewport_fill_on() + + self._stage_templates = [SunnySkyStage()] + + disable_selection(get_active_viewport()) + + self._ui_state_manager = UIStateManager() + self._setup_ui_state_changes() + omni.kit.menu.utils.add_layout([ + MenuLayout.Menu("Window", [ + MenuLayout.Item("Viewport", source="Window/Viewport/Viewport 1"), + MenuLayout.Item("Playlist", remove=True), + MenuLayout.Item("Layout", remove=True), + MenuLayout.Sort(exclude_items=["Extensions"], sort_submenus=True), + ]) + ]) + def show_documentation(*x): + import webbrowser + webbrowser.open("http://docs.omniverse.nvidia.com/explorer") + self._help_menu_items = [ + omni.kit.menu.utils.MenuItemDescription(name="Documentation", + onclick_fn=show_documentation, + appear_after=[omni.kit.menu.utils.MenuItemOrder.FIRST]) + ] + omni.kit.menu.utils.add_menu_items(self._help_menu_items, name="Help") + + def _on_stage_open_event(self, event: carb.events.IEvent) -> None: + if event.type == int(omni.usd.StageEventType.OPENED): + app_mode = self._settings.get_as_string(APPLICATION_MODE_PATH).lower() + + # exit all tools + self._settings.set(CURRENT_TOOL_PATH, "none") + + if app_mode == "review": + asyncio.ensure_future(self._stage_post_open_teleport_toggle()) + + # toggle RMB viewport context menu based on application mode + value = False if app_mode == "review" else True + self._settings.set(VIEWPORT_CONTEXT_MENU_PATH, value) + + # teleport is activated after loading a stage and app is in Review mode + async def _stage_post_open_teleport_toggle(self) -> None: + await self._app.next_update_async() + if hasattr(self, "_usd_context") and self._usd_context is not None and not self._usd_context.is_new_stage(): + self._settings.set("/exts/omni.kit.viewport.navigation.core/activeOperation", "teleport") + + def _set_viewport_fill_on(self) -> None: + vp_window = get_active_viewport_window() + vp_widget = vp_window.viewport_widget if vp_window else None + if vp_widget: + vp_widget.expand_viewport = True + + def _set_viewport_menubar_visibility(self, show: bool) -> None: + mb_inst = get_mb_inst() + if mb_inst and hasattr(mb_inst, "get_menubar"): + main_menubar = mb_inst.get_menubar(DEFAULT_MENUBAR_NAME) + if main_menubar.visible_model.as_bool != show: + main_menubar.visible_model.set_value(show) + ViewportMenuModel()._item_changed(None) # type: ignore + + def _on_application_mode_changed(self, item: carb.dictionary.Item, _typ: carb.settings.ChangeEventType) -> None: + if self._settings.get_as_string(APPLICATION_MODE_PATH).lower() == "review": + omni.usd.get_context().get_selection().clear_selected_prim_paths() + disable_selection(get_active_viewport()) + + current_mode: str = cast(str, item.get_dict()) + asyncio.ensure_future(self.defer_load_layout(current_mode)) + + async def defer_load_layout(self, current_mode: str) -> None: + keep_windows = True + # Focus Mode Toolbar + self._settings.set_bool(SETTINGS_PATH_FOCUSED, True) # current_mode not in ("review", "layout")) + + # Turn off all tools and modal + self._settings.set_string(CURRENT_TOOL_PATH, "none") + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + if current_mode == "review": + # save the current layout for restoring later if switch back + QuickLayout.save_file(self.layout_user_path) + # we don't want to keep any windows except the ones which are visible in self.review_layout_path + await _load_layout(self.review_layout_path, False) + else: # current_mode == "layout": + # check if there is any user modified layout, if yes use that one + layout_filename = self.layout_user_path if os.path.exists(self.layout_user_path) else self.default_layout_path + await _load_layout(layout_filename, keep_windows) + + self._set_viewport_menubar_visibility(current_mode == "layout") + + def _setup_ui_state_changes(self) -> None: + windows_to_hide_on_modal = ["Measure", "Section", "Waypoints"] + self._ui_state_manager.add_hide_on_modal(window_names=windows_to_hide_on_modal, restore=True) + + window_titles = ["Markups", "Waypoints"] + for window in window_titles: + setting_name = f'/exts/omni.usd_explorer.setup/{window}/visible' + self._ui_state_manager.add_window_visibility_setting(window, setting_name) + + # toggle icon visibilites based on window visibility + + self._ui_state_manager.add_settings_copy_dependency( + source_path="/exts/omni.usd_explorer.setup/Markups/visible", + target_path="/exts/omni.kit.markup.core/show_icons", + ) + + self._ui_state_manager.add_settings_copy_dependency( + source_path="/exts/omni.usd_explorer.setup/Waypoints/visible", + target_path="/exts/omni.kit.waypoint.core/show_icons", + ) + + def _custom_quicklayout_menu(self) -> None: + # we setup a simple ways to Load custom layout from the exts + def add_layout_menu_entry(name, parameter, key): + import inspect + + editor_menu = omni.kit.ui.get_editor_menu() + + layouts_path = carb.tokens.get_tokens_interface().resolve("${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/layouts") + + menu_path = f"Layout/{name}" + menu = editor_menu.add_item(menu_path, None, False, self._current_layout_priority) # type: ignore + self._current_layout_priority = self._current_layout_priority + 1 + + if inspect.isfunction(parameter): # pragma: no cover (Never used, see commented out section below regarding quick save/load) + menu_action = omni.kit.menu.utils.add_action_to_menu( + menu_path, + lambda *_: asyncio.ensure_future(parameter()), + name, + (carb.input.KEYBOARD_MODIFIER_FLAG_CONTROL, key), + ) + else: + menu_action = omni.kit.menu.utils.add_action_to_menu( + menu_path, + lambda *_: asyncio.ensure_future(_load_layout(f"{layouts_path}/{parameter}.json")), + name, + (carb.input.KEYBOARD_MODIFIER_FLAG_CONTROL, key), + ) + + self._layout_menu_items.append((menu, menu_action)) + + add_layout_menu_entry("Reset Layout", "default", carb.input.KeyboardInput.KEY_1) + add_layout_menu_entry("Viewport Only", "viewport_only", carb.input.KeyboardInput.KEY_2) + add_layout_menu_entry("Markup Editor", "markup_editor", carb.input.KeyboardInput.KEY_3) + # add_layout_menu_entry("Waypoint Viewer", "waypoint_viewer", carb.input.KeyboardInput.KEY_4) + + # # you can enable Quick Save and Quick Load here + # if False: + # # create Quick Load & Quick Save + # from omni.kit.quicklayout import QuickLayout + + # async def quick_save(): + # QuickLayout.quick_save(None, None) + + # async def quick_load(): + # QuickLayout.quick_load(None, None) + + # add_layout_menu_entry("Quick Save", quick_save, carb.input.KeyboardInput.KEY_7) + # add_layout_menu_entry("Quick Load", quick_load, carb.input.KeyboardInput.KEY_8) + + def _register_my_menu(self) -> None: + context_menu: Optional[omni.kit.context_menu.ContextMenuExtension] = omni.kit.context_menu.get_instance() + if not context_menu: # pragma: no cover + return + + def _layout_file_menu(self) -> None: + self._menu_file_layout = [ + MenuLayout.Menu( + "File", + [ + MenuLayout.Item("New"), + MenuLayout.Item("New From Stage Template"), + MenuLayout.Item("Open"), + MenuLayout.Item("Open Recent"), + MenuLayout.Seperator(), + MenuLayout.Item("Re-open with New Edit Layer"), + MenuLayout.Seperator(), + MenuLayout.Item("Share"), + MenuLayout.Seperator(), + MenuLayout.Item("Save"), + MenuLayout.Item("Save As..."), + MenuLayout.Item("Save With Options"), + MenuLayout.Item("Save Selected"), + MenuLayout.Item("Save Flattened As...", remove=True), + MenuLayout.Seperator(), + MenuLayout.Item("Collect As..."), + MenuLayout.Item("Export"), + MenuLayout.Seperator(), + MenuLayout.Item("Import"), + MenuLayout.Item("Add Reference"), + MenuLayout.Item("Add Payload"), + MenuLayout.Seperator(), + MenuLayout.Item("Exit"), + ] + ) + ] + omni.kit.menu.utils.add_layout(self._menu_file_layout) + + + def _layout_menu(self) -> None: + self._menu_layout = [ + MenuLayout.Menu( + "Window", + [ + MenuLayout.SubMenu( + "Animation", + [ + MenuLayout.Item("Timeline"), + MenuLayout.Item("Sequencer"), + MenuLayout.Item("Curve Editor"), + MenuLayout.Item("Retargeting"), + MenuLayout.Item("Animation Graph"), + MenuLayout.Item("Animation Graph Samples"), + ], + ), + MenuLayout.SubMenu( + "Layout", + [ + MenuLayout.Item("Quick Save", remove=True), + MenuLayout.Item("Quick Load", remove=True), + ], + ), + MenuLayout.SubMenu( + "Browsers", + [ + MenuLayout.Item("Content", source="Window/Content"), + MenuLayout.Item("Materials"), + MenuLayout.Item("Skies"), + ], + ), + MenuLayout.SubMenu( + "Rendering", + [ + MenuLayout.Item("Render Settings"), + MenuLayout.Item("Movie Capture"), + MenuLayout.Item("MDL Material Graph"), + MenuLayout.Item("Tablet XR"), + ], + ), + MenuLayout.SubMenu( + "Simulation", + [ + MenuLayout.Group( + "Flow", + [ + MenuLayout.Item("Presets", source="Window/Flow/Presets"), + MenuLayout.Item("Monitor", source="Window/Flow/Monitor"), + ], + ), + MenuLayout.Group( + "Blast", + [ + MenuLayout.Item("Settings", source="Window/Blast/Settings"), + MenuLayout.SubMenu( + "Documentation", + [ + MenuLayout.Item("Kit UI", source="Window/Blast/Documentation/Kit UI"), + MenuLayout.Item( + "Programming", source="Window/Blast/Documentation/Programming" + ), + MenuLayout.Item( + "USD Schemas", source="Window/Blast/Documentation/USD Schemas" + ), + ], + ), + ], + ), + MenuLayout.Item("Debug"), + # MenuLayout.Item("Performance"), + MenuLayout.Group( + "Physics", + [ + MenuLayout.Item("Demo Scenes"), + MenuLayout.Item("Settings", source="Window/Physics/Settings"), + MenuLayout.Item("Debug"), + MenuLayout.Item("Test Runner"), + MenuLayout.Item("Character Controller"), + MenuLayout.Item("OmniPVD"), + MenuLayout.Item("Physics Helpers"), + ], + ), + ], + ), + MenuLayout.SubMenu( + "Utilities", + [ + MenuLayout.Item("Console"), + MenuLayout.Item("Profiler"), + MenuLayout.Item("USD Paths"), + MenuLayout.Item("Statistics"), + MenuLayout.Item("Activity Monitor"), + ], + ), + # Remove 'Viewport 2' entry + MenuLayout.SubMenu( + "Viewport", + [ + MenuLayout.Item("Viewport 2", remove=True), + ], + ), + MenuLayout.Sort(exclude_items=["Extensions"]), + MenuLayout.Item("New Viewport Window", remove=True), + ], + ), + # that is you enable the Quick Layout Menu + MenuLayout.Menu( + "Layout", + [ + MenuLayout.Item("Default", source="Reset Layout"), + MenuLayout.Item("Viewport Only"), + MenuLayout.Item("Markup Editor"), + MenuLayout.Item("Waypoint Viewer"), + MenuLayout.Seperator(), + MenuLayout.Item("UI Toggle Visibility", source="Window/UI Toggle Visibility"), + MenuLayout.Item("Fullscreen Mode", source="Window/Fullscreen Mode"), + MenuLayout.Seperator(), + MenuLayout.Item("Save Layout", source="Window/Layout/Save Layout..."), + MenuLayout.Item("Load Layout", source="Window/Layout/Load Layout..."), + # MenuLayout.Seperator(), + # MenuLayout.Item("Quick Save", source="Window/Layout/Quick Save"), + # MenuLayout.Item("Quick Load", source="Window/Layout/Quick Load"), + ], + ), + MenuLayout.Menu("Tools", [MenuLayout.SubMenu("Animation", remove=True)]), + ] + omni.kit.menu.utils.add_layout(self._menu_layout) # type: ignore + + # if you want to support the Quick Layout Menu + self._custom_quicklayout_menu() + + def on_shutdown(self): + if self._menu_layout: + omni.kit.menu.utils.remove_layout(self._menu_layout) # type: ignore + self._menu_layout.clear() + self._layout_menu_items.clear() + self._navigation.on_shutdown() + del self._navigation + self._settings.unsubscribe_to_change_events(self._application_mode_changed_sub) + del self._application_mode_changed_sub + + self._stage_event_sub = None + + # From View setup + self._menubar_helper.destroy() + if self._menu_helper and hasattr(self._menu_helper, "destroy"): + self._menu_helper.destroy() + self._menu_helper = None + + self._stage_templates = [] diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/stage_template.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/stage_template.py new file mode 100644 index 0000000..17e6cd2 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/stage_template.py @@ -0,0 +1,101 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import carb +import omni.ext +import omni.kit.commands +from omni.kit.stage_templates import register_template, unregister_template +from pxr import Gf, Sdf, Usd, UsdGeom, UsdLux + + +class SunnySkyStage: + def __init__(self): + register_template("SunnySky", self.new_stage) + + def __del__(self): + unregister_template("SunnySky") + + def new_stage(self, rootname, usd_context_name): + # Create basic DistantLight + usd_context = omni.usd.get_context(usd_context_name) + stage = usd_context.get_stage() + # get up axis + up_axis = UsdGeom.GetStageUpAxis(stage) + with Usd.EditContext(stage, stage.GetRootLayer()): + # create Environment + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment", + prim_type="Xform", + select_new_prim=False, + create_default_xform=True, + context_name=usd_context_name + ) + + texture_path = carb.tokens.get_tokens_interface().resolve("${% raw %}{{% endraw %}{{ extension_name }}{% raw %}}{% endraw %}/data/light_rigs/HDR/partly_cloudy.hdr") + + # create Sky + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment/Sky", + prim_type="DomeLight", + select_new_prim=False, + attributes={ + UsdLux.Tokens.inputsIntensity: 1000, + UsdLux.Tokens.inputsTextureFile: texture_path, + UsdLux.Tokens.inputsTextureFormat: UsdLux.Tokens.latlong, + UsdLux.Tokens.inputsSpecular: 1, + UsdGeom.Tokens.visibility: "inherited", + } if hasattr(UsdLux.Tokens, 'inputsIntensity') else \ + { + UsdLux.Tokens.intensity: 1000, + UsdLux.Tokens.textureFile: texture_path, + UsdLux.Tokens.textureFormat: UsdLux.Tokens.latlong, + UsdGeom.Tokens.visibility: "inherited", + }, + create_default_xform=True, + context_name=usd_context_name + ) + prim = stage.GetPrimAtPath("/Environment/Sky") + prim.CreateAttribute("xformOp:scale", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(1, 1, 1)) + prim.CreateAttribute("xformOp:translate", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 0)) + if up_axis == "Y": + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(270, 0, 0)) + else: + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 90)) + prim.CreateAttribute("xformOpOrder", Sdf.ValueTypeNames.String, False).Set(["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]) + + # create DistantLight + omni.kit.commands.execute( + "CreatePrim", + prim_path="/Environment/DistantLight", + prim_type="DistantLight", + select_new_prim=False, + attributes={ + UsdLux.Tokens.inputsAngle: 4.3, + UsdLux.Tokens.inputsIntensity: 3000, + UsdGeom.Tokens.visibility: "inherited", + } if hasattr(UsdLux.Tokens, 'inputsIntensity') else \ + { + UsdLux.Tokens.angle: 4.3, + UsdLux.Tokens.intensity: 3000, + UsdGeom.Tokens.visibility: "inherited", + }, + create_default_xform=True, + context_name=usd_context_name + ) + prim = stage.GetPrimAtPath("/Environment/DistantLight") + prim.CreateAttribute("xformOp:scale", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(1, 1, 1)) + prim.CreateAttribute("xformOp:translate", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(0, 0, 0)) + if up_axis == "Y": + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(310.6366313590111, -125.93251524567805, 0.8821359067542289)) + else: + prim.CreateAttribute("xformOp:rotateXYZ", Sdf.ValueTypeNames.Double3, False).Set(Gf.Vec3d(41.35092544555664, 0.517652153968811, -35.92928695678711)) + prim.CreateAttribute("xformOpOrder", Sdf.ValueTypeNames.String, False).Set(["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]) diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/__init__.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/__init__.py new file mode 100644 index 0000000..b03b33d --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/__init__.py @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +# run startup tests first +from .test_app_startup import * +# run all other tests after +from .test_extensions import * +from .test import * +from .test_state_manager import * diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test.py new file mode 100644 index 0000000..39094c0 --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test.py @@ -0,0 +1,203 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import omni.kit.app + +from omni.ui.tests.test_base import OmniUiTest +from omni.kit import ui_test + + +ext_id = '{{ extension_name }}' + + +class TestSetupToolExtension(OmniUiTest): + async def test_extension(self): + manager = omni.kit.app.get_app().get_extension_manager() + self.assertTrue(ext_id) + self.assertTrue(manager.is_extension_enabled(ext_id)) + + app = omni.kit.app.get_app() + for _ in range(500): + await app.next_update_async() + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + + self.assertTrue(not manager.is_extension_enabled(ext_id)) + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menubar_helper_camera_dependency(self): + manager = omni.kit.app.get_app().get_extension_manager() + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled('omni.kit.viewport.menubar.camera', True) + await ui_test.human_delay() + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menu_helper(self): + from ..menu_helper import MenuHelper + + menu_helper = MenuHelper() + menu_helper.destroy() + + async def test_menubar_helper_menu(self): + from ..menubar_helper import MenubarHelper + + menubar_helper = MenubarHelper() + menubar_helper._create_camera_speed(None, None) + menubar_helper.destroy() + + async def test_menu_helper_debug_setting(self): + SETTINGS_VIEW_DEBUG_MENUS = '/app/view/debug/menus' + + import carb.settings + settings = carb.settings.get_settings() + + manager = omni.kit.app.get_app().get_extension_manager() + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + orig_value = settings.get(SETTINGS_VIEW_DEBUG_MENUS) + settings.set_bool(SETTINGS_VIEW_DEBUG_MENUS, True) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + settings.set_bool(SETTINGS_VIEW_DEBUG_MENUS, orig_value) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_menu_helper_application_mode_change(self): + from ..menu_helper import SETTINGS_APPLICATION_MODE_PATH + + import carb.settings + settings = carb.settings.get_settings() + + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'welcome') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'comment') + await ui_test.human_delay() + settings.set_string(SETTINGS_APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + + async def test_menu_helper_widget_menu(self): + import omni.kit.menu.utils + omni.kit.menu.utils.add_menu_items([], name='test widget') + + from ..menu_helper import MenuHelper + menu_helper = MenuHelper() + menu_helper.destroy() + + async def test_startup_expand_viewport(self): + from ..setup import SETTINGS_STARTUP_EXPAND_VIEWPORT + + import carb.settings + settings = carb.settings.get_settings() + + orig_value = settings.get(SETTINGS_STARTUP_EXPAND_VIEWPORT) + settings.set_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT, True) + + manager = omni.kit.app.get_app().get_extension_manager() + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + settings.set_bool(SETTINGS_STARTUP_EXPAND_VIEWPORT, orig_value) + + manager.set_extension_enabled(ext_id, False) + await ui_test.human_delay() + self.assertFalse(manager.is_extension_enabled(ext_id)) + + manager.set_extension_enabled(ext_id, True) + await ui_test.human_delay() + self.assertTrue(manager.is_extension_enabled(ext_id)) + + async def test_navigation_invalid_dict(self): + from ..navigation import Navigation + + navigation = Navigation() + navigation._show_tooltips = False + navigation._dict = 42 + navigation._on_application_mode_changed(None, None) + navigation._on_showtips_click() + + async def test_navigation_current_tool_mode_change(self): + from ..navigation import CURRENT_TOOL_PATH, APPLICATION_MODE_PATH + + import carb.settings + settings = carb.settings.get_settings() + + settings.set_string(APPLICATION_MODE_PATH, 'modify') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'welcome') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'markup') + await ui_test.human_delay() + + settings.set_string(CURRENT_TOOL_PATH, 'navigation') + await ui_test.human_delay() + + async def test_setup_clear_startup_scene_edits(self): + from ..setup import _clear_startup_scene_edits + await _clear_startup_scene_edits() + + import omni.usd + self.assertFalse(omni.usd.get_context().has_pending_edit()) + + async def test_stage_template(self): + import omni.kit.stage_templates + omni.kit.stage_templates.new_stage(template='SunnySky') diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_app_startup.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_app_startup.py new file mode 100644 index 0000000..bfa4b1b --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_app_startup.py @@ -0,0 +1,40 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import omni.kit.app +from omni.kit.test import AsyncTestCase + + +class TestAppStartup(AsyncTestCase): + async def test_l1_app_startup_time(self): + """Get startup time - send to nvdf""" + for _ in range(60): + await omni.kit.app.get_app().next_update_async() + + try: + from omni.kit.core.tests import app_startup_time + + app_startup_time(self.id()) + except: # noqa + pass + self.assertTrue(True) + + async def test_l1_app_startup_warning_count(self): + """Get the count of warnings during startup - send to nvdf""" + for _ in range(60): + await omni.kit.app.get_app().next_update_async() + + try: + from omni.kit.core.tests import app_startup_warning_count + + app_startup_warning_count(self.id()) + except: # noqa + pass + self.assertTrue(True) diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_extensions.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_extensions.py new file mode 100644 index 0000000..d8d826a --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_extensions.py @@ -0,0 +1,68 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import sys + +import carb.settings +import omni.kit.app +import omni.kit.actions.core +from omni.kit.core.tests import validate_extensions_load, validate_extensions_tests +from omni.kit.test import AsyncTestCase +from pxr import Usd, UsdGeom, Gf + + +class TestUSDExplorerExtensions(AsyncTestCase): + async def test_l1_extensions_load(self): + """Loop all enabled extensions to see if they loaded correctly""" + self.assertEqual(validate_extensions_load(), 0) + + async def test_regression_omfp_2304(self): + loaded_omni_kit_collaboration_selection_outline = False + manager = omni.kit.app.get_app().get_extension_manager() + for ext in manager.get_extensions(): + if ext["name"] == "omni.kit.collaboration.selection_outline": + loaded_omni_kit_collaboration_selection_outline = True + break + self.assertTrue(loaded_omni_kit_collaboration_selection_outline) + + async def _wait(self, frames: int = 10): + for _ in range(frames): + await omni.kit.app.get_app().next_update_async() + + async def wait_stage_loading(self): + while True: + _, files_loaded, total_files = omni.usd.get_context().get_stage_loading_status() + if files_loaded or total_files: + await self._wait() + continue + break + await self._wait(100) + + async def _get_1_1_1_rotation(self) -> Gf.Vec3d: + """Loads a stage and returns the transformation of the (1,1,1) vector by the directional light's rotation""" + await self._wait() + omni.kit.actions.core.execute_action("omni.kit.window.file", "new") + await self.wait_stage_loading() + context = omni.usd.get_context() + self.assertIsNotNone(context) + stage = context.get_stage() + self.assertIsNotNone(stage) + + prim_path = '/Environment/DistantLight' + prim = stage.GetPrimAtPath(prim_path) + self.assertTrue(prim.IsValid()) + + # Extract the prim's transformation matrix in world space + xformAPI = UsdGeom.XformCache() + transform_matrix_world = xformAPI.GetLocalToWorldTransform(prim) + + unit_point = Gf.Vec3d(1, 1, 1) + transformed_point = transform_matrix_world.Transform(unit_point) + return transformed_point diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_state_manager.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_state_manager.py new file mode 100644 index 0000000..563f7cf --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/tests/test_state_manager.py @@ -0,0 +1,130 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import carb.settings +import omni.kit.app +import omni.ui as ui +from omni.kit.test import AsyncTestCase +from ..ui_state_manager import UIStateManager, MODAL_TOOL_ACTIVE_PATH + + +class TestUIStateManager(AsyncTestCase): + async def setUp(self): + self._sm = UIStateManager() + self._settings = carb.settings.get_settings() + + async def tearDown(self): + self._sm = None + + async def test_destroy(self): + self._sm.add_hide_on_modal('dummy', False) + self._sm.add_settings_copy_dependency('a', 'b') + self._sm.add_settings_dependency('c', 'd', {1: 2}) + self._sm.add_window_visibility_setting('my_window', 'my_setting') + + self._sm.destroy() + + async def test_hide_on_modal(self): + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + self._sm.add_hide_on_modal('NO_RESTORE', False) + self._sm.add_hide_on_modal(['A_RESTORE', 'B_RESTORE'], True) + + window_no_restore = ui.Window('NO_RESTORE') + window_restore_1 = ui.Window('A_RESTORE') + window_restore_2 = ui.Window('B_RESTORE') + window_no_restore.visible = True + window_restore_1.visible = True + window_restore_2.visible = False + await self._wait() + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, True) + await self._wait() + self.assertFalse(window_no_restore.visible) + self.assertFalse(window_restore_1.visible) + self.assertFalse(window_restore_2.visible) + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + await self._wait() + self.assertFalse(window_no_restore.visible) + self.assertTrue(window_restore_1.visible) + self.assertFalse(window_restore_2.visible) + + self._sm.remove_hide_on_modal(window_restore_1.title) + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, True) + await self._wait() + self.assertTrue(window_restore_1.visible) + + self._settings.set_bool(MODAL_TOOL_ACTIVE_PATH, False) + + async def test_window_visibility_setting(self): + window_name = 'Dummy' + setting_path = '/apps/dummy' + setting_path2 = '/apps/dummy2' + window = ui.Window(window_name) + window.visible = True + await self._wait() + + self._sm.add_window_visibility_setting(window_name=window_name, setting_path=setting_path) + self._sm.add_window_visibility_setting(window_name=window_name, setting_path=setting_path2) + self.assertIsNotNone(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path2)) + + window.visible = False + self.assertFalse(self._settings.get(setting_path)) + self.assertFalse(self._settings.get(setting_path2)) + + window.visible = True + self.assertTrue(self._settings.get(setting_path)) + self.assertTrue(self._settings.get(setting_path2)) + + self._sm.remove_window_visibility_setting(window_name=window_name, setting_path=setting_path) + window.visible = False + self.assertTrue(self._settings.get(setting_path)) + self.assertFalse(self._settings.get(setting_path2)) + + self._sm.remove_all_window_visibility_settings(window_name=window_name) + window.visible = True + self.assertFalse(self._settings.get(setting_path2)) + + async def test_setting_dependency(self): + setting_path_copy_from = '/app/copy_from' + setting_path_copy_to = '/ext/copy_to' + + setting_path_map_from = '/ext/map_from' + setting_path_map_to = '/something/map_to' + + self._sm.add_settings_copy_dependency(setting_path_copy_from, setting_path_copy_to) + self._settings.set_string(setting_path_copy_from, 'hello_world') + self.assertEqual(self._settings.get(setting_path_copy_from), self._settings.get(setting_path_copy_to)) + # doesn't work the other way around + self._settings.set_string(setting_path_copy_to, 'no_copy_back') + self.assertEqual(self._settings.get(setting_path_copy_from), 'hello_world') + + self._sm.add_settings_dependency(setting_path_map_from, setting_path_map_to, {1: 2, 3: 4}) + self._settings.set_int(setting_path_map_from, 1) + self.assertEqual(self._settings.get(setting_path_map_to), 2) + self._settings.set_int(setting_path_map_from, 3) + self.assertEqual(self._settings.get(setting_path_map_to), 4) + # not in the map + self._settings.set_int(setting_path_map_from, 42) + self.assertEqual(self._settings.get(setting_path_map_to), 4) + + self.assertEqual(self._settings.get(setting_path_copy_from), 'hello_world') + self.assertEqual(self._settings.get(setting_path_copy_to), 'no_copy_back') + + self._sm.remove_settings_dependency(setting_path_copy_from, setting_path_copy_to) + self._settings.set_string(setting_path_copy_from, 'this_is_not_copied') + self.assertEqual(self._settings.get(setting_path_copy_to), 'no_copy_back') + + async def _wait(self, frames: int = 5): + for _ in range(frames): + await omni.kit.app.get_app().next_update_async() \ No newline at end of file diff --git a/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/ui_state_manager.py b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/ui_state_manager.py new file mode 100644 index 0000000..8b6404d --- /dev/null +++ b/templates/extensions/usd_explorer.setup/template/{{python_module_path}}/ui_state_manager.py @@ -0,0 +1,156 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: LicenseRef-NvidiaProprietary +# +# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual +# property and proprietary rights in and to this material, related +# documentation and any modifications thereto. Any use, reproduction, +# disclosure or distribution of this material and related documentation +# without an express license agreement from NVIDIA CORPORATION or +# its affiliates is strictly prohibited. + +import carb.dictionary +import carb.settings +import omni.ui as ui +from functools import partial +from typing import Any, Dict, List, Tuple, Union + + +MODAL_TOOL_ACTIVE_PATH = "/app/tools/modal_tool_active" + + +class UIStateManager: + def __init__(self) -> None: + self._settings = carb.settings.acquire_settings_interface() + + self._modal_changed_sub = self._settings.subscribe_to_node_change_events( + MODAL_TOOL_ACTIVE_PATH, + self._on_modal_setting_changed + ) + + self._hide_on_modal: List[Tuple[str,bool]] = [] + self._modal_restore_window_states: Dict[str,bool] = {} + self._settings_dependencies: Dict[Tuple(str,str), Dict[Any, Any]] = {} + self._settings_changed_subs = {} + self._window_settings = {} + + self._window_vis_changed_id = ui.Workspace.set_window_visibility_changed_callback(self._on_window_vis_changed) + + def destroy(self) -> None: + if self._settings: + if self._modal_changed_sub: + self._settings.unsubscribe_to_change_events(self._modal_changed_sub) + self._settings = None + self._hide_on_modal = [] + self._modal_restore_window_states = {} + self._settings_dependencies = {} + self._window_settings = {} + if self._window_vis_changed_id: + ui.Workspace.remove_window_visibility_changed_callback(self._window_vis_changed_id) + self._window_vis_changed_id = None + + def __del__(self) -> None: + self.destroy() + + def add_hide_on_modal(self, window_names: Union[str, List[str]], restore: bool) -> None: + if isinstance(window_names, str): + window_names = [window_names] + for window_name in window_names: + if window_name not in self._hide_on_modal: + self._hide_on_modal.append((window_name, restore)) + + def remove_hide_on_modal(self, window_names: Union[str, List[str]]) -> None: + if isinstance(window_names, str): + window_names = [window_names] + self._hide_on_modal = [item for item in self._hide_on_modal if item[0] not in window_names] + + def add_window_visibility_setting(self, window_name: str, setting_path: str) -> None: + window = ui.Workspace.get_window(window_name) + if window is not None: + self._settings.set(setting_path, window.visible) + else: + # handle the case when the window is created later + self._settings.set(setting_path, False) + if window_name not in self._window_settings.keys(): + self._window_settings[window_name] = [] + self._window_settings[window_name].append(setting_path) + + def remove_window_visibility_setting(self, window_name: str, setting_path: str) -> None: + if window_name in self._window_settings.keys(): + setting_list = self._window_settings[window_name] + if setting_path in setting_list: + setting_list.remove(setting_path) + if len(setting_list) == 0: + del self._window_settings[window_name] + + def remove_all_window_visibility_settings(self, window_name: str) -> None: + if window_name in self._window_settings.keys(): + del self._window_settings[window_name] + + def add_settings_dependency(self, source_path: str, target_path: str, value_map: Dict[Any, Any]) -> None: + key = (source_path, target_path) + if key in self._settings_dependencies.keys(): + carb.log_error(f'Settings dependency {source_path} -> {target_path} already exists. Ignoring.') + return + self._settings_dependencies[key] = value_map + self._settings_changed_subs[key] = self._settings.subscribe_to_node_change_events( + source_path, + partial(self._on_settings_dependency_changed, source_path) + ) + + def add_settings_copy_dependency(self, source_path: str, target_path: str) -> None: + self.add_settings_dependency(source_path, target_path, None) + + def remove_settings_dependency(self, source_path: str, target_path: str) -> None: + key = (source_path, target_path) + if key in self._settings_dependencies.keys(): + del self._settings_dependencies[key] + if key in self._settings_changed_subs.keys(): + sub = self._settings_changed_subs.pop(key) + self._settings.unsubscribe_to_change_events(sub) + + def _on_settings_dependency_changed(self, path: str, item, event_type) -> None: + value = self._settings.get(path) + # setting does not exist + if value is None: + return + target_settings = [source_target[1] for source_target in self._settings_dependencies.keys() if source_target[0] == path] + for target_setting in target_settings: + value_map = self._settings_dependencies[(path, target_setting)] + # None means copy everything + if value_map is None: + self._settings.set(target_setting, value) + elif value in value_map.keys(): + self._settings.set(target_setting, value_map[value]) + + def _on_modal_setting_changed(self, item, event_type) -> None: + modal = self._settings.get_as_bool(MODAL_TOOL_ACTIVE_PATH) + if modal: + self._hide_windows() + else: + self._restore_windows() + + def _hide_windows(self) -> None: + for window_info in self._hide_on_modal: + window_name, restore_later = window_info[0], window_info[1] + window = ui.Workspace.get_window(window_name) + if window is not None: + if restore_later: + self._modal_restore_window_states[window_name] = window.visible + window.visible = False + + def _restore_windows(self) -> None: + for window_info in self._hide_on_modal: + window_name, restore_later = window_info[0], window_info[1] + if restore_later: + if window_name in self._modal_restore_window_states.keys(): + old_visibility = self._modal_restore_window_states[window_name] + if old_visibility is not None: + window = ui.Workspace.get_window(window_name) + if window is not None: + window.visible = old_visibility + self._modal_restore_window_states[window_name] = None + + def _on_window_vis_changed(self, title: str, state: bool) -> None: + if title in self._window_settings.keys(): + for setting in self._window_settings[title]: + self._settings.set_bool(setting, state) diff --git a/templates/templates.toml b/templates/templates.toml new file mode 100644 index 0000000..3a58561 --- /dev/null +++ b/templates/templates.toml @@ -0,0 +1,99 @@ +# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. + +# -- Application templates -- + +[templates."kit_service"] +class = "ApplicationTemplate" +name = "Kit Service" +url = "." +subpath = "apps/kit_service/kit_service.kit" +setup_extension = "kit_service_setup" +variables.application_name = "my_company.my_service" +variables.application_display_name = "My Service" +variables.version = "0.1.0" + +[templates."kit_base_editor"] +class = "ApplicationTemplate" +name = "Kit Base Editor" +url = "." +subpath = "apps/kit_base_editor/kit_base_editor.kit" +variables.application_name = "my_company.my_editor" +variables.application_display_name = "My Editor" +variables.version = "0.1.0" + +[templates."omni_usd_explorer"] +class = "ApplicationTemplate" +name = "USD Explorer" +url = "." +subpath = "apps/usd_explorer/omni.usd_explorer.kit" +setup_extension = "omni_usd_explorer_setup" +variables.application_name = "my_company.my_usd_explorer" +variables.application_display_name = "My USD Explorer" +variables.version = "0.1.0" + + +# -- Extension templates -- + +[templates."basic_python_extension"] +class = "ExtensionTemplate" +name = "Basic Python Extension" +url = "." +subpath = "extensions/basic_python/template" +variables.extension_name = "my_company.my_python_extension" +variables.extension_display_name = "My Python Extension" +variables.version = "0.1.0" + +[templates."basic_cpp_extension"] +class = "ExtensionTemplate" +name = "Basic C++ Extension" +url = "." +subpath = "extensions/basic_cpp/template" +variables.extension_name = "my_company.my_cpp_extension" +variables.extension_display_name = "My C++ Extension" +variables.version = "0.1.0" + +[templates."basic_python_ui_extension"] +class = "ExtensionTemplate" +name = "Python UI Extension" +url = "." +subpath = "extensions/python_ui/template" +variables.extension_name = "my_company.my_python_ui_extension" +variables.extension_display_name = "My Python UI Extension" +variables.version = "0.1.0" + +[templates."kit_service_setup"] +class = "SetupExtensionTemplate" +name = "Service Setup" +url = "." +subpath = "extensions/service.setup/template" +variables.extension_name = "my_company.my_service_setup_extension" +variables.extension_display_name = "My Service Setup Extension" +variables.version = "0.1.0" + +[templates."omni_usd_explorer_setup"] +class = "SetupExtensionTemplate" +name = "Omni USD Explorer Setup" +url = "." +subpath = "extensions/usd_explorer.setup/template" +variables.extension_name = "my_company.my_usd_explorer_setup_extension" +variables.extension_display_name = "My USD Explorer Setup Extension" +variables.version = "0.1.0" diff --git a/tools/VERSION.md b/tools/VERSION.md new file mode 100644 index 0000000..d564b20 --- /dev/null +++ b/tools/VERSION.md @@ -0,0 +1 @@ +106.0.0 \ No newline at end of file diff --git a/tools/buildscripts/pre_build_copies.json b/tools/buildscripts/pre_build_copies.json deleted file mode 100644 index 3ec79a9..0000000 --- a/tools/buildscripts/pre_build_copies.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "linux-x86_64": { - }, - "windows-x86_64": { - } -} \ No newline at end of file diff --git a/tools/deps/kit-sdk-deps.packman.xml b/tools/deps/kit-sdk-deps.packman.xml new file mode 100644 index 0000000..8c7776e --- /dev/null +++ b/tools/deps/kit-sdk-deps.packman.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/deps/kit-sdk.packman.xml b/tools/deps/kit-sdk.packman.xml new file mode 100644 index 0000000..c1b0b00 --- /dev/null +++ b/tools/deps/kit-sdk.packman.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/tools/deps/pip.toml b/tools/deps/pip.toml new file mode 100644 index 0000000..d53f1c7 --- /dev/null +++ b/tools/deps/pip.toml @@ -0,0 +1,30 @@ +######################################################################################################################## +# Example: +######################################################################################################################## + +# +# [[dependency]] # Toml way to define array of objects. +# python = "../../_build/target-deps/python" # Path to python used to install. Absolute or relative to this config. +# packages = ["numpy"] # Array of packages to install, they all will be passed directly to pip. +# target = "../../_build/target-deps/numpy" # Folder to install into. Absolute or relative to this config. +# platforms = ["windows-x86_64"] # Platform(s) to filter, default is ["*"]. +# download_only = true # Do pip download instead of install, gets a whl file that can be installed later. +# + +# Another sample +[[dependency]] +python = "../../_build/target-deps/python" +packages = ["pandas", "paho-mqtt", "fastapi", "pyjwt"] +target = "../../_build/target-deps/pip_prebundle" +platforms = ["*"] +download_only = false +append_to_install_folder = true +python_include_dir = true +subprocess_path = [ + "${root}/_build/host-deps/msvc/MSBuild/Current/Bin", + "${root}/_build/host-deps/msvc/VC/Tools/MSVC/14.29.30133/bin/HostX64/x64", + "${root}/_build/host-deps/msvc/VC/Auxiliary/Build", + "${root}/_build/host-deps/winsdk/bin/x64", +] +msvc_path = "${root}/_build/host-deps/msvc/VC/Tools/MSVC/14.29.30133" +win_sdk_path = "${root}/_build/host-deps/winsdk" diff --git a/tools/deps/repo-deps.packman.xml b/tools/deps/repo-deps.packman.xml new file mode 100644 index 0000000..b73bde7 --- /dev/null +++ b/tools/deps/repo-deps.packman.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tools/deps/user.toml b/tools/deps/user.toml new file mode 100644 index 0000000..e69de29 diff --git a/tools/package.bat b/tools/package.bat new file mode 100644 index 0000000..fa314c4 --- /dev/null +++ b/tools/package.bat @@ -0,0 +1,2 @@ +@echo off +call "%~dp0..\repo" package %* diff --git a/install.sh b/tools/package.sh old mode 100755 new mode 100644 similarity index 50% rename from install.sh rename to tools/package.sh index 965a2ff..361edcb --- a/install.sh +++ b/tools/package.sh @@ -1,4 +1,4 @@ #!/bin/bash set -e SCRIPT_DIR=$(dirname ${BASH_SOURCE}) -source "$SCRIPT_DIR/repo.sh" build $@ || exit $? +source "$SCRIPT_DIR/../repo.sh" package $@ || exit $? diff --git a/tools/packman/bootstrap/configure.bat b/tools/packman/bootstrap/configure.bat index 662ce86..afaf2fb 100644 --- a/tools/packman/bootstrap/configure.bat +++ b/tools/packman/bootstrap/configure.bat @@ -12,7 +12,7 @@ :: See the License for the specific language governing permissions and :: limitations under the License. -set PM_PACKMAN_VERSION=7.10 +set PM_PACKMAN_VERSION=7.23 :: Specify where packman command is rooted set PM_INSTALL_PATH=%~dp0.. @@ -95,7 +95,7 @@ if exist "%PM_PYTHON%" ( if exist "%PM_PYTHON_DIR%" ( rd /s /q "%PM_PYTHON_DIR%" > nul ) ) -:: Perform atomic move (allowing ovewrite, /y) +:: Perform atomic move (allowing overwrite, /y) move /y "%TEMP_FOLDER_NAME%" "%PM_PYTHON_DIR%" 1> nul :: Verify that python.exe is now where we expect if exist "%PM_PYTHON%" goto PACKMAN diff --git a/tools/packman/bootstrap/install_package.py b/tools/packman/bootstrap/install_package.py index b8ae7f6..706be4f 100644 --- a/tools/packman/bootstrap/install_package.py +++ b/tools/packman/bootstrap/install_package.py @@ -19,7 +19,8 @@ import os import stat import time -from typing import Any, Callable +import hashlib +from typing import Any, Callable, Union RENAME_RETRY_COUNT = 100 @@ -130,7 +131,24 @@ def rename_folder_with_retry(staging_dir: StagingDirectory, folder_name): ) -def install_package(package_path, install_path): +def generate_sha256_for_file(file_path: Union[str, os.PathLike]) -> str: + """Returns the SHA-256 hex digest for the file at `file_path`""" + hash = hashlib.sha256() + # Read the file in binary mode and update the hash object with data + with open(file_path, "rb") as file: + for chunk in iter(lambda: file.read(4096), b""): + hash.update(chunk) + return hash.hexdigest() + + +def install_common_module(package_path, install_path): + COMMON_SHA256 = "b39889fbcf49cbbc66f913f2a3a73817ec3afcf5ae3e4ba9cf9f6fd3e775aa34" + package_sha256 = generate_sha256_for_file(package_path) + if package_sha256 != COMMON_SHA256: + raise RuntimeError( + f"Package at '{package_path}' must have a sha256 of '{COMMON_SHA256}' " + f"but was found to have '{package_sha256}'" + ) staging_path, version = os.path.split(install_path) with StagingDirectory(staging_path) as staging_dir: output_folder = staging_dir.get_temp_folder_path() @@ -151,4 +169,4 @@ def install_package(package_path, install_path): for exec_path in paths_list: if os.path.normcase(os.path.normpath(exec_path)) == target_path_np_nc: raise RuntimeError(f"packman will not install to executable path '{exec_path}'") - install_package(sys.argv[1], target_path_np) + install_common_module(sys.argv[1], target_path_np) diff --git a/tools/packman/config.packman.xml b/tools/packman/config.packman.xml index 24ca05d..1f9d98d 100644 --- a/tools/packman/config.packman.xml +++ b/tools/packman/config.packman.xml @@ -1,5 +1,7 @@ + + diff --git a/tools/packman/packman b/tools/packman/packman index f47c83b..d26c28f 100644 --- a/tools/packman/packman +++ b/tools/packman/packman @@ -24,7 +24,7 @@ else PM_CURL_SILENT="-s -S" PM_WGET_QUIET="--quiet" fi -PM_PACKMAN_VERSION=7.10 +export PM_PACKMAN_VERSION=7.23 # This is necessary for newer macOS if [ `uname` == 'Darwin' ]; then diff --git a/tools/packman/packmanconf.py b/tools/packman/packmanconf.py index 539d056..db220d2 100644 --- a/tools/packman/packmanconf.py +++ b/tools/packman/packmanconf.py @@ -1,4 +1,18 @@ -# Use this file to bootstrap packman into your Python environment (3.7.x). Simply +# Copyright 2021-2024 NVIDIA CORPORATION + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Use this file to bootstrap packman into your Python environment. Simply # add the path by doing sys.insert to where packmanconf.py is located and then execute: # # >>> import packmanconf @@ -32,11 +46,16 @@ def init(): >>> import packmanapi >>> packmanapi.set_verbosity_level(packmanapi.VERBOSITY_HIGH) """ - major = sys.version_info[0] - minor = sys.version_info[1] - if major != 3 or minor != 10: + major = sys.version_info.major + minor = sys.version_info.minor + patch = sys.version_info.micro + if major == 3 and (minor == 10 or (minor == 11 and patch <= 2)): + # we are good + pass + else: raise RuntimeError( - f"This version of packman requires Python 3.10.x, but {major}.{minor} was provided" + f"This version of packman requires Python 3.10.0 up to 3.11.2, " + f"but {major}.{minor}.{patch} was provided" ) conf_dir = os.path.dirname(os.path.abspath(__file__)) os.environ["PM_INSTALL_PATH"] = conf_dir @@ -90,7 +109,7 @@ def get_module_dir(conf_dir, packages_root: str, version: str) -> str: script_path = os.path.join(conf_dir, "bootstrap", "install_package.py") ip = SourceFileLoader("install_package", script_path).load_module() print("Unpacking ...") - ip.install_package(target_name, module_dir) + ip.install_common_module(target_name, module_dir) os.unlink(tf.name) return module_dir @@ -101,7 +120,7 @@ def get_version(conf_dir: str): path += ".sh" with open(path, "rt", encoding="utf8") as launch_file: for line in launch_file.readlines(): - if line.startswith("PM_PACKMAN_VERSION"): + if "PM_PACKMAN_VERSION" in line: _, value = line.split("=") return value.strip() raise RuntimeError(f"Unable to find 'PM_PACKMAN_VERSION' in '{path}'") diff --git a/tools/packman/repoman/launch.py b/tools/packman/repoman/launch.py new file mode 100644 index 0000000..7b6e658 --- /dev/null +++ b/tools/packman/repoman/launch.py @@ -0,0 +1,233 @@ +import argparse +import logging +import sys +from glob import glob +from pathlib import Path +from typing import Callable, Dict, List, Optional + +import omni.repo.man +from omni.repo.kit_template.frontend.template_tool import CLIInput +from omni.repo.man.configuration import add_config_arg +from omni.repo.man.exceptions import QuietExpectedError +from omni.repo.man.fileutils import rmtree +from omni.repo.man.guidelines import get_host_platform +from omni.repo.man.utils import find_and_extract_package, run_process + +# These dependencies come from repo_kit_template +from rich.console import Console +from rich.theme import Theme + +logger = logging.getLogger(__name__) + +KIT_APP_PATH = Path(omni.repo.man.resolve_tokens("${root}/source/apps/")) + +PACKAGE_ARG = "--package" + +KIT_PACKAGE_DIR = Path(omni.repo.man.resolve_tokens("${root}/_packages/")) + +# This should match repo_kit_template.palette +INFO_COLOR = "#3A96D9" +theme = Theme() +console = Console(theme=theme) + + +def _get_repo_cmd(): + repo_cmd = "${root}/repo${shell_ext}" + return omni.repo.man.resolve_tokens(repo_cmd) + + +def _quiet_error(err_msg: str): + # Need something like QuietExpectedError that just prints and exits 1. + print(err_msg) + raise QuietExpectedError(err_msg) + + +def _select(apps: list) -> str: + cli_input = CLIInput() + return cli_input.select( + message="Select with arrow keys which App would you like to launch:", choices=apps, default=apps[0] + ) + + +def discover_kit_files(target_directory: Path) -> List: + if not target_directory.is_dir(): + return [] + + discovered_app_names = [] + for app in glob("**/*.kit", root_dir=target_directory, recursive=True): + app_path = Path(app) + app_name = app_path.name + discovered_app_names.append(app_name) + + return discovered_app_names + + +def select_kit(target_directory: Path) -> str: + # Get list of kit apps on filesystem. + app_names = discover_kit_files(target_directory) + if len(app_names) == 0: + repo_cmd = Path(_get_repo_cmd()).name + err_msg = f"There were no apps discovered in the default Kit App Path: {target_directory}. You must create an app first via `{repo_cmd} template new` and then build via `{repo_cmd} build`." + _quiet_error(err_msg) + else: + # perform a select to set app_name + app_name = _select(app_names) + return app_name + + +def launch_kit(app_name, target_directory: Path, config: str = "release", dev_bundle: bool = False): + # Some assumptions are being made on the folder structure of target_directory. + # It should be the `_build/${host_platform}/${config}/` folder which contains entrypoint scripts + # for the included kit apps. + # It should contain an apps folder that contains various target kit apps. + if app_name == None: + # Select the kit App from the apps sub-dir. + app_name = select_kit(target_directory / "apps") + + print(f"launching {app_name}!") + + # In target_directory there will be .sh/.bat scripts that launch the bundled version of kit + # with the targeted kit app .kit file. + app_build_path = Path(omni.repo.man.resolve_tokens(str(target_directory) + "/" + app_name + "${shell_ext}")) + if not app_build_path.is_file(): + err_msg = f"Desired built Kit App: {app_name} is missing the built entrypoint script: {app_build_path}. Have you built your app via `{_get_repo_cmd()} build`?" + _quiet_error(err_msg) + + # import os + # This might not be necessary, we might not need to map in sys.stdin? + # os.environ["repo_diagnostic"] = "1" + kit_cmd = [str(app_build_path)] + if dev_bundle: + kit_cmd += ["--enable", "omni.kit.developer.bundle"] + + ret_code = run_process(kit_cmd, exit_on_error=False) + # TODO: do something with this ret_code + + +def expand_package(package_path: str) -> Path: + archive_path = Path(package_path) + archive_timestamp = str(archive_path.stat().st_mtime) + if not archive_path.is_file(): + raise Exception( + f"Target archive {archive_path} is not a file. You can use `{PACKAGE_ARG}` to expand and launch an already packaged Kit application." + ) + + archive_name = archive_path.name + destination = KIT_PACKAGE_DIR / archive_name + timestamp_breadcrumb = destination / "timestamp.txt" + + # Check if already expanded/present. + if destination.is_dir() and timestamp_breadcrumb.is_file(): + timestamp = timestamp_breadcrumb.read_text() + if timestamp == archive_timestamp: + print(f"Archive already expanded at {destination}") + return destination + else: + print(f"Archive present at {destination} but does not match timestamp of {archive_path}. Removing.") + rmtree(destination) + + elif destination.is_dir(): + # For some reason we didn't get to the point of adding the breadcrumb. + # Delete it and start over. + print(f"Deleting unknown directory at destination: {destination}") + rmtree(destination) + + # Extract the archive with selective longpath path manipulation for Windows. + folder_to_extract, archive_path = find_and_extract_package(str(archive_path)) + # `find_and_extract_package` does some windows longpath magic and returns a shortened directory + # Create our desired destination, and then move the extracted archive to it. + destination.parent.mkdir(parents=True, exist_ok=True) + Path(folder_to_extract).rename(destination) + + if not destination.is_dir(): + raise Exception(f"Failure on archive extraction for archive: {archive_path} to destination: {destination}") + + # Add breadcrumb file. + timestamp_breadcrumb.write_text(archive_timestamp) + return destination + + +def add_dev_bundle_arg(parser: argparse.ArgumentParser): + parser.add_argument( + "-d", + "--dev-bundle", + dest="dev_bundle", + required=False, + action="store_true", + help="Enable the developer debugging extension bundle.", + ) + + +def from_package_arg(parser: argparse.ArgumentParser): + parser.add_argument( + "-p", + PACKAGE_ARG, + dest="from_package", + required=False, + type=str, + help="Path to a kit app package that you want to launch", + ) + + +def setup_repo_tool(parser: argparse.ArgumentParser, config: Dict) -> Optional[Callable]: + """Entry point for 'repo_launch' tool""" + + parser.description = "Simple tool to launch Kit applications" + # --dev-bundle + add_dev_bundle_arg(parser) + # --package + from_package_arg(parser) + + # Get list of kit apps on filesystem. + app_names = discover_kit_files(KIT_APP_PATH) + + subparsers = parser.add_subparsers() + for app in app_names: + subparser = subparsers.add_parser(app, help="Some blob that comes out of the USD explorer kit app?") + subparser.set_defaults(app_name=app) + # Add --config/--release support + add_config_arg(subparser) + # Add --dev-bundle support + add_dev_bundle_arg(subparser) + + # tool_config = config.get("repo_launch", {}) + + # Config + # enabled = tool_config.get("enabled", False) + + def run_repo_tool(options: argparse.Namespace, config: Dict): + + app_name = None + config = "release" + dev_bundle = False + + # Providing a kit file is optional, otherwise we present a select + if hasattr(options, "app_name"): + app_name = options.app_name + + # If a kit file was selected then a config value was optionally set. + if hasattr(options, "config"): + config = options.config + + if hasattr(options, "dev_bundle"): + dev_bundle = options.dev_bundle + + try: + # Launching from a distributed package + console.print("\[ctrl+c to Exit]", style=INFO_COLOR) + if options.from_package: + package_path = expand_package(options.from_package) + launch_kit(None, package_path, config, dev_bundle) + + # Launching a locally built application + else: + # Launch the thing, or query the user and then launch the thing. + build_path = Path(f"_build/{get_host_platform()}/{config}/") + launch_kit(app_name, build_path, config, dev_bundle) + + except (KeyboardInterrupt, SystemExit): + console.print("Exiting", style=INFO_COLOR) + # exit(0) for now due to non-zero exit reporting. + sys.exit(0) + + return run_repo_tool diff --git a/tools/packman/repoman/package.py b/tools/packman/repoman/package.py new file mode 100644 index 0000000..03b2966 --- /dev/null +++ b/tools/packman/repoman/package.py @@ -0,0 +1,88 @@ +# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +import argparse +import logging +import os +import pathlib +import re +import sys +import zipfile +from string import Template + +import omni.repo.man +from omni.repo.man import resolve_tokens +from omni.repo.man.exceptions import ExpectedError + +# These dependencies come from repo_kit_template +from rich.console import Console +from rich.theme import Theme + +logger = logging.getLogger(os.path.basename(__file__)) + +# This should match repo_kit_template.palette +INFO_COLOR = "#3A96D9" +theme = Theme() +console = Console(theme=theme) + + +def package_name_check(package_name: str): + ALPHANUM_PERIOD_REGEX = r"^[A-Za-z0-9._]+(? str: + cli_input = CLIInput() + return cli_input.select( + message="Select with arrow keys which App would you like to launch:", choices=apps, default=apps[0] + ) + + +def discover_kit_files(target_directory: Path) -> List: + if not target_directory.is_dir(): + return [] + + discovered_app_names = [] + for app in glob("**/*.kit", root_dir=target_directory, recursive=True): + app_path = Path(app) + app_name = app_path.name + discovered_app_names.append(app_name) + + return discovered_app_names + + +def select_kit(target_directory: Path) -> str: + # Get list of kit apps on filesystem. + app_names = discover_kit_files(target_directory) + if len(app_names) == 0: + repo_cmd = Path(_get_repo_cmd()).name + err_msg = f"There were no apps discovered in the default Kit App Path: {target_directory}. You must create an app first via `{repo_cmd} template new` and then build via `{repo_cmd} build`." + _quiet_error(err_msg) + else: + # perform a select to set app_name + app_name = _select(app_names) + return app_name + + +def launch_kit(app_name, target_directory: Path, config: str = "release", dev_bundle: bool = False): + # Some assumptions are being made on the folder structure of target_directory. + # It should be the `_build/${host_platform}/${config}/` folder which contains entrypoint scripts + # for the included kit apps. + # It should contain an apps folder that contains various target kit apps. + if app_name == None: + # Select the kit App from the apps sub-dir. + app_name = select_kit(target_directory / "apps") + + print(f"launching {app_name}!") + + # In target_directory there will be .sh/.bat scripts that launch the bundled version of kit + # with the targeted kit app .kit file. + app_build_path = Path(omni.repo.man.resolve_tokens(str(target_directory) + "/" + app_name + "${shell_ext}")) + if not app_build_path.is_file(): + err_msg = f"Desired built Kit App: {app_name} is missing the built entrypoint script: {app_build_path}. Have you built your app via `{_get_repo_cmd()} build`?" + _quiet_error(err_msg) + + # import os + # This might not be necessary, we might not need to map in sys.stdin? + # os.environ["repo_diagnostic"] = "1" + kit_cmd = [str(app_build_path)] + if dev_bundle: + kit_cmd += ["--enable", "omni.kit.developer.bundle"] + + ret_code = run_process(kit_cmd, exit_on_error=False) + # TODO: do something with this ret_code + + +def expand_package(package_path: str) -> Path: + archive_path = Path(package_path) + archive_timestamp = str(archive_path.stat().st_mtime) + if not archive_path.is_file(): + raise Exception( + f"Target archive {archive_path} is not a file. You can use `{PACKAGE_ARG}` to expand and launch an already packaged Kit application." + ) + + archive_name = archive_path.name + destination = KIT_PACKAGE_DIR / archive_name + timestamp_breadcrumb = destination / "timestamp.txt" + + # Check if already expanded/present. + if destination.is_dir() and timestamp_breadcrumb.is_file(): + timestamp = timestamp_breadcrumb.read_text() + if timestamp == archive_timestamp: + print(f"Archive already expanded at {destination}") + return destination + else: + print(f"Archive present at {destination} but does not match timestamp of {archive_path}. Removing.") + rmtree(destination) + + elif destination.is_dir(): + # For some reason we didn't get to the point of adding the breadcrumb. + # Delete it and start over. + print(f"Deleting unknown directory at destination: {destination}") + rmtree(destination) + + # Extract the archive with selective longpath path manipulation for Windows. + folder_to_extract, archive_path = find_and_extract_package(str(archive_path)) + # `find_and_extract_package` does some windows longpath magic and returns a shortened directory + # Create our desired destination, and then move the extracted archive to it. + destination.parent.mkdir(parents=True, exist_ok=True) + Path(folder_to_extract).rename(destination) + + if not destination.is_dir(): + raise Exception(f"Failure on archive extraction for archive: {archive_path} to destination: {destination}") + + # Add breadcrumb file. + timestamp_breadcrumb.write_text(archive_timestamp) + return destination + + +def add_dev_bundle_arg(parser: argparse.ArgumentParser): + parser.add_argument( + "-d", + "--dev-bundle", + dest="dev_bundle", + required=False, + action="store_true", + help="Enable the developer debugging extension bundle.", + ) + + +def from_package_arg(parser: argparse.ArgumentParser): + parser.add_argument( + "-p", + PACKAGE_ARG, + dest="from_package", + required=False, + type=str, + help="Path to a kit app package that you want to launch", + ) + + +def setup_repo_tool(parser: argparse.ArgumentParser, config: Dict) -> Optional[Callable]: + """Entry point for 'repo_launch' tool""" + + parser.description = "Simple tool to launch Kit applications" + # --dev-bundle + add_dev_bundle_arg(parser) + # --package + from_package_arg(parser) + + # Get list of kit apps on filesystem. + app_names = discover_kit_files(KIT_APP_PATH) + + subparsers = parser.add_subparsers() + for app in app_names: + subparser = subparsers.add_parser(app, help="Some blob that comes out of the USD explorer kit app?") + subparser.set_defaults(app_name=app) + # Add --config/--release support + add_config_arg(subparser) + # Add --dev-bundle support + add_dev_bundle_arg(subparser) + + # tool_config = config.get("repo_launch", {}) + + # Config + # enabled = tool_config.get("enabled", False) + + def run_repo_tool(options: argparse.Namespace, config: Dict): + + app_name = None + config = "release" + dev_bundle = False + + # Providing a kit file is optional, otherwise we present a select + if hasattr(options, "app_name"): + app_name = options.app_name + + # If a kit file was selected then a config value was optionally set. + if hasattr(options, "config"): + config = options.config + + if hasattr(options, "dev_bundle"): + dev_bundle = options.dev_bundle + + try: + # Launching from a distributed package + console.print("\[ctrl+c to Exit]", style=INFO_COLOR) + if options.from_package: + package_path = expand_package(options.from_package) + launch_kit(None, package_path, config, dev_bundle) + + # Launching a locally built application + else: + # Launch the thing, or query the user and then launch the thing. + build_path = Path(f"_build/{get_host_platform()}/{config}/") + launch_kit(app_name, build_path, config, dev_bundle) + + except (KeyboardInterrupt, SystemExit): + console.print("Exiting", style=INFO_COLOR) + # exit(0) for now due to non-zero exit reporting. + sys.exit(0) + + return run_repo_tool diff --git a/tools/repoman/omni/repo/format/.gitignore b/tools/repoman/omni/repo/format/.gitignore deleted file mode 100644 index 294ca97..0000000 --- a/tools/repoman/omni/repo/format/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Dummy omni.repo.format Python module so we don't have to pull down the format package. - -# Ignore everything in this directory, except this file to ensure the folder is created. -* -!.gitignore \ No newline at end of file diff --git a/tools/repoman/package.py b/tools/repoman/package.py new file mode 100644 index 0000000..03b2966 --- /dev/null +++ b/tools/repoman/package.py @@ -0,0 +1,88 @@ +# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: MIT +# +import argparse +import logging +import os +import pathlib +import re +import sys +import zipfile +from string import Template + +import omni.repo.man +from omni.repo.man import resolve_tokens +from omni.repo.man.exceptions import ExpectedError + +# These dependencies come from repo_kit_template +from rich.console import Console +from rich.theme import Theme + +logger = logging.getLogger(os.path.basename(__file__)) + +# This should match repo_kit_template.palette +INFO_COLOR = "#3A96D9" +theme = Theme() +console = Console(theme=theme) + + +def package_name_check(package_name: str): + ALPHANUM_PERIOD_REGEX = r"^[A-Za-z0-9._]+(? '{dst}'") - packmanapi.link(src, dst) - - -APP_PRIORITIES = ["code", "create", "view"] - -if __name__ == "__main__": - - parser = argparse.ArgumentParser(description="Create folder link to Kit App installed from Omniverse Launcher") - parser.add_argument( - "--path", - help="Path to Kit App installed from Omniverse Launcher, e.g.: 'C:/Users/bob/AppData/Local/ov/pkg/create-2021.3.4'", - required=False, - ) - parser.add_argument( - "--app", help="Name of Kit App installed from Omniverse Launcher, e.g.: 'code', 'create'", required=False - ) - args = parser.parse_args() - - path = args.path - if not path: - print("Path is not specified, looking for Omniverse Apps...") - apps = find_omniverse_apps() - if len(apps) == 0: - print( - "Can't find any Omniverse Apps. Use Omniverse Launcher to install one. 'Code' is the recommended app for developers." - ) - sys.exit(0) - - print("\nFound following Omniverse Apps:") - for i, slug in enumerate(apps): - name, root = apps[slug] - print(f"{i}: {name} ({slug}) at: '{root}'") - - if args.app: - selected_app = args.app.lower() - if selected_app not in apps: - choices = ", ".join(apps.keys()) - print(f"Passed app: '{selected_app}' is not found. Specify one of the following found Apps: {choices}") - sys.exit(0) - else: - selected_app = next((x for x in APP_PRIORITIES if x in apps), None) - if not selected_app: - selected_app = next(iter(apps)) - - print(f"\nSelected app: {selected_app}") - _, path = apps[selected_app] - - if not os.path.exists(path): - print(f"Provided path doesn't exist: {path}") - else: - SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__)) - create_link(f"{SCRIPT_ROOT}/../../app", path) - print("Success!")